1 | /* ------------------------------------------------------------------ */
|
---|
2 | /* WARNING: relative order of tokens is important. */
|
---|
3 |
|
---|
4 | /* register */
|
---|
5 | DEF_ASM(al)
|
---|
6 | DEF_ASM(cl)
|
---|
7 | DEF_ASM(dl)
|
---|
8 | DEF_ASM(bl)
|
---|
9 | DEF_ASM(ah)
|
---|
10 | DEF_ASM(ch)
|
---|
11 | DEF_ASM(dh)
|
---|
12 | DEF_ASM(bh)
|
---|
13 | DEF_ASM(ax)
|
---|
14 | DEF_ASM(cx)
|
---|
15 | DEF_ASM(dx)
|
---|
16 | DEF_ASM(bx)
|
---|
17 | DEF_ASM(sp)
|
---|
18 | DEF_ASM(bp)
|
---|
19 | DEF_ASM(si)
|
---|
20 | DEF_ASM(di)
|
---|
21 | DEF_ASM(eax)
|
---|
22 | DEF_ASM(ecx)
|
---|
23 | DEF_ASM(edx)
|
---|
24 | DEF_ASM(ebx)
|
---|
25 | DEF_ASM(esp)
|
---|
26 | DEF_ASM(ebp)
|
---|
27 | DEF_ASM(esi)
|
---|
28 | DEF_ASM(edi)
|
---|
29 | #ifdef TCC_TARGET_X86_64
|
---|
30 | DEF_ASM(rax)
|
---|
31 | DEF_ASM(rcx)
|
---|
32 | DEF_ASM(rdx)
|
---|
33 | DEF_ASM(rbx)
|
---|
34 | DEF_ASM(rsp)
|
---|
35 | DEF_ASM(rbp)
|
---|
36 | DEF_ASM(rsi)
|
---|
37 | DEF_ASM(rdi)
|
---|
38 | #endif
|
---|
39 | DEF_ASM(mm0)
|
---|
40 | DEF_ASM(mm1)
|
---|
41 | DEF_ASM(mm2)
|
---|
42 | DEF_ASM(mm3)
|
---|
43 | DEF_ASM(mm4)
|
---|
44 | DEF_ASM(mm5)
|
---|
45 | DEF_ASM(mm6)
|
---|
46 | DEF_ASM(mm7)
|
---|
47 | DEF_ASM(xmm0)
|
---|
48 | DEF_ASM(xmm1)
|
---|
49 | DEF_ASM(xmm2)
|
---|
50 | DEF_ASM(xmm3)
|
---|
51 | DEF_ASM(xmm4)
|
---|
52 | DEF_ASM(xmm5)
|
---|
53 | DEF_ASM(xmm6)
|
---|
54 | DEF_ASM(xmm7)
|
---|
55 | DEF_ASM(cr0)
|
---|
56 | DEF_ASM(cr1)
|
---|
57 | DEF_ASM(cr2)
|
---|
58 | DEF_ASM(cr3)
|
---|
59 | DEF_ASM(cr4)
|
---|
60 | DEF_ASM(cr5)
|
---|
61 | DEF_ASM(cr6)
|
---|
62 | DEF_ASM(cr7)
|
---|
63 | DEF_ASM(tr0)
|
---|
64 | DEF_ASM(tr1)
|
---|
65 | DEF_ASM(tr2)
|
---|
66 | DEF_ASM(tr3)
|
---|
67 | DEF_ASM(tr4)
|
---|
68 | DEF_ASM(tr5)
|
---|
69 | DEF_ASM(tr6)
|
---|
70 | DEF_ASM(tr7)
|
---|
71 | DEF_ASM(db0)
|
---|
72 | DEF_ASM(db1)
|
---|
73 | DEF_ASM(db2)
|
---|
74 | DEF_ASM(db3)
|
---|
75 | DEF_ASM(db4)
|
---|
76 | DEF_ASM(db5)
|
---|
77 | DEF_ASM(db6)
|
---|
78 | DEF_ASM(db7)
|
---|
79 | DEF_ASM(dr0)
|
---|
80 | DEF_ASM(dr1)
|
---|
81 | DEF_ASM(dr2)
|
---|
82 | DEF_ASM(dr3)
|
---|
83 | DEF_ASM(dr4)
|
---|
84 | DEF_ASM(dr5)
|
---|
85 | DEF_ASM(dr6)
|
---|
86 | DEF_ASM(dr7)
|
---|
87 | DEF_ASM(es)
|
---|
88 | DEF_ASM(cs)
|
---|
89 | DEF_ASM(ss)
|
---|
90 | DEF_ASM(ds)
|
---|
91 | DEF_ASM(fs)
|
---|
92 | DEF_ASM(gs)
|
---|
93 | DEF_ASM(st)
|
---|
94 |
|
---|
95 | /* generic two operands */
|
---|
96 | DEF_BWLX(mov)
|
---|
97 |
|
---|
98 | DEF_BWLX(add)
|
---|
99 | DEF_BWLX(or)
|
---|
100 | DEF_BWLX(adc)
|
---|
101 | DEF_BWLX(sbb)
|
---|
102 | DEF_BWLX(and)
|
---|
103 | DEF_BWLX(sub)
|
---|
104 | DEF_BWLX(xor)
|
---|
105 | DEF_BWLX(cmp)
|
---|
106 |
|
---|
107 | /* unary ops */
|
---|
108 | DEF_BWLX(inc)
|
---|
109 | DEF_BWLX(dec)
|
---|
110 | DEF_BWLX(not)
|
---|
111 | DEF_BWLX(neg)
|
---|
112 | DEF_BWLX(mul)
|
---|
113 | DEF_BWLX(imul)
|
---|
114 | DEF_BWLX(div)
|
---|
115 | DEF_BWLX(idiv)
|
---|
116 |
|
---|
117 | DEF_BWLX(xchg)
|
---|
118 | DEF_BWLX(test)
|
---|
119 |
|
---|
120 | /* shifts */
|
---|
121 | DEF_BWLX(rol)
|
---|
122 | DEF_BWLX(ror)
|
---|
123 | DEF_BWLX(rcl)
|
---|
124 | DEF_BWLX(rcr)
|
---|
125 | DEF_BWLX(shl)
|
---|
126 | DEF_BWLX(shr)
|
---|
127 | DEF_BWLX(sar)
|
---|
128 |
|
---|
129 | DEF_ASM(shldw)
|
---|
130 | DEF_ASM(shldl)
|
---|
131 | DEF_ASM(shld)
|
---|
132 | DEF_ASM(shrdw)
|
---|
133 | DEF_ASM(shrdl)
|
---|
134 | DEF_ASM(shrd)
|
---|
135 |
|
---|
136 | DEF_ASM(pushw)
|
---|
137 | DEF_ASM(pushl)
|
---|
138 | #ifdef TCC_TARGET_X86_64
|
---|
139 | DEF_ASM(pushq)
|
---|
140 | #endif
|
---|
141 | DEF_ASM(push)
|
---|
142 |
|
---|
143 | DEF_ASM(popw)
|
---|
144 | DEF_ASM(popl)
|
---|
145 | #ifdef TCC_TARGET_X86_64
|
---|
146 | DEF_ASM(popq)
|
---|
147 | #endif
|
---|
148 | DEF_ASM(pop)
|
---|
149 |
|
---|
150 | DEF_BWL(in)
|
---|
151 | DEF_BWL(out)
|
---|
152 |
|
---|
153 | DEF_WL(movzb)
|
---|
154 | DEF_ASM(movzwl)
|
---|
155 | DEF_ASM(movsbw)
|
---|
156 | DEF_ASM(movsbl)
|
---|
157 | DEF_ASM(movswl)
|
---|
158 | #ifdef TCC_TARGET_X86_64
|
---|
159 | DEF_ASM(movslq)
|
---|
160 | #endif
|
---|
161 |
|
---|
162 | DEF_WLX(lea)
|
---|
163 |
|
---|
164 | DEF_ASM(les)
|
---|
165 | DEF_ASM(lds)
|
---|
166 | DEF_ASM(lss)
|
---|
167 | DEF_ASM(lfs)
|
---|
168 | DEF_ASM(lgs)
|
---|
169 |
|
---|
170 | DEF_ASM(call)
|
---|
171 | DEF_ASM(jmp)
|
---|
172 | DEF_ASM(lcall)
|
---|
173 | DEF_ASM(ljmp)
|
---|
174 |
|
---|
175 | DEF_ASMTEST(j)
|
---|
176 |
|
---|
177 | DEF_ASMTEST(set)
|
---|
178 | DEF_ASMTEST(cmov)
|
---|
179 |
|
---|
180 | DEF_WLX(bsf)
|
---|
181 | DEF_WLX(bsr)
|
---|
182 | DEF_WLX(bt)
|
---|
183 | DEF_WLX(bts)
|
---|
184 | DEF_WLX(btr)
|
---|
185 | DEF_WLX(btc)
|
---|
186 |
|
---|
187 | DEF_WLX(lsl)
|
---|
188 |
|
---|
189 | /* generic FP ops */
|
---|
190 | DEF_FP(add)
|
---|
191 | DEF_FP(mul)
|
---|
192 |
|
---|
193 | DEF_ASM(fcom)
|
---|
194 | DEF_ASM(fcom_1) /* non existant op, just to have a regular table */
|
---|
195 | DEF_FP1(com)
|
---|
196 |
|
---|
197 | DEF_FP(comp)
|
---|
198 | DEF_FP(sub)
|
---|
199 | DEF_FP(subr)
|
---|
200 | DEF_FP(div)
|
---|
201 | DEF_FP(divr)
|
---|
202 |
|
---|
203 | DEF_BWLX(xadd)
|
---|
204 | DEF_BWLX(cmpxchg)
|
---|
205 |
|
---|
206 | /* string ops */
|
---|
207 | DEF_BWLX(cmps)
|
---|
208 | DEF_BWLX(scmp)
|
---|
209 | DEF_BWL(ins)
|
---|
210 | DEF_BWL(outs)
|
---|
211 | DEF_BWLX(lods)
|
---|
212 | DEF_BWLX(slod)
|
---|
213 | DEF_BWLX(movs)
|
---|
214 | DEF_BWLX(smov)
|
---|
215 | DEF_BWLX(scas)
|
---|
216 | DEF_BWLX(ssca)
|
---|
217 | DEF_BWLX(stos)
|
---|
218 | DEF_BWLX(ssto)
|
---|
219 |
|
---|
220 | /* generic asm ops */
|
---|
221 | #define ALT(x)
|
---|
222 | #define DEF_ASM_OP0(name, opcode) DEF_ASM(name)
|
---|
223 | #define DEF_ASM_OP0L(name, opcode, group, instr_type)
|
---|
224 | #define DEF_ASM_OP1(name, opcode, group, instr_type, op0)
|
---|
225 | #define DEF_ASM_OP2(name, opcode, group, instr_type, op0, op1)
|
---|
226 | #define DEF_ASM_OP3(name, opcode, group, instr_type, op0, op1, op2)
|
---|
227 | #ifdef TCC_TARGET_X86_64
|
---|
228 | # include "x86_64-asm.h"
|
---|
229 | #else
|
---|
230 | # include "i386-asm.h"
|
---|
231 | #endif
|
---|
232 |
|
---|
233 | #define ALT(x)
|
---|
234 | #define DEF_ASM_OP0(name, opcode)
|
---|
235 | #define DEF_ASM_OP0L(name, opcode, group, instr_type) DEF_ASM(name)
|
---|
236 | #define DEF_ASM_OP1(name, opcode, group, instr_type, op0) DEF_ASM(name)
|
---|
237 | #define DEF_ASM_OP2(name, opcode, group, instr_type, op0, op1) DEF_ASM(name)
|
---|
238 | #define DEF_ASM_OP3(name, opcode, group, instr_type, op0, op1, op2) DEF_ASM(name)
|
---|
239 | #ifdef TCC_TARGET_X86_64
|
---|
240 | # include "x86_64-asm.h"
|
---|
241 | #else
|
---|
242 | # include "i386-asm.h"
|
---|
243 | #endif
|
---|