| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_MIPS. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_MIPS. |
| 6 #if defined(TARGET_ARCH_MIPS) | 6 #if defined(TARGET_ARCH_MIPS) |
| 7 | 7 |
| 8 #include "vm/intermediate_language.h" | 8 #include "vm/intermediate_language.h" |
| 9 | 9 |
| 10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
| (...skipping 2108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2119 | 2119 |
| 2120 compiler->GenerateCallRuntime(token_pos(), | 2120 compiler->GenerateCallRuntime(token_pos(), |
| 2121 deopt_id(), | 2121 deopt_id(), |
| 2122 kCloneContextRuntimeEntry, | 2122 kCloneContextRuntimeEntry, |
| 2123 locs()); | 2123 locs()); |
| 2124 __ lw(result, Address(SP, 1 * kWordSize)); // Get result (cloned context). | 2124 __ lw(result, Address(SP, 1 * kWordSize)); // Get result (cloned context). |
| 2125 __ addiu(SP, SP, Immediate(2 * kWordSize)); | 2125 __ addiu(SP, SP, Immediate(2 * kWordSize)); |
| 2126 } | 2126 } |
| 2127 | 2127 |
| 2128 | 2128 |
| 2129 LocationSummary* CatchEntryInstr::MakeLocationSummary() const { | 2129 LocationSummary* CatchBlockEntryInstr::MakeLocationSummary() const { |
| 2130 return LocationSummary::Make(0, | 2130 UNREACHABLE(); |
| 2131 Location::NoLocation(), | 2131 return NULL; |
| 2132 LocationSummary::kNoCall); | |
| 2133 } | 2132 } |
| 2134 | 2133 |
| 2135 | 2134 |
| 2136 // Restore stack and initialize the two exception variables: | 2135 void CatchBlockEntryInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2137 // exception and stack trace variables. | 2136 __ Bind(compiler->GetJumpLabel(this)); |
| 2138 void CatchEntryInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2137 compiler->AddExceptionHandler(catch_try_index(), |
| 2138 try_index(), |
| 2139 compiler->assembler()->CodeSize(), |
| 2140 catch_handler_types_); |
| 2141 // Restore pool pointer. |
| 2142 __ GetNextPC(CMPRES, TMP); |
| 2143 const intptr_t object_pool_pc_dist = |
| 2144 Instructions::HeaderSize() - Instructions::object_pool_offset() + |
| 2145 compiler->assembler()->CodeSize() - 1 * Instr::kInstrSize; |
| 2146 __ LoadFromOffset(PP, CMPRES, -object_pool_pc_dist); |
| 2147 |
| 2148 if (HasParallelMove()) { |
| 2149 compiler->parallel_move_resolver()->EmitNativeCode(parallel_move()); |
| 2150 } |
| 2151 |
| 2139 // Restore SP from FP as we are coming from a throw and the code for | 2152 // Restore SP from FP as we are coming from a throw and the code for |
| 2140 // popping arguments has not been run. | 2153 // popping arguments has not been run. |
| 2141 const intptr_t fp_sp_dist = | 2154 const intptr_t fp_sp_dist = |
| 2142 (kFirstLocalSlotFromFp + 1 - compiler->StackSize()) * kWordSize; | 2155 (kFirstLocalSlotFromFp + 1 - compiler->StackSize()) * kWordSize; |
| 2143 ASSERT(fp_sp_dist <= 0); | 2156 ASSERT(fp_sp_dist <= 0); |
| 2144 __ AddImmediate(SP, FP, fp_sp_dist); | 2157 __ AddImmediate(SP, FP, fp_sp_dist); |
| 2145 | 2158 |
| 2146 ASSERT(!exception_var().is_captured()); | 2159 // Restore stack and initialize the two exception variables: |
| 2147 ASSERT(!stacktrace_var().is_captured()); | 2160 // exception and stack trace variables. |
| 2148 | |
| 2149 __ sw(kExceptionObjectReg, | 2161 __ sw(kExceptionObjectReg, |
| 2150 Address(FP, exception_var().index() * kWordSize)); | 2162 Address(FP, exception_var().index() * kWordSize)); |
| 2151 __ sw(kStackTraceObjectReg, | 2163 __ sw(kStackTraceObjectReg, |
| 2152 Address(FP, stacktrace_var().index() * kWordSize)); | 2164 Address(FP, stacktrace_var().index() * kWordSize)); |
| 2153 | |
| 2154 __ GetNextPC(CMPRES, TMP); | |
| 2155 | |
| 2156 // Calculate offset of pool pointer from the PC. | |
| 2157 const intptr_t object_pool_pc_dist = | |
| 2158 Instructions::HeaderSize() - Instructions::object_pool_offset() + | |
| 2159 compiler->assembler()->CodeSize() - 1 * Instr::kInstrSize; | |
| 2160 | |
| 2161 __ LoadFromOffset(PP, CMPRES, -object_pool_pc_dist); | |
| 2162 } | 2165 } |
| 2163 | 2166 |
| 2164 | 2167 |
| 2165 LocationSummary* CheckStackOverflowInstr::MakeLocationSummary() const { | 2168 LocationSummary* CheckStackOverflowInstr::MakeLocationSummary() const { |
| 2166 const intptr_t kNumInputs = 0; | 2169 const intptr_t kNumInputs = 0; |
| 2167 const intptr_t kNumTemps = 1; | 2170 const intptr_t kNumTemps = 1; |
| 2168 LocationSummary* summary = | 2171 LocationSummary* summary = |
| 2169 new LocationSummary(kNumInputs, | 2172 new LocationSummary(kNumInputs, |
| 2170 kNumTemps, | 2173 kNumTemps, |
| 2171 LocationSummary::kCallOnSlowPath); | 2174 LocationSummary::kCallOnSlowPath); |
| (...skipping 1708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3880 compiler->GenerateCall(token_pos(), | 3883 compiler->GenerateCall(token_pos(), |
| 3881 &label, | 3884 &label, |
| 3882 PcDescriptors::kOther, | 3885 PcDescriptors::kOther, |
| 3883 locs()); | 3886 locs()); |
| 3884 __ Drop(2); // Discard type arguments and receiver. | 3887 __ Drop(2); // Discard type arguments and receiver. |
| 3885 } | 3888 } |
| 3886 | 3889 |
| 3887 } // namespace dart | 3890 } // namespace dart |
| 3888 | 3891 |
| 3889 #endif // defined TARGET_ARCH_MIPS | 3892 #endif // defined TARGET_ARCH_MIPS |
| OLD | NEW |