[279] | 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)
|
---|
[331] | 94 | DEF_ASM(rip)
|
---|
[279] | 95 |
|
---|
[331] | 96 | #ifdef TCC_TARGET_X86_64
|
---|
| 97 | /* The four low parts of sp/bp/si/di that exist only on
|
---|
| 98 | x86-64 (encoding aliased to ah,ch,dh,dh when not using REX). */
|
---|
| 99 | DEF_ASM(spl)
|
---|
| 100 | DEF_ASM(bpl)
|
---|
| 101 | DEF_ASM(sil)
|
---|
| 102 | DEF_ASM(dil)
|
---|
| 103 | #endif
|
---|
[279] | 104 | /* generic two operands */
|
---|
| 105 | DEF_BWLX(mov)
|
---|
| 106 |
|
---|
| 107 | DEF_BWLX(add)
|
---|
| 108 | DEF_BWLX(or)
|
---|
| 109 | DEF_BWLX(adc)
|
---|
| 110 | DEF_BWLX(sbb)
|
---|
| 111 | DEF_BWLX(and)
|
---|
| 112 | DEF_BWLX(sub)
|
---|
| 113 | DEF_BWLX(xor)
|
---|
| 114 | DEF_BWLX(cmp)
|
---|
| 115 |
|
---|
| 116 | /* unary ops */
|
---|
| 117 | DEF_BWLX(inc)
|
---|
| 118 | DEF_BWLX(dec)
|
---|
| 119 | DEF_BWLX(not)
|
---|
| 120 | DEF_BWLX(neg)
|
---|
| 121 | DEF_BWLX(mul)
|
---|
| 122 | DEF_BWLX(imul)
|
---|
| 123 | DEF_BWLX(div)
|
---|
| 124 | DEF_BWLX(idiv)
|
---|
| 125 |
|
---|
| 126 | DEF_BWLX(xchg)
|
---|
| 127 | DEF_BWLX(test)
|
---|
| 128 |
|
---|
| 129 | /* shifts */
|
---|
| 130 | DEF_BWLX(rol)
|
---|
| 131 | DEF_BWLX(ror)
|
---|
| 132 | DEF_BWLX(rcl)
|
---|
| 133 | DEF_BWLX(rcr)
|
---|
| 134 | DEF_BWLX(shl)
|
---|
| 135 | DEF_BWLX(shr)
|
---|
| 136 | DEF_BWLX(sar)
|
---|
| 137 |
|
---|
[331] | 138 | DEF_WLX(shld)
|
---|
| 139 | DEF_WLX(shrd)
|
---|
[279] | 140 |
|
---|
| 141 | DEF_ASM(pushw)
|
---|
| 142 | DEF_ASM(pushl)
|
---|
| 143 | #ifdef TCC_TARGET_X86_64
|
---|
| 144 | DEF_ASM(pushq)
|
---|
| 145 | #endif
|
---|
| 146 | DEF_ASM(push)
|
---|
| 147 |
|
---|
| 148 | DEF_ASM(popw)
|
---|
| 149 | DEF_ASM(popl)
|
---|
| 150 | #ifdef TCC_TARGET_X86_64
|
---|
| 151 | DEF_ASM(popq)
|
---|
| 152 | #endif
|
---|
| 153 | DEF_ASM(pop)
|
---|
| 154 |
|
---|
| 155 | DEF_BWL(in)
|
---|
| 156 | DEF_BWL(out)
|
---|
| 157 |
|
---|
[331] | 158 | DEF_WLX(movzb)
|
---|
[279] | 159 | DEF_ASM(movzwl)
|
---|
| 160 | DEF_ASM(movsbw)
|
---|
| 161 | DEF_ASM(movsbl)
|
---|
| 162 | DEF_ASM(movswl)
|
---|
| 163 | #ifdef TCC_TARGET_X86_64
|
---|
[331] | 164 | DEF_ASM(movsbq)
|
---|
| 165 | DEF_ASM(movswq)
|
---|
| 166 | DEF_ASM(movzwq)
|
---|
[279] | 167 | DEF_ASM(movslq)
|
---|
| 168 | #endif
|
---|
| 169 |
|
---|
| 170 | DEF_WLX(lea)
|
---|
| 171 |
|
---|
| 172 | DEF_ASM(les)
|
---|
| 173 | DEF_ASM(lds)
|
---|
| 174 | DEF_ASM(lss)
|
---|
| 175 | DEF_ASM(lfs)
|
---|
| 176 | DEF_ASM(lgs)
|
---|
| 177 |
|
---|
| 178 | DEF_ASM(call)
|
---|
| 179 | DEF_ASM(jmp)
|
---|
| 180 | DEF_ASM(lcall)
|
---|
| 181 | DEF_ASM(ljmp)
|
---|
| 182 |
|
---|
[331] | 183 | DEF_ASMTEST(j,)
|
---|
[279] | 184 |
|
---|
[331] | 185 | DEF_ASMTEST(set,)
|
---|
| 186 | DEF_ASMTEST(set,b)
|
---|
| 187 | DEF_ASMTEST(cmov,)
|
---|
[279] | 188 |
|
---|
| 189 | DEF_WLX(bsf)
|
---|
| 190 | DEF_WLX(bsr)
|
---|
| 191 | DEF_WLX(bt)
|
---|
| 192 | DEF_WLX(bts)
|
---|
| 193 | DEF_WLX(btr)
|
---|
| 194 | DEF_WLX(btc)
|
---|
| 195 |
|
---|
[331] | 196 | DEF_WLX(lar)
|
---|
[279] | 197 | DEF_WLX(lsl)
|
---|
| 198 |
|
---|
| 199 | /* generic FP ops */
|
---|
| 200 | DEF_FP(add)
|
---|
| 201 | DEF_FP(mul)
|
---|
| 202 |
|
---|
| 203 | DEF_ASM(fcom)
|
---|
[331] | 204 | DEF_ASM(fcom_1) /* non existent op, just to have a regular table */
|
---|
[279] | 205 | DEF_FP1(com)
|
---|
| 206 |
|
---|
| 207 | DEF_FP(comp)
|
---|
| 208 | DEF_FP(sub)
|
---|
| 209 | DEF_FP(subr)
|
---|
| 210 | DEF_FP(div)
|
---|
| 211 | DEF_FP(divr)
|
---|
| 212 |
|
---|
| 213 | DEF_BWLX(xadd)
|
---|
| 214 | DEF_BWLX(cmpxchg)
|
---|
| 215 |
|
---|
| 216 | /* string ops */
|
---|
| 217 | DEF_BWLX(cmps)
|
---|
| 218 | DEF_BWLX(scmp)
|
---|
| 219 | DEF_BWL(ins)
|
---|
| 220 | DEF_BWL(outs)
|
---|
| 221 | DEF_BWLX(lods)
|
---|
| 222 | DEF_BWLX(slod)
|
---|
| 223 | DEF_BWLX(movs)
|
---|
| 224 | DEF_BWLX(smov)
|
---|
| 225 | DEF_BWLX(scas)
|
---|
| 226 | DEF_BWLX(ssca)
|
---|
| 227 | DEF_BWLX(stos)
|
---|
| 228 | DEF_BWLX(ssto)
|
---|
| 229 |
|
---|
| 230 | /* generic asm ops */
|
---|
| 231 | #define ALT(x)
|
---|
| 232 | #define DEF_ASM_OP0(name, opcode) DEF_ASM(name)
|
---|
| 233 | #define DEF_ASM_OP0L(name, opcode, group, instr_type)
|
---|
| 234 | #define DEF_ASM_OP1(name, opcode, group, instr_type, op0)
|
---|
| 235 | #define DEF_ASM_OP2(name, opcode, group, instr_type, op0, op1)
|
---|
| 236 | #define DEF_ASM_OP3(name, opcode, group, instr_type, op0, op1, op2)
|
---|
| 237 | #ifdef TCC_TARGET_X86_64
|
---|
| 238 | # include "x86_64-asm.h"
|
---|
| 239 | #else
|
---|
| 240 | # include "i386-asm.h"
|
---|
| 241 | #endif
|
---|
| 242 |
|
---|
| 243 | #define ALT(x)
|
---|
| 244 | #define DEF_ASM_OP0(name, opcode)
|
---|
| 245 | #define DEF_ASM_OP0L(name, opcode, group, instr_type) DEF_ASM(name)
|
---|
| 246 | #define DEF_ASM_OP1(name, opcode, group, instr_type, op0) DEF_ASM(name)
|
---|
| 247 | #define DEF_ASM_OP2(name, opcode, group, instr_type, op0, op1) DEF_ASM(name)
|
---|
| 248 | #define DEF_ASM_OP3(name, opcode, group, instr_type, op0, op1, op2) DEF_ASM(name)
|
---|
| 249 | #ifdef TCC_TARGET_X86_64
|
---|
| 250 | # include "x86_64-asm.h"
|
---|
| 251 | #else
|
---|
| 252 | # include "i386-asm.h"
|
---|
| 253 | #endif
|
---|