diff options
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; |
