| Index: src/arm/builtins-arm.cc
|
| diff --git a/src/arm/builtins-arm.cc b/src/arm/builtins-arm.cc
|
| index 7898086c0745aac983f70a6b7ccf6fc5cf93bcf5..f53f293cef7d78ba377e722eb05f11c9aae691a4 100644
|
| --- a/src/arm/builtins-arm.cc
|
| +++ b/src/arm/builtins-arm.cc
|
| @@ -155,10 +155,9 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
|
|
|
| // Run the native code for the Array function called as a normal function.
|
| // tail call a stub
|
| - Handle<Object> undefined_sentinel(
|
| - masm->isolate()->heap()->undefined_value(),
|
| - masm->isolate());
|
| - __ mov(r2, Operand(undefined_sentinel));
|
| + Handle<Object> megamorphic_sentinel =
|
| + TypeFeedbackInfo::MegamorphicSentinel(masm->isolate());
|
| + __ mov(r2, Operand(megamorphic_sentinel));
|
| ArrayConstructorStub stub(masm->isolate());
|
| __ TailCallStub(&stub);
|
| }
|
| @@ -262,7 +261,7 @@ void Builtins::Generate_StringConstructCode(MacroAssembler* masm) {
|
| __ push(function); // Preserve the function.
|
| __ IncrementCounter(counters->string_ctor_conversions(), 1, r3, r4);
|
| {
|
| - FrameScope scope(masm, StackFrame::INTERNAL);
|
| + FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
|
| __ push(r0);
|
| __ InvokeBuiltin(Builtins::TO_STRING, CALL_FUNCTION);
|
| }
|
| @@ -282,7 +281,7 @@ void Builtins::Generate_StringConstructCode(MacroAssembler* masm) {
|
| __ bind(&gc_required);
|
| __ IncrementCounter(counters->string_ctor_gc_required(), 1, r3, r4);
|
| {
|
| - FrameScope scope(masm, StackFrame::INTERNAL);
|
| + FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
|
| __ push(argument);
|
| __ CallRuntime(Runtime::kNewStringWrapper, 1);
|
| }
|
| @@ -292,7 +291,7 @@ void Builtins::Generate_StringConstructCode(MacroAssembler* masm) {
|
|
|
| static void CallRuntimePassFunction(
|
| MacroAssembler* masm, Runtime::FunctionId function_id) {
|
| - FrameScope scope(masm, StackFrame::INTERNAL);
|
| + FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
|
| // Push a copy of the function onto the stack.
|
| __ push(r1);
|
| // Push function as parameter to the runtime call.
|
| @@ -354,7 +353,7 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
|
|
|
| // Enter a construct frame.
|
| {
|
| - FrameScope scope(masm, StackFrame::CONSTRUCT);
|
| + FrameAndConstantPoolScope scope(masm, StackFrame::CONSTRUCT);
|
|
|
| // Preserve the two incoming parameters on the stack.
|
| __ SmiTag(r0);
|
| @@ -738,9 +737,9 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
|
| __ mov(r0, Operand(r3));
|
| if (is_construct) {
|
| // No type feedback cell is available
|
| - Handle<Object> undefined_sentinel(
|
| - masm->isolate()->heap()->undefined_value(), masm->isolate());
|
| - __ mov(r2, Operand(undefined_sentinel));
|
| + Handle<Object> megamorphic_sentinel =
|
| + TypeFeedbackInfo::MegamorphicSentinel(masm->isolate());
|
| + __ mov(r2, Operand(megamorphic_sentinel));
|
| CallConstructStub stub(NO_CALL_FUNCTION_FLAGS);
|
| __ CallStub(&stub);
|
| } else {
|
| @@ -774,7 +773,7 @@ void Builtins::Generate_CompileUnoptimized(MacroAssembler* masm) {
|
|
|
|
|
| static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) {
|
| - FrameScope scope(masm, StackFrame::INTERNAL);
|
| + FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
|
| // Push a copy of the function onto the stack.
|
| __ push(r1);
|
| // Push function as parameter to the runtime call.
|
| @@ -870,7 +869,7 @@ void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) {
|
| static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
|
| SaveFPRegsMode save_doubles) {
|
| {
|
| - FrameScope scope(masm, StackFrame::INTERNAL);
|
| + FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
|
|
|
| // Preserve registers across notification, this is important for compiled
|
| // stubs that tail call the runtime on deopts passing their parameters in
|
| @@ -899,7 +898,7 @@ void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) {
|
| static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
|
| Deoptimizer::BailoutType type) {
|
| {
|
| - FrameScope scope(masm, StackFrame::INTERNAL);
|
| + FrameAndConstantPoolScope 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);
|
| @@ -947,7 +946,7 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
|
| // Lookup the function in the JavaScript frame.
|
| __ ldr(r0, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
|
| {
|
| - FrameScope scope(masm, StackFrame::INTERNAL);
|
| + FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
|
| // Pass function as argument.
|
| __ push(r0);
|
| __ CallRuntime(Runtime::kCompileForOnStackReplacement, 1);
|
| @@ -987,7 +986,7 @@ void Builtins::Generate_OsrAfterStackCheck(MacroAssembler* masm) {
|
| __ cmp(sp, Operand(ip));
|
| __ b(hs, &ok);
|
| {
|
| - FrameScope scope(masm, StackFrame::INTERNAL);
|
| + FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
|
| __ CallRuntime(Runtime::kStackGuard, 0);
|
| }
|
| __ Jump(masm->isolate()->builtins()->OnStackReplacement(),
|
| @@ -1039,7 +1038,7 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
|
| __ tst(r3, Operand(1 << (SharedFunctionInfo::kNative + kSmiTagSize)));
|
| __ b(ne, &shift_arguments);
|
|
|
| - // Compute the receiver in non-strict mode.
|
| + // Compute the receiver in sloppy mode.
|
| __ add(r2, sp, Operand(r0, LSL, kPointerSizeLog2));
|
| __ ldr(r2, MemOperand(r2, -kPointerSize));
|
| // r0: actual number of arguments
|
| @@ -1062,7 +1061,7 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
|
|
|
| {
|
| // Enter an internal frame in order to preserve argument count.
|
| - FrameScope scope(masm, StackFrame::INTERNAL);
|
| + FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
|
| __ SmiTag(r0);
|
| __ push(r0);
|
|
|
| @@ -1189,7 +1188,7 @@ void Builtins::Generate_FunctionApply(MacroAssembler* masm) {
|
| const int kFunctionOffset = 4 * kPointerSize;
|
|
|
| {
|
| - FrameScope frame_scope(masm, StackFrame::INTERNAL);
|
| + FrameAndConstantPoolScope frame_scope(masm, StackFrame::INTERNAL);
|
|
|
| __ ldr(r0, MemOperand(fp, kFunctionOffset)); // get the function
|
| __ push(r0);
|
| @@ -1247,7 +1246,7 @@ void Builtins::Generate_FunctionApply(MacroAssembler* masm) {
|
| __ tst(r2, Operand(1 << (SharedFunctionInfo::kNative + kSmiTagSize)));
|
| __ b(ne, &push_receiver);
|
|
|
| - // Compute the receiver in non-strict mode.
|
| + // Compute the receiver in sloppy mode.
|
| __ JumpIfSmi(r0, &call_to_object);
|
| __ LoadRoot(r1, Heap::kNullValueRootIndex);
|
| __ cmp(r0, r1);
|
| @@ -1354,8 +1353,14 @@ static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
|
| // then tear down the parameters.
|
| __ ldr(r1, MemOperand(fp, -(StandardFrameConstants::kFixedFrameSizeFromFp +
|
| kPointerSize)));
|
| - __ mov(sp, fp);
|
| - __ ldm(ia_w, sp, fp.bit() | lr.bit());
|
| +
|
| + if (FLAG_enable_ool_constant_pool) {
|
| + __ add(sp, fp, Operand(StandardFrameConstants::kConstantPoolOffset));
|
| + __ ldm(ia_w, sp, pp.bit() | fp.bit() | lr.bit());
|
| + } else {
|
| + __ mov(sp, fp);;
|
| + __ ldm(ia_w, sp, fp.bit() | lr.bit());
|
| + }
|
| __ add(sp, sp, Operand::PointerOffsetFromSmiKey(r1));
|
| __ add(sp, sp, Operand(kPointerSize)); // adjust for receiver
|
| }
|
|
|