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 3140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3151 Register result = locs->out(0).reg(); | 3151 Register result = locs->out(0).reg(); |
3152 locs->live_registers()->Remove(Location::RegisterLocation(result)); | 3152 locs->live_registers()->Remove(Location::RegisterLocation(result)); |
3153 | 3153 |
3154 compiler->SaveLiveRegisters(locs); | 3154 compiler->SaveLiveRegisters(locs); |
3155 if (instruction_->env() != NULL) { | 3155 if (instruction_->env() != NULL) { |
3156 Environment* env = compiler->SlowPathEnvironmentFor(instruction_); | 3156 Environment* env = compiler->SlowPathEnvironmentFor(instruction_); |
3157 compiler->pending_deoptimization_env_ = env; | 3157 compiler->pending_deoptimization_env_ = env; |
3158 } | 3158 } |
3159 __ Push(locs->in(0).reg()); | 3159 __ Push(locs->in(0).reg()); |
3160 __ Push(locs->in(1).reg()); | 3160 __ Push(locs->in(1).reg()); |
| 3161 const String& selector = |
| 3162 String::Handle(instruction_->call()->ic_data()->target_name()); |
| 3163 const Array& argument_names = |
| 3164 Array::Handle(instruction_->call()->ic_data()->arguments_descriptor()); |
3161 compiler->EmitMegamorphicInstanceCall( | 3165 compiler->EmitMegamorphicInstanceCall( |
3162 *instruction_->call()->ic_data(), instruction_->call()->ArgumentCount(), | 3166 selector, argument_names, instruction_->call()->ArgumentCount(), |
3163 instruction_->call()->deopt_id(), instruction_->call()->token_pos(), | 3167 instruction_->call()->deopt_id(), instruction_->call()->token_pos(), |
3164 locs, try_index_, | 3168 locs, try_index_, |
3165 /* slow_path_argument_count = */ 2); | 3169 /* slow_path_argument_count = */ 2); |
3166 __ mov(result, Operand(R0)); | 3170 __ mov(result, Operand(R0)); |
3167 compiler->RestoreLiveRegisters(locs); | 3171 compiler->RestoreLiveRegisters(locs); |
3168 __ b(exit_label()); | 3172 __ b(exit_label()); |
3169 compiler->pending_deoptimization_env_ = NULL; | 3173 compiler->pending_deoptimization_env_ = NULL; |
3170 } | 3174 } |
3171 | 3175 |
3172 private: | 3176 private: |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3290 Register result = merged_ ? locs->temp(0).reg() : locs->out(0).reg(); | 3294 Register result = merged_ ? locs->temp(0).reg() : locs->out(0).reg(); |
3291 locs->live_registers()->Remove(Location::RegisterLocation(result)); | 3295 locs->live_registers()->Remove(Location::RegisterLocation(result)); |
3292 | 3296 |
3293 compiler->SaveLiveRegisters(locs); | 3297 compiler->SaveLiveRegisters(locs); |
3294 if (instruction_->env() != NULL) { | 3298 if (instruction_->env() != NULL) { |
3295 Environment* env = compiler->SlowPathEnvironmentFor(instruction_); | 3299 Environment* env = compiler->SlowPathEnvironmentFor(instruction_); |
3296 compiler->pending_deoptimization_env_ = env; | 3300 compiler->pending_deoptimization_env_ = env; |
3297 } | 3301 } |
3298 __ Push(locs->in(0).reg()); | 3302 __ Push(locs->in(0).reg()); |
3299 __ Push(locs->in(1).reg()); | 3303 __ Push(locs->in(1).reg()); |
| 3304 String& selector = |
| 3305 String::Handle(instruction_->call()->ic_data()->target_name()); |
| 3306 Array& argument_names = |
| 3307 Array::Handle(instruction_->call()->ic_data()->arguments_descriptor()); |
3300 compiler->EmitMegamorphicInstanceCall( | 3308 compiler->EmitMegamorphicInstanceCall( |
3301 *instruction_->call()->ic_data(), instruction_->call()->ArgumentCount(), | 3309 selector, argument_names, instruction_->call()->ArgumentCount(), |
3302 instruction_->call()->deopt_id(), instruction_->call()->token_pos(), | 3310 instruction_->call()->deopt_id(), instruction_->call()->token_pos(), |
3303 locs, try_index_, | 3311 locs, try_index_, |
3304 /* slow_path_argument_count = */ 2); | 3312 /* slow_path_argument_count = */ 2); |
3305 __ mov(result, Operand(R0)); | 3313 __ mov(result, Operand(R0)); |
3306 compiler->RestoreLiveRegisters(locs); | 3314 compiler->RestoreLiveRegisters(locs); |
3307 compiler->pending_deoptimization_env_ = NULL; | 3315 compiler->pending_deoptimization_env_ = NULL; |
3308 if (merged_) { | 3316 if (merged_) { |
3309 __ CompareObject(result, Bool::True()); | 3317 __ CompareObject(result, Bool::True()); |
3310 __ b( | 3318 __ b( |
3311 instruction_->is_negated() ? labels_.false_label : labels_.true_label, | 3319 instruction_->is_negated() ? labels_.false_label : labels_.true_label, |
(...skipping 3969 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7281 compiler->GenerateRuntimeCall(TokenPosition::kNoSource, deopt_id(), | 7289 compiler->GenerateRuntimeCall(TokenPosition::kNoSource, deopt_id(), |
7282 kGrowRegExpStackRuntimeEntry, 1, locs()); | 7290 kGrowRegExpStackRuntimeEntry, 1, locs()); |
7283 __ Drop(1); | 7291 __ Drop(1); |
7284 __ Pop(result); | 7292 __ Pop(result); |
7285 } | 7293 } |
7286 | 7294 |
7287 | 7295 |
7288 } // namespace dart | 7296 } // namespace dart |
7289 | 7297 |
7290 #endif // defined TARGET_ARCH_ARM | 7298 #endif // defined TARGET_ARCH_ARM |
OLD | NEW |