Revert "Revert "Better support for x86 XMM registers""
This reverts commit 8ff67e3338952c70ccf3b609559bf8cc0f379cfd.
Fix applied to loc.fp usage.
Change-Id: I1eb3005392544fcf30c595923ed25bcee2dc4859
diff --git a/compiler/dex/quick/ralloc_util.cc b/compiler/dex/quick/ralloc_util.cc
index cef013e..32c22f2 100644
--- a/compiler/dex/quick/ralloc_util.cc
+++ b/compiler/dex/quick/ralloc_util.cc
@@ -602,6 +602,7 @@
}
void Mir2Lir::MarkPair(int low_reg, int high_reg) {
+ DCHECK_NE(low_reg, high_reg);
RegisterInfo* info_lo = GetRegInfo(low_reg);
RegisterInfo* info_hi = GetRegInfo(high_reg);
info_lo->pair = info_hi->pair = true;
@@ -807,7 +808,10 @@
if (update) {
loc.location = kLocPhysReg;
MarkLive(loc.low_reg, loc.s_reg_low);
- MarkLive(loc.high_reg, GetSRegHi(loc.s_reg_low));
+ // Does this wide value live in two registers or one vector register?
+ if (loc.low_reg != loc.high_reg) {
+ MarkLive(loc.high_reg, GetSRegHi(loc.s_reg_low));
+ }
}
DCHECK(!IsFpReg(loc.low_reg) || ((loc.low_reg & 0x1) == 0));
return loc;
@@ -1059,7 +1063,10 @@
Clobber(res.high_reg);
LockTemp(res.low_reg);
LockTemp(res.high_reg);
- MarkPair(res.low_reg, res.high_reg);
+ // Does this wide value live in two registers or one vector register?
+ if (res.low_reg != res.high_reg) {
+ MarkPair(res.low_reg, res.high_reg);
+ }
return res;
}