summaryrefslogtreecommitdiff
path: root/src/compiler/codegen/RallocUtil.cc
diff options
context:
space:
mode:
author buzbee <buzbee@google.com> 2011-10-01 11:22:17 -0700
committer buzbee <buzbee@google.com> 2011-10-01 11:26:37 -0700
commit58f9274efe66535255a70327022b8f586d334843 (patch)
tree6899c83fbf029ca90b2beaef1f92ed7b8b9d72ea /src/compiler/codegen/RallocUtil.cc
parente4390576de48a47a7f2dd99534169d83aaaa71ae (diff)
Various bugfixes
divide by zero check for longs, off-by-one error on fill-array-data, register management hygene, mvn encoding, iget/iput <= 32bits are done as 32-bit (code was using type size for ld/st). Change-Id: Ia09323e7d92f4ad21890af4c10f2f8c8f05f3b0e
Diffstat (limited to 'src/compiler/codegen/RallocUtil.cc')
-rw-r--r--src/compiler/codegen/RallocUtil.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/compiler/codegen/RallocUtil.cc b/src/compiler/codegen/RallocUtil.cc
index 47d5ac0919..9df80bd49b 100644
--- a/src/compiler/codegen/RallocUtil.cc
+++ b/src/compiler/codegen/RallocUtil.cc
@@ -884,6 +884,7 @@ extern RegLocation oatUpdateLoc(CompilationUnit* cUnit, RegLocation loc)
if (infoLo->pair) {
oatClobber(cUnit, infoLo->reg);
oatClobber(cUnit, infoLo->partner);
+ oatFreeTemp(cUnit, infoLo->reg);
} else {
loc.lowReg = infoLo->reg;
loc.location = kLocPhysReg;
@@ -957,14 +958,16 @@ extern RegLocation oatUpdateLocWide(CompilationUnit* cUnit,
DCHECK(!FPREG(loc.lowReg) || ((loc.lowReg & 0x1) == 0));
return loc;
}
- // Can't easily reuse - clobber any overlaps
+ // Can't easily reuse - clobber and free any overlaps
if (infoLo) {
oatClobber(cUnit, infoLo->reg);
+ oatFreeTemp(cUnit, infoLo->reg);
if (infoLo->pair)
oatClobber(cUnit, infoLo->partner);
}
if (infoHi) {
oatClobber(cUnit, infoHi->reg);
+ oatFreeTemp(cUnit, infoHi->reg);
if (infoHi->pair)
oatClobber(cUnit, infoHi->partner);
}