|
From: <sv...@va...> - 2016-08-05 10:34:23
|
Author: sewardj
Date: Fri Aug 5 11:34:15 2016
New Revision: 3238
Log:
Fix two invalid signed left shifts picked up by ubsan.
Modified:
trunk/priv/guest_arm64_toIR.c
Modified: trunk/priv/guest_arm64_toIR.c
==============================================================================
--- trunk/priv/guest_arm64_toIR.c (original)
+++ trunk/priv/guest_arm64_toIR.c Fri Aug 5 11:34:15 2016
@@ -148,8 +148,9 @@
static ULong sx_to_64 ( ULong x, UInt n )
{
vassert(n > 1 && n < 64);
+ x <<= (64-n);
Long r = (Long)x;
- r = (r << (64-n)) >> (64-n);
+ r >>= (64-n);
return (ULong)r;
}
@@ -2590,7 +2591,7 @@
IRTemp old = newTemp(Ity_I32);
assign(old, getIReg32orZR(dd));
vassert(hw <= 1);
- UInt mask = 0xFFFF << (16 * hw);
+ UInt mask = ((UInt)0xFFFF) << (16 * hw);
IRExpr* res
= binop(Iop_Or32,
binop(Iop_And32, mkexpr(old), mkU32(~mask)),
|