diff options
| author | Andrew Chambers <[email protected]> | 2021-10-05 13:47:38 +1300 |
|---|---|---|
| committer | Andrew Chambers <[email protected]> | 2021-10-05 13:47:38 +1300 |
| commit | dda3e77e5b3c01c52fc38a29cd81d49c52abb26c (patch) | |
| tree | 76f87eea6761f4644db4557de04979a31512b630 | |
| parent | c628b13a9852751a059c09defb432316d6ceaca2 (diff) | |
Handle more cases.
| -rw-r--r-- | main.c | 11 |
1 files changed, 7 insertions, 4 deletions
@@ -276,7 +276,7 @@ static void assemble() { } else { fatal("TODO mem arg with disp"); } - } else { + } else { // imm, r64 uint8_t rbits = r64bits(add->dst->kind); uint8_t rex = REX(1,0,0,rbits&(1<<4)); sb3(rex, 0x81, modrm(0x03, 0x00, rbits)); @@ -291,11 +291,14 @@ static void assemble() { case ASM_MEMARG: fatal("TODO"); break; - default: - sb3(REX_W, 0x03, - modrm(0x03, r64bits(add->dst->kind), r64bits(add->src->kind))); + default: { // r64, r64 + uint8_t srcbits = r64bits(add->src->kind); + uint8_t dstbits = r64bits(add->dst->kind); + uint8_t rex = REX(1,dstbits&(1<<4),0,srcbits&(1<<4)); + sb3(rex, 0x03, modrm(0x03, dstbits, srcbits)); break; } + } break; } break; |
