Title: [90731] trunk/Source/_javascript_Core
Revision
90731
Author
l...@webkit.org
Date
2011-07-11 03:31:20 -0700 (Mon, 11 Jul 2011)

Log Message

Signed arithmetic bug in dataTransfer32.
https://bugs.webkit.org/show_bug.cgi?id=64257

Reviewed by Zoltan Herczeg.

An arithmetic bug is fixed. If the offset of dataTransfer is half of the
addressable memory space on a 32-bit machine (-2147483648 = 0x80000000)
a load instruction is emitted with a wrong zero offset.

Inspired by Jacob Bramley's patch from JaegerMonkey.

* assembler/ARMAssembler.cpp:
(JSC::ARMAssembler::dataTransfer32):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (90730 => 90731)


--- trunk/Source/_javascript_Core/ChangeLog	2011-07-11 09:33:07 UTC (rev 90730)
+++ trunk/Source/_javascript_Core/ChangeLog	2011-07-11 10:31:20 UTC (rev 90731)
@@ -1,3 +1,19 @@
+2011-07-11  Gabor Loki  <l...@webkit.org>
+
+        Signed arithmetic bug in dataTransfer32.
+        https://bugs.webkit.org/show_bug.cgi?id=64257
+
+        Reviewed by Zoltan Herczeg.
+
+        An arithmetic bug is fixed. If the offset of dataTransfer is half of the
+        addressable memory space on a 32-bit machine (-2147483648 = 0x80000000)
+        a load instruction is emitted with a wrong zero offset.
+
+        Inspired by Jacob Bramley's patch from JaegerMonkey.
+
+        * assembler/ARMAssembler.cpp:
+        (JSC::ARMAssembler::dataTransfer32):
+
 2011-07-09  Thouraya Andolsi  <thouraya.ando...@st.com>
 
         Fix unaligned userspace access for SH4 platforms. 

Modified: trunk/Source/_javascript_Core/assembler/ARMAssembler.cpp (90730 => 90731)


--- trunk/Source/_javascript_Core/assembler/ARMAssembler.cpp	2011-07-11 09:33:07 UTC (rev 90730)
+++ trunk/Source/_javascript_Core/assembler/ARMAssembler.cpp	2011-07-11 10:31:20 UTC (rev 90731)
@@ -276,15 +276,14 @@
             dtr_ur(isLoad, srcDst, base, ARMRegisters::S0 | transferFlag);
         }
     } else {
-        offset = -offset;
-        if (offset <= 0xfff)
-            dtr_d(isLoad, srcDst, base, offset | transferFlag);
-        else if (offset <= 0xfffff) {
-            sub_r(ARMRegisters::S0, base, OP2_IMM | (offset >> 12) | (10 << 8));
-            dtr_d(isLoad, srcDst, ARMRegisters::S0, (offset & 0xfff) | transferFlag);
+        if (offset >= -0xfff)
+            dtr_d(isLoad, srcDst, base, -offset | transferFlag);
+        else if (offset >= -0xfffff) {
+            sub_r(ARMRegisters::S0, base, OP2_IMM | (-offset >> 12) | (10 << 8));
+            dtr_d(isLoad, srcDst, ARMRegisters::S0, (-offset & 0xfff) | transferFlag);
         } else {
             moveImm(offset, ARMRegisters::S0);
-            dtr_dr(isLoad, srcDst, base, ARMRegisters::S0 | transferFlag);
+            dtr_ur(isLoad, srcDst, base, ARMRegisters::S0 | transferFlag);
         }
     }
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to