From: Julian Seward Date: Sat, 16 Oct 2004 22:59:59 +0000 (+0000) Subject: calculate_eflags_all: finally get rid of compilation warnings, and X-Git-Tag: svn/VALGRIND_3_0_1^2~973 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9e612cc78dcddca4612c871c9c4e98f87c636de8;p=thirdparty%2Fvalgrind.git calculate_eflags_all: finally get rid of compilation warnings, and do a bit of renaming of variables to make it clearer. git-svn-id: svn://svn.valgrind.org/vex/trunk@361 --- diff --git a/VEX/priv/guest-x86/ghelpers.c b/VEX/priv/guest-x86/ghelpers.c index ef06f9962e..13b5cec428 100644 --- a/VEX/priv/guest-x86/ghelpers.c +++ b/VEX/priv/guest-x86/ghelpers.c @@ -90,27 +90,34 @@ static const uint8_t parity_table[256] = { }; /* n must be a constant to be efficient */ -static inline int lshift(int x, int n) +inline static Int lshift ( Int x, Int n ) { - if (n >= 0) - return x << n; - else - return x >> (-n); + if (n >= 0) + return x << n; + else + return x >> (-n); } #define PREAMBLE(__data_bits) \ - const UInt DATA_MASK \ + /* const */ UInt DATA_MASK \ = __data_bits==8 ? 0xFF \ : (__data_bits==16 ? 0xFFFF \ : 0xFFFFFFFF); \ - const UInt SIGN_MASK = 1 << (__data_bits - 1); \ - const UInt CC_DST = cc_dst; \ - const UInt CC_SRC = cc_src + /* const */ UInt SIGN_MASK = 1 << (__data_bits - 1); \ + /* const */ UInt CC_DST = cc_dst_formal; \ + /* const */ UInt CC_SRC = cc_src_formal; \ + /* Three bogus assignments, which hopefully gcc can */ \ + /* optimise away, and which stop it complaining about */ \ + /* unused variables. */ \ + SIGN_MASK = SIGN_MASK; \ + DATA_MASK = DATA_MASK; \ + CC_SRC = CC_SRC; + /*-------------------------------------------------------------*/ -#define ACTIONS_ADD(DATA_BITS,DATA_TYPE) \ +#define ACTIONS_ADD(DATA_BITS,DATA_UTYPE) \ { \ PREAMBLE(DATA_BITS); \ int cf, pf, af, zf, sf, of; \ @@ -118,10 +125,10 @@ static inline int lshift(int x, int n) src1 = CC_SRC; \ src2 = CC_DST; \ dst = src1 + src2; \ - cf = (DATA_TYPE)dst < (DATA_TYPE)src1; \ + cf = (DATA_UTYPE)dst < (DATA_UTYPE)src1; \ pf = parity_table[(uint8_t)dst]; \ af = (dst ^ src1 ^ src2) & 0x10; \ - zf = ((DATA_TYPE)dst == 0) << 6; \ + zf = ((DATA_UTYPE)dst == 0) << 6; \ sf = lshift(dst, 8 - DATA_BITS) & 0x80; \ of = lshift((src1 ^ src2 ^ -1) & (src1 ^ dst), \ 12 - DATA_BITS) & CC_O; \ @@ -130,7 +137,7 @@ static inline int lshift(int x, int n) /*-------------------------------------------------------------*/ -#define ACTIONS_ADC(DATA_BITS,DATA_TYPE) \ +#define ACTIONS_ADC(DATA_BITS,DATA_UTYPE) \ { \ PREAMBLE(DATA_BITS); \ int cf, pf, af, zf, sf, of; \ @@ -138,10 +145,10 @@ static inline int lshift(int x, int n) src1 = CC_SRC; \ src2 = CC_DST; \ dst = src1 + src2 + 1; \ - cf = (DATA_TYPE)dst <= (DATA_TYPE)src1; \ + cf = (DATA_UTYPE)dst <= (DATA_UTYPE)src1; \ pf = parity_table[(uint8_t)dst]; \ af = (dst ^ src1 ^ src2) & 0x10; \ - zf = ((DATA_TYPE)dst == 0) << 6; \ + zf = ((DATA_UTYPE)dst == 0) << 6; \ sf = lshift(dst, 8 - DATA_BITS) & 0x80; \ of = lshift((src1 ^ src2 ^ -1) & (src1 ^ dst), \ 12 - DATA_BITS) & CC_O; \ @@ -150,7 +157,7 @@ static inline int lshift(int x, int n) /*-------------------------------------------------------------*/ -#define ACTIONS_SUB(DATA_BITS,DATA_TYPE) \ +#define ACTIONS_SUB(DATA_BITS,DATA_UTYPE) \ { \ PREAMBLE(DATA_BITS); \ int cf, pf, af, zf, sf, of; \ @@ -158,10 +165,10 @@ static inline int lshift(int x, int n) src1 = CC_DST; \ src2 = CC_SRC; \ dst = src1 - src2; \ - cf = (DATA_TYPE)src1 < (DATA_TYPE)src2; \ + cf = (DATA_UTYPE)src1 < (DATA_UTYPE)src2; \ pf = parity_table[(uint8_t)dst]; \ af = (dst ^ src1 ^ src2) & 0x10; \ - zf = ((DATA_TYPE)dst == 0) << 6; \ + zf = ((DATA_UTYPE)dst == 0) << 6; \ sf = lshift(dst, 8 - DATA_BITS) & 0x80; \ of = lshift((src1 ^ src2) & (src1 ^ dst), \ 12 - DATA_BITS) & CC_O; \ @@ -170,7 +177,7 @@ static inline int lshift(int x, int n) /*-------------------------------------------------------------*/ -#define ACTIONS_SBB(DATA_BITS,DATA_TYPE) \ +#define ACTIONS_SBB(DATA_BITS,DATA_UTYPE) \ { \ PREAMBLE(DATA_BITS); \ int cf, pf, af, zf, sf, of; \ @@ -178,10 +185,10 @@ static inline int lshift(int x, int n) src1 = CC_DST; \ src2 = CC_SRC; \ dst = (src1 - src2) - 1; \ - cf = (DATA_TYPE)src1 <= (DATA_TYPE)src2; \ + cf = (DATA_UTYPE)src1 <= (DATA_UTYPE)src2; \ pf = parity_table[(uint8_t)dst]; \ af = (dst ^ src1 ^ src2) & 0x10; \ - zf = ((DATA_TYPE)dst == 0) << 6; \ + zf = ((DATA_UTYPE)dst == 0) << 6; \ sf = lshift(dst, 8 - DATA_BITS) & 0x80; \ of = lshift((src1 ^ src2) & (src1 ^ dst), \ 12 - DATA_BITS) & CC_O; \ @@ -190,14 +197,14 @@ static inline int lshift(int x, int n) /*-------------------------------------------------------------*/ -#define ACTIONS_LOGIC(DATA_BITS,DATA_TYPE) \ +#define ACTIONS_LOGIC(DATA_BITS,DATA_UTYPE) \ { \ PREAMBLE(DATA_BITS); \ int cf, pf, af, zf, sf, of; \ cf = 0; \ pf = parity_table[(uint8_t)CC_DST]; \ af = 0; \ - zf = ((DATA_TYPE)CC_DST == 0) << 6; \ + zf = ((DATA_UTYPE)CC_DST == 0) << 6; \ sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; \ of = 0; \ return cf | pf | af | zf | sf | of; \ @@ -205,7 +212,7 @@ static inline int lshift(int x, int n) /*-------------------------------------------------------------*/ -#define ACTIONS_INC(DATA_BITS,DATA_TYPE) \ +#define ACTIONS_INC(DATA_BITS,DATA_UTYPE) \ { \ PREAMBLE(DATA_BITS); \ int cf, pf, af, zf, sf, of; \ @@ -215,7 +222,7 @@ static inline int lshift(int x, int n) cf = CC_SRC; \ pf = parity_table[(uint8_t)CC_DST]; \ af = (CC_DST ^ src1 ^ src2) & 0x10; \ - zf = ((DATA_TYPE)CC_DST == 0) << 6; \ + zf = ((DATA_UTYPE)CC_DST == 0) << 6; \ sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; \ of = ((CC_DST & DATA_MASK) == SIGN_MASK) << 11; \ return cf | pf | af | zf | sf | of; \ @@ -223,7 +230,7 @@ static inline int lshift(int x, int n) /*-------------------------------------------------------------*/ -#define ACTIONS_DEC(DATA_BITS,DATA_TYPE) \ +#define ACTIONS_DEC(DATA_BITS,DATA_UTYPE) \ { \ PREAMBLE(DATA_BITS); \ int cf, pf, af, zf, sf, of; \ @@ -233,7 +240,7 @@ static inline int lshift(int x, int n) cf = CC_SRC; \ pf = parity_table[(uint8_t)CC_DST]; \ af = (CC_DST ^ src1 ^ src2) & 0x10; \ - zf = ((DATA_TYPE)CC_DST == 0) << 6; \ + zf = ((DATA_UTYPE)CC_DST == 0) << 6; \ sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; \ of = ((CC_DST & DATA_MASK) \ == ((uint32_t)SIGN_MASK - 1)) << 11; \ @@ -242,14 +249,14 @@ static inline int lshift(int x, int n) /*-------------------------------------------------------------*/ -#define ACTIONS_SHL(DATA_BITS,DATA_TYPE) \ +#define ACTIONS_SHL(DATA_BITS,DATA_UTYPE) \ { \ PREAMBLE(DATA_BITS); \ int cf, pf, af, zf, sf, of; \ cf = (CC_SRC >> (DATA_BITS - 1)) & CC_C; \ pf = parity_table[(uint8_t)CC_DST]; \ af = 0; /* undefined */ \ - zf = ((DATA_TYPE)CC_DST == 0) << 6; \ + zf = ((DATA_UTYPE)CC_DST == 0) << 6; \ sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; \ /* of is defined if shift count == 1 */ \ of = lshift(CC_SRC ^ CC_DST, 12 - DATA_BITS) & CC_O; \ @@ -258,14 +265,14 @@ static inline int lshift(int x, int n) /*-------------------------------------------------------------*/ -#define ACTIONS_SAR(DATA_BITS,DATA_TYPE) \ +#define ACTIONS_SAR(DATA_BITS,DATA_UTYPE) \ { \ PREAMBLE(DATA_BITS); \ int cf, pf, af, zf, sf, of; \ cf = CC_SRC & 1; \ pf = parity_table[(uint8_t)CC_DST]; \ af = 0; /* undefined */ \ - zf = ((DATA_TYPE)CC_DST == 0) << 6; \ + zf = ((DATA_UTYPE)CC_DST == 0) << 6; \ sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; \ /* of is defined if shift count == 1 */ \ of = lshift(CC_SRC ^ CC_DST, 12 - DATA_BITS) & CC_O; \ @@ -276,7 +283,7 @@ static inline int lshift(int x, int n) /* ROL: cf' = lsb(result). of' = msb(result) ^ lsb(result). */ /* DST = result, SRC = old flags */ -#define ACTIONS_ROL(DATA_BITS,DATA_TYPE) \ +#define ACTIONS_ROL(DATA_BITS,DATA_UTYPE) \ { \ PREAMBLE(DATA_BITS); \ int fl \ @@ -291,7 +298,7 @@ static inline int lshift(int x, int n) /* ROR: cf' = msb(result). of' = msb(result) ^ msb-1(result). */ /* DST = result, SRC = old flags */ -#define ACTIONS_ROR(DATA_BITS,DATA_TYPE) \ +#define ACTIONS_ROR(DATA_BITS,DATA_UTYPE) \ { \ PREAMBLE(DATA_BITS); \ int fl \ @@ -304,19 +311,19 @@ static inline int lshift(int x, int n) /*-------------------------------------------------------------*/ -#define ACTIONS_SMUL(DATA_BITS,DATA_STYPE,DATA_S2TYPE) \ +#define ACTIONS_UMUL(DATA_BITS,DATA_UTYPE,DATA_U2TYPE) \ { \ PREAMBLE(DATA_BITS); \ int cf, pf, af, zf, sf, of; \ - DATA_STYPE hi; \ - DATA_STYPE lo = ((DATA_STYPE)CC_SRC) * ((DATA_STYPE)CC_DST);\ - DATA_S2TYPE rr = ((DATA_S2TYPE)((DATA_STYPE)CC_SRC)) \ - * ((DATA_S2TYPE)((DATA_STYPE)CC_DST)); \ - hi = (DATA_STYPE)(rr >>/*s*/ DATA_BITS); \ - cf = (hi != (lo >>/*s*/ (DATA_BITS-1))); \ + DATA_UTYPE hi; \ + DATA_UTYPE lo = ((DATA_UTYPE)CC_SRC) * ((DATA_UTYPE)CC_DST);\ + DATA_U2TYPE rr = ((DATA_U2TYPE)((DATA_UTYPE)CC_SRC)) \ + * ((DATA_U2TYPE)((DATA_UTYPE)CC_DST)); \ + hi = (DATA_UTYPE)(rr >>/*u*/ DATA_BITS); \ + cf = (hi != 0); \ pf = parity_table[(uint8_t)lo]; \ af = 0; /* undefined */ \ - zf = (lo == 0) << 6; \ + zf = (lo == 0) << 6; \ sf = lshift(lo, 8 - DATA_BITS) & 0x80; \ of = cf << 11; \ return cf | pf | af | zf | sf | of; \ @@ -324,19 +331,19 @@ static inline int lshift(int x, int n) /*-------------------------------------------------------------*/ -#define ACTIONS_UMUL(DATA_BITS,DATA_UTYPE,DATA_U2TYPE) \ +#define ACTIONS_SMUL(DATA_BITS,DATA_STYPE,DATA_S2TYPE) \ { \ PREAMBLE(DATA_BITS); \ int cf, pf, af, zf, sf, of; \ - DATA_UTYPE hi; \ - DATA_UTYPE lo = ((DATA_UTYPE)CC_SRC) * ((DATA_UTYPE)CC_DST);\ - DATA_U2TYPE rr = ((DATA_U2TYPE)((DATA_UTYPE)CC_SRC)) \ - * ((DATA_U2TYPE)((DATA_UTYPE)CC_DST)); \ - hi = (DATA_UTYPE)(rr >>/*u*/ DATA_BITS); \ - cf = (hi != 0); \ + DATA_STYPE hi; \ + DATA_STYPE lo = ((DATA_STYPE)CC_SRC) * ((DATA_STYPE)CC_DST);\ + DATA_S2TYPE rr = ((DATA_S2TYPE)((DATA_STYPE)CC_SRC)) \ + * ((DATA_S2TYPE)((DATA_STYPE)CC_DST)); \ + hi = (DATA_STYPE)(rr >>/*s*/ DATA_BITS); \ + cf = (hi != (lo >>/*s*/ (DATA_BITS-1))); \ pf = parity_table[(uint8_t)lo]; \ af = 0; /* undefined */ \ - zf = (lo == 0) << 6; \ + zf = (lo == 0) << 6; \ sf = lshift(lo, 8 - DATA_BITS) & 0x80; \ of = cf << 11; \ return cf | pf | af | zf | sf | of; \ @@ -409,15 +416,17 @@ static void initCounts ( void ) /* CALLED FROM GENERATED CODE */ /* Calculate all the 6 flags from the supplied thunk parameters. */ -/*static*/ UInt calculate_eflags_all ( UInt cc_op, UInt cc_src, UInt cc_dst ) +/*static*/ +UInt calculate_eflags_all ( UInt cc_op, UInt cc_src_formal, UInt cc_dst_formal ) { # if PROFILE_EFLAGS n_calc_all++; # endif switch (cc_op) { case CC_OP_COPY: - return cc_src & (CC_MASK_O | CC_MASK_S | CC_MASK_Z - | CC_MASK_A | CC_MASK_C | CC_MASK_P); + return cc_src_formal + & (CC_MASK_O | CC_MASK_S | CC_MASK_Z + | CC_MASK_A | CC_MASK_C | CC_MASK_P); case CC_OP_ADDB: ACTIONS_ADD( 8, UChar ); case CC_OP_ADDW: ACTIONS_ADD( 16, UShort ); @@ -474,7 +483,7 @@ static void initCounts ( void ) default: /* shouldn't really make these calls from generated code */ vex_printf("calculate_eflags_all( %d, 0x%x, 0x%x )\n", - cc_op, cc_src, cc_dst ); + cc_op, cc_src_formal, cc_dst_formal ); vpanic("calculate_eflags_all"); } }