|
From: <sv...@va...> - 2011-10-02 10:09:19
|
Author: tom
Date: 2011-10-02 11:04:29 +0100 (Sun, 02 Oct 2011)
New Revision: 2211
Log:
Ignore the precision flag in the ROUND{SS,SD,PS,PD} rounding mode.
Fixes #283000.
Modified:
trunk/priv/guest_amd64_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c
===================================================================
--- trunk/priv/guest_amd64_toIR.c 2011-09-30 08:49:02 UTC (rev 2210)
+++ trunk/priv/guest_amd64_toIR.c 2011-10-02 10:04:29 UTC (rev 2211)
@@ -15465,7 +15465,7 @@
isD ? getXMMRegLane64F( eregOfRexRM(pfx, modrm), 0 )
: getXMMRegLane32F( eregOfRexRM(pfx, modrm), 0 ) );
imm = insn[3+1];
- if (imm & ~7) goto decode_failure;
+ if (imm & ~15) goto decode_failure;
delta += 3+1+1;
DIP( "rounds%c $%d,%s,%s\n",
isD ? 'd' : 's',
@@ -15475,7 +15475,7 @@
addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
assign( src, loadLE( isD ? Ity_F64 : Ity_F32, mkexpr(addr) ));
imm = insn[3+alen];
- if (imm & ~7) goto decode_failure;
+ if (imm & ~15) goto decode_failure;
delta += 3+alen+1;
DIP( "rounds%c $%d,%s,%s\n",
isD ? 'd' : 's',
@@ -15520,7 +15520,7 @@
assign( src1,
getXMMRegLane64F( eregOfRexRM(pfx, modrm), 1 ) );
imm = insn[3+1];
- if (imm & ~7) goto decode_failure;
+ if (imm & ~15) goto decode_failure;
delta += 3+1+1;
DIP( "roundpd $%d,%s,%s\n",
imm, nameXMMReg( eregOfRexRM(pfx, modrm) ),
@@ -15533,7 +15533,7 @@
assign( src1, loadLE(Ity_F64,
binop(Iop_Add64, mkexpr(addr), mkU64(8) )));
imm = insn[3+alen];
- if (imm & ~7) goto decode_failure;
+ if (imm & ~15) goto decode_failure;
delta += 3+alen+1;
DIP( "roundpd $%d,%s,%s\n",
imm, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
@@ -15583,7 +15583,7 @@
assign( src3,
getXMMRegLane32F( eregOfRexRM(pfx, modrm), 3 ) );
imm = insn[3+1];
- if (imm & ~7) goto decode_failure;
+ if (imm & ~15) goto decode_failure;
delta += 3+1+1;
DIP( "roundps $%d,%s,%s\n",
imm, nameXMMReg( eregOfRexRM(pfx, modrm) ),
@@ -15600,7 +15600,7 @@
assign( src3, loadLE(Ity_F32,
binop(Iop_Add64, mkexpr(addr), mkU64(12) )));
imm = insn[3+alen];
- if (imm & ~7) goto decode_failure;
+ if (imm & ~15) goto decode_failure;
delta += 3+alen+1;
DIP( "roundps $%d,%s,%s\n",
imm, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
|