Index: src/x87/codegen-x87.cc |
diff --git a/src/x87/codegen-x87.cc b/src/x87/codegen-x87.cc |
index 8112d11d139492233a376c36d35c9097b018e59e..d302841fa1046dcac086cafd03597d96078680f9 100644 |
--- a/src/x87/codegen-x87.cc |
+++ b/src/x87/codegen-x87.cc |
@@ -269,6 +269,7 @@ void ElementsTransitionGenerator::GenerateSmiToDouble( |
__ push(eax); |
__ push(ebx); |
+ __ push(esi); |
__ mov(edi, FieldOperand(edi, FixedArray::kLengthOffset)); |
@@ -301,8 +302,9 @@ void ElementsTransitionGenerator::GenerateSmiToDouble( |
// Call into runtime if GC is required. |
__ bind(&gc_required); |
+ |
// Restore registers before jumping into runtime. |
- __ mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset)); |
+ __ pop(esi); |
__ pop(ebx); |
__ pop(eax); |
__ jmp(fail); |
@@ -338,12 +340,11 @@ void ElementsTransitionGenerator::GenerateSmiToDouble( |
__ sub(edi, Immediate(Smi::FromInt(1))); |
__ j(not_sign, &loop); |
+ // Restore registers. |
+ __ pop(esi); |
__ pop(ebx); |
__ pop(eax); |
- // Restore esi. |
- __ mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset)); |
- |
__ bind(&only_change_map); |
// eax: value |
// ebx: target map |