|
From: <sv...@va...> - 2016-10-20 05:40:41
|
Author: sewardj
Date: Thu Oct 20 06:40:34 2016
New Revision: 3281
Log:
Merge from trunk:
3275 CVTPI2PS: Only switch to MMX mode if the source is a MMX register.
Modified:
branches/VEX_3_12_BRANCH/ (props changed)
branches/VEX_3_12_BRANCH/priv/guest_amd64_toIR.c
branches/VEX_3_12_BRANCH/priv/guest_x86_toIR.c
Modified: branches/VEX_3_12_BRANCH/priv/guest_amd64_toIR.c
==============================================================================
--- branches/VEX_3_12_BRANCH/priv/guest_amd64_toIR.c (original)
+++ branches/VEX_3_12_BRANCH/priv/guest_amd64_toIR.c Thu Oct 20 06:40:34 2016
@@ -12848,8 +12848,10 @@
IRTemp rmode = newTemp(Ity_I32);
modrm = getUChar(delta);
- do_MMX_preamble();
if (epartIsReg(modrm)) {
+ /* Only switch to MMX mode if the source is a MMX register.
+ See comments on CVTPI2PD for details. Fixes #357059. */
+ do_MMX_preamble();
assign( arg64, getMMXReg(eregLO3ofRM(modrm)) );
delta += 1;
DIP("cvtpi2ps %s,%s\n", nameMMXReg(eregLO3ofRM(modrm)),
Modified: branches/VEX_3_12_BRANCH/priv/guest_x86_toIR.c
==============================================================================
--- branches/VEX_3_12_BRANCH/priv/guest_x86_toIR.c (original)
+++ branches/VEX_3_12_BRANCH/priv/guest_x86_toIR.c Thu Oct 20 06:40:34 2016
@@ -8565,8 +8565,10 @@
vassert(sz == 4);
modrm = getIByte(delta+2);
- do_MMX_preamble();
if (epartIsReg(modrm)) {
+ /* Only switch to MMX mode if the source is a MMX register.
+ See comments on CVTPI2PD for details. Fixes #357059. */
+ do_MMX_preamble();
assign( arg64, getMMXReg(eregOfRM(modrm)) );
delta += 2+1;
DIP("cvtpi2ps %s,%s\n", nameMMXReg(eregOfRM(modrm)),
|