From: Julian Seward Date: Tue, 6 Sep 2005 09:55:27 +0000 (+0000) Subject: Remove some helper functions to do with flag handling. These are X-Git-Tag: svn/VALGRIND_3_1_1^2~121 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=12007e3f846ceefaabc7edf86a8f10cab37789dd;p=thirdparty%2Fvalgrind.git Remove some helper functions to do with flag handling. These are unused because the relevant computations are now done in line. git-svn-id: svn://svn.valgrind.org/vex/trunk@1370 --- diff --git a/VEX/priv/guest-ppc32/gdefs.h b/VEX/priv/guest-ppc32/gdefs.h index b09b2a4dd7..6ee087a101 100644 --- a/VEX/priv/guest-ppc32/gdefs.h +++ b/VEX/priv/guest-ppc32/gdefs.h @@ -108,15 +108,6 @@ typedef /* --- CLEAN HELPERS --- */ -// Calculate XER flags -extern -UInt ppc32g_calculate_xer_ov ( UInt op, - UInt res, UInt argL, UInt argR ); - -extern -UInt ppc32g_calculate_xer_ca ( UInt op, - UInt res, UInt argL, UInt argR, - UInt old_ca ); /* Enumeration for xer_ca/ov calculation helper functions diff --git a/VEX/priv/guest-ppc32/ghelpers.c b/VEX/priv/guest-ppc32/ghelpers.c index 7b609464ed..8794cb176e 100644 --- a/VEX/priv/guest-ppc32/ghelpers.c +++ b/VEX/priv/guest-ppc32/ghelpers.c @@ -68,88 +68,6 @@ */ -#define INT32_MIN (-2147483647-1) - -// 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)) - - case PPC32G_FLAG_OP_DIVW: // divwo - return ((argL == INT32_MIN && argR == -1) || argR == 0) ? 1:0; - - case PPC32G_FLAG_OP_DIVWU: // divwuo - return (argR == 0) ? 1:0; - - case PPC32G_FLAG_OP_MULLW: { // mullwo - /* OV true if result can't be represented in 32 bits - i.e sHi != sign extension of sLo */ - Long l_res = ((Long)((Int)argL)) * ((Long)((Int)argR)); - Int sHi = (Int)toUInt(l_res >> 32); - Int sLo = (Int)l_res; - return (sHi != (sLo >> /*s*/ 31)) ? 1:0; - } - - case PPC32G_FLAG_OP_NEG: // nego - return (argL == 0x80000000) ? 1:0; - - 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==1 && res==argL)) ? 1:0; - - case PPC32G_FLAG_OP_SUBFC: // subfc[o] - case PPC32G_FLAG_OP_SUBFI: // subfic - return (res <= argR) ? 1:0; - - case PPC32G_FLAG_OP_SUBFE: // subfe[o], subfze[o], subfme[o] - return ((res < argR) || (old_ca == 1 && res == argR)) ? 1:0; - - case PPC32G_FLAG_OP_SRAW: // sraw - if ((argR & 0x20) == 0) { // shift <= 31 - // xer_ca = sign && (bits_shifted_out != 0) - return (((argL & 0x80000000) && - ((argL & (0xFFFFFFFF >> (32-argR))) != 0)) != 0) ? 1:0; - } - // shift > 31 - // xer_ca = sign && src != 0 - return (((argL & 0x80000000) && (argR != 0)) != 0) ? 1:0; - - case PPC32G_FLAG_OP_SRAWI: // srawi - // xer_ca = sign && (bits_shifted_out != 0) - return (((argL & 0x80000000) && - ((argL & (0xFFFFFFFF >> (32-argR))) != 0)) != 0) ? 1:0; - - default: - break; - } - vpanic("ppc32g_calculate_xer_ov(ppc32)"); - return 0; // notreached -} - IRExpr* guest_ppc32_spechelper ( HChar* function_name, IRExpr** args ) diff --git a/VEX/priv/guest-ppc32/toIR.c b/VEX/priv/guest-ppc32/toIR.c index d34fe4ce6f..18809fdf37 100644 --- a/VEX/priv/guest-ppc32/toIR.c +++ b/VEX/priv/guest-ppc32/toIR.c @@ -859,87 +859,6 @@ static void putCRfields ( IRExpr* w32, UInt mask ) } -//zz /* -------------- Evaluating the flags-thunk. -------------- */ -//zz -//zz /* Calculate CR7 (IBM CR0) conditional flags */ -//zz static IRExpr* mk_ppc32g_calculate_cr7 ( void ) -//zz { -//zz IRExpr** args = -//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 = mkIRExprCCall( -//zz Ity_I32, -//zz 0/*regparm*/, -//zz "ppc32g_calculate_cr7", &ppc32g_calculate_cr7, -//zz args -//zz ); -//zz -//zz // TODO -//zz // 02/02/05 - leaving definedness stuff 'till get memcheck working well. -//zz -//zz /* Exclude OP from definedness checking. We're only -//zz interested in DEP1 and DEP2. */ -//zz // call->Iex.CCall.cee->mcx_mask = 1; -//zz -//zz return call; -//zz } -//zz -//zz /* Calculate XER_OV flag */ -//zz static IRExpr* mk_ppc32g_calculate_xer_ov ( UInt op, IRExpr* res, -//zz IRExpr* argL, IRExpr* argR ) -//zz { -//zz IRExpr** args; -//zz IRExpr* call; -//zz vassert(op < PPC32G_FLAG_OP_NUMBER); -//zz vassert(typeOfIRExpr(irbb->tyenv,res) == Ity_I32); -//zz vassert(typeOfIRExpr(irbb->tyenv,argL) == Ity_I32); -//zz vassert(typeOfIRExpr(irbb->tyenv,argR) == Ity_I32); -//zz -//zz args = mkIRExprVec_4( mkU32(op), res, argL, argR ); -//zz -//zz call -//zz = 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 zero -//uu if it is known that OP does not need to consult it. */ -//uu -//uu static IRExpr* mk_ppc32g_calculate_xer_ca ( UInt op, -//uu IRExpr* res, -//uu IRExpr* argL, -//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) == Ity_I32); -//uu vassert(typeOfIRExpr(irbb->tyenv,argL) == Ity_I32); -//uu vassert(typeOfIRExpr(irbb->tyenv,argR) == Ity_I32); -//uu vassert(typeOfIRExpr(irbb->tyenv,oldca) == Ity_I32); -//uu -//uu args = mkIRExprVec_5( mkU32(op), res, argL, argR, oldca ); -//uu -//uu call -//uu = 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) */