OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #if V8_TARGET_ARCH_ARM | 5 #if V8_TARGET_ARCH_ARM |
6 | 6 |
7 #include "src/codegen.h" | 7 #include "src/codegen.h" |
8 #include "src/debug/debug.h" | 8 #include "src/debug/debug.h" |
9 #include "src/deoptimizer.h" | 9 #include "src/deoptimizer.h" |
10 #include "src/full-codegen/full-codegen.h" | 10 #include "src/full-codegen/full-codegen.h" |
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
597 __ ldr(ip, MemOperand(r2, r4, LSL, kPointerSizeLog2 - 1)); | 597 __ ldr(ip, MemOperand(r2, r4, LSL, kPointerSizeLog2 - 1)); |
598 __ push(ip); | 598 __ push(ip); |
599 __ bind(&entry); | 599 __ bind(&entry); |
600 __ sub(r4, r4, Operand(2), SetCC); | 600 __ sub(r4, r4, Operand(2), SetCC); |
601 __ b(ge, &loop); | 601 __ b(ge, &loop); |
602 | 602 |
603 // Call the function. | 603 // Call the function. |
604 // r0: number of arguments | 604 // r0: number of arguments |
605 // r1: constructor function | 605 // r1: constructor function |
606 // r3: new target | 606 // r3: new target |
607 if (is_api_function) { | 607 ParameterCount actual(r0); |
608 __ ldr(cp, FieldMemOperand(r1, JSFunction::kContextOffset)); | 608 __ InvokeFunction(r1, r3, actual, CALL_FUNCTION, |
609 Handle<Code> code = | 609 CheckDebugStepCallWrapper()); |
610 masm->isolate()->builtins()->HandleApiCallConstruct(); | |
611 __ Call(code, RelocInfo::CODE_TARGET); | |
612 } else { | |
613 ParameterCount actual(r0); | |
614 __ InvokeFunction(r1, r3, actual, CALL_FUNCTION, | |
615 CheckDebugStepCallWrapper()); | |
616 } | |
617 | 610 |
618 // Store offset of return address for deoptimizer. | 611 // Store offset of return address for deoptimizer. |
619 if (create_implicit_receiver && !is_api_function) { | 612 if (create_implicit_receiver && !is_api_function) { |
620 masm->isolate()->heap()->SetConstructStubDeoptPCOffset(masm->pc_offset()); | 613 masm->isolate()->heap()->SetConstructStubDeoptPCOffset(masm->pc_offset()); |
621 } | 614 } |
622 | 615 |
623 // Restore context from the frame. | 616 // Restore context from the frame. |
624 // r0: result | 617 // r0: result |
625 // sp[0]: receiver | 618 // sp[0]: receiver |
626 // sp[1]: number of arguments (smi-tagged) | 619 // sp[1]: number of arguments (smi-tagged) |
(...skipping 2163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2790 } | 2783 } |
2791 } | 2784 } |
2792 | 2785 |
2793 | 2786 |
2794 #undef __ | 2787 #undef __ |
2795 | 2788 |
2796 } // namespace internal | 2789 } // namespace internal |
2797 } // namespace v8 | 2790 } // namespace v8 |
2798 | 2791 |
2799 #endif // V8_TARGET_ARCH_ARM | 2792 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |