| OLD | NEW |
| 1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 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 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 493 // reference to rax. This is safe because the current frame does not | 493 // reference to rax. This is safe because the current frame does not |
| 494 // contain a reference to rax (it is prepared for the return by spilling | 494 // contain a reference to rax (it is prepared for the return by spilling |
| 495 // all registers). | 495 // all registers). |
| 496 if (FLAG_trace) { | 496 if (FLAG_trace) { |
| 497 frame_->Push(return_value); | 497 frame_->Push(return_value); |
| 498 *return_value = frame_->CallRuntime(Runtime::kTraceExit, 1); | 498 *return_value = frame_->CallRuntime(Runtime::kTraceExit, 1); |
| 499 } | 499 } |
| 500 return_value->ToRegister(rax); | 500 return_value->ToRegister(rax); |
| 501 | 501 |
| 502 // Add a label for checking the size of the code used for returning. | 502 // Add a label for checking the size of the code used for returning. |
| 503 #ifdef DEBUG |
| 503 Label check_exit_codesize; | 504 Label check_exit_codesize; |
| 504 masm_->bind(&check_exit_codesize); | 505 masm_->bind(&check_exit_codesize); |
| 506 #endif |
| 505 | 507 |
| 506 // Leave the frame and return popping the arguments and the | 508 // Leave the frame and return popping the arguments and the |
| 507 // receiver. | 509 // receiver. |
| 508 frame_->Exit(); | 510 frame_->Exit(); |
| 509 masm_->ret((scope_->num_parameters() + 1) * kPointerSize); | 511 masm_->ret((scope_->num_parameters() + 1) * kPointerSize); |
| 510 // Add padding that will be overwritten by a debugger breakpoint. | 512 // Add padding that will be overwritten by a debugger breakpoint. |
| 511 // frame_->Exit() generates "movq rsp, rbp; pop rbp" length 5. | 513 // frame_->Exit() generates "movq rsp, rbp; pop rbp" length 3+1. |
| 512 // "ret k" has length 2. | 514 // "ret k" has length 3. |
| 513 const int kPadding = Debug::kX64JSReturnSequenceLength - 5 - 2; | 515 const int kPadding = Debug::kX64JSReturnSequenceLength - 4 - 3; |
| 514 for (int i = 0; i < kPadding; ++i) { | 516 for (int i = 0; i < kPadding; ++i) { |
| 515 masm_->int3(); | 517 masm_->int3(); |
| 516 } | 518 } |
| 517 DeleteFrame(); | 519 DeleteFrame(); |
| 518 | 520 |
| 519 // Check that the size of the code used for returning matches what is | 521 // Check that the size of the code used for returning matches what is |
| 520 // expected by the debugger. | 522 // expected by the debugger. |
| 521 ASSERT_EQ(Debug::kX64JSReturnSequenceLength, | 523 ASSERT_EQ(Debug::kX64JSReturnSequenceLength, |
| 522 masm_->SizeOfCodeGeneratedSince(&check_exit_codesize)); | 524 masm_->SizeOfCodeGeneratedSince(&check_exit_codesize)); |
| 523 } | 525 } |
| (...skipping 5200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5724 return Handle<String>(String::cast(*raw_name->handle())); | 5726 return Handle<String>(String::cast(*raw_name->handle())); |
| 5725 } | 5727 } |
| 5726 } | 5728 } |
| 5727 | 5729 |
| 5728 | 5730 |
| 5729 void Reference::GetValue(TypeofState typeof_state) { | 5731 void Reference::GetValue(TypeofState typeof_state) { |
| 5730 ASSERT(!cgen_->in_spilled_code()); | 5732 ASSERT(!cgen_->in_spilled_code()); |
| 5731 ASSERT(cgen_->HasValidEntryRegisters()); | 5733 ASSERT(cgen_->HasValidEntryRegisters()); |
| 5732 ASSERT(!is_illegal()); | 5734 ASSERT(!is_illegal()); |
| 5733 MacroAssembler* masm = cgen_->masm(); | 5735 MacroAssembler* masm = cgen_->masm(); |
| 5736 |
| 5737 // Record the source position for the property load. |
| 5738 Property* property = expression_->AsProperty(); |
| 5739 if (property != NULL) { |
| 5740 cgen_->CodeForSourcePosition(property->position()); |
| 5741 } |
| 5742 |
| 5734 switch (type_) { | 5743 switch (type_) { |
| 5735 case SLOT: { | 5744 case SLOT: { |
| 5736 Comment cmnt(masm, "[ Load from Slot"); | 5745 Comment cmnt(masm, "[ Load from Slot"); |
| 5737 Slot* slot = expression_->AsVariableProxy()->AsVariable()->slot(); | 5746 Slot* slot = expression_->AsVariableProxy()->AsVariable()->slot(); |
| 5738 ASSERT(slot != NULL); | 5747 ASSERT(slot != NULL); |
| 5739 cgen_->LoadFromSlotCheckForArguments(slot, typeof_state); | 5748 cgen_->LoadFromSlotCheckForArguments(slot, typeof_state); |
| 5740 break; | 5749 break; |
| 5741 } | 5750 } |
| 5742 | 5751 |
| 5743 case NAMED: { | 5752 case NAMED: { |
| (...skipping 1937 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7681 int CompareStub::MinorKey() { | 7690 int CompareStub::MinorKey() { |
| 7682 // Encode the two parameters in a unique 16 bit value. | 7691 // Encode the two parameters in a unique 16 bit value. |
| 7683 ASSERT(static_cast<unsigned>(cc_) < (1 << 15)); | 7692 ASSERT(static_cast<unsigned>(cc_) < (1 << 15)); |
| 7684 return (static_cast<unsigned>(cc_) << 1) | (strict_ ? 1 : 0); | 7693 return (static_cast<unsigned>(cc_) << 1) | (strict_ ? 1 : 0); |
| 7685 } | 7694 } |
| 7686 | 7695 |
| 7687 | 7696 |
| 7688 #undef __ | 7697 #undef __ |
| 7689 | 7698 |
| 7690 } } // namespace v8::internal | 7699 } } // namespace v8::internal |
| OLD | NEW |