diff options
| author | 2011-10-01 11:22:17 -0700 | |
|---|---|---|
| committer | 2011-10-01 11:26:37 -0700 | |
| commit | 58f9274efe66535255a70327022b8f586d334843 (patch) | |
| tree | 6899c83fbf029ca90b2beaef1f92ed7b8b9d72ea /src/compiler/codegen/RallocUtil.cc | |
| parent | e4390576de48a47a7f2dd99534169d83aaaa71ae (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.cc | 5 |
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); } |