#ifdef _MSC_VER # define C(entrypoint) entrypoint # define L(label) L##label #else # ifdef ASM_UNDERSCORE # if defined(__STDC__) || defined(__cplusplus) # define C(entrypoint) _##entrypoint # define L(label) L##label # else # define C(entrypoint) _/**/entrypoint # define L(label) L/**/label # endif # else # define C(entrypoint) entrypoint # if defined(__STDC__) || defined(__cplusplus) # define L(label) .L##label # else # define L(label) .L/**/label # endif # endif #endif #ifdef _MSC_VER # define INTEL_SYNTAX #else # ifdef ASM_UNDERSCORE # define BSD_SYNTAX # else # define ELF_SYNTAX # endif #endif #if defined (BSD_SYNTAX) || defined (ELF_SYNTAX) # define R(r) %r # define NUM(n) $##n # define ADDR(a) $##a # define X1 # define X2 # define X4 # define X8 # define MEM(base)(R(base)) # define MEM_DISP(base,displacement)displacement(R(base)) # define MEM_INDEX(base,index)(R(base),R(index)) # define MEM_SHINDEX(base,index,size)(R(base),R(index),size) # define MEM_DISP_SHINDEX0(displacement,index,size)displacement(,R(index),size) # define MEM_DISP_SHINDEX(base,displacement,index,size)displacement(R(base),R(index),size) # define INDIR(value)*value # define INSNCONC(mnemonic,size_suffix)mnemonic##size_suffix # define INSN1(mnemonic,size_suffix,dst)INSNCONC(mnemonic,size_suffix) dst # define INSN2(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix) src,dst # define INSN2MOVX(mnemonic,size_suffix,src,dst)INSNCONC(INSNCONC(mnemonic,size_suffix),l) src,dst # if defined(BSD_SYNTAX) || defined(COHERENT) # define INSN2SHCL(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix) R(cl),src,dst # define REPZ repe ; # else # define INSN2SHCL(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix) src,dst # define REPZ repz ; # endif # define REP rep ; # if defined(BSD_SYNTAX) && !(defined(__CYGWIN32__) || defined(__MINGW32__)) # define ALIGN(log) .align log,0x90 # endif # if defined(ELF_SYNTAX) || defined(__CYGWIN32__) || defined(__MINGW32__) # define ALIGN(log) .align 1<<(log) # endif #endif #ifdef INTEL_SYNTAX # define R(r) r # define NUM(n) n # define ADDR(a) OFFSET a # define X1 BYTE PTR # define X2 WORD PTR # define X4 DWORD PTR # define X8 QWORD PTR # define MEM(base) [base] # define MEM_DISP(base,displacement) [base+(displacement)] # define MEM_INDEX(base,index) [base+index] # define MEM_SHINDEX(base,index,size) [base+index*size] # define MEM_DISP_SHINDEX0(displacement,index,size) [(displacement)+index*size] # define MEM_DISP_SHINDEX(base,displacement,index,size) [base+(displacement)+index*size] # define INDIR(value)value # define INSNCONC(mnemonic,suffix)mnemonic##suffix # define INSN1(mnemonic,size_suffix,dst)mnemonic dst # define INSN2(mnemonic,size_suffix,src,dst)mnemonic dst,src # define INSN2MOVX(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,x) dst,src # define INSN2SHCL(mnemonic,size_suffix,src,dst)mnemonic dst,src,R(cl) # define REPZ repz # define REP rep # define movsl movs R(eax) # define stosl stos R(eax) # define scasl scas R(eax) # define cmpsl cmpsd # ifdef _MSC_VER # define ALIGN(log) # else # define ALIGN(log) .align log # endif #endif #ifdef _MSC_VER # define TEXT() # define GLOBL(name) # define FUNBEGIN(name) __declspec(naked) void name () { __asm { # define FUNEND() } } #else # define TEXT() .text # define GLOBL(name) .globl name # define FUNBEGIN(name) C(name##:) # define FUNEND() #endif #define _ TEXT()