|
From: <sv...@va...> - 2005-09-08 17:33:30
|
Author: sewardj
Date: 2005-09-08 18:33:27 +0100 (Thu, 08 Sep 2005)
New Revision: 1372
Log:
Reinstate crand, crnand, crorc.
Modified:
trunk/priv/guest-ppc32/toIR.c
Modified: trunk/priv/guest-ppc32/toIR.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-ppc32/toIR.c 2005-09-06 10:25:46 UTC (rev 1371)
+++ trunk/priv/guest-ppc32/toIR.c 2005-09-08 17:33:27 UTC (rev 1372)
@@ -2960,7 +2960,6 @@
IRTemp crbD =3D newTemp(Ity_I32);
IRTemp crbA =3D newTemp(Ity_I32);
IRTemp crbB =3D newTemp(Ity_I32);
-//uu IRTemp tmp =3D newTemp(Ity_I32);
=20
if (opc1 !=3D 19 || b0 !=3D 0) {
vex_printf("dis_cond_logic(PPC32)(opc1)\n");
@@ -2982,10 +2981,10 @@
assign( crbB, getCRbit(crbB_addr) );
=20
switch (opc2) {
-//zz case 0x101: // crand (Cond Reg AND, PPC32 p372)
-//zz DIP("crand crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crb=
B_addr);
-//zz assign( crbD, binop(Iop_And32, mkexpr(crbA), mkexpr(crbB))=
);
-//zz break;
+ case 0x101: // crand (Cond Reg AND, PPC32 p372)
+ DIP("crand crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crbB_add=
r);
+ assign( crbD, binop(Iop_And32, mkexpr(crbA), mkexpr(crbB)) );
+ break;
case 0x081: // crandc (Cond Reg AND w. Complement, PPC32 p373)
DIP("crandc crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crbB_ad=
dr);
assign( crbD, binop(Iop_And32,=20
@@ -2997,11 +2996,11 @@
assign( crbD, unop(Iop_Not32,
binop(Iop_Xor32, mkexpr(crbA), mkexpr(crbB))=
) );
break;
-//zz case 0x0E1: // crnand (Cond Reg NAND, PPC32 p375)
-//zz DIP("crnand crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, cr=
bB_addr);
-//zz assign( crbD, unop(Iop_Not32,
-//zz binop(Iop_And32, mkexpr(crbA), mkexpr(c=
rbB))) );
-//zz break;
+ case 0x0E1: // crnand (Cond Reg NAND, PPC32 p375)
+ DIP("crnand crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crbB_ad=
dr);
+ assign( crbD, unop(Iop_Not32,
+ binop(Iop_And32, mkexpr(crbA), mkexpr(crbB))=
) );
+ break;
case 0x021: // crnor (Cond Reg NOR, PPC32 p376)
DIP("crnor crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crbB_add=
r);
assign( crbD, unop(Iop_Not32,
@@ -3011,16 +3010,16 @@
DIP("cror crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crbB_addr=
);
assign( crbD, binop(Iop_Or32, mkexpr(crbA), mkexpr(crbB)) );
break;
-//zz case 0x1A1: // crorc (Cond Reg OR w. Complement, PPC32 p378=
)
-//zz DIP("crorc crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crb=
B_addr);
-//zz assign( crbD, binop(Iop_Or32, mkexpr(crbA),
-//zz unop(Iop_Not32, mkexpr(crbB))) );
-//zz break;
+ case 0x1A1: // crorc (Cond Reg OR w. Complement, PPC32 p378)
+ DIP("crorc crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crbB_add=
r);
+ assign( crbD, binop(Iop_Or32,=20
+ mkexpr(crbA),
+ unop(Iop_Not32, mkexpr(crbB))) );
+ break;
case 0x0C1: // crxor (Cond Reg XOR, PPC32 p379)
DIP("crxor crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crbB_add=
r);
assign( crbD, binop(Iop_Xor32, mkexpr(crbA), mkexpr(crbB)) );
break;
-
default:
vex_printf("dis_cond_logic(PPC32)(opc2)\n");
return False;
|