OLD | NEW |
1 // Copyright (c) 2012, 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_ARM. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM. |
6 #if defined(TARGET_ARCH_ARM) | 6 #if defined(TARGET_ARCH_ARM) |
7 | 7 |
8 #include "vm/flow_graph_compiler.h" | 8 #include "vm/flow_graph_compiler.h" |
9 | 9 |
10 #include "vm/longjump.h" | 10 #include "vm/longjump.h" |
11 | 11 |
12 namespace dart { | 12 namespace dart { |
13 | 13 |
| 14 |
| 15 FlowGraphCompiler::~FlowGraphCompiler() { |
| 16 // BlockInfos are zone-allocated, so their destructors are not called. |
| 17 // Verify the labels explicitly here. |
| 18 for (int i = 0; i < block_info_.length(); ++i) { |
| 19 ASSERT(!block_info_[i]->label.IsLinked()); |
| 20 } |
| 21 } |
| 22 |
| 23 |
| 24 bool FlowGraphCompiler::SupportsUnboxedMints() { |
| 25 return false; |
| 26 } |
| 27 |
| 28 |
| 29 void CompilerDeoptInfoWithStub::GenerateCode(FlowGraphCompiler* compiler, |
| 30 intptr_t stub_ix) { |
| 31 UNIMPLEMENTED(); |
| 32 } |
| 33 |
| 34 |
| 35 void FlowGraphCompiler::GenerateBoolToJump(Register bool_register, |
| 36 Label* is_true, |
| 37 Label* is_false) { |
| 38 UNIMPLEMENTED(); |
| 39 } |
| 40 |
| 41 |
| 42 RawSubtypeTestCache* FlowGraphCompiler::GenerateCallSubtypeTestStub( |
| 43 TypeTestStubKind test_kind, |
| 44 Register instance_reg, |
| 45 Register type_arguments_reg, |
| 46 Register temp_reg, |
| 47 Label* is_instance_lbl, |
| 48 Label* is_not_instance_lbl) { |
| 49 UNIMPLEMENTED(); |
| 50 return NULL; |
| 51 } |
| 52 |
| 53 |
| 54 RawSubtypeTestCache* |
| 55 FlowGraphCompiler::GenerateInstantiatedTypeWithArgumentsTest( |
| 56 intptr_t token_pos, |
| 57 const AbstractType& type, |
| 58 Label* is_instance_lbl, |
| 59 Label* is_not_instance_lbl) { |
| 60 UNIMPLEMENTED(); |
| 61 return NULL; |
| 62 } |
| 63 |
| 64 |
| 65 void FlowGraphCompiler::CheckClassIds(Register class_id_reg, |
| 66 const GrowableArray<intptr_t>& class_ids, |
| 67 Label* is_equal_lbl, |
| 68 Label* is_not_equal_lbl) { |
| 69 UNIMPLEMENTED(); |
| 70 } |
| 71 |
| 72 |
| 73 bool FlowGraphCompiler::GenerateInstantiatedTypeNoArgumentsTest( |
| 74 intptr_t token_pos, |
| 75 const AbstractType& type, |
| 76 Label* is_instance_lbl, |
| 77 Label* is_not_instance_lbl) { |
| 78 UNIMPLEMENTED(); |
| 79 return false; |
| 80 } |
| 81 |
| 82 |
| 83 RawSubtypeTestCache* FlowGraphCompiler::GenerateSubtype1TestCacheLookup( |
| 84 intptr_t token_pos, |
| 85 const Class& type_class, |
| 86 Label* is_instance_lbl, |
| 87 Label* is_not_instance_lbl) { |
| 88 UNIMPLEMENTED(); |
| 89 return NULL; |
| 90 } |
| 91 |
| 92 |
| 93 RawSubtypeTestCache* FlowGraphCompiler::GenerateUninstantiatedTypeTest( |
| 94 intptr_t token_pos, |
| 95 const AbstractType& type, |
| 96 Label* is_instance_lbl, |
| 97 Label* is_not_instance_lbl) { |
| 98 UNIMPLEMENTED(); |
| 99 return NULL; |
| 100 } |
| 101 |
| 102 |
| 103 RawSubtypeTestCache* FlowGraphCompiler::GenerateInlineInstanceof( |
| 104 intptr_t token_pos, |
| 105 const AbstractType& type, |
| 106 Label* is_instance_lbl, |
| 107 Label* is_not_instance_lbl) { |
| 108 UNIMPLEMENTED(); |
| 109 return NULL; |
| 110 } |
| 111 |
| 112 |
| 113 void FlowGraphCompiler::GenerateInstanceOf(intptr_t token_pos, |
| 114 const AbstractType& type, |
| 115 bool negate_result, |
| 116 LocationSummary* locs) { |
| 117 UNIMPLEMENTED(); |
| 118 } |
| 119 |
| 120 |
| 121 void FlowGraphCompiler::GenerateAssertAssignable(intptr_t token_pos, |
| 122 const AbstractType& dst_type, |
| 123 const String& dst_name, |
| 124 LocationSummary* locs) { |
| 125 UNIMPLEMENTED(); |
| 126 } |
| 127 |
| 128 |
| 129 void FlowGraphCompiler::EmitInstructionPrologue(Instruction* instr) { |
| 130 UNIMPLEMENTED(); |
| 131 } |
| 132 |
| 133 |
| 134 void FlowGraphCompiler::EmitInstructionEpilogue(Instruction* instr) { |
| 135 UNIMPLEMENTED(); |
| 136 } |
| 137 |
| 138 |
| 139 void FlowGraphCompiler::CopyParameters() { |
| 140 UNIMPLEMENTED(); |
| 141 } |
| 142 |
| 143 |
| 144 void FlowGraphCompiler::GenerateInlinedGetter(intptr_t offset) { |
| 145 UNIMPLEMENTED(); |
| 146 } |
| 147 |
| 148 |
| 149 void FlowGraphCompiler::GenerateInlinedSetter(intptr_t offset) { |
| 150 UNIMPLEMENTED(); |
| 151 } |
| 152 |
| 153 |
| 154 void FlowGraphCompiler::EmitFrameEntry() { |
| 155 UNIMPLEMENTED(); |
| 156 } |
| 157 |
| 158 |
14 void FlowGraphCompiler::CompileGraph() { | 159 void FlowGraphCompiler::CompileGraph() { |
15 UNIMPLEMENTED(); | 160 UNIMPLEMENTED(); |
16 } | 161 } |
17 | 162 |
18 | 163 |
19 void FlowGraphCompiler::FinalizePcDescriptors(const Code& code) { | 164 void FlowGraphCompiler::GenerateCall(intptr_t token_pos, |
20 UNIMPLEMENTED(); | 165 const ExternalLabel* label, |
21 } | 166 PcDescriptors::Kind kind, |
22 | 167 LocationSummary* locs) { |
23 | 168 UNIMPLEMENTED(); |
24 void FlowGraphCompiler::FinalizeStackmaps(const Code& code) { | 169 } |
25 UNIMPLEMENTED(); | 170 |
26 } | 171 |
27 | 172 void FlowGraphCompiler::GenerateDartCall(intptr_t deopt_id, |
28 | 173 intptr_t token_pos, |
29 void FlowGraphCompiler::FinalizeVarDescriptors(const Code& code) { | 174 const ExternalLabel* label, |
30 UNIMPLEMENTED(); | 175 PcDescriptors::Kind kind, |
31 } | 176 LocationSummary* locs) { |
32 | 177 UNIMPLEMENTED(); |
33 | 178 } |
34 void FlowGraphCompiler::FinalizeExceptionHandlers(const Code& code) { | 179 |
35 UNIMPLEMENTED(); | 180 |
36 } | 181 void FlowGraphCompiler::GenerateCallRuntime(intptr_t token_pos, |
37 | 182 const RuntimeEntry& entry, |
38 | 183 LocationSummary* locs) { |
39 void FlowGraphCompiler::FinalizeComments(const Code& code) { | 184 UNIMPLEMENTED(); |
40 UNIMPLEMENTED(); | 185 } |
41 } | 186 |
| 187 |
| 188 void FlowGraphCompiler::EmitOptimizedInstanceCall( |
| 189 ExternalLabel* target_label, |
| 190 const ICData& ic_data, |
| 191 const Array& arguments_descriptor, |
| 192 intptr_t argument_count, |
| 193 intptr_t deopt_id, |
| 194 intptr_t token_pos, |
| 195 LocationSummary* locs) { |
| 196 UNIMPLEMENTED(); |
| 197 } |
| 198 |
| 199 |
| 200 void FlowGraphCompiler::EmitInstanceCall(ExternalLabel* target_label, |
| 201 const ICData& ic_data, |
| 202 const Array& arguments_descriptor, |
| 203 intptr_t argument_count, |
| 204 intptr_t deopt_id, |
| 205 intptr_t token_pos, |
| 206 LocationSummary* locs) { |
| 207 UNIMPLEMENTED(); |
| 208 } |
| 209 |
| 210 |
| 211 void FlowGraphCompiler::EmitMegamorphicInstanceCall( |
| 212 const ICData& ic_data, |
| 213 const Array& arguments_descriptor, |
| 214 intptr_t argument_count, |
| 215 intptr_t deopt_id, |
| 216 intptr_t token_pos, |
| 217 LocationSummary* locs) { |
| 218 UNIMPLEMENTED(); |
| 219 } |
| 220 |
| 221 |
| 222 void FlowGraphCompiler::EmitStaticCall(const Function& function, |
| 223 const Array& arguments_descriptor, |
| 224 intptr_t argument_count, |
| 225 intptr_t deopt_id, |
| 226 intptr_t token_pos, |
| 227 LocationSummary* locs) { |
| 228 UNIMPLEMENTED(); |
| 229 } |
| 230 |
| 231 |
| 232 void FlowGraphCompiler::EmitEqualityRegConstCompare(Register reg, |
| 233 const Object& obj, |
| 234 bool needs_number_check) { |
| 235 UNIMPLEMENTED(); |
| 236 } |
| 237 |
| 238 |
| 239 void FlowGraphCompiler::EmitEqualityRegRegCompare(Register left, |
| 240 Register right, |
| 241 bool needs_number_check) { |
| 242 UNIMPLEMENTED(); |
| 243 } |
| 244 |
| 245 |
| 246 void FlowGraphCompiler::EmitSuperEqualityCallPrologue(Register result, |
| 247 Label* skip_call) { |
| 248 UNIMPLEMENTED(); |
| 249 } |
| 250 |
| 251 |
| 252 void FlowGraphCompiler::SaveLiveRegisters(LocationSummary* locs) { |
| 253 UNIMPLEMENTED(); |
| 254 } |
| 255 |
| 256 |
| 257 void FlowGraphCompiler::RestoreLiveRegisters(LocationSummary* locs) { |
| 258 UNIMPLEMENTED(); |
| 259 } |
| 260 |
| 261 |
| 262 void FlowGraphCompiler::EmitTestAndCall(const ICData& ic_data, |
| 263 Register class_id_reg, |
| 264 intptr_t arg_count, |
| 265 const Array& arg_names, |
| 266 Label* deopt, |
| 267 intptr_t deopt_id, |
| 268 intptr_t token_index, |
| 269 LocationSummary* locs) { |
| 270 UNIMPLEMENTED(); |
| 271 } |
| 272 |
| 273 |
| 274 void FlowGraphCompiler::EmitDoubleCompareBranch(Condition true_condition, |
| 275 FpuRegister left, |
| 276 FpuRegister right, |
| 277 BranchInstr* branch) { |
| 278 UNIMPLEMENTED(); |
| 279 } |
| 280 |
| 281 |
| 282 void FlowGraphCompiler::EmitDoubleCompareBool(Condition true_condition, |
| 283 FpuRegister left, |
| 284 FpuRegister right, |
| 285 Register result) { |
| 286 UNIMPLEMENTED(); |
| 287 } |
| 288 |
| 289 |
| 290 Condition FlowGraphCompiler::FlipCondition(Condition condition) { |
| 291 UNIMPLEMENTED(); |
| 292 return condition; |
| 293 } |
| 294 |
| 295 |
| 296 bool FlowGraphCompiler::EvaluateCondition(Condition condition, |
| 297 intptr_t left, |
| 298 intptr_t right) { |
| 299 UNIMPLEMENTED(); |
| 300 return false; |
| 301 } |
| 302 |
| 303 |
| 304 FieldAddress FlowGraphCompiler::ElementAddressForIntIndex(intptr_t cid, |
| 305 Register array, |
| 306 intptr_t index) { |
| 307 UNIMPLEMENTED(); |
| 308 return FieldAddress(array, index); |
| 309 } |
| 310 |
| 311 |
| 312 FieldAddress FlowGraphCompiler::ElementAddressForRegIndex(intptr_t cid, |
| 313 Register array, |
| 314 Register index) { |
| 315 UNIMPLEMENTED(); |
| 316 return FieldAddress(array, index); |
| 317 } |
| 318 |
| 319 |
| 320 void ParallelMoveResolver::EmitMove(int index) { |
| 321 UNIMPLEMENTED(); |
| 322 } |
| 323 |
| 324 |
| 325 void ParallelMoveResolver::EmitSwap(int index) { |
| 326 UNIMPLEMENTED(); |
| 327 } |
| 328 |
| 329 |
| 330 void ParallelMoveResolver::MoveMemoryToMemory(const Address& dst, |
| 331 const Address& src) { |
| 332 UNIMPLEMENTED(); |
| 333 } |
| 334 |
| 335 |
| 336 void ParallelMoveResolver::StoreObject(const Address& dst, const Object& obj) { |
| 337 UNIMPLEMENTED(); |
| 338 } |
| 339 |
| 340 |
| 341 void ParallelMoveResolver::Exchange(Register reg, const Address& mem) { |
| 342 UNIMPLEMENTED(); |
| 343 } |
| 344 |
| 345 |
| 346 void ParallelMoveResolver::Exchange(const Address& mem1, const Address& mem2) { |
| 347 UNIMPLEMENTED(); |
| 348 } |
| 349 |
42 | 350 |
43 } // namespace dart | 351 } // namespace dart |
44 | 352 |
45 #endif // defined TARGET_ARCH_ARM | 353 #endif // defined TARGET_ARCH_ARM |
OLD | NEW |