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

Unified Diff: runtime/vm/intermediate_language.cc

Issue 215363004: Support for multiple register values (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: runtime/vm/intermediate_language.cc
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index 7b4d3853473e7bdbf4a41ae00f126bc9f9374024..22ac752813752a5e37aae456e2cc889d45c73fe7 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -41,6 +41,7 @@ Definition::Definition()
type_(NULL),
temp_index_(-1),
ssa_temp_index_(-1),
+ ssa_temp_index2_(-1),
input_use_list_(NULL),
env_use_list_(NULL),
use_kind_(kValue), // Phis and parameters rely on this default.
@@ -805,7 +806,13 @@ void Definition::ReplaceWith(Definition* other,
ReplaceUsesWith(other);
// Reuse this instruction's SSA name for other.
ASSERT(!other->HasSSATemp());
- if (HasSSATemp()) other->set_ssa_temp_index(ssa_temp_index());
+ if (HasSSATemp()) {
+ other->set_ssa_temp_index(ssa_temp_index());
+ if (RequiresTwoSSATempIndexes()) {
+ ASSERT(other->RequiresTwoSSATempIndexes());
+ other->set_ssa_temp_index2(ssa_temp_index2());
+ }
+ }
// Finally insert the other definition in place of this one in the graph.
previous()->LinkTo(other);
@@ -3213,6 +3220,39 @@ const RuntimeEntry& MathUnaryInstr::TargetFunction() const {
}
+MergedMath2Instr::MergedMath2Instr(ZoneGrowableArray<Value*>* inputs,
+ intptr_t original_deopt_id,
+ MergedMath2Instr::Kind kind)
+ : inputs_(inputs),
+ kind_(kind) {
+ ASSERT(inputs_->length() == InputCountFor(kind_));
+ for (intptr_t i = 0; i < inputs_->length(); ++i) {
+ ASSERT((*inputs)[i] != NULL);
+ (*inputs)[i]->set_instruction(this);
+ (*inputs)[i]->set_use_index(i);
+ }
+ deopt_id_ = original_deopt_id;
+}
+
+
+intptr_t MergedMath2Instr::OutputIndexOf(intptr_t kind) {
+ switch (kind) {
+ case MethodRecognizer::kMathSin: return 1;
+ case MethodRecognizer::kMathCos: return 0;
+ default: UNIMPLEMENTED(); return -1;
+ }
+}
+
+
+intptr_t MergedMath2Instr::OutputIndexOf(Token::Kind token) {
+ switch (token) {
+ case Token::kTRUNCDIV: return 0;
+ case Token::kMOD: return 1;
+ default: UNIMPLEMENTED(); return -1;
+ }
+}
+
+
MergedMathInstr::MergedMathInstr(ZoneGrowableArray<Value*>* inputs,
intptr_t original_deopt_id,
MergedMathInstr::Kind kind)

Powered by Google App Engine
This is Rietveld 408576698