| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 #include <stdarg.h> | 5 #include <stdarg.h> |
| 6 #include <stdlib.h> | 6 #include <stdlib.h> |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #if V8_TARGET_ARCH_PPC | 9 #if V8_TARGET_ARCH_PPC |
| 10 | 10 |
| (...skipping 1088 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1099 | 1099 |
| 1100 | 1100 |
| 1101 void Simulator::WriteDW(intptr_t addr, int64_t value) { | 1101 void Simulator::WriteDW(intptr_t addr, int64_t value) { |
| 1102 int64_t* ptr = reinterpret_cast<int64_t*>(addr); | 1102 int64_t* ptr = reinterpret_cast<int64_t*>(addr); |
| 1103 *ptr = value; | 1103 *ptr = value; |
| 1104 return; | 1104 return; |
| 1105 } | 1105 } |
| 1106 | 1106 |
| 1107 | 1107 |
| 1108 // Returns the limit of the stack area to enable checking for stack overflows. | 1108 // Returns the limit of the stack area to enable checking for stack overflows. |
| 1109 uintptr_t Simulator::StackLimit() const { | 1109 uintptr_t Simulator::StackLimit(uintptr_t c_limit) const { |
| 1110 // Leave a safety margin to prevent overrunning the stack when pushing values. | 1110 // The simulator uses a separate JS stack. If we have exhausted the C stack, |
| 1111 // we also drop down the JS limit to reflect the exhaustion on the JS stack. |
| 1112 if (GetCurrentStackPosition() < c_limit) { |
| 1113 return reinterpret_cast<uintptr_t>(get_sp()); |
| 1114 } |
| 1115 |
| 1116 // Otherwise the limit is the JS stack. Leave a safety margin to prevent |
| 1117 // overrunning the stack when pushing values. |
| 1111 return reinterpret_cast<uintptr_t>(stack_) + stack_protection_size_; | 1118 return reinterpret_cast<uintptr_t>(stack_) + stack_protection_size_; |
| 1112 } | 1119 } |
| 1113 | 1120 |
| 1114 | 1121 |
| 1115 // Unsupported instructions use Format to print an error and stop execution. | 1122 // Unsupported instructions use Format to print an error and stop execution. |
| 1116 void Simulator::Format(Instruction* instr, const char* format) { | 1123 void Simulator::Format(Instruction* instr, const char* format) { |
| 1117 PrintF("Simulator found unsupported instruction:\n 0x%08" V8PRIxPTR ": %s\n", | 1124 PrintF("Simulator found unsupported instruction:\n 0x%08" V8PRIxPTR ": %s\n", |
| 1118 reinterpret_cast<intptr_t>(instr), format); | 1125 reinterpret_cast<intptr_t>(instr), format); |
| 1119 UNIMPLEMENTED(); | 1126 UNIMPLEMENTED(); |
| 1120 } | 1127 } |
| (...skipping 2570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3691 } else { | 3698 } else { |
| 3692 ExecuteInstruction(instr); | 3699 ExecuteInstruction(instr); |
| 3693 } | 3700 } |
| 3694 program_counter = get_pc(); | 3701 program_counter = get_pc(); |
| 3695 } | 3702 } |
| 3696 } | 3703 } |
| 3697 } | 3704 } |
| 3698 | 3705 |
| 3699 | 3706 |
| 3700 void Simulator::CallInternal(byte* entry) { | 3707 void Simulator::CallInternal(byte* entry) { |
| 3708 // Adjust JS-based stack limit to C-based stack limit. |
| 3709 isolate_->stack_guard()->AdjustStackLimitForSimulator(); |
| 3710 |
| 3701 // Prepare to execute the code at entry | 3711 // Prepare to execute the code at entry |
| 3702 #if ABI_USES_FUNCTION_DESCRIPTORS | 3712 #if ABI_USES_FUNCTION_DESCRIPTORS |
| 3703 // entry is the function descriptor | 3713 // entry is the function descriptor |
| 3704 set_pc(*(reinterpret_cast<intptr_t*>(entry))); | 3714 set_pc(*(reinterpret_cast<intptr_t*>(entry))); |
| 3705 #else | 3715 #else |
| 3706 // entry is the instruction address | 3716 // entry is the instruction address |
| 3707 set_pc(reinterpret_cast<intptr_t>(entry)); | 3717 set_pc(reinterpret_cast<intptr_t>(entry)); |
| 3708 #endif | 3718 #endif |
| 3709 | 3719 |
| 3710 // Put down marker for end of simulation. The simulator will stop simulation | 3720 // Put down marker for end of simulation. The simulator will stop simulation |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3883 uintptr_t* stack_slot = reinterpret_cast<uintptr_t*>(current_sp); | 3893 uintptr_t* stack_slot = reinterpret_cast<uintptr_t*>(current_sp); |
| 3884 uintptr_t address = *stack_slot; | 3894 uintptr_t address = *stack_slot; |
| 3885 set_register(sp, current_sp + sizeof(uintptr_t)); | 3895 set_register(sp, current_sp + sizeof(uintptr_t)); |
| 3886 return address; | 3896 return address; |
| 3887 } | 3897 } |
| 3888 } // namespace internal | 3898 } // namespace internal |
| 3889 } // namespace v8 | 3899 } // namespace v8 |
| 3890 | 3900 |
| 3891 #endif // USE_SIMULATOR | 3901 #endif // USE_SIMULATOR |
| 3892 #endif // V8_TARGET_ARCH_PPC | 3902 #endif // V8_TARGET_ARCH_PPC |
| OLD | NEW |