OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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_XXX. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_XXX. |
6 | 6 |
7 #include "vm/flow_graph_compiler.h" | 7 #include "vm/flow_graph_compiler.h" |
8 | 8 |
9 #include "vm/cha.h" | 9 #include "vm/cha.h" |
10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 exception_handlers_list_(NULL), | 143 exception_handlers_list_(NULL), |
144 pc_descriptors_list_(NULL), | 144 pc_descriptors_list_(NULL), |
145 stackmap_table_builder_( | 145 stackmap_table_builder_( |
146 is_optimizing ? new StackmapTableBuilder() : NULL), | 146 is_optimizing ? new StackmapTableBuilder() : NULL), |
147 block_info_(block_order_.length()), | 147 block_info_(block_order_.length()), |
148 deopt_infos_(), | 148 deopt_infos_(), |
149 static_calls_target_table_(GrowableObjectArray::ZoneHandle( | 149 static_calls_target_table_(GrowableObjectArray::ZoneHandle( |
150 GrowableObjectArray::New())), | 150 GrowableObjectArray::New())), |
151 is_optimizing_(is_optimizing), | 151 is_optimizing_(is_optimizing), |
152 may_reoptimize_(false), | 152 may_reoptimize_(false), |
153 bool_true_(Bool::ZoneHandle(Bool::True())), | |
154 bool_false_(Bool::ZoneHandle(Bool::False())), | |
155 double_class_(Class::ZoneHandle( | 153 double_class_(Class::ZoneHandle( |
156 Isolate::Current()->object_store()->double_class())), | 154 Isolate::Current()->object_store()->double_class())), |
157 parallel_move_resolver_(this) { | 155 parallel_move_resolver_(this) { |
158 ASSERT(assembler != NULL); | 156 ASSERT(assembler != NULL); |
159 } | 157 } |
160 | 158 |
161 | 159 |
162 FlowGraphCompiler::~FlowGraphCompiler() { | 160 FlowGraphCompiler::~FlowGraphCompiler() { |
163 // BlockInfos are zone-allocated, so their destructors are not called. | 161 // BlockInfos are zone-allocated, so their destructors are not called. |
164 // Verify the labels explicitly here. | 162 // Verify the labels explicitly here. |
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
722 | 720 |
723 void FlowGraphCompiler::EmitDoubleCompareBool(Condition true_condition, | 721 void FlowGraphCompiler::EmitDoubleCompareBool(Condition true_condition, |
724 XmmRegister left, | 722 XmmRegister left, |
725 XmmRegister right, | 723 XmmRegister right, |
726 Register result) { | 724 Register result) { |
727 assembler()->comisd(left, right); | 725 assembler()->comisd(left, right); |
728 Label is_false, is_true, done; | 726 Label is_false, is_true, done; |
729 assembler()->j(PARITY_EVEN, &is_false, Assembler::kNearJump); // NaN false; | 727 assembler()->j(PARITY_EVEN, &is_false, Assembler::kNearJump); // NaN false; |
730 assembler()->j(true_condition, &is_true, Assembler::kNearJump); | 728 assembler()->j(true_condition, &is_true, Assembler::kNearJump); |
731 assembler()->Bind(&is_false); | 729 assembler()->Bind(&is_false); |
732 assembler()->LoadObject(result, bool_false()); | 730 assembler()->LoadObject(result, Bool::False()); |
733 assembler()->jmp(&done); | 731 assembler()->jmp(&done); |
734 assembler()->Bind(&is_true); | 732 assembler()->Bind(&is_true); |
735 assembler()->LoadObject(result, bool_true()); | 733 assembler()->LoadObject(result, Bool::True()); |
736 assembler()->Bind(&done); | 734 assembler()->Bind(&done); |
737 } | 735 } |
738 | 736 |
739 | 737 |
740 // Allocate a register that is not explicitly blocked. | 738 // Allocate a register that is not explicitly blocked. |
741 static Register AllocateFreeRegister(bool* blocked_registers) { | 739 static Register AllocateFreeRegister(bool* blocked_registers) { |
742 for (intptr_t regno = 0; regno < kNumberOfCpuRegisters; regno++) { | 740 for (intptr_t regno = 0; regno < kNumberOfCpuRegisters; regno++) { |
743 if (!blocked_registers[regno]) { | 741 if (!blocked_registers[regno]) { |
744 blocked_registers[regno] = true; | 742 blocked_registers[regno] = true; |
745 return static_cast<Register>(regno); | 743 return static_cast<Register>(regno); |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1074 const AbstractTypeArguments& type_arguments = | 1072 const AbstractTypeArguments& type_arguments = |
1075 AbstractTypeArguments::Handle(type.arguments()); | 1073 AbstractTypeArguments::Handle(type.arguments()); |
1076 const bool is_raw_type = type_arguments.IsNull() || | 1074 const bool is_raw_type = type_arguments.IsNull() || |
1077 type_arguments.IsRaw(type_arguments.Length()); | 1075 type_arguments.IsRaw(type_arguments.Length()); |
1078 return is_raw_type; | 1076 return is_raw_type; |
1079 } | 1077 } |
1080 return true; | 1078 return true; |
1081 } | 1079 } |
1082 | 1080 |
1083 } // namespace dart | 1081 } // namespace dart |
OLD | NEW |