diff -r a2a79fe9655d src/arch/x86/isa/microops/mediaop.isa
--- a/src/arch/x86/isa/microops/mediaop.isa	Wed Nov 11 17:49:09 2009 -0500
+++ b/src/arch/x86/isa/microops/mediaop.isa	Fri Nov 13 21:31:12 2009 -0500
@@ -1288,9 +1288,10 @@
             for (int i = 0; i < items; i++) {
                 int srcHiIndex = srcStart + (i + 1) * srcSizeBits - 1;
                 int srcLoIndex = srcStart + (i + 0) * srcSizeBits;
+                int srcSignIndex = ((srcHiIndex+1)-srcLoIndex)-1;
                 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) << srcSignIndex)));
                 double arg = sArg;
 
                 if (destSize == 4) {
