OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 3307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3318 __ InvokeFunction(rdi, actual, JUMP_FUNCTION); | 3318 __ InvokeFunction(rdi, actual, JUMP_FUNCTION); |
3319 | 3319 |
3320 // Slow-case: Non-function called. | 3320 // Slow-case: Non-function called. |
3321 __ bind(&slow); | 3321 __ bind(&slow); |
3322 // CALL_NON_FUNCTION expects the non-function callee as receiver (instead | 3322 // CALL_NON_FUNCTION expects the non-function callee as receiver (instead |
3323 // of the original receiver from the call site). | 3323 // of the original receiver from the call site). |
3324 __ movq(Operand(rsp, (argc_ + 1) * kPointerSize), rdi); | 3324 __ movq(Operand(rsp, (argc_ + 1) * kPointerSize), rdi); |
3325 __ Set(rax, argc_); | 3325 __ Set(rax, argc_); |
3326 __ Set(rbx, 0); | 3326 __ Set(rbx, 0); |
3327 __ GetBuiltinEntry(rdx, Builtins::CALL_NON_FUNCTION); | 3327 __ GetBuiltinEntry(rdx, Builtins::CALL_NON_FUNCTION); |
3328 Handle<Code> adaptor(Isolate::Current()->builtins()->builtin( | 3328 Handle<Code> adaptor = |
3329 Builtins::ArgumentsAdaptorTrampoline)); | 3329 Isolate::Current()->builtins()->ArgumentsAdaptorTrampoline(); |
3330 __ Jump(adaptor, RelocInfo::CODE_TARGET); | 3330 __ Jump(adaptor, RelocInfo::CODE_TARGET); |
3331 } | 3331 } |
3332 | 3332 |
3333 | 3333 |
3334 bool CEntryStub::NeedsImmovableCode() { | 3334 bool CEntryStub::NeedsImmovableCode() { |
3335 return false; | 3335 return false; |
3336 } | 3336 } |
3337 | 3337 |
3338 | 3338 |
3339 void CEntryStub::GenerateThrowTOS(MacroAssembler* masm) { | 3339 void CEntryStub::GenerateThrowTOS(MacroAssembler* masm) { |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3638 | 3638 |
3639 // Fake a receiver (NULL). | 3639 // Fake a receiver (NULL). |
3640 __ push(Immediate(0)); // receiver | 3640 __ push(Immediate(0)); // receiver |
3641 | 3641 |
3642 // Invoke the function by calling through JS entry trampoline | 3642 // Invoke the function by calling through JS entry trampoline |
3643 // builtin and pop the faked function when we return. We load the address | 3643 // builtin and pop the faked function when we return. We load the address |
3644 // from an external reference instead of inlining the call target address | 3644 // from an external reference instead of inlining the call target address |
3645 // directly in the code, because the builtin stubs may not have been | 3645 // directly in the code, because the builtin stubs may not have been |
3646 // generated yet at the time this code is generated. | 3646 // generated yet at the time this code is generated. |
3647 if (is_construct) { | 3647 if (is_construct) { |
3648 ExternalReference construct_entry(Builtins::JSConstructEntryTrampoline, | 3648 ExternalReference construct_entry(Builtins::kJSConstructEntryTrampoline, |
3649 isolate); | 3649 isolate); |
3650 __ load_rax(construct_entry); | 3650 __ load_rax(construct_entry); |
3651 } else { | 3651 } else { |
3652 ExternalReference entry(Builtins::JSEntryTrampoline, isolate); | 3652 ExternalReference entry(Builtins::kJSEntryTrampoline, isolate); |
3653 __ load_rax(entry); | 3653 __ load_rax(entry); |
3654 } | 3654 } |
3655 __ lea(kScratchRegister, FieldOperand(rax, Code::kHeaderSize)); | 3655 __ lea(kScratchRegister, FieldOperand(rax, Code::kHeaderSize)); |
3656 __ call(kScratchRegister); | 3656 __ call(kScratchRegister); |
3657 | 3657 |
3658 // Unlink this frame from the handler chain. | 3658 // Unlink this frame from the handler chain. |
3659 __ movq(kScratchRegister, | 3659 __ movq(kScratchRegister, |
3660 ExternalReference(Isolate::k_handler_address, isolate)); | 3660 ExternalReference(Isolate::k_handler_address, isolate)); |
3661 __ pop(Operand(kScratchRegister, 0)); | 3661 __ pop(Operand(kScratchRegister, 0)); |
3662 // Pop next_sp. | 3662 // Pop next_sp. |
(...skipping 1410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5073 // Do a tail call to the rewritten stub. | 5073 // Do a tail call to the rewritten stub. |
5074 __ jmp(rdi); | 5074 __ jmp(rdi); |
5075 } | 5075 } |
5076 | 5076 |
5077 | 5077 |
5078 #undef __ | 5078 #undef __ |
5079 | 5079 |
5080 } } // namespace v8::internal | 5080 } } // namespace v8::internal |
5081 | 5081 |
5082 #endif // V8_TARGET_ARCH_X64 | 5082 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |