| 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 6345 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 6356                                   bool use_near_jump) { | 6356                                   bool use_near_jump) { | 
| 6357   Register biased_cid = locs()->temp(0).reg(); | 6357   Register biased_cid = locs()->temp(0).reg(); | 
| 6358   Condition no_match, match; | 6358   Condition no_match, match; | 
| 6359   if (cid_start == cid_end) { | 6359   if (cid_start == cid_end) { | 
| 6360     __ CompareImmediate(biased_cid, cid_start - bias); | 6360     __ CompareImmediate(biased_cid, cid_start - bias); | 
| 6361     no_match = NE; | 6361     no_match = NE; | 
| 6362     match = EQ; | 6362     match = EQ; | 
| 6363   } else { | 6363   } else { | 
| 6364     // For class ID ranges use a subtract followed by an unsigned | 6364     // For class ID ranges use a subtract followed by an unsigned | 
| 6365     // comparison to check both ends of the ranges with one comparison. | 6365     // comparison to check both ends of the ranges with one comparison. | 
| 6366     __ AddImmediate(biased_cid, biased_cid, bias - cid_start); | 6366     __ AddImmediate(biased_cid, bias - cid_start); | 
| 6367     bias = cid_start; | 6367     bias = cid_start; | 
| 6368     __ CompareImmediate(biased_cid, cid_end - cid_start); | 6368     __ CompareImmediate(biased_cid, cid_end - cid_start); | 
| 6369     no_match = HI;  // Unsigned higher. | 6369     no_match = HI;  // Unsigned higher. | 
| 6370     match = LS;     // Unsigned lower or same. | 6370     match = LS;     // Unsigned lower or same. | 
| 6371   } | 6371   } | 
| 6372   if (is_last) { | 6372   if (is_last) { | 
| 6373     __ b(deopt, no_match); | 6373     __ b(deopt, no_match); | 
| 6374   } else { | 6374   } else { | 
| 6375     __ b(is_ok, match); | 6375     __ b(is_ok, match); | 
| 6376   } | 6376   } | 
| (...skipping 724 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 7101   return summary; | 7101   return summary; | 
| 7102 } | 7102 } | 
| 7103 | 7103 | 
| 7104 | 7104 | 
| 7105 void IndirectGotoInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 7105 void IndirectGotoInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 
| 7106   Register target_address_reg = locs()->temp_slot(0)->reg(); | 7106   Register target_address_reg = locs()->temp_slot(0)->reg(); | 
| 7107 | 7107 | 
| 7108   // Offset is relative to entry pc. | 7108   // Offset is relative to entry pc. | 
| 7109   const intptr_t entry_to_pc_offset = __ CodeSize() + Instr::kPCReadOffset; | 7109   const intptr_t entry_to_pc_offset = __ CodeSize() + Instr::kPCReadOffset; | 
| 7110   __ mov(target_address_reg, Operand(PC)); | 7110   __ mov(target_address_reg, Operand(PC)); | 
| 7111   __ AddImmediate(target_address_reg, target_address_reg, -entry_to_pc_offset); | 7111   __ AddImmediate(target_address_reg, -entry_to_pc_offset); | 
| 7112   // Add the offset. | 7112   // Add the offset. | 
| 7113   Register offset_reg = locs()->in(0).reg(); | 7113   Register offset_reg = locs()->in(0).reg(); | 
| 7114   Operand offset_opr = (offset()->definition()->representation() == kTagged) | 7114   Operand offset_opr = (offset()->definition()->representation() == kTagged) | 
| 7115                            ? Operand(offset_reg, ASR, kSmiTagSize) | 7115                            ? Operand(offset_reg, ASR, kSmiTagSize) | 
| 7116                            : Operand(offset_reg); | 7116                            : Operand(offset_reg); | 
| 7117   __ add(target_address_reg, target_address_reg, offset_opr); | 7117   __ add(target_address_reg, target_address_reg, offset_opr); | 
| 7118 | 7118 | 
| 7119   // Jump to the absolute address. | 7119   // Jump to the absolute address. | 
| 7120   __ bx(target_address_reg); | 7120   __ bx(target_address_reg); | 
| 7121 } | 7121 } | 
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 7269   compiler->GenerateRuntimeCall(TokenPosition::kNoSource, deopt_id(), | 7269   compiler->GenerateRuntimeCall(TokenPosition::kNoSource, deopt_id(), | 
| 7270                                 kGrowRegExpStackRuntimeEntry, 1, locs()); | 7270                                 kGrowRegExpStackRuntimeEntry, 1, locs()); | 
| 7271   __ Drop(1); | 7271   __ Drop(1); | 
| 7272   __ Pop(result); | 7272   __ Pop(result); | 
| 7273 } | 7273 } | 
| 7274 | 7274 | 
| 7275 | 7275 | 
| 7276 }  // namespace dart | 7276 }  // namespace dart | 
| 7277 | 7277 | 
| 7278 #endif  // defined TARGET_ARCH_ARM | 7278 #endif  // defined TARGET_ARCH_ARM | 
| OLD | NEW | 
|---|