tcg-s390: Fix off-by-one in wraparound andi
authorRichard Henderson <rth@twiddle.net>
Thu, 15 May 2014 04:09:47 +0000 (00:09 -0400)
committerRichard Henderson <rth@twiddle.net>
Thu, 15 May 2014 04:09:47 +0000 (00:09 -0400)
Signed-off-by: Richard Henderson <rth@twiddle.net>
tcg/s390/tcg-target.c

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