Title: [203894] branches/safari-602-branch/Source/_javascript_Core
Revision
203894
Author
bshaf...@apple.com
Date
2016-07-29 00:13:04 -0700 (Fri, 29 Jul 2016)

Log Message

Merge r203851. rdar://problem/27299339

Modified Paths

Added Paths

Diff

Modified: branches/safari-602-branch/Source/_javascript_Core/ChangeLog (203893 => 203894)


--- branches/safari-602-branch/Source/_javascript_Core/ChangeLog	2016-07-29 07:13:01 UTC (rev 203893)
+++ branches/safari-602-branch/Source/_javascript_Core/ChangeLog	2016-07-29 07:13:04 UTC (rev 203894)
@@ -1,5 +1,32 @@
 2016-07-28  Babak Shafiei  <bshaf...@apple.com>
 
+        Merge r203851. rdar://problem/27299339
+
+    2016-07-28  Michael Saboff  <msab...@apple.com>
+
+            ARM64: Fused left shift with a right shift can create NaNs from integers
+            https://bugs.webkit.org/show_bug.cgi?id=160329
+
+            Reviewed by Geoffrey Garen.
+
+            When we fuse a left shift and a right shift of integers where the shift amounts
+            are the same and the size of the quantity being shifted is 8 bits, we rightly
+            generate a sign extend byte instruction.  On ARM64, we were sign extending
+            to a 64 bit quantity, when we really wanted to sign extend to a 32 bit quantity.
+
+            Checking the ARM64 marco assembler and we were extending to 64 bits for all
+            four combinations of zero / sign and 8 / 16 bits.
+
+            * assembler/MacroAssemblerARM64.h:
+            (JSC::MacroAssemblerARM64::zeroExtend16To32):
+            (JSC::MacroAssemblerARM64::signExtend16To32):
+            (JSC::MacroAssemblerARM64::zeroExtend8To32):
+            (JSC::MacroAssemblerARM64::signExtend8To32):
+            * tests/stress/regress-160329.js: New test added.
+            (narrow):
+
+2016-07-28  Babak Shafiei  <bshaf...@apple.com>
+
         Merge r203793. rdar://problem/27572612
 
     2016-07-27  Saam Barati  <sbar...@apple.com>

Modified: branches/safari-602-branch/Source/_javascript_Core/assembler/MacroAssemblerARM64.h (203893 => 203894)


--- branches/safari-602-branch/Source/_javascript_Core/assembler/MacroAssemblerARM64.h	2016-07-29 07:13:01 UTC (rev 203893)
+++ branches/safari-602-branch/Source/_javascript_Core/assembler/MacroAssemblerARM64.h	2016-07-29 07:13:04 UTC (rev 203894)
@@ -1122,12 +1122,12 @@
 
     void zeroExtend16To32(RegisterID src, RegisterID dest)
     {
-        m_assembler.uxth<64>(dest, src);
+        m_assembler.uxth<32>(dest, src);
     }
 
     void signExtend16To32(RegisterID src, RegisterID dest)
     {
-        m_assembler.sxth<64>(dest, src);
+        m_assembler.sxth<32>(dest, src);
     }
 
     void load8(ImplicitAddress address, RegisterID dest)
@@ -1187,12 +1187,12 @@
 
     void zeroExtend8To32(RegisterID src, RegisterID dest)
     {
-        m_assembler.uxtb<64>(dest, src);
+        m_assembler.uxtb<32>(dest, src);
     }
 
     void signExtend8To32(RegisterID src, RegisterID dest)
     {
-        m_assembler.sxtb<64>(dest, src);
+        m_assembler.sxtb<32>(dest, src);
     }
 
     void store64(RegisterID src, ImplicitAddress address)

Added: branches/safari-602-branch/Source/_javascript_Core/tests/stress/regress-160329.js (0 => 203894)


--- branches/safari-602-branch/Source/_javascript_Core/tests/stress/regress-160329.js	                        (rev 0)
+++ branches/safari-602-branch/Source/_javascript_Core/tests/stress/regress-160329.js	2016-07-29 07:13:04 UTC (rev 203894)
@@ -0,0 +1,17 @@
+// Regression test for 160329. This test should not crash or throw an exception.
+
+function narrow(x) {
+    return x << 24 >> 24;
+}
+
+noInline(narrow);
+
+for (var i = 0; i < 1000000; i++) {
+    let expected = i << 24;
+    let got = narrow(i);
+    expected = expected >> 24;
+
+    if (expected != got)
+        throw "FAILURE, expected:" + expected + ", got:" + got;
+}
+
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to