|
From: <sv...@va...> - 2005-09-09 10:36:59
|
Author: sewardj
Date: 2005-09-09 11:36:55 +0100 (Fri, 09 Sep 2005)
New Revision: 1379
Log:
Reinstate stfdux, fctiw.
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-09 10:25:39 UTC (rev 1378)
+++ trunk/priv/guest-ppc32/toIR.c 2005-09-09 10:36:55 UTC (rev 1379)
@@ -4010,17 +4010,17 @@
storeBE( mkexpr(EA), mkexpr(frS) );
break;
=20
-//zz case 0x2F7: // stfdux (Store Float Double with Update Indexed=
, PPC32 p515)
-//zz if (rA_addr =3D=3D 0) {
-//zz vex_printf("dis_fp_store(PPC32)(instr,stfdux)\n");
-//zz return False;
-//zz }
-//zz DIP("stfdux fr%d,r%d,r%d\n", frS_addr, rA_addr, rB_addr);
-//zz assign( EA, binop(Iop_Add32, mkexpr(rB), mkexpr(rA)) );
-//zz storeBE( mkexpr(EA), mkexpr(frS) );
-//zz putIReg( rA_addr, mkexpr(EA) );
-//zz break;
-//zz=20
+ case 0x2F7: // stfdux (Store Float Double with Update Indexed, =
PPC32 p515)
+ if (rA_addr =3D=3D 0) {
+ vex_printf("dis_fp_store(PPC32)(instr,stfdux)\n");
+ return False;
+ }
+ DIP("stfdux fr%d,r%d,r%d\n", frS_addr, rA_addr, rB_addr);
+ assign( EA, binop(Iop_Add32, mkexpr(rB), mkexpr(rA)) );
+ storeBE( mkexpr(EA), mkexpr(frS) );
+ putIReg( rA_addr, mkexpr(EA) );
+ break;
+
//zz case 0x3D7: // stfiwx (Store Float as Int, Indexed, PPC32 p51=
7)
//zz DIP("stfiwx fr%d,r%d,r%d\n", frS_addr, rA_addr, rB_addr);
//zz assign( EA, binop(Iop_Add32, mkexpr(rB), mkexpr(rA_or_0)) =
);
@@ -4488,12 +4488,12 @@
assign( frD, roundToSgl( mkexpr(frB) ));
break;
=20
-//zz case 0x00E: // fctiw (Floating Conv to Int, PPC32 p404)
-//zz DIP("fctiw%s fr%d,fr%d\n", flag_Rc ? "." : "", frD_addr, frB_=
addr);
-//zz assign( r_tmp, binop(Iop_F64toI32, get_roundingmode(), mkexpr=
(frB)) );
-//zz assign( frD, unop( Iop_ReinterpI64asF64,
-//zz unop( Iop_32Uto64, mkexpr(r_tmp))));
-//zz break;
+ case 0x00E: // fctiw (Floating Conv to Int, PPC32 p404)
+ DIP("fctiw%s fr%d,fr%d\n", flag_Rc ? "." : "", frD_addr, frB_ad=
dr);
+ assign( r_tmp, binop(Iop_F64toI32, get_roundingmode(), mkexpr(f=
rB)) );
+ assign( frD, unop( Iop_ReinterpI64asF64,
+ unop( Iop_32Uto64, mkexpr(r_tmp))));
+ break;
=20
case 0x00F: // fctiwz (Floating Conv to Int, Round to Zero, PPC32 =
p405)
DIP("fctiwz%s fr%d,fr%d\n", flag_Rc ? "." : "", frD_addr, frB_a=
ddr);
|