|
From: <sv...@va...> - 2005-09-06 09:55:34
|
Author: sewardj
Date: 2005-09-06 10:55:27 +0100 (Tue, 06 Sep 2005)
New Revision: 1370
Log:
Remove some helper functions to do with flag handling. These are
unused because the relevant computations are now done in line.
Modified:
trunk/priv/guest-ppc32/gdefs.h
trunk/priv/guest-ppc32/ghelpers.c
trunk/priv/guest-ppc32/toIR.c
Modified: trunk/priv/guest-ppc32/gdefs.h
=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/gdefs.h 2005-09-06 09:10:09 UTC (rev 1369)
+++ trunk/priv/guest-ppc32/gdefs.h 2005-09-06 09:55:27 UTC (rev 1370)
@@ -108,16 +108,7 @@
=20
/* --- CLEAN HELPERS --- */
=20
-// Calculate XER flags
-extern=20
-UInt ppc32g_calculate_xer_ov ( UInt op,=20
- UInt res, UInt argL, UInt argR );
=20
-extern=20
-UInt ppc32g_calculate_xer_ca ( UInt op,=20
- UInt res, UInt argL, UInt argR,=20
- UInt old_ca );
-
/*
Enumeration for xer_ca/ov calculation helper functions
*/
Modified: trunk/priv/guest-ppc32/ghelpers.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/ghelpers.c 2005-09-06 09:10:09 UTC (rev 1369)
+++ trunk/priv/guest-ppc32/ghelpers.c 2005-09-06 09:55:27 UTC (rev 1370)
@@ -68,89 +68,7 @@
*/
=20
=20
-#define INT32_MIN (-2147483647-1)
=20
-// Calculate XER_OV
-UInt ppc32g_calculate_xer_ov ( UInt op, UInt res, UInt argL, UInt argR )
-{
- switch (op) {
- case PPC32G_FLAG_OP_ADD: // addo, addc
- case PPC32G_FLAG_OP_ADDE: // addeo, addmeo, addzeo
- return ((argL^argR^-1) & (argL^res) & (1<<31)) ? 1:0;
- // i.e. ((both_same_sign) & (sign_changed) & (sign_mask))
- =20
- case PPC32G_FLAG_OP_DIVW: // divwo
- return ((argL =3D=3D INT32_MIN && argR =3D=3D -1) || argR =3D=3D 0=
) ? 1:0;
- =20
- case PPC32G_FLAG_OP_DIVWU: // divwuo
- return (argR =3D=3D 0) ? 1:0;
- =20
- case PPC32G_FLAG_OP_MULLW: { // mullwo
- /* OV true if result can't be represented in 32 bits
- i.e sHi !=3D sign extension of sLo */
- Long l_res =3D ((Long)((Int)argL)) * ((Long)((Int)argR));
- Int sHi =3D (Int)toUInt(l_res >> 32);
- Int sLo =3D (Int)l_res;
- return (sHi !=3D (sLo >> /*s*/ 31)) ? 1:0;
- }
-
- case PPC32G_FLAG_OP_NEG: // nego
- return (argL =3D=3D 0x80000000) ? 1:0;
- =20
- case PPC32G_FLAG_OP_SUBF: // subfo
- case PPC32G_FLAG_OP_SUBFC: // subfco
- case PPC32G_FLAG_OP_SUBFE: // subfeo, subfmeo, subfzeo
- return (((~argL)^argR^(-1)) & ((~argL)^res) & (1<<31)) ? 1:0;
-
- default:
- break;
- }
-
- vpanic("ppc32g_calculate_xer_ov(ppc32)");
- return 0; // notreached
-}
-
-// Calculate XER_CA
-UInt ppc32g_calculate_xer_ca ( UInt op, UInt res,
- UInt argL, UInt argR, UInt old_ca )
-{
- switch (op) {
- case PPC32G_FLAG_OP_ADD: // addc[o], addic
- return (res < argL) ? 1:0;
-
- case PPC32G_FLAG_OP_ADDE: // adde[o], addze[o], addme[o]
- return (res < argL || (old_ca=3D=3D1 && res=3D=3DargL)) ? 1:0;
-
- case PPC32G_FLAG_OP_SUBFC: // subfc[o]
- case PPC32G_FLAG_OP_SUBFI: // subfic
- return (res <=3D argR) ? 1:0;
-
- case PPC32G_FLAG_OP_SUBFE: // subfe[o], subfze[o], subfme[o]
- return ((res < argR) || (old_ca =3D=3D 1 && res =3D=3D argR)) ? 1:=
0;
-
- case PPC32G_FLAG_OP_SRAW: // sraw
- if ((argR & 0x20) =3D=3D 0) { // shift <=3D 31
- // xer_ca =3D sign && (bits_shifted_out !=3D 0)
- return (((argL & 0x80000000) &&
- ((argL & (0xFFFFFFFF >> (32-argR))) !=3D 0)) !=3D 0) ?=
1:0;
- }
- // shift > 31
- // xer_ca =3D sign && src !=3D 0
- return (((argL & 0x80000000) && (argR !=3D 0)) !=3D 0) ? 1:0;
-
- case PPC32G_FLAG_OP_SRAWI: // srawi
- // xer_ca =3D sign && (bits_shifted_out !=3D 0)
- return (((argL & 0x80000000) &&
- ((argL & (0xFFFFFFFF >> (32-argR))) !=3D 0)) !=3D 0) ? 1:=
0;
-
- default:
- break;
- }
- vpanic("ppc32g_calculate_xer_ov(ppc32)");
- return 0; // notreached
-}
-
-
IRExpr* guest_ppc32_spechelper ( HChar* function_name,
IRExpr** args )
{
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 09:10:09 UTC (rev 1369)
+++ trunk/priv/guest-ppc32/toIR.c 2005-09-06 09:55:27 UTC (rev 1370)
@@ -859,87 +859,6 @@
}
=20
=20
-//zz /* -------------- Evaluating the flags-thunk. -------------- */
-//zz=20
-//zz /* Calculate CR7 (IBM CR0) conditional flags */
-//zz static IRExpr* mk_ppc32g_calculate_cr7 ( void )
-//zz {
-//zz IRExpr** args =3D
-//zz mkIRExprVec_3( IRExpr_Get(OFFB_CC_OP, Ity_I32),
-//zz IRExpr_Get(OFFB_CC_DEP1, Ity_I32),
-//zz IRExpr_Get(OFFB_CC_DEP2, Ity_I32) );
-//zz IRExpr* call
-//zz =3D mkIRExprCCall(
-//zz Ity_I32,
-//zz 0/*regparm*/,=20
-//zz "ppc32g_calculate_cr7", &ppc32g_calculate_cr7,
-//zz args
-//zz );
-//zz=20
-//zz // TODO
-//zz // 02/02/05 - leaving definedness stuff 'till get memcheck working =
well.
-//zz=20
-//zz /* Exclude OP from definedness checking. We're only
-//zz interested in DEP1 and DEP2. */
-//zz // call->Iex.CCall.cee->mcx_mask =3D 1;
-//zz=20
-//zz return call;
-//zz }
-//zz=20
-//zz /* Calculate XER_OV flag */
-//zz static IRExpr* mk_ppc32g_calculate_xer_ov ( UInt op, IRExpr* res,
-//zz IRExpr* argL, IRExpr* a=
rgR )
-//zz {
-//zz IRExpr** args;
-//zz IRExpr* call;
-//zz vassert(op < PPC32G_FLAG_OP_NUMBER);
-//zz vassert(typeOfIRExpr(irbb->tyenv,res) =3D=3D Ity_I32);
-//zz vassert(typeOfIRExpr(irbb->tyenv,argL) =3D=3D Ity_I32);
-//zz vassert(typeOfIRExpr(irbb->tyenv,argR) =3D=3D Ity_I32);
-//zz=20
-//zz args =3D mkIRExprVec_4( mkU32(op), res, argL, argR );
-//zz=20
-//zz call
-//zz =3D mkIRExprCCall(
-//zz Ity_I32,
-//zz 0/*regparm*/,
-//zz "ppc32g_calculate_xer_ov", &ppc32g_calculate_xer_ov,
-//zz args
-//zz );
-//zz return binop(Iop_And32, mkU32(1), call);
-//zz }
-
-//uu /* Calculate XER_CA flag. RES is the result of applying OP to ARGL
-//uu and ARGR, and OLDCA is the old carry flag. The latter may be ze=
ro
-//uu if it is known that OP does not need to consult it. */
-//uu=20
-//uu static IRExpr* mk_ppc32g_calculate_xer_ca ( UInt op,=20
-//uu IRExpr* res,
-//uu IRExpr* argL,=20
-//uu IRExpr* argR,
-//uu IRExpr* oldca )
-//uu {
-//uu IRExpr** args;
-//uu IRExpr* call;
-//uu vassert(op < PPC32G_FLAG_OP_NUMBER);
-//uu vassert(typeOfIRExpr(irbb->tyenv,res) =3D=3D Ity_I32);
-//uu vassert(typeOfIRExpr(irbb->tyenv,argL) =3D=3D Ity_I32);
-//uu vassert(typeOfIRExpr(irbb->tyenv,argR) =3D=3D Ity_I32);
-//uu vassert(typeOfIRExpr(irbb->tyenv,oldca) =3D=3D Ity_I32);
-//uu=20
-//uu args =3D mkIRExprVec_5( mkU32(op), res, argL, argR, oldca );
-//uu=20
-//uu call
-//uu =3D mkIRExprCCall(
-//uu Ity_I32,
-//uu 0/*regparm*/,
-//uu "ppc32g_calculate_xer_ca", &ppc32g_calculate_xer_ca,
-//uu args
-//uu );
-//uu return binop(Iop_And32, mkU32(1), call);
-//uu }
-
-
/* Set the CR0 flags following an arithmetic operation.
(Condition Register CR0 Field Definition, PPC32 p60)
*/
|