Title: [192524] trunk/Source/_javascript_Core
Revision
192524
Author
mark....@apple.com
Date
2015-11-17 12:24:12 -0800 (Tue, 17 Nov 2015)

Log Message

[JSC] Support Doubles with B3's Mul.
https://bugs.webkit.org/show_bug.cgi?id=151355

Reviewed by Filip Pizlo.

* b3/B3LowerToAir.cpp:
(JSC::B3::Air::LowerToAir::lower):
* b3/air/AirOpcode.opcodes:
* b3/testb3.cpp:
(JSC::B3::testMulLoadTwice):
(JSC::B3::testMulArgDouble):
(JSC::B3::testMulArgsDouble):
(JSC::B3::testMulArgImmDouble):
(JSC::B3::testMulImmArgDouble):
(JSC::B3::testMulImmsDouble):
(JSC::B3::testDivArgDouble):
(JSC::B3::run):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (192523 => 192524)


--- trunk/Source/_javascript_Core/ChangeLog	2015-11-17 20:23:02 UTC (rev 192523)
+++ trunk/Source/_javascript_Core/ChangeLog	2015-11-17 20:24:12 UTC (rev 192524)
@@ -1,3 +1,23 @@
+2015-11-17  Mark Lam  <mark....@apple.com>
+
+        [JSC] Support Doubles with B3's Mul.
+        https://bugs.webkit.org/show_bug.cgi?id=151355
+
+        Reviewed by Filip Pizlo.
+
+        * b3/B3LowerToAir.cpp:
+        (JSC::B3::Air::LowerToAir::lower):
+        * b3/air/AirOpcode.opcodes:
+        * b3/testb3.cpp:
+        (JSC::B3::testMulLoadTwice):
+        (JSC::B3::testMulArgDouble):
+        (JSC::B3::testMulArgsDouble):
+        (JSC::B3::testMulArgImmDouble):
+        (JSC::B3::testMulImmArgDouble):
+        (JSC::B3::testMulImmsDouble):
+        (JSC::B3::testDivArgDouble):
+        (JSC::B3::run):
+
 2015-11-17  Matthew Daiter  <mdaiter8...@gmail.com>
 
         Removed useless variable scriptResult from testExecutionTimeLimit

Modified: trunk/Source/_javascript_Core/b3/B3LowerToAir.cpp (192523 => 192524)


--- trunk/Source/_javascript_Core/b3/B3LowerToAir.cpp	2015-11-17 20:23:02 UTC (rev 192523)
+++ trunk/Source/_javascript_Core/b3/B3LowerToAir.cpp	2015-11-17 20:24:12 UTC (rev 192524)
@@ -1260,7 +1260,7 @@
         }
 
         case Mul: {
-            appendBinOp<Mul32, Mul64, Air::Oops, Commutative>(
+            appendBinOp<Mul32, Mul64, MulDouble, Commutative>(
                 m_value->child(0), m_value->child(1));
             return;
         }

Modified: trunk/Source/_javascript_Core/b3/air/AirOpcode.opcodes (192523 => 192524)


--- trunk/Source/_javascript_Core/b3/air/AirOpcode.opcodes	2015-11-17 20:23:02 UTC (rev 192523)
+++ trunk/Source/_javascript_Core/b3/air/AirOpcode.opcodes	2015-11-17 20:24:12 UTC (rev 192524)
@@ -114,6 +114,10 @@
 Mul64 U:G, UD:G
     Tmp, Tmp
 
+MulDouble U:F, UD:F
+    Tmp, Tmp
+    Addr, Tmp
+
 DivDouble U:F, UD:F
     Tmp, Tmp
     Addr, Tmp

Modified: trunk/Source/_javascript_Core/b3/testb3.cpp (192523 => 192524)


--- trunk/Source/_javascript_Core/b3/testb3.cpp	2015-11-17 20:23:02 UTC (rev 192523)
+++ trunk/Source/_javascript_Core/b3/testb3.cpp	2015-11-17 20:24:12 UTC (rev 192524)
@@ -386,6 +386,70 @@
     test(1);
 }
 
+void testMulArgDouble(double a)
+{
+    Procedure proc;
+    BasicBlock* root = proc.addBlock();
+    Value* value = root->appendNew<ArgumentRegValue>(proc, Origin(), FPRInfo::argumentFPR0);
+    root->appendNew<ControlValue>(
+        proc, Return, Origin(),
+        root->appendNew<Value>(proc, Mul, Origin(), value, value));
+
+    CHECK(isIdentical(compileAndRun<double>(proc, a), a * a));
+}
+
+void testMulArgsDouble(double a, double b)
+{
+    Procedure proc;
+    BasicBlock* root = proc.addBlock();
+    Value* valueA = root->appendNew<ArgumentRegValue>(proc, Origin(), FPRInfo::argumentFPR0);
+    Value* valueB = root->appendNew<ArgumentRegValue>(proc, Origin(), FPRInfo::argumentFPR1);
+    root->appendNew<ControlValue>(
+        proc, Return, Origin(),
+        root->appendNew<Value>(proc, Mul, Origin(), valueA, valueB));
+
+    CHECK(isIdentical(compileAndRun<double>(proc, a, b), a * b));
+}
+
+void testMulArgImmDouble(double a, double b)
+{
+    Procedure proc;
+    BasicBlock* root = proc.addBlock();
+    Value* valueA = root->appendNew<ArgumentRegValue>(proc, Origin(), FPRInfo::argumentFPR0);
+    Value* valueB = root->appendNew<ConstDoubleValue>(proc, Origin(), b);
+    root->appendNew<ControlValue>(
+        proc, Return, Origin(),
+        root->appendNew<Value>(proc, Mul, Origin(), valueA, valueB));
+
+    CHECK(isIdentical(compileAndRun<double>(proc, a), a * b));
+}
+
+void testMulImmArgDouble(double a, double b)
+{
+    Procedure proc;
+    BasicBlock* root = proc.addBlock();
+    Value* valueA = root->appendNew<ConstDoubleValue>(proc, Origin(), a);
+    Value* valueB = root->appendNew<ArgumentRegValue>(proc, Origin(), FPRInfo::argumentFPR0);
+    root->appendNew<ControlValue>(
+        proc, Return, Origin(),
+        root->appendNew<Value>(proc, Mul, Origin(), valueA, valueB));
+
+    CHECK(isIdentical(compileAndRun<double>(proc, b), a * b));
+}
+
+void testMulImmsDouble(double a, double b)
+{
+    Procedure proc;
+    BasicBlock* root = proc.addBlock();
+    Value* valueA = root->appendNew<ConstDoubleValue>(proc, Origin(), a);
+    Value* valueB = root->appendNew<ConstDoubleValue>(proc, Origin(), b);
+    root->appendNew<ControlValue>(
+        proc, Return, Origin(),
+        root->appendNew<Value>(proc, Mul, Origin(), valueA, valueB));
+
+    CHECK(isIdentical(compileAndRun<double>(proc), a * b));
+}
+
 void testDivArgDouble(double a)
 {
     Procedure proc;
@@ -4396,6 +4460,12 @@
     RUN(testMulArgs32(1, 2));
     RUN(testMulLoadTwice());
 
+    RUN_UNARY(testMulArgDouble, doubleOperands());
+    RUN_BINARY(testMulArgsDouble, doubleOperands(), doubleOperands());
+    RUN_BINARY(testMulArgImmDouble, doubleOperands(), doubleOperands());
+    RUN_BINARY(testMulImmArgDouble, doubleOperands(), doubleOperands());
+    RUN_BINARY(testMulImmsDouble, doubleOperands(), doubleOperands());
+
     RUN(testDivArgDouble(M_PI));
     RUN(testDivArgsDouble(M_PI, 1));
     RUN(testDivArgsDouble(M_PI, -M_PI));
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to