[BACK]Return to l0asm.h CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / pari / src / kernel / ix86

File: [local] / OpenXM_contrib / pari / src / kernel / ix86 / Attic / l0asm.h (download)

Revision 1.1, Sun Jan 9 17:35:32 2000 UTC (24 years, 5 months ago) by maekawa
Branch: MAIN

Initial revision

#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()