Also remove the hacky mod/rm byte emission during disp/imm writing.
Unified · Split
| @@ -1041,13 +1041,6 @@ ST_FUNC void asm_opcode(TCCState *s1, int opcode) · 1040 unmodified lines | |||
| 1041 | /* jmp $r */ | 1041 | /* jmp $r */ |
| 1042 | g(0xE0 + ops[i].reg); | 1042 | g(0xE0 + ops[i].reg); |
| 1043 | } | 1043 | } |
| 1044 | #endif | ||
| 1045 | #ifdef TCC_TARGET_X86_64 | ||
| 1046 | } else if (v & (OP_REG32 | OP_REG64)) { | ||
| 1047 | if (pa->instr_type & (OPC_JMP | OPC_SHORTJMP)) { | ||
| 1048 | /* jmp $r */ | ||
| 1049 | g(0xE0 + ops[i].reg); | ||
| 1050 | } | ||
| 1051 | #endif | 1044 | #endif |
| 1052 | } | 1045 | } |
| 1053 | } | 1046 | } |
| @@ -236,6 +236,7 @@ lcall *(%rax) · 235 unmodified lines | |||
| 236 | #endif | 236 | #endif |
| 237 | 237 | ||
| 238 | jmp 0x1000 | 238 | jmp 0x1000 |
| 239 | jmp *(%edi) | ||
| 239 | #ifdef __i386__ | 240 | #ifdef __i386__ |
| 240 | jmp *%eax | 241 | jmp *%eax |
| 241 | #else | 242 | #else |
| @@ -200,7 +200,6 @@ ALT(DEF_ASM_OP2(shrdw, 0x0fad, 0, OPC_MODRM | OPC_WLQ, OPT_REGW, OPT_EA | OPT_RE · 199 unmodified lines | |||
| 200 | ALT(DEF_ASM_OP1(call, 0xff, 2, OPC_MODRM, OPT_INDIR)) | 200 | ALT(DEF_ASM_OP1(call, 0xff, 2, OPC_MODRM, OPT_INDIR)) |
| 201 | ALT(DEF_ASM_OP1(call, 0xe8, 0, OPC_JMP, OPT_ADDR)) | 201 | ALT(DEF_ASM_OP1(call, 0xe8, 0, OPC_JMP, OPT_ADDR)) |
| 202 | ALT(DEF_ASM_OP1(jmp, 0xff, 4, OPC_MODRM, OPT_INDIR)) | 202 | ALT(DEF_ASM_OP1(jmp, 0xff, 4, OPC_MODRM, OPT_INDIR)) |
| 203 | ALT(DEF_ASM_OP1(jmp, 0xff, 0, OPC_JMP | OPC_WL, OPT_REGW)) | ||
| 204 | ALT(DEF_ASM_OP1(jmp, 0xeb, 0, OPC_SHORTJMP | OPC_JMP, OPT_ADDR)) | 203 | ALT(DEF_ASM_OP1(jmp, 0xeb, 0, OPC_SHORTJMP | OPC_JMP, OPT_ADDR)) |
| 205 | 204 | ||
| 206 | ALT(DEF_ASM_OP1(lcall, 0xff, 3, OPC_MODRM, OPT_EA)) | 205 | ALT(DEF_ASM_OP1(lcall, 0xff, 3, OPC_MODRM, OPT_EA)) |