Index: src/arm/builtins-arm.cc |
=================================================================== |
--- src/arm/builtins-arm.cc (revision 8110) |
+++ src/arm/builtins-arm.cc (working copy) |
@@ -582,10 +582,11 @@ |
__ bind(&convert_argument); |
__ push(function); // Preserve the function. |
__ IncrementCounter(counters->string_ctor_conversions(), 1, r3, r4); |
- __ EnterInternalFrame(); |
- __ push(r0); |
- __ InvokeBuiltin(Builtins::TO_STRING, CALL_FUNCTION); |
- __ LeaveInternalFrame(); |
+ { |
+ FrameScope scope(masm, StackFrame::INTERNAL); |
+ __ push(r0); |
+ __ InvokeBuiltin(Builtins::TO_STRING, CALL_FUNCTION); |
+ } |
__ pop(function); |
__ mov(argument, r0); |
__ b(&argument_is_string); |
@@ -601,10 +602,11 @@ |
// create a string wrapper. |
__ bind(&gc_required); |
__ IncrementCounter(counters->string_ctor_gc_required(), 1, r3, r4); |
- __ EnterInternalFrame(); |
- __ push(argument); |
- __ CallRuntime(Runtime::kNewStringWrapper, 1); |
- __ LeaveInternalFrame(); |
+ { |
+ FrameScope scope(masm, StackFrame::INTERNAL); |
+ __ push(argument); |
+ __ CallRuntime(Runtime::kNewStringWrapper, 1); |
+ } |
__ Ret(); |
} |
@@ -651,7 +653,8 @@ |
Isolate* isolate = masm->isolate(); |
// Enter a construct frame. |
- __ EnterConstructFrame(); |
+{ |
+ FrameScope scope(masm, StackFrame::CONSTRUCT); |
// Preserve the two incoming parameters on the stack. |
__ mov(r0, Operand(r0, LSL, kSmiTagSize)); |
@@ -967,7 +970,10 @@ |
// sp[1]: constructor function |
// sp[2]: number of arguments (smi-tagged) |
__ ldr(r1, MemOperand(sp, 2 * kPointerSize)); |
- __ LeaveConstructFrame(); |
+ |
+ // Leave construct frame. |
+} |
+ |
__ add(sp, sp, Operand(r1, LSL, kPointerSizeLog2 - 1)); |
__ add(sp, sp, Operand(kPointerSize)); |
__ IncrementCounter(isolate->counters()->constructed_objects(), 1, r1, r2); |
@@ -1000,11 +1006,12 @@ |
// r4: argv |
// r5-r7, cp may be clobbered |
- // Clear the context before we push it when entering the JS frame. |
+ // Clear the context before we push it when entering the internal frame. |
__ mov(cp, Operand(0, RelocInfo::NONE)); |
// Enter an internal frame. |
- __ EnterInternalFrame(); |
+{ |
+ FrameScope scope(masm, StackFrame::INTERNAL); |
// Set up the context from the function argument. |
__ ldr(cp, FieldMemOperand(r1, JSFunction::kContextOffset)); |
@@ -1055,9 +1062,10 @@ |
NullCallWrapper(), CALL_AS_METHOD); |
} |
- // Exit the JS frame and remove the parameters (except function), and return. |
+ // Exit the JS frame and remove the parameters (except function), and |
+ // return. |
// Respect ABI stack constraint. |
- __ LeaveInternalFrame(); |
+} |
__ Jump(lr); |
// r0: result |
@@ -1076,7 +1084,8 @@ |
void Builtins::Generate_LazyCompile(MacroAssembler* masm) { |
// Enter an internal frame. |
- __ EnterInternalFrame(); |
+{ |
+ FrameScope scope(masm, StackFrame::INTERNAL); |
// Preserve the function. |
__ push(r1); |
@@ -1094,8 +1103,8 @@ |
// Restore saved function. |
__ pop(r1); |
- // Tear down temporary frame. |
- __ LeaveInternalFrame(); |
+ // Tear down internal frame. |
+} |
// Do a tail-call of the compiled function. |
__ Jump(r2); |
@@ -1104,7 +1113,8 @@ |
void Builtins::Generate_LazyRecompile(MacroAssembler* masm) { |
// Enter an internal frame. |
- __ EnterInternalFrame(); |
+{ |
+ FrameScope scope(masm, StackFrame::INTERNAL); |
// Preserve the function. |
__ push(r1); |
@@ -1122,8 +1132,8 @@ |
// Restore saved function. |
__ pop(r1); |
- // Tear down temporary frame. |
- __ LeaveInternalFrame(); |
+ // Tear down internal frame. |
+} |
// Do a tail-call of the compiled function. |
__ Jump(r2); |
@@ -1132,12 +1142,13 @@ |
static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm, |
Deoptimizer::BailoutType type) { |
- __ EnterInternalFrame(); |
- // Pass the function and deoptimization type to the runtime system. |
- __ mov(r0, Operand(Smi::FromInt(static_cast<int>(type)))); |
- __ push(r0); |
- __ CallRuntime(Runtime::kNotifyDeoptimized, 1); |
- __ LeaveInternalFrame(); |
+ { |
+ FrameScope scope(masm, StackFrame::INTERNAL); |
+ // Pass the function and deoptimization type to the runtime system. |
+ __ mov(r0, Operand(Smi::FromInt(static_cast<int>(type)))); |
+ __ push(r0); |
+ __ CallRuntime(Runtime::kNotifyDeoptimized, 1); |
+ } |
// Get the full codegen state from the stack and untag it -> r6. |
__ ldr(r6, MemOperand(sp, 0 * kPointerSize)); |
@@ -1177,9 +1188,10 @@ |
// the registers without worrying about which of them contain |
// pointers. This seems a bit fragile. |
__ stm(db_w, sp, kJSCallerSaved | kCalleeSaved | lr.bit() | fp.bit()); |
- __ EnterInternalFrame(); |
- __ CallRuntime(Runtime::kNotifyOSR, 0); |
- __ LeaveInternalFrame(); |
+ { |
+ FrameScope scope(masm, StackFrame::INTERNAL); |
+ __ CallRuntime(Runtime::kNotifyOSR, 0); |
+ } |
__ ldm(ia_w, sp, kJSCallerSaved | kCalleeSaved | lr.bit() | fp.bit()); |
__ Ret(); |
} |
@@ -1195,10 +1207,11 @@ |
// Lookup the function in the JavaScript frame and push it as an |
// argument to the on-stack replacement function. |
__ ldr(r0, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); |
- __ EnterInternalFrame(); |
- __ push(r0); |
- __ CallRuntime(Runtime::kCompileForOnStackReplacement, 1); |
- __ LeaveInternalFrame(); |
+ { |
+ FrameScope scope(masm, StackFrame::INTERNAL); |
+ __ push(r0); |
+ __ CallRuntime(Runtime::kCompileForOnStackReplacement, 1); |
+ } |
// If the result was -1 it means that we couldn't optimize the |
// function. Just return and continue in the unoptimized version. |
@@ -1282,17 +1295,23 @@ |
__ b(ge, &shift_arguments); |
__ bind(&convert_to_object); |
- __ EnterInternalFrame(); // In order to preserve argument count. |
- __ mov(r0, Operand(r0, LSL, kSmiTagSize)); // Smi-tagged. |
- __ push(r0); |
- __ push(r2); |
- __ InvokeBuiltin(Builtins::TO_OBJECT, CALL_FUNCTION); |
- __ mov(r2, r0); |
+ { |
+ // Enter an internal frame in order to preserve argument count. |
+ FrameScope scope(masm, StackFrame::INTERNAL); |
+ __ mov(r0, Operand(r0, LSL, kSmiTagSize)); // Smi-tagged. |
+ __ push(r0); |
- __ pop(r0); |
- __ mov(r0, Operand(r0, ASR, kSmiTagSize)); |
- __ LeaveInternalFrame(); |
+ __ push(r2); |
+ __ InvokeBuiltin(Builtins::TO_OBJECT, CALL_FUNCTION); |
+ __ mov(r2, r0); |
+ |
+ __ pop(r0); |
+ __ mov(r0, Operand(r0, ASR, kSmiTagSize)); |
+ |
+ // Exit the internal frame. |
+ } |
+ |
// Restore the function to r1. |
__ ldr(r1, MemOperand(sp, r0, LSL, kPointerSizeLog2)); |
__ jmp(&patch_receiver); |
@@ -1392,7 +1411,8 @@ |
const int kRecvOffset = 3 * kPointerSize; |
const int kFunctionOffset = 4 * kPointerSize; |
- __ EnterInternalFrame(); |
+{ |
+ FrameScope scope(masm, StackFrame::INTERNAL); |
__ ldr(r0, MemOperand(fp, kFunctionOffset)); // get the function |
__ push(r0); |
@@ -1520,7 +1540,8 @@ |
NullCallWrapper(), CALL_AS_METHOD); |
// Tear down the internal frame and remove function, receiver and args. |
- __ LeaveInternalFrame(); |
+} |
+ |
__ add(sp, sp, Operand(3 * kPointerSize)); |
__ Jump(lr); |
} |