| 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/flow_graph_compiler.h" | 8 #include "vm/flow_graph_compiler.h" |
| 9 | 9 |
| 10 #include "vm/ast_printer.h" | 10 #include "vm/ast_printer.h" |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 Assembler* assem = compiler->assembler(); | 151 Assembler* assem = compiler->assembler(); |
| 152 #define __ assem-> | 152 #define __ assem-> |
| 153 __ Comment("Deopt stub for id %" Pd "", deopt_id()); | 153 __ Comment("Deopt stub for id %" Pd "", deopt_id()); |
| 154 __ Bind(entry_label()); | 154 __ Bind(entry_label()); |
| 155 if (FLAG_trap_on_deoptimization) __ break_(0); | 155 if (FLAG_trap_on_deoptimization) __ break_(0); |
| 156 | 156 |
| 157 ASSERT(deopt_env() != NULL); | 157 ASSERT(deopt_env() != NULL); |
| 158 | 158 |
| 159 __ BranchLink(&StubCode::DeoptimizeLabel()); | 159 __ BranchLink(&StubCode::DeoptimizeLabel()); |
| 160 set_pc_offset(assem->CodeSize()); | 160 set_pc_offset(assem->CodeSize()); |
| 161 __ break_(0); // TODO(regis): Remove breakpoint to save space. | |
| 162 #undef __ | 161 #undef __ |
| 163 } | 162 } |
| 164 | 163 |
| 165 | 164 |
| 166 #define __ assembler()-> | 165 #define __ assembler()-> |
| 167 | 166 |
| 168 | 167 |
| 169 // Fall through if bool_register contains null. | 168 // Fall through if bool_register contains null. |
| 170 void FlowGraphCompiler::GenerateBoolToJump(Register bool_register, | 169 void FlowGraphCompiler::GenerateBoolToJump(Register bool_register, |
| 171 Label* is_true, | 170 Label* is_true, |
| (...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 763 } | 762 } |
| 764 AllocateRegistersLocally(instr); | 763 AllocateRegistersLocally(instr); |
| 765 } else if (instr->MayThrow() && | 764 } else if (instr->MayThrow() && |
| 766 (CurrentTryIndex() != CatchClauseNode::kInvalidTryIndex)) { | 765 (CurrentTryIndex() != CatchClauseNode::kInvalidTryIndex)) { |
| 767 // Optimized try-block: Sync locals to fixed stack locations. | 766 // Optimized try-block: Sync locals to fixed stack locations. |
| 768 EmitTrySync(instr, CurrentTryIndex()); | 767 EmitTrySync(instr, CurrentTryIndex()); |
| 769 } | 768 } |
| 770 } | 769 } |
| 771 | 770 |
| 772 | 771 |
| 773 // TODO(regis): Pass an offset instead of an Address to avoid addressing | |
| 774 // mode restrictions and remove Operand::Equals() on IA32/X64 and | |
| 775 // Address::Equals() on ARM/MIPS. | |
| 776 void FlowGraphCompiler::EmitTrySyncMove(intptr_t dest_offset, | 772 void FlowGraphCompiler::EmitTrySyncMove(intptr_t dest_offset, |
| 777 Location loc, | 773 Location loc, |
| 778 bool* push_emitted) { | 774 bool* push_emitted) { |
| 779 if (loc.IsConstant()) { | 775 if (loc.IsConstant()) { |
| 780 if (!*push_emitted) { | 776 if (!*push_emitted) { |
| 781 __ Push(T0); | 777 __ Push(T0); |
| 782 *push_emitted = true; | 778 *push_emitted = true; |
| 783 } | 779 } |
| 784 __ LoadObject(T0, loc.constant()); | 780 __ LoadObject(T0, loc.constant()); |
| 785 __ StoreToOffset(T0, FP, dest_offset); | 781 __ StoreToOffset(T0, FP, dest_offset); |
| (...skipping 1219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2005 __ AddImmediate(SP, kDoubleSize); | 2001 __ AddImmediate(SP, kDoubleSize); |
| 2006 } | 2002 } |
| 2007 | 2003 |
| 2008 | 2004 |
| 2009 #undef __ | 2005 #undef __ |
| 2010 | 2006 |
| 2011 | 2007 |
| 2012 } // namespace dart | 2008 } // namespace dart |
| 2013 | 2009 |
| 2014 #endif // defined TARGET_ARCH_MIPS | 2010 #endif // defined TARGET_ARCH_MIPS |
| OLD | NEW |