TCF Agent: PowerPC disassembler: added fixed-point logical immediate instructions
Signed-off-by: Stanislav Yakovlev <stas.yakovlev@gmail.com>
diff --git a/agent/machine/powerpc/tcf/disassembler-powerpc.c b/agent/machine/powerpc/tcf/disassembler-powerpc.c
index e3de4c8..e0a4e30 100644
--- a/agent/machine/powerpc/tcf/disassembler-powerpc.c
+++ b/agent/machine/powerpc/tcf/disassembler-powerpc.c
@@ -99,6 +99,17 @@
add_dec_int16((int16_t)immediate);
}
+static void add_logical_immediate(const char * mnemonic, uint8_t rX, uint8_t rA, uint16_t immediate) {
+ /* mnemonic rA, rX, UI */
+ add_str(mnemonic);
+ add_str(" r");
+ add_dec_uint8(rA);
+ add_str(", r");
+ add_dec_uint8(rX);
+ add_str(", ");
+ add_hex_uint16(immediate);
+}
+
static void disassemble_opcode(uint32_t instr) {
uint8_t opcode = (instr & 0xfc000000) >> 26; /* bits 0-5 */
/* D-Form */
@@ -151,7 +162,26 @@
case 15:
add_arithmetic_immediate("addis", rX, rA, immediate);
break;
- /* 16 - 63 */
+ /* 16 - 23 */
+ case 24:
+ add_logical_immediate("ori", rX, rA, immediate);
+ break;
+ case 25:
+ add_logical_immediate("oris", rX, rA, immediate);
+ break;
+ case 26:
+ add_logical_immediate("xori", rX, rA, immediate);
+ break;
+ case 27:
+ add_logical_immediate("xoris", rX, rA, immediate);
+ break;
+ case 28:
+ add_logical_immediate("andi.", rX, rA, immediate);
+ break;
+ case 29:
+ add_logical_immediate("andis.", rX, rA, immediate);
+ break;
+ /* 30 - 63 */
}
}