X86: Make the cvti2f microop sign extend its integer source correctly.
authorGabe Black <gblack@eecs.umich.edu>
Wed, 12 May 2010 07:51:35 +0000 (00:51 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Wed, 12 May 2010 07:51:35 +0000 (00:51 -0700)
The code was using the wrong bit as the sign bit. Other similar bits of code
seem to be correct.

src/arch/x86/isa/microops/mediaop.isa

index 900c166f88a6d52c43f417c7b097dc1ed2c52dbb..9a2707b5985d34754bfb966843ddfb9087430a4c 100644 (file)
@@ -1294,7 +1294,8 @@ let {{
                 int srcLoIndex = srcStart + (i + 0) * srcSizeBits;
                 uint64_t argBits = bits(FpSrcReg1.uqw, srcHiIndex, srcLoIndex);
 
-                int64_t sArg = argBits | (0 - (argBits & (ULL(1) << srcHiIndex)));
+                int64_t sArg = argBits |
+                    (0 - (argBits & (ULL(1) << (srcSizeBits - 1))));
                 double arg = sArg;
 
                 if (destSize == 4) {