diff options
| author | Galen Williamson <galen@vector35.com> | 2025-04-14 18:45:55 -0400 |
|---|---|---|
| committer | Galen Williamson <galen@vector35.com> | 2025-04-14 18:47:23 -0400 |
| commit | 9b7b429106f16b5704cf27baf9f3d69ff4a0857a (patch) | |
| tree | 438d3a60bef08a1e8c7faa25e4abd249d58286db /arch/powerpc/assembler.cpp | |
| parent | 941b8b63c02184b4708d85391c5348b8d8913628 (diff) | |
[powerpc] Fix incorrect disassembly of LIS, ADDIS, ANDI, ANDIS; add assembly of subis
Diffstat (limited to 'arch/powerpc/assembler.cpp')
| -rw-r--r-- | arch/powerpc/assembler.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/powerpc/assembler.cpp b/arch/powerpc/assembler.cpp index 6ba26b97..bafc0686 100644 --- a/arch/powerpc/assembler.cpp +++ b/arch/powerpc/assembler.cpp @@ -225,6 +225,7 @@ map<string, info> lookup = { { "addi GPR , GPR , NUM",{0x38010000,0x03FFFFFF}}, // 001110xxxxxxxxxxxxxxxxxxxxxxxxxx addi r0, r1, 0 { "lis GPR , NUM",{0x3C000000,0x03E0FFFF}}, // 001111xxxxx00000xxxxxxxxxxxxxxxx lis r0, 0 { "addis GPR , GPR , NUM",{0x3C010000,0x03FFFFFF}}, // 001111xxxxxxxxxxxxxxxxxxxxxxxxxx addis r0, r1, 0 +{ "subis GPR , GPR , NUM",{0x3C010000,0x03FFFFFF}}, // 001111xxxxxxxxxxxxxxxxxxxxxxxxxx subis r0, r1, 0 { "bdnzf FLAG",{0x40000000,0x00230000}}, // 0100000000x000xx0000000000000000 bdnzf lt { "bdnzfl FLAG",{0x40000001,0x00230000}}, // 0100000000x000xx0000000000000001 bdnzfl lt { "bdnzfa FLAG",{0x40000002,0x00230000}}, // 0100000000x000xx0000000000000010 bdnzfa lt @@ -2799,6 +2800,11 @@ int assemble_single(string src, uint32_t addr, uint8_t *result, string& err, toks_src.back().ival -= addr; addr = 0; } + else if(!strncmp("subis", toks_src[0].sval.c_str(), 6) && + toks_src.back().type == TT_NUM) { + toks_src.back().ival = -toks_src.back().ival; + toks_src[0].sval = "addis"; + } /* start with the parent */ uint32_t parent = info.seed; |
