Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Side by Side Diff: runtime/vm/intrinsifier.cc

Issue 1974873002: Disable concurrent marking/sweeping, and background compilation on ARMv5TE (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: More shuffling things around Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/heap_test.cc ('k') | runtime/vm/pages.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 570 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 Thread::kNoDeoptId, 581 Thread::kNoDeoptId,
582 builder.TokenPos())); 582 builder.TokenPos()));
583 Definition* result = builder.AddDefinition( 583 Definition* result = builder.AddDefinition(
584 BoxInstr::Create(kUnboxedUint32, new Value(unboxed_value))); 584 BoxInstr::Create(kUnboxedUint32, new Value(unboxed_value)));
585 builder.AddIntrinsicReturn(new Value(result)); 585 builder.AddIntrinsicReturn(new Value(result));
586 return true; 586 return true;
587 } 587 }
588 588
589 589
590 bool Intrinsifier::Build_Float64ArraySetIndexed(FlowGraph* flow_graph) { 590 bool Intrinsifier::Build_Float64ArraySetIndexed(FlowGraph* flow_graph) {
591 if (!FlowGraphCompiler::SupportsUnboxedDoubles()) return false; 591 if (!FlowGraphCompiler::SupportsUnboxedDoubles()) {
592 return false;
593 }
592 594
593 GraphEntryInstr* graph_entry = flow_graph->graph_entry(); 595 GraphEntryInstr* graph_entry = flow_graph->graph_entry();
594 TargetEntryInstr* normal_entry = graph_entry->normal_entry(); 596 TargetEntryInstr* normal_entry = graph_entry->normal_entry();
595 BlockBuilder builder(flow_graph, normal_entry); 597 BlockBuilder builder(flow_graph, normal_entry);
596 598
597 Definition* value = builder.AddParameter(1); 599 Definition* value = builder.AddParameter(1);
598 Definition* index = builder.AddParameter(2); 600 Definition* index = builder.AddParameter(2);
599 Definition* array = builder.AddParameter(3); 601 Definition* array = builder.AddParameter(3);
600 602
601 PrepareIndexedOp(&builder, array, index, TypedData::length_offset()); 603 PrepareIndexedOp(&builder, array, index, TypedData::length_offset());
(...skipping 25 matching lines...) Expand all
627 Thread::kNoDeoptId, 629 Thread::kNoDeoptId,
628 builder.TokenPos())); 630 builder.TokenPos()));
629 // Return null. 631 // Return null.
630 Definition* null_def = builder.AddNullDefinition(); 632 Definition* null_def = builder.AddNullDefinition();
631 builder.AddIntrinsicReturn(new Value(null_def)); 633 builder.AddIntrinsicReturn(new Value(null_def));
632 return true; 634 return true;
633 } 635 }
634 636
635 637
636 bool Intrinsifier::Build_Float64ArrayGetIndexed(FlowGraph* flow_graph) { 638 bool Intrinsifier::Build_Float64ArrayGetIndexed(FlowGraph* flow_graph) {
637 if (!FlowGraphCompiler::SupportsUnboxedDoubles()) return false; 639 if (!FlowGraphCompiler::SupportsUnboxedDoubles()) {
640 return false;
641 }
638 642
639 GraphEntryInstr* graph_entry = flow_graph->graph_entry(); 643 GraphEntryInstr* graph_entry = flow_graph->graph_entry();
640 TargetEntryInstr* normal_entry = graph_entry->normal_entry(); 644 TargetEntryInstr* normal_entry = graph_entry->normal_entry();
641 BlockBuilder builder(flow_graph, normal_entry); 645 BlockBuilder builder(flow_graph, normal_entry);
642 646
643 Definition* index = builder.AddParameter(1); 647 Definition* index = builder.AddParameter(1);
644 Definition* array = builder.AddParameter(2); 648 Definition* array = builder.AddParameter(2);
645 649
646 PrepareIndexedOp(&builder, array, index, TypedData::length_offset()); 650 PrepareIndexedOp(&builder, array, index, TypedData::length_offset());
647 651
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 } 780 }
777 781
778 782
779 bool Intrinsifier::Build_Float32x4Add(FlowGraph* flow_graph) { 783 bool Intrinsifier::Build_Float32x4Add(FlowGraph* flow_graph) {
780 return BuildBinaryFloat32x4Op(flow_graph, Token::kADD); 784 return BuildBinaryFloat32x4Op(flow_graph, Token::kADD);
781 } 785 }
782 786
783 787
784 static bool BuildFloat32x4Shuffle(FlowGraph* flow_graph, 788 static bool BuildFloat32x4Shuffle(FlowGraph* flow_graph,
785 MethodRecognizer::Kind kind) { 789 MethodRecognizer::Kind kind) {
786 if (!FlowGraphCompiler::SupportsUnboxedSimd128()) return false; 790 if (!FlowGraphCompiler::SupportsUnboxedDoubles() ||
791 !FlowGraphCompiler::SupportsUnboxedSimd128()) {
792 return false;
793 }
787 GraphEntryInstr* graph_entry = flow_graph->graph_entry(); 794 GraphEntryInstr* graph_entry = flow_graph->graph_entry();
788 TargetEntryInstr* normal_entry = graph_entry->normal_entry(); 795 TargetEntryInstr* normal_entry = graph_entry->normal_entry();
789 BlockBuilder builder(flow_graph, normal_entry); 796 BlockBuilder builder(flow_graph, normal_entry);
790 797
791 Definition* receiver = builder.AddParameter(1); 798 Definition* receiver = builder.AddParameter(1);
792 799
793 Definition* unboxed_receiver = 800 Definition* unboxed_receiver =
794 builder.AddUnboxInstr(kUnboxedFloat32x4, 801 builder.AddUnboxInstr(kUnboxedFloat32x4,
795 new Value(receiver), 802 new Value(receiver),
796 /* is_checked = */ true); 803 /* is_checked = */ true);
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1014 new Value(length), 1021 new Value(length),
1015 kNoStoreBarrier, 1022 kNoStoreBarrier,
1016 builder.TokenPos())); 1023 builder.TokenPos()));
1017 Definition* null_def = builder.AddNullDefinition(); 1024 Definition* null_def = builder.AddNullDefinition();
1018 builder.AddIntrinsicReturn(new Value(null_def)); 1025 builder.AddIntrinsicReturn(new Value(null_def));
1019 return true; 1026 return true;
1020 } 1027 }
1021 1028
1022 1029
1023 bool Intrinsifier::Build_DoubleFlipSignBit(FlowGraph* flow_graph) { 1030 bool Intrinsifier::Build_DoubleFlipSignBit(FlowGraph* flow_graph) {
1031 if (!FlowGraphCompiler::SupportsUnboxedDoubles()) {
1032 return false;
1033 }
1024 GraphEntryInstr* graph_entry = flow_graph->graph_entry(); 1034 GraphEntryInstr* graph_entry = flow_graph->graph_entry();
1025 TargetEntryInstr* normal_entry = graph_entry->normal_entry(); 1035 TargetEntryInstr* normal_entry = graph_entry->normal_entry();
1026 BlockBuilder builder(flow_graph, normal_entry); 1036 BlockBuilder builder(flow_graph, normal_entry);
1027 1037
1028 Definition* receiver = builder.AddParameter(1); 1038 Definition* receiver = builder.AddParameter(1);
1029 Definition* unboxed_value = 1039 Definition* unboxed_value =
1030 builder.AddUnboxInstr(kUnboxedDouble, 1040 builder.AddUnboxInstr(kUnboxedDouble,
1031 new Value(receiver), 1041 new Value(receiver),
1032 /* is_checked = */ true); 1042 /* is_checked = */ true);
1033 Definition* unboxed_result = builder.AddDefinition( 1043 Definition* unboxed_result = builder.AddDefinition(
1034 new UnaryDoubleOpInstr(Token::kNEGATE, 1044 new UnaryDoubleOpInstr(Token::kNEGATE,
1035 new Value(unboxed_value), 1045 new Value(unboxed_value),
1036 Thread::kNoDeoptId)); 1046 Thread::kNoDeoptId));
1037 Definition* result = builder.AddDefinition( 1047 Definition* result = builder.AddDefinition(
1038 BoxInstr::Create(kUnboxedDouble, new Value(unboxed_result))); 1048 BoxInstr::Create(kUnboxedDouble, new Value(unboxed_result)));
1039 builder.AddIntrinsicReturn(new Value(result)); 1049 builder.AddIntrinsicReturn(new Value(result));
1040 return true; 1050 return true;
1041 } 1051 }
1042 1052
1043 1053
1044 static bool BuildInvokeMathCFunction(BlockBuilder* builder, 1054 static bool BuildInvokeMathCFunction(BlockBuilder* builder,
1045 MethodRecognizer::Kind kind, 1055 MethodRecognizer::Kind kind,
1046 intptr_t num_parameters = 1) { 1056 intptr_t num_parameters = 1) {
1057 if (!FlowGraphCompiler::SupportsUnboxedDoubles()) {
1058 return false;
1059 }
1047 ZoneGrowableArray<Value*>* args = 1060 ZoneGrowableArray<Value*>* args =
1048 new ZoneGrowableArray<Value*>(num_parameters); 1061 new ZoneGrowableArray<Value*>(num_parameters);
1049 1062
1050 for (intptr_t i = 0; i < num_parameters; i++) { 1063 for (intptr_t i = 0; i < num_parameters; i++) {
1051 const intptr_t parameter_index = (num_parameters - i); 1064 const intptr_t parameter_index = (num_parameters - i);
1052 Definition* value = builder->AddParameter(parameter_index); 1065 Definition* value = builder->AddParameter(parameter_index);
1053 Definition* unboxed_value = 1066 Definition* unboxed_value =
1054 builder->AddUnboxInstr(kUnboxedDouble, value, /* is_checked = */ false); 1067 builder->AddUnboxInstr(kUnboxedDouble, value, /* is_checked = */ false);
1055 args->Add(new Value(unboxed_value)); 1068 args->Add(new Value(unboxed_value));
1056 } 1069 }
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1217 TargetEntryInstr* normal_entry = graph_entry->normal_entry(); 1230 TargetEntryInstr* normal_entry = graph_entry->normal_entry();
1218 BlockBuilder builder(flow_graph, normal_entry); 1231 BlockBuilder builder(flow_graph, normal_entry);
1219 1232
1220 return BuildInvokeMathCFunction(&builder, 1233 return BuildInvokeMathCFunction(&builder,
1221 MethodRecognizer::kDoubleRound); 1234 MethodRecognizer::kDoubleRound);
1222 } 1235 }
1223 #endif // !defined(TARGET_ARCH_DBC) 1236 #endif // !defined(TARGET_ARCH_DBC)
1224 1237
1225 1238
1226 } // namespace dart 1239 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/heap_test.cc ('k') | runtime/vm/pages.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698