tcg-s390: Fix off-by-one in wraparound andi

Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
Richard Henderson 2014-05-15 00:09:47 -04:00
parent 450445d543
commit a175689654

View File

@ -983,8 +983,8 @@ static void tgen_andi(TCGContext *s, TCGType type, TCGReg dest, uint64_t val)
int msb, lsb; int msb, lsb;
if ((val & 0x8000000000000001ull) == 0x8000000000000001ull) { if ((val & 0x8000000000000001ull) == 0x8000000000000001ull) {
/* Achieve wraparound by swapping msb and lsb. */ /* Achieve wraparound by swapping msb and lsb. */
msb = 63 - ctz64(~val); msb = 64 - ctz64(~val);
lsb = clz64(~val) + 1; lsb = clz64(~val) - 1;
} else { } else {
msb = clz64(val); msb = clz64(val);
lsb = 63 - ctz64(val); lsb = 63 - ctz64(val);