Title: [195845] trunk/Source/_javascript_Core
Revision
195845
Author
fpi...@apple.com
Date
2016-01-29 15:10:39 -0800 (Fri, 29 Jan 2016)

Log Message

Air:fixObviousSpills should handle floats and doubles
https://bugs.webkit.org/show_bug.cgi?id=153197

Reviewed by Saam Barati.

This adds the most obvious handling of float spills, where we just enable load elimination on
float spill code.

* b3/air/AirFixObviousSpills.cpp:

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (195844 => 195845)


--- trunk/Source/_javascript_Core/ChangeLog	2016-01-29 23:06:29 UTC (rev 195844)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-01-29 23:10:39 UTC (rev 195845)
@@ -1,3 +1,15 @@
+2016-01-29  Filip Pizlo  <fpi...@apple.com>
+
+        Air:fixObviousSpills should handle floats and doubles
+        https://bugs.webkit.org/show_bug.cgi?id=153197
+
+        Reviewed by Saam Barati.
+
+        This adds the most obvious handling of float spills, where we just enable load elimination on
+        float spill code.
+
+        * b3/air/AirFixObviousSpills.cpp:
+
 2016-01-29  Andreas Kling  <akl...@apple.com>
 
         Shrink CodeBlock!

Modified: trunk/Source/_javascript_Core/b3/air/AirFixObviousSpills.cpp (195844 => 195845)


--- trunk/Source/_javascript_Core/b3/air/AirFixObviousSpills.cpp	2016-01-29 23:06:29 UTC (rev 195844)
+++ trunk/Source/_javascript_Core/b3/air/AirFixObviousSpills.cpp	2016-01-29 23:10:39 UTC (rev 195845)
@@ -120,9 +120,6 @@
                 m_state.clobber(arg);
             });
 
-        // FIXME: This needs a story for floats and doubles.
-        // https://bugs.webkit.org/show_bug.cgi?id=153197
-
         switch (inst.opcode) {
         case Move:
             if (inst.args[0].isSomeImm()) {
@@ -162,6 +159,26 @@
             }
             break;
 
+        case MoveFloat:
+            if (isSpillSlot(inst.args[0]) && inst.args[1].isReg()) {
+                m_state.addAlias(
+                    RegSlot(inst.args[1].reg(), inst.args[0].stackSlot(), RegSlot::Match32));
+            } else if (inst.args[0].isReg() && isSpillSlot(inst.args[1])) {
+                m_state.addAlias(
+                    RegSlot(inst.args[0].reg(), inst.args[1].stackSlot(), RegSlot::Match32));
+            }
+            break;
+
+        case MoveDouble:
+            if (isSpillSlot(inst.args[0]) && inst.args[1].isReg()) {
+                m_state.addAlias(
+                    RegSlot(inst.args[1].reg(), inst.args[0].stackSlot(), RegSlot::AllBits));
+            } else if (inst.args[0].isReg() && isSpillSlot(inst.args[1])) {
+                m_state.addAlias(
+                    RegSlot(inst.args[0].reg(), inst.args[1].stackSlot(), RegSlot::AllBits));
+            }
+            break;
+
         default:
             break;
         }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to