Index: src/arm/fast-codegen-arm.cc |
=================================================================== |
--- src/arm/fast-codegen-arm.cc (revision 3152) |
+++ src/arm/fast-codegen-arm.cc (working copy) |
@@ -153,6 +153,18 @@ |
} |
+void FastCodeGenerator::DropAndMove(Location destination, Register source) { |
+ switch (destination.type()) { |
+ case Location::NOWHERE: |
+ __ pop(); |
+ break; |
+ case Location::TEMP: |
+ __ str(source, MemOperand(sp)); |
+ break; |
+ } |
+} |
+ |
+ |
void FastCodeGenerator::DeclareGlobals(Handle<FixedArray> pairs) { |
// Call the runtime to declare the globals. |
// The context is the first argument. |
@@ -219,16 +231,7 @@ |
__ mov(r2, Operand(expr->name())); |
Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize)); |
__ Call(ic, RelocInfo::CODE_TARGET_CONTEXT); |
- switch (expr->location().type()) { |
- case Location::NOWHERE: |
- __ pop(); |
- break; |
- case Location::TEMP: |
- // Replace the global object with the result. |
- __ str(r0, MemOperand(sp)); |
- break; |
- } |
- |
+ DropAndMove(expr->location(), r0); |
} else { |
Comment cmnt(masm_, "Stack slot"); |
Move(expr->location(), rewrite->AsSlot()); |
@@ -456,15 +459,7 @@ |
Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Initialize)); |
__ Call(ic, RelocInfo::CODE_TARGET); |
// Overwrite the global object on the stack with the result if needed. |
- switch (expr->location().type()) { |
- case Location::NOWHERE: |
- __ pop(); |
- break; |
- case Location::TEMP: |
- __ str(r0, MemOperand(sp)); |
- break; |
- } |
- |
+ DropAndMove(expr->location(), r0); |
} else { |
// Local or parameter assignment. |
@@ -561,14 +556,7 @@ |
__ Call(ic, RelocInfo::CODE_TARGET_CONTEXT); |
// Restore context register. |
__ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); |
- switch (expr->location().type()) { |
- case Location::NOWHERE: |
- __ pop(); |
- break; |
- case Location::TEMP: |
- __ str(r0, MemOperand(sp)); |
- break; |
- } |
+ DropAndMove(expr->location(), r0); |
} |
@@ -607,14 +595,7 @@ |
__ Call(construct_builtin, RelocInfo::CONSTRUCT_CALL); |
// Replace function on TOS with result in r0, or pop it. |
- switch (node->location().type()) { |
- case Location::TEMP: |
- __ str(r0, MemOperand(sp, 0)); |
- break; |
- case Location::NOWHERE: |
- __ pop(); |
- break; |
- } |
+ DropAndMove(node->location(), r0); |
} |