| OLD | NEW |
| 1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 10872 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10883 Label skip; | 10883 Label skip; |
| 10884 __ cmpq(rbp, Immediate(0)); | 10884 __ cmpq(rbp, Immediate(0)); |
| 10885 __ j(equal, &skip); | 10885 __ j(equal, &skip); |
| 10886 __ movq(rsi, Operand(rbp, StandardFrameConstants::kContextOffset)); | 10886 __ movq(rsi, Operand(rbp, StandardFrameConstants::kContextOffset)); |
| 10887 __ bind(&skip); | 10887 __ bind(&skip); |
| 10888 __ ret(0); | 10888 __ ret(0); |
| 10889 } | 10889 } |
| 10890 | 10890 |
| 10891 | 10891 |
| 10892 void ApiGetterEntryStub::Generate(MacroAssembler* masm) { | 10892 void ApiGetterEntryStub::Generate(MacroAssembler* masm) { |
| 10893 UNREACHABLE(); | 10893 Label empty_result; |
| 10894 Label prologue; |
| 10895 Label promote_scheduled_exception; |
| 10896 __ EnterApiExitFrame(ExitFrame::MODE_NORMAL, kStackSpace, 0); |
| 10897 ASSERT_EQ(kArgc, 4); |
| 10898 #ifdef _WIN64 |
| 10899 // All the parameters should be set up by a caller. |
| 10900 #else |
| 10901 // Set 1st parameter register with property name. |
| 10902 __ movq(rsi, rdx); |
| 10903 // Second parameter register rdi should be set with pointer to AccessorInfo |
| 10904 // by a caller. |
| 10905 #endif |
| 10906 // Call the api function! |
| 10907 __ movq(rax, |
| 10908 reinterpret_cast<int64_t>(fun()->address()), |
| 10909 RelocInfo::RUNTIME_ENTRY); |
| 10910 __ call(rax); |
| 10911 // Check if the function scheduled an exception. |
| 10912 ExternalReference scheduled_exception_address = |
| 10913 ExternalReference::scheduled_exception_address(); |
| 10914 __ movq(rsi, scheduled_exception_address); |
| 10915 __ Cmp(Operand(rsi, 0), Factory::the_hole_value()); |
| 10916 __ j(not_equal, &promote_scheduled_exception); |
| 10917 #ifdef _WIN64 |
| 10918 // rax keeps a pointer to v8::Handle, unpack it. |
| 10919 __ movq(rax, Operand(rax, 0)); |
| 10920 #endif |
| 10921 // Check if the result handle holds 0. |
| 10922 __ testq(rax, rax); |
| 10923 __ j(zero, &empty_result); |
| 10924 // It was non-zero. Dereference to get the result value. |
| 10925 __ movq(rax, Operand(rax, 0)); |
| 10926 __ bind(&prologue); |
| 10927 __ LeaveExitFrame(ExitFrame::MODE_NORMAL); |
| 10928 __ ret(0); |
| 10929 __ bind(&promote_scheduled_exception); |
| 10930 __ TailCallRuntime(Runtime::kPromoteScheduledException, 0, 1); |
| 10931 __ bind(&empty_result); |
| 10932 // It was zero; the result is undefined. |
| 10933 __ Move(rax, Factory::undefined_value()); |
| 10934 __ jmp(&prologue); |
| 10894 } | 10935 } |
| 10895 | 10936 |
| 10896 | 10937 |
| 10897 void CEntryStub::GenerateCore(MacroAssembler* masm, | 10938 void CEntryStub::GenerateCore(MacroAssembler* masm, |
| 10898 Label* throw_normal_exception, | 10939 Label* throw_normal_exception, |
| 10899 Label* throw_termination_exception, | 10940 Label* throw_termination_exception, |
| 10900 Label* throw_out_of_memory_exception, | 10941 Label* throw_out_of_memory_exception, |
| 10901 bool do_gc, | 10942 bool do_gc, |
| 10902 bool always_allocate_scope, | 10943 bool always_allocate_scope, |
| 10903 int /* alignment_skew */) { | 10944 int /* alignment_skew */) { |
| (...skipping 1578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12482 #undef __ | 12523 #undef __ |
| 12483 | 12524 |
| 12484 void RecordWriteStub::Generate(MacroAssembler* masm) { | 12525 void RecordWriteStub::Generate(MacroAssembler* masm) { |
| 12485 masm->RecordWriteHelper(object_, addr_, scratch_); | 12526 masm->RecordWriteHelper(object_, addr_, scratch_); |
| 12486 masm->ret(0); | 12527 masm->ret(0); |
| 12487 } | 12528 } |
| 12488 | 12529 |
| 12489 } } // namespace v8::internal | 12530 } } // namespace v8::internal |
| 12490 | 12531 |
| 12491 #endif // V8_TARGET_ARCH_X64 | 12532 #endif // V8_TARGET_ARCH_X64 |
| OLD | NEW |