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 | 1041 | /* jmp $r */ |
| 1042 | 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 | 1044 | #endif |
| 1052 | 1045 | } |
| 1053 | 1046 | } |
| @@ -236,6 +236,7 @@ lcall *(%rax) · 235 unmodified lines | ||
| 236 | 236 | #endif |
| 237 | 237 | |
| 238 | 238 | jmp 0x1000 |
| 239 | +jmp *(%edi) | |
| 239 | 240 | #ifdef __i386__ |
| 240 | 241 | jmp *%eax |
| 241 | 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 | 200 | ALT(DEF_ASM_OP1(call, 0xff, 2, OPC_MODRM, OPT_INDIR)) |
| 201 | 201 | ALT(DEF_ASM_OP1(call, 0xe8, 0, OPC_JMP, OPT_ADDR)) |
| 202 | 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 | 203 | ALT(DEF_ASM_OP1(jmp, 0xeb, 0, OPC_SHORTJMP | OPC_JMP, OPT_ADDR)) |
| 205 | 204 | |
| 206 | 205 | ALT(DEF_ASM_OP1(lcall, 0xff, 3, OPC_MODRM, OPT_EA)) |