Annotation of OpenXM_contrib/pari-2.2/src/kernel/ix86/l0asm.h, Revision 1.1.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>