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

Unified Diff: runtime/vm/intrinsifier_mips.cc

Issue 1823123002: VM: Intrinsify double arithmetic operations with a smi rhs. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 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/intrinsifier_mips.cc
diff --git a/runtime/vm/intrinsifier_mips.cc b/runtime/vm/intrinsifier_mips.cc
index 1fd65bce3f66e28efa4e2684eab81a1ac8789362..c579e4ca634b0ce5b9c5ec12c7e9ec2d891b2127 100644
--- a/runtime/vm/intrinsifier_mips.cc
+++ b/runtime/vm/intrinsifier_mips.cc
@@ -1382,12 +1382,13 @@ void Intrinsifier::Double_lessEqualThan(Assembler* assembler) {
// Expects left argument to be double (receiver). Right argument is unknown.
// Both arguments are on stack.
static void DoubleArithmeticOperations(Assembler* assembler, Token::Kind kind) {
- Label fall_through;
+ Label fall_through, is_smi, double_op;
- TestLastArgumentIsDouble(assembler, &fall_through, &fall_through);
+ TestLastArgumentIsDouble(assembler, &is_smi, &fall_through);
// Both arguments are double, right operand is in T0.
__ lwc1(F2, FieldAddress(T0, Double::value_offset()));
__ lwc1(F3, FieldAddress(T0, Double::value_offset() + kWordSize));
+ __ Bind(&double_op);
__ lw(T0, Address(SP, 1 * kWordSize)); // Left argument.
__ lwc1(F0, FieldAddress(T0, Double::value_offset()));
__ lwc1(F1, FieldAddress(T0, Double::value_offset() + kWordSize));
@@ -1405,6 +1406,13 @@ static void DoubleArithmeticOperations(Assembler* assembler, Token::Kind kind) {
__ Ret();
__ delay_slot()->swc1(F1,
FieldAddress(V0, Double::value_offset() + kWordSize));
+
+ __ Bind(&is_smi);
+ __ SmiUntag(T0);
+ __ mtc1(T0, STMP1);
+ __ cvtdw(D1, STMP1);
+ __ b(&double_op);
zra 2016/03/22 17:12:21 It looks like you can use the delay slot here.
Florian Schneider 2016/03/25 16:09:47 Done. Here and for comparisons.
+
__ Bind(&fall_through);
}

Powered by Google App Engine
This is Rietveld 408576698