diff options
Diffstat (limited to 'src/compiler/codegen/GenCommon.cc')
| -rw-r--r-- | src/compiler/codegen/GenCommon.cc | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/compiler/codegen/GenCommon.cc b/src/compiler/codegen/GenCommon.cc index c9ba285c5f..2209084934 100644 --- a/src/compiler/codegen/GenCommon.cc +++ b/src/compiler/codegen/GenCommon.cc @@ -582,7 +582,8 @@ void genFilledNewArray(CompilationUnit* cUnit, MIR* mir, bool isRange) #if defined(TARGET_ARM) int rVal = rLR; // Using a lot of temps, rLR is known free here #elif defined(TARGET_X86) - int rVal = rSrc; + oatFreeTemp(cUnit, rRET0); + int rVal = oatAllocTemp(cUnit); #else int rVal = oatAllocTemp(cUnit); #endif @@ -609,6 +610,11 @@ void genFilledNewArray(CompilationUnit* cUnit, MIR* mir, bool isRange) opRegImm(cUnit, kOpSub, rIdx, 1); opCmpImmBranch(cUnit, kCondGe, rIdx, 0, target); #endif +#if defined(TARGET_X86) + // Restore the target pointer + opRegRegImm(cUnit, kOpAdd, rRET0, rDst, + -Array::DataOffset(component_size).Int32Value()); +#endif } else if (!isRange) { // TUNING: interleave for (unsigned int i = 0; i < dInsn->vA; i++) { |