| 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 // Class for intrinsifying functions. | 4 // Class for intrinsifying functions. |
| 5 | 5 |
| 6 #include "vm/assembler.h" | 6 #include "vm/assembler.h" |
| 7 #include "vm/compiler.h" | 7 #include "vm/compiler.h" |
| 8 #include "vm/cpu.h" | 8 #include "vm/cpu.h" |
| 9 #include "vm/flags.h" | 9 #include "vm/flags.h" |
| 10 #include "vm/flow_graph.h" | 10 #include "vm/flow_graph.h" |
| (...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 600 Definition* index = builder.AddParameter(2); | 600 Definition* index = builder.AddParameter(2); |
| 601 Definition* array = builder.AddParameter(3); | 601 Definition* array = builder.AddParameter(3); |
| 602 | 602 |
| 603 PrepareIndexedOp(&builder, array, index, TypedData::length_offset()); | 603 PrepareIndexedOp(&builder, array, index, TypedData::length_offset()); |
| 604 | 604 |
| 605 const ICData& value_check = ICData::ZoneHandle(ICData::New( | 605 const ICData& value_check = ICData::ZoneHandle(ICData::New( |
| 606 flow_graph->function(), | 606 flow_graph->function(), |
| 607 String::Handle(flow_graph->function().name()), | 607 String::Handle(flow_graph->function().name()), |
| 608 Object::empty_array(), // Dummy args. descr. | 608 Object::empty_array(), // Dummy args. descr. |
| 609 Thread::kNoDeoptId, | 609 Thread::kNoDeoptId, |
| 610 1)); | 610 1, |
| 611 false)); |
| 611 value_check.AddReceiverCheck(kDoubleCid, flow_graph->function()); | 612 value_check.AddReceiverCheck(kDoubleCid, flow_graph->function()); |
| 612 builder.AddInstruction( | 613 builder.AddInstruction( |
| 613 new CheckClassInstr(new Value(value), | 614 new CheckClassInstr(new Value(value), |
| 614 Thread::kNoDeoptId, | 615 Thread::kNoDeoptId, |
| 615 value_check, | 616 value_check, |
| 616 builder.TokenPos())); | 617 builder.TokenPos())); |
| 617 Definition* double_value = | 618 Definition* double_value = |
| 618 builder.AddUnboxInstr(kUnboxedDouble, | 619 builder.AddUnboxInstr(kUnboxedDouble, |
| 619 new Value(value), | 620 new Value(value), |
| 620 /* is_checked = */ true); | 621 /* is_checked = */ true); |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 733 BlockBuilder builder(flow_graph, normal_entry); | 734 BlockBuilder builder(flow_graph, normal_entry); |
| 734 | 735 |
| 735 Definition* right = builder.AddParameter(1); | 736 Definition* right = builder.AddParameter(1); |
| 736 Definition* left = builder.AddParameter(2); | 737 Definition* left = builder.AddParameter(2); |
| 737 | 738 |
| 738 const ICData& value_check = ICData::ZoneHandle(ICData::New( | 739 const ICData& value_check = ICData::ZoneHandle(ICData::New( |
| 739 flow_graph->function(), | 740 flow_graph->function(), |
| 740 String::Handle(flow_graph->function().name()), | 741 String::Handle(flow_graph->function().name()), |
| 741 Object::empty_array(), // Dummy args. descr. | 742 Object::empty_array(), // Dummy args. descr. |
| 742 Thread::kNoDeoptId, | 743 Thread::kNoDeoptId, |
| 743 1)); | 744 1, |
| 745 false)); |
| 744 value_check.AddReceiverCheck(kFloat32x4Cid, flow_graph->function()); | 746 value_check.AddReceiverCheck(kFloat32x4Cid, flow_graph->function()); |
| 745 // Check argument. Receiver (left) is known to be a Float32x4. | 747 // Check argument. Receiver (left) is known to be a Float32x4. |
| 746 builder.AddInstruction( | 748 builder.AddInstruction( |
| 747 new CheckClassInstr(new Value(right), | 749 new CheckClassInstr(new Value(right), |
| 748 Thread::kNoDeoptId, | 750 Thread::kNoDeoptId, |
| 749 value_check, | 751 value_check, |
| 750 builder.TokenPos())); | 752 builder.TokenPos())); |
| 751 Definition* left_simd = | 753 Definition* left_simd = |
| 752 builder.AddUnboxInstr(kUnboxedFloat32x4, | 754 builder.AddUnboxInstr(kUnboxedFloat32x4, |
| 753 new Value(left), | 755 new Value(left), |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 975 BlockBuilder builder(flow_graph, normal_entry); | 977 BlockBuilder builder(flow_graph, normal_entry); |
| 976 | 978 |
| 977 Definition* data = builder.AddParameter(1); | 979 Definition* data = builder.AddParameter(1); |
| 978 Definition* growable_array = builder.AddParameter(2); | 980 Definition* growable_array = builder.AddParameter(2); |
| 979 | 981 |
| 980 const ICData& value_check = ICData::ZoneHandle(ICData::New( | 982 const ICData& value_check = ICData::ZoneHandle(ICData::New( |
| 981 flow_graph->function(), | 983 flow_graph->function(), |
| 982 String::Handle(flow_graph->function().name()), | 984 String::Handle(flow_graph->function().name()), |
| 983 Object::empty_array(), // Dummy args. descr. | 985 Object::empty_array(), // Dummy args. descr. |
| 984 Thread::kNoDeoptId, | 986 Thread::kNoDeoptId, |
| 985 1)); | 987 1, |
| 988 false)); |
| 986 value_check.AddReceiverCheck(kArrayCid, flow_graph->function()); | 989 value_check.AddReceiverCheck(kArrayCid, flow_graph->function()); |
| 987 builder.AddInstruction( | 990 builder.AddInstruction( |
| 988 new CheckClassInstr(new Value(data), | 991 new CheckClassInstr(new Value(data), |
| 989 Thread::kNoDeoptId, | 992 Thread::kNoDeoptId, |
| 990 value_check, | 993 value_check, |
| 991 builder.TokenPos())); | 994 builder.TokenPos())); |
| 992 | 995 |
| 993 builder.AddInstruction( | 996 builder.AddInstruction( |
| 994 new StoreInstanceFieldInstr(GrowableObjectArray::data_offset(), | 997 new StoreInstanceFieldInstr(GrowableObjectArray::data_offset(), |
| 995 new Value(growable_array), | 998 new Value(growable_array), |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1230 TargetEntryInstr* normal_entry = graph_entry->normal_entry(); | 1233 TargetEntryInstr* normal_entry = graph_entry->normal_entry(); |
| 1231 BlockBuilder builder(flow_graph, normal_entry); | 1234 BlockBuilder builder(flow_graph, normal_entry); |
| 1232 | 1235 |
| 1233 return BuildInvokeMathCFunction(&builder, | 1236 return BuildInvokeMathCFunction(&builder, |
| 1234 MethodRecognizer::kDoubleRound); | 1237 MethodRecognizer::kDoubleRound); |
| 1235 } | 1238 } |
| 1236 #endif // !defined(TARGET_ARCH_DBC) | 1239 #endif // !defined(TARGET_ARCH_DBC) |
| 1237 | 1240 |
| 1238 | 1241 |
| 1239 } // namespace dart | 1242 } // namespace dart |
| OLD | NEW |