| 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 | DEF_ASM(rip) |
| 95 | |
| 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 |
| 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 | |
| 138 | DEF_WLX(shld) |
| 139 | DEF_WLX(shrd) |
| 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 | |
| 158 | DEF_WLX(movzb) |
| 159 | DEF_ASM(movzwl) |
| 160 | DEF_ASM(movsbw) |
| 161 | DEF_ASM(movsbl) |
| 162 | DEF_ASM(movswl) |
| 163 | #ifdef TCC_TARGET_X86_64 |
| 164 | DEF_ASM(movsbq) |
| 165 | DEF_ASM(movswq) |
| 166 | DEF_ASM(movzwq) |
| 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 | |
| 183 | DEF_ASMTEST(j,) |
| 184 | |
| 185 | DEF_ASMTEST(set,) |
| 186 | DEF_ASMTEST(set,b) |
| 187 | DEF_ASMTEST(cmov,) |
| 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 | |
| 196 | DEF_WLX(lar) |
| 197 | DEF_WLX(lsl) |
| 198 | |
| 199 | /* generic FP ops */ |
| 200 | DEF_FP(add) |
| 201 | DEF_FP(mul) |
| 202 | |
| 203 | DEF_ASM(fcom) |
| 204 | DEF_ASM(fcom_1) /* non existent op, just to have a regular table */ |
| 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 |
| 254 | |