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 3314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3325 __ InvokeFunction(rdi, actual, JUMP_FUNCTION); | 3325 __ InvokeFunction(rdi, actual, JUMP_FUNCTION); |
3326 | 3326 |
3327 // Slow-case: Non-function called. | 3327 // Slow-case: Non-function called. |
3328 __ bind(&slow); | 3328 __ bind(&slow); |
3329 // CALL_NON_FUNCTION expects the non-function callee as receiver (instead | 3329 // CALL_NON_FUNCTION expects the non-function callee as receiver (instead |
3330 // of the original receiver from the call site). | 3330 // of the original receiver from the call site). |
3331 __ movq(Operand(rsp, (argc_ + 1) * kPointerSize), rdi); | 3331 __ movq(Operand(rsp, (argc_ + 1) * kPointerSize), rdi); |
3332 __ Set(rax, argc_); | 3332 __ Set(rax, argc_); |
3333 __ Set(rbx, 0); | 3333 __ Set(rbx, 0); |
3334 __ GetBuiltinEntry(rdx, Builtins::CALL_NON_FUNCTION); | 3334 __ GetBuiltinEntry(rdx, Builtins::CALL_NON_FUNCTION); |
3335 Handle<Code> adaptor(Isolate::Current()->builtins()->builtin( | 3335 Handle<Code> adaptor = |
3336 Builtins::ArgumentsAdaptorTrampoline)); | 3336 Isolate::Current()->builtins()->ArgumentsAdaptorTrampoline(); |
3337 __ Jump(adaptor, RelocInfo::CODE_TARGET); | 3337 __ Jump(adaptor, RelocInfo::CODE_TARGET); |
3338 } | 3338 } |
3339 | 3339 |
3340 | 3340 |
3341 bool CEntryStub::NeedsImmovableCode() { | 3341 bool CEntryStub::NeedsImmovableCode() { |
3342 return false; | 3342 return false; |
3343 } | 3343 } |
3344 | 3344 |
3345 | 3345 |
3346 void CEntryStub::GenerateThrowTOS(MacroAssembler* masm) { | 3346 void CEntryStub::GenerateThrowTOS(MacroAssembler* masm) { |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3649 | 3649 |
3650 // Fake a receiver (NULL). | 3650 // Fake a receiver (NULL). |
3651 __ push(Immediate(0)); // receiver | 3651 __ push(Immediate(0)); // receiver |
3652 | 3652 |
3653 // Invoke the function by calling through JS entry trampoline | 3653 // Invoke the function by calling through JS entry trampoline |
3654 // builtin and pop the faked function when we return. We load the address | 3654 // builtin and pop the faked function when we return. We load the address |
3655 // from an external reference instead of inlining the call target address | 3655 // from an external reference instead of inlining the call target address |
3656 // directly in the code, because the builtin stubs may not have been | 3656 // directly in the code, because the builtin stubs may not have been |
3657 // generated yet at the time this code is generated. | 3657 // generated yet at the time this code is generated. |
3658 if (is_construct) { | 3658 if (is_construct) { |
3659 ExternalReference construct_entry(Builtins::JSConstructEntryTrampoline, | 3659 ExternalReference construct_entry(Builtins::kJSConstructEntryTrampoline, |
3660 isolate); | 3660 isolate); |
3661 __ Load(rax, construct_entry); | 3661 __ Load(rax, construct_entry); |
3662 } else { | 3662 } else { |
3663 ExternalReference entry(Builtins::JSEntryTrampoline, isolate); | 3663 ExternalReference entry(Builtins::kJSEntryTrampoline, isolate); |
3664 __ Load(rax, entry); | 3664 __ Load(rax, entry); |
3665 } | 3665 } |
3666 __ lea(kScratchRegister, FieldOperand(rax, Code::kHeaderSize)); | 3666 __ lea(kScratchRegister, FieldOperand(rax, Code::kHeaderSize)); |
3667 __ call(kScratchRegister); | 3667 __ call(kScratchRegister); |
3668 | 3668 |
3669 // Unlink this frame from the handler chain. | 3669 // Unlink this frame from the handler chain. |
3670 Operand handler_operand = | 3670 Operand handler_operand = |
3671 masm->ExternalOperand(ExternalReference(Isolate::k_handler_address, | 3671 masm->ExternalOperand(ExternalReference(Isolate::k_handler_address, |
3672 isolate)); | 3672 isolate)); |
3673 __ pop(handler_operand); | 3673 __ pop(handler_operand); |
(...skipping 1415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5089 // Do a tail call to the rewritten stub. | 5089 // Do a tail call to the rewritten stub. |
5090 __ jmp(rdi); | 5090 __ jmp(rdi); |
5091 } | 5091 } |
5092 | 5092 |
5093 | 5093 |
5094 #undef __ | 5094 #undef __ |
5095 | 5095 |
5096 } } // namespace v8::internal | 5096 } } // namespace v8::internal |
5097 | 5097 |
5098 #endif // V8_TARGET_ARCH_X64 | 5098 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |