OLD | NEW |
1 | 1 |
2 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 2 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
3 // for details. All rights reserved. Use of this source code is governed by a | 3 // for details. All rights reserved. Use of this source code is governed by a |
4 // BSD-style license that can be found in the LICENSE file. | 4 // BSD-style license that can be found in the LICENSE file. |
5 | 5 |
6 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM. | 6 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM. |
7 #if defined(TARGET_ARCH_ARM) | 7 #if defined(TARGET_ARCH_ARM) |
8 | 8 |
9 #include "vm/intermediate_language.h" | 9 #include "vm/intermediate_language.h" |
10 | 10 |
(...skipping 7138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7149 | 7149 |
7150 | 7150 |
7151 Condition StrictCompareInstr::EmitComparisonCode(FlowGraphCompiler* compiler, | 7151 Condition StrictCompareInstr::EmitComparisonCode(FlowGraphCompiler* compiler, |
7152 BranchLabels labels) { | 7152 BranchLabels labels) { |
7153 Location left = locs()->in(0); | 7153 Location left = locs()->in(0); |
7154 Location right = locs()->in(1); | 7154 Location right = locs()->in(1); |
7155 ASSERT(!left.IsConstant() || !right.IsConstant()); | 7155 ASSERT(!left.IsConstant() || !right.IsConstant()); |
7156 Condition true_condition; | 7156 Condition true_condition; |
7157 if (left.IsConstant()) { | 7157 if (left.IsConstant()) { |
7158 true_condition = compiler->EmitEqualityRegConstCompare( | 7158 true_condition = compiler->EmitEqualityRegConstCompare( |
7159 right.reg(), left.constant(), needs_number_check(), token_pos()); | 7159 right.reg(), left.constant(), needs_number_check(), token_pos(), |
| 7160 deopt_id_); |
7160 } else if (right.IsConstant()) { | 7161 } else if (right.IsConstant()) { |
7161 true_condition = compiler->EmitEqualityRegConstCompare( | 7162 true_condition = compiler->EmitEqualityRegConstCompare( |
7162 left.reg(), right.constant(), needs_number_check(), token_pos()); | 7163 left.reg(), right.constant(), needs_number_check(), token_pos(), |
| 7164 deopt_id_); |
7163 } else { | 7165 } else { |
7164 true_condition = compiler->EmitEqualityRegRegCompare( | 7166 true_condition = compiler->EmitEqualityRegRegCompare( |
7165 left.reg(), right.reg(), needs_number_check(), token_pos()); | 7167 left.reg(), right.reg(), needs_number_check(), token_pos(), deopt_id_); |
7166 } | 7168 } |
7167 if (kind() != Token::kEQ_STRICT) { | 7169 if (kind() != Token::kEQ_STRICT) { |
7168 ASSERT(kind() == Token::kNE_STRICT); | 7170 ASSERT(kind() == Token::kNE_STRICT); |
7169 true_condition = NegateCondition(true_condition); | 7171 true_condition = NegateCondition(true_condition); |
7170 } | 7172 } |
7171 return true_condition; | 7173 return true_condition; |
7172 } | 7174 } |
7173 | 7175 |
7174 | 7176 |
7175 void StrictCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 7177 void StrictCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7225 compiler->GenerateCall(token_pos(), stub_entry, RawPcDescriptors::kOther, | 7227 compiler->GenerateCall(token_pos(), stub_entry, RawPcDescriptors::kOther, |
7226 locs()); | 7228 locs()); |
7227 compiler->AddStubCallTarget(stub); | 7229 compiler->AddStubCallTarget(stub); |
7228 __ Drop(ArgumentCount()); // Discard arguments. | 7230 __ Drop(ArgumentCount()); // Discard arguments. |
7229 } | 7231 } |
7230 | 7232 |
7231 | 7233 |
7232 void DebugStepCheckInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 7234 void DebugStepCheckInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
7233 ASSERT(!compiler->is_optimizing()); | 7235 ASSERT(!compiler->is_optimizing()); |
7234 __ BranchLinkPatchable(*StubCode::DebugStepCheck_entry()); | 7236 __ BranchLinkPatchable(*StubCode::DebugStepCheck_entry()); |
7235 compiler->AddCurrentDescriptor(stub_kind_, Thread::kNoDeoptId, token_pos()); | 7237 compiler->AddCurrentDescriptor(stub_kind_, deopt_id_, token_pos()); |
7236 compiler->RecordSafepoint(locs()); | 7238 compiler->RecordSafepoint(locs()); |
7237 } | 7239 } |
7238 | 7240 |
7239 | 7241 |
7240 LocationSummary* GrowRegExpStackInstr::MakeLocationSummary(Zone* zone, | 7242 LocationSummary* GrowRegExpStackInstr::MakeLocationSummary(Zone* zone, |
7241 bool opt) const { | 7243 bool opt) const { |
7242 const intptr_t kNumInputs = 1; | 7244 const intptr_t kNumInputs = 1; |
7243 const intptr_t kNumTemps = 0; | 7245 const intptr_t kNumTemps = 0; |
7244 LocationSummary* locs = new (zone) | 7246 LocationSummary* locs = new (zone) |
7245 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall); | 7247 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall); |
(...skipping 11 matching lines...) Expand all Loading... |
7257 compiler->GenerateRuntimeCall(TokenPosition::kNoSource, deopt_id(), | 7259 compiler->GenerateRuntimeCall(TokenPosition::kNoSource, deopt_id(), |
7258 kGrowRegExpStackRuntimeEntry, 1, locs()); | 7260 kGrowRegExpStackRuntimeEntry, 1, locs()); |
7259 __ Drop(1); | 7261 __ Drop(1); |
7260 __ Pop(result); | 7262 __ Pop(result); |
7261 } | 7263 } |
7262 | 7264 |
7263 | 7265 |
7264 } // namespace dart | 7266 } // namespace dart |
7265 | 7267 |
7266 #endif // defined TARGET_ARCH_ARM | 7268 #endif // defined TARGET_ARCH_ARM |
OLD | NEW |