|
From: <sv...@va...> - 2006-05-08 23:47:46
|
Author: sewardj
Date: 2006-05-06 15:40:40 +0100 (Sat, 06 May 2006)
New Revision: 1610
Log:
Fix for 32-bit mode, as per comment.
Modified:
trunk/priv/host-ppc/hdefs.c
Modified: trunk/priv/host-ppc/hdefs.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/host-ppc/hdefs.c 2006-05-05 13:44:17 UTC (rev 1609)
+++ trunk/priv/host-ppc/hdefs.c 2006-05-06 14:40:40 UTC (rev 1610)
@@ -2468,6 +2468,16 @@
{
vassert(r_dst < 0x20);
=20
+ if (!mode64) {
+ /* In 32-bit mode, make sure the top 32 bits of imm are a sign
+ extension of the bottom 32 bits, so that the range tests
+ below work correctly. */
+ UInt u32 =3D (UInt)imm;
+ Int s32 =3D (Int)u32;
+ Long s64 =3D (Long)s32;
+ imm =3D (ULong)s64;
+ }
+
if (imm >=3D 0xFFFFFFFFFFFF8000ULL || imm < 0x8000) {
// sign-extendable from 16 bits
=20
|