|
From: <sv...@va...> - 2007-08-28 16:39:53
|
Author: sewardj
Date: 2007-08-28 17:39:52 +0100 (Tue, 28 Aug 2007)
New Revision: 1785
Log:
Support td (64-bit counterpart to r1784).
Modified:
trunk/priv/guest-ppc/toIR.c
Modified: trunk/priv/guest-ppc/toIR.c
===================================================================
--- trunk/priv/guest-ppc/toIR.c 2007-08-28 14:48:35 UTC (rev 1784)
+++ trunk/priv/guest-ppc/toIR.c 2007-08-28 16:39:52 UTC (rev 1785)
@@ -4653,8 +4653,7 @@
uncond = do_trap( TO,
mode64 ? unop(Iop_64to32, getIReg(rA_addr))
: getIReg(rA_addr),
- mode64 ? mkU64( (ULong)simm16 )
- : mkU32( (UInt)simm16 ),
+ mkU32( (UInt)simm16 ),
cia );
if (TO == 4) {
DIP("tweqi r%u,%d\n", (UInt)rA_addr, (Int)simm16);
@@ -4716,6 +4715,16 @@
DIP("tw%d r%u,r%u\n", (Int)TO, (UInt)rA_addr, (UInt)rB_addr);
}
break;
+ case 0x044: // td (Trap Doubleword, PPC64 p534)
+ if (!mode64)
+ return False;
+ uncond = do_trap( TO, getIReg(rA_addr), getIReg(rB_addr), cia );
+ if (TO == 4) {
+ DIP("tdeq r%u,r%u\n", (UInt)rA_addr, (UInt)rB_addr);
+ } else {
+ DIP("td%d r%u,r%u\n", (Int)TO, (UInt)rA_addr, (UInt)rB_addr);
+ }
+ break;
default:
return False;
}
@@ -9326,12 +9335,9 @@
//zz goto decode_failure;
/* Trap Instructions */
- case 0x004: // tw
+ case 0x004: case 0x044: // tw, td
if (dis_trap(theInstr, &dres)) goto decode_success;
goto decode_failure;
-//zz case 0x044: // td
-//zz DIP("trap op (td) => not implemented\n");
-//zz goto decode_failure;
/* Floating Point Load Instructions */
case 0x217: case 0x237: case 0x257: // lfsx, lfsux, lfdx
|