Annotation of OpenXM_contrib/pari-2.2/src/kernel/ix86/l0asm.h, Revision 1.1
1.1 ! noro 1: /* $Id: l0asm.h,v 1.2 2000/11/03 21:00:25 karim Exp $
! 2:
! 3: Copyright (C) 2000 The PARI group.
! 4:
! 5: This file is part of the PARI/GP package.
! 6:
! 7: PARI/GP is free software; you can redistribute it and/or modify it under the
! 8: terms of the GNU General Public License as published by the Free Software
! 9: Foundation. It is distributed in the hope that it will be useful, but WITHOUT
! 10: ANY WARRANTY WHATSOEVER.
! 11:
! 12: Check the License for details. You should have received a copy of it, along
! 13: with the package; see the file 'COPYING'. If not, write to the Free Software
! 14: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
! 15:
! 16: #ifdef _MSC_VER
! 17: # define C(entrypoint) entrypoint
! 18: # define L(label) L##label
! 19: #else
! 20: # ifdef ASM_UNDERSCORE
! 21: # if defined(__STDC__) || defined(__cplusplus)
! 22: # define C(entrypoint) _##entrypoint
! 23: # define L(label) L##label
! 24: # else
! 25: # define C(entrypoint) _/**/entrypoint
! 26: # define L(label) L/**/label
! 27: # endif
! 28: # else
! 29: # define C(entrypoint) entrypoint
! 30: # if defined(__STDC__) || defined(__cplusplus)
! 31: # define L(label) .L##label
! 32: # else
! 33: # define L(label) .L/**/label
! 34: # endif
! 35: # endif
! 36: #endif
! 37:
! 38: #ifdef _MSC_VER
! 39: # define INTEL_SYNTAX
! 40: #else
! 41: # ifdef ASM_UNDERSCORE
! 42: # define BSD_SYNTAX
! 43: # else
! 44: # define ELF_SYNTAX
! 45: # endif
! 46: #endif
! 47:
! 48: #if defined (BSD_SYNTAX) || defined (ELF_SYNTAX)
! 49: # define R(r) %r
! 50: # define NUM(n) $##n
! 51: # define ADDR(a) $##a
! 52: # define X1
! 53: # define X2
! 54: # define X4
! 55: # define X8
! 56: # define MEM(base)(R(base))
! 57: # define MEM_DISP(base,displacement)displacement(R(base))
! 58: # define MEM_INDEX(base,index)(R(base),R(index))
! 59: # define MEM_SHINDEX(base,index,size)(R(base),R(index),size)
! 60: # define MEM_DISP_SHINDEX0(displacement,index,size)displacement(,R(index),size)
! 61: # define MEM_DISP_SHINDEX(base,displacement,index,size)displacement(R(base),R(index),size)
! 62: # define INDIR(value)*value
! 63: # define INSNCONC(mnemonic,size_suffix)mnemonic##size_suffix
! 64: # define INSN1(mnemonic,size_suffix,dst)INSNCONC(mnemonic,size_suffix) dst
! 65: # define INSN2(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix) src,dst
! 66: # define INSN2MOVX(mnemonic,size_suffix,src,dst)INSNCONC(INSNCONC(mnemonic,size_suffix),l) src,dst
! 67: # if defined(BSD_SYNTAX) || defined(COHERENT)
! 68: # define INSN2SHCL(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix) R(cl),src,dst
! 69: # define REPZ repe ;
! 70: # else
! 71: # define INSN2SHCL(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix) src,dst
! 72: # define REPZ repz ;
! 73: # endif
! 74: # define REP rep ;
! 75: # if defined(BSD_SYNTAX) && !(defined(__CYGWIN32__) || defined(__MINGW32__))
! 76: # define ALIGN(log) .align log,0x90
! 77: # endif
! 78: # if defined(ELF_SYNTAX) || defined(__CYGWIN32__) || defined(__MINGW32__)
! 79: # define ALIGN(log) .align 1<<(log)
! 80: # endif
! 81: #endif
! 82:
! 83: #ifdef INTEL_SYNTAX
! 84: # define R(r) r
! 85: # define NUM(n) n
! 86: # define ADDR(a) OFFSET a
! 87: # define X1 BYTE PTR
! 88: # define X2 WORD PTR
! 89: # define X4 DWORD PTR
! 90: # define X8 QWORD PTR
! 91: # define MEM(base) [base]
! 92: # define MEM_DISP(base,displacement) [base+(displacement)]
! 93: # define MEM_INDEX(base,index) [base+index]
! 94: # define MEM_SHINDEX(base,index,size) [base+index*size]
! 95: # define MEM_DISP_SHINDEX0(displacement,index,size) [(displacement)+index*size]
! 96: # define MEM_DISP_SHINDEX(base,displacement,index,size) [base+(displacement)+index*size]
! 97: # define INDIR(value)value
! 98: # define INSNCONC(mnemonic,suffix)mnemonic##suffix
! 99: # define INSN1(mnemonic,size_suffix,dst)mnemonic dst
! 100: # define INSN2(mnemonic,size_suffix,src,dst)mnemonic dst,src
! 101: # define INSN2MOVX(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,x) dst,src
! 102: # define INSN2SHCL(mnemonic,size_suffix,src,dst)mnemonic dst,src,R(cl)
! 103: # define REPZ repz
! 104: # define REP rep
! 105: # define movsl movs R(eax)
! 106: # define stosl stos R(eax)
! 107: # define scasl scas R(eax)
! 108: # define cmpsl cmpsd
! 109: # ifdef _MSC_VER
! 110: # define ALIGN(log)
! 111: # else
! 112: # define ALIGN(log) .align log
! 113: # endif
! 114: #endif
! 115:
! 116: #ifdef _MSC_VER
! 117: # define TEXT()
! 118: # define GLOBL(name)
! 119: # define FUNBEGIN(name) __declspec(naked) void name () { __asm {
! 120: # define FUNEND() } }
! 121: #else
! 122: # define TEXT() .text
! 123: # define GLOBL(name) .globl name
! 124: # define FUNBEGIN(name) C(name##:)
! 125: # define FUNEND()
! 126: #endif
! 127:
! 128: #define _
! 129:
! 130: TEXT()
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>