Title: [258710] trunk/JSTests
Revision
258710
Author
tpop...@redhat.com
Date
2020-03-19 10:44:22 -0700 (Thu, 19 Mar 2020)

Log Message

[JSC][BigEndians] Several JSC stress tests failing
https://bugs.webkit.org/show_bug.cgi?id=194007

Reviewed by Michael Catanzaro.

Adapt the DataView tests to be able to pass on little endian as well
as the big endian hardware. Do so by introducing method that determine
the endianess and based on its value it saves the expected results in
the right format.

* stress/dataview-get-cse.js:
(getIsLittleEndian):
(adjustForEndianess):
(test3.foo):
(test3):
* stress/dataview-jit-get.js:
(getIsLittleEndian):
(test1.adjustForEndianess):
(test1):
(test2.adjustForEndianess):
(test2):
(test3.adjustForEndianess):
(test3):
(adjustForEndianessUint32):
(test4):
(test5):
(test6):
(test7):
(test8):
* stress/dataview-jit-neuter.js:
(getIsLittleEndian):
(adjustForEndianess):
(test):
(test2):
* stress/dataview-jit-set-nan.js:
(getIsLittleEndian):
(adjustForEndianessFloat32):
(test):
* stress/dataview-jit-set.js:
(getIsLittleEndian):
(readHex):
(adjustForEndianessUint16):
(test):
(test2):
(adjustForEndianessUint32):
(test3):
(test4):
(adjustForEndianessFloat32):
(test5):
(adjustForEndianessFloat64):
(test6):
(isLittleEndian): Deleted.

Modified Paths

Diff

Modified: trunk/JSTests/ChangeLog (258709 => 258710)


--- trunk/JSTests/ChangeLog	2020-03-19 17:44:19 UTC (rev 258709)
+++ trunk/JSTests/ChangeLog	2020-03-19 17:44:22 UTC (rev 258710)
@@ -1,3 +1,58 @@
+2020-03-19  Tomas Popela  <tpop...@redhat.com>
+
+        [JSC][BigEndians] Several JSC stress tests failing
+        https://bugs.webkit.org/show_bug.cgi?id=194007
+
+        Reviewed by Michael Catanzaro.
+
+        Adapt the DataView tests to be able to pass on little endian as well
+        as the big endian hardware. Do so by introducing method that determine
+        the endianess and based on its value it saves the expected results in
+        the right format.
+
+        * stress/dataview-get-cse.js:
+        (getIsLittleEndian):
+        (adjustForEndianess):
+        (test3.foo):
+        (test3):
+        * stress/dataview-jit-get.js:
+        (getIsLittleEndian):
+        (test1.adjustForEndianess):
+        (test1):
+        (test2.adjustForEndianess):
+        (test2):
+        (test3.adjustForEndianess):
+        (test3):
+        (adjustForEndianessUint32):
+        (test4):
+        (test5):
+        (test6):
+        (test7):
+        (test8):
+        * stress/dataview-jit-neuter.js:
+        (getIsLittleEndian):
+        (adjustForEndianess):
+        (test):
+        (test2):
+        * stress/dataview-jit-set-nan.js:
+        (getIsLittleEndian):
+        (adjustForEndianessFloat32):
+        (test):
+        * stress/dataview-jit-set.js:
+        (getIsLittleEndian):
+        (readHex):
+        (adjustForEndianessUint16):
+        (test):
+        (test2):
+        (adjustForEndianessUint32):
+        (test3):
+        (test4):
+        (adjustForEndianessFloat32):
+        (test5):
+        (adjustForEndianessFloat64):
+        (test6):
+        (isLittleEndian): Deleted.
+
 2020-03-18  Yusuke Suzuki  <ysuz...@apple.com>
 
         Add a way to mark a rejected promise as handled

Modified: trunk/JSTests/stress/dataview-get-cse.js (258709 => 258710)


--- trunk/JSTests/stress/dataview-get-cse.js	2020-03-19 17:44:19 UTC (rev 258709)
+++ trunk/JSTests/stress/dataview-get-cse.js	2020-03-19 17:44:22 UTC (rev 258710)
@@ -5,7 +5,27 @@
         throw new Error;
 }
 
+function getIsLittleEndian() {
+    let ab = new ArrayBuffer(2);
+    let ta = new Int16Array(ab);
+    ta[0] = 0x0102;
+    let dv = new DataView(ab);
+    return dv.getInt16(0, true) === 0x0102;
+}
 
+let isLittleEndian = getIsLittleEndian();
+
+function adjustForEndianess(value) {
+    if (isLittleEndian)
+        return value;
+
+    let ab = new ArrayBuffer(8);
+    let ta = new Float64Array(ab);
+    ta[0] = value;
+    let dv = new DataView(ab);
+    return dv.getFloat64(0, true);
+}
+
 function test1() {
     function foo(dv) {
         return [dv.getFloat32(0), dv.getFloat64(0)];
@@ -41,7 +61,7 @@
 function test3() {
     function foo(dv, ta) {
         let a = dv.getFloat64(0, true);
-        ta[0] = Math.PI;
+        ta[0] = adjustForEndianess(Math.PI);
         let b = dv.getFloat64(0, true);
         return [a, b];
     }

Modified: trunk/JSTests/stress/dataview-jit-get.js (258709 => 258710)


--- trunk/JSTests/stress/dataview-jit-get.js	2020-03-19 17:44:19 UTC (rev 258709)
+++ trunk/JSTests/stress/dataview-jit-get.js	2020-03-19 17:44:22 UTC (rev 258710)
@@ -5,6 +5,16 @@
         throw new Error("Bad!");
 }
 
+function getIsLittleEndian() {
+    let ab = new ArrayBuffer(2);
+    let ta = new Int16Array(ab);
+    ta[0] = 0x0102;
+    let dv = new DataView(ab);
+    return dv.getInt16(0, true) === 0x0102;
+}
+
+let isLittleEndian = getIsLittleEndian();
+
 function test1() {
     function bigEndian(o, i) {
         return o.getInt32(i, false);
@@ -18,10 +28,20 @@
         return o.getInt32(i, b);
     }
     noInline(biEndian);
+    function adjustForEndianess(value) {
+        if (isLittleEndian)
+            return value;
 
+        let ab = new ArrayBuffer(4);
+        let ta = new Int32Array(ab);
+        ta[0] = value;
+        let dv = new DataView(ab);
+        return dv.getInt32(0, true);
+    }
+
     let ab = new ArrayBuffer(4);
     let ta = new Int32Array(ab);
-    ta[0] = 0x01020304;
+    ta[0] = adjustForEndianess(0x01020304);
     let dv = new DataView(ab);
 
     for (let i = 0; i < 10000; ++i) {
@@ -43,7 +63,7 @@
     }
 
     // Make sure we get the right sign.
-    ta[0] = -32361386; // 0xfe123456
+    ta[0] = adjustForEndianess(-32361386); // 0xfe123456
     for (let i = 0; i < 10000; ++i) {
         assert(bigEndian(dv, 0) === 0x563412fe);
         assert(littleEndian(dv, 0) === -32361386);
@@ -54,7 +74,7 @@
     }
 
     // -2146290602 == (int)0x80123456
-    ta[0] = 0x56341280;
+    ta[0] = adjustForEndianess(0x56341280);
     for (let i = 0; i < 10000; ++i) {
         assert(bigEndian(dv, 0) === -2146290602);
         assert(littleEndian(dv, 0) === 0x56341280);
@@ -79,10 +99,20 @@
         return o.getInt16(i, b);
     }
     noInline(biEndian);
+    function adjustForEndianess(value) {
+        if (isLittleEndian)
+            return value;
 
+        let ab = new ArrayBuffer(2);
+        let ta = new Int16Array(ab);
+        ta[0] = value;
+        let dv = new DataView(ab);
+        return dv.getInt16(0, true);
+    }
+
     let ab = new ArrayBuffer(2);
     let ta = new Int16Array(ab);
-    ta[0] = 0x0102;
+    ta[0] = adjustForEndianess(0x0102);
     let dv = new DataView(ab);
 
     for (let i = 0; i < 10000; ++i) {
@@ -95,7 +125,7 @@
     }
 
     // Check sign.
-    ta[0] = -512; // 0xfe00
+    ta[0] = adjustForEndianess(-512); // 0xfe00
     for (let i = 0; i < 10000; ++i) {
         assert(bigEndian(dv, 0) === 0x00fe);
         assert(littleEndian(dv, 0) === -512);
@@ -106,7 +136,7 @@
     }
 
     // Check sign extension.
-    ta[0] = 0x00fe;
+    ta[0] = adjustForEndianess(0x00fe);
     for (let i = 0; i < 10000; ++i) {
         assert(bigEndian(dv, 0) === -512);
         assert(littleEndian(dv, 0) === 0x00fe);
@@ -131,7 +161,17 @@
         return o.getFloat32(i, b);
     }
     noInline(biEndian);
+    function adjustForEndianess(value) {
+        if (isLittleEndian)
+            return value;
 
+        let ab = new ArrayBuffer(4);
+        let ta = new Float32Array(ab);
+        ta[0] = value;
+        let dv = new DataView(ab);
+        return dv.getFloat32(0, true);
+    }
+
     let ab = new ArrayBuffer(4);
     let ta = new Float32Array(ab);
     const normal = 12912.403; // 0x4649c19d
@@ -138,7 +178,7 @@
     const normalAsDouble = 12912.403320312500;
 
     const flipped = -5.1162437589918884e-21;
-    ta[0] = normal;
+    ta[0] = adjustForEndianess(normal);
 
     let dv = new DataView(ab);
     for (let i = 0; i < 10000; ++i) {
@@ -152,6 +192,17 @@
 }
 test3();
 
+function adjustForEndianessUint32(value) {
+    if (isLittleEndian)
+        return value;
+
+    let ab = new ArrayBuffer(4);
+    let ta = new Uint32Array(ab);
+    ta[0] = value;
+    let dv = new DataView(ab);
+    return dv.getUint32(0, true);
+}
+
 function test4() {
     function bigEndian(o, i) {
         return o.getUint32(i, false);
@@ -168,7 +219,7 @@
 
     let ab = new ArrayBuffer(4);
     let ta = new Uint32Array(ab);
-    ta[0] = 0xa0b0d0f0;
+    ta[0] = adjustForEndianessUint32(0xa0b0d0f0);
 
     let dv = new DataView(ab);
     for (let i = 0; i < 10000; ++i) {
@@ -198,7 +249,7 @@
 
     let ab = new ArrayBuffer(4);
     let ta = new Uint32Array(ab);
-    ta[0] = 0xa0b0d0f0;
+    ta[0] = adjustForEndianessUint32(0xa0b0d0f0);
 
     let dv = new DataView(ab);
     for (let i = 0; i < 10000; ++i) {
@@ -239,7 +290,7 @@
 
     let ab = new ArrayBuffer(4);
     let ta = new Uint32Array(ab);
-    ta[0] = 0xa070fa01;
+    ta[0] = adjustForEndianessUint32(0xa070fa01);
 
     let dv = new DataView(ab);
     for (let i = 0; i < 10000; ++i) {
@@ -272,7 +323,7 @@
 
     let ab = new ArrayBuffer(4);
     let ta = new Uint32Array(ab);
-    ta[0] = 0xa070fa01;
+    ta[0] = adjustForEndianessUint32(0xa070fa01);
 
     let dv = new DataView(ab);
     for (let i = 0; i < 10000; ++i) {
@@ -292,7 +343,7 @@
 
     let ab = new ArrayBuffer(4);
     let ta = new Uint32Array(ab);
-    ta[0] = 0xa070fa01;
+    ta[0] = adjustForEndianessUint32(0xa070fa01);
 
     let dv = new DataView(ab);
     for (let i = 0; i < 10000; ++i) {

Modified: trunk/JSTests/stress/dataview-jit-neuter.js (258709 => 258710)


--- trunk/JSTests/stress/dataview-jit-neuter.js	2020-03-19 17:44:19 UTC (rev 258709)
+++ trunk/JSTests/stress/dataview-jit-neuter.js	2020-03-19 17:44:22 UTC (rev 258710)
@@ -5,6 +5,27 @@
         throw new Error("Bad!");
 }
 
+function getIsLittleEndian() {
+    let ab = new ArrayBuffer(2);
+    let ta = new Int16Array(ab);
+    ta[0] = 0x0102;
+    let dv = new DataView(ab);
+    return dv.getInt16(0, true) === 0x0102;
+}
+
+let isLittleEndian = getIsLittleEndian();
+
+function adjustForEndianess(value) {
+    if (isLittleEndian)
+        return value;
+
+    let ab = new ArrayBuffer(4);
+    let ta = new Uint32Array(ab);
+    ta[0] = value;
+    let dv = new DataView(ab);
+    return dv.getUint32(0, true);
+}
+
 function test() {
     function load(o, i) {
         return o.getUint8(i);
@@ -13,7 +34,7 @@
 
     let ab = new ArrayBuffer(4);
     let ta = new Uint32Array(ab);
-    ta[0] = 0xa070fa01;
+    ta[0] = adjustForEndianess(0xa070fa01);
     let dv = new DataView(ab);
 
     for (let i = 0; i < 1000; ++i) {
@@ -40,7 +61,7 @@
 
     let ab = new ArrayBuffer(4);
     let ta = new Uint32Array(ab);
-    ta[0] = 0xa070fa01;
+    ta[0] = adjustForEndianess(0xa070fa01);
     let dv = new DataView(ab);
 
     for (let i = 0; i < 10000; ++i) {

Modified: trunk/JSTests/stress/dataview-jit-set-nan.js (258709 => 258710)


--- trunk/JSTests/stress/dataview-jit-set-nan.js	2020-03-19 17:44:19 UTC (rev 258709)
+++ trunk/JSTests/stress/dataview-jit-set-nan.js	2020-03-19 17:44:22 UTC (rev 258710)
@@ -7,6 +7,27 @@
         throw new Error;
 }
 
+function getIsLittleEndian() {
+    let ab = new ArrayBuffer(2);
+    let ta = new Int16Array(ab);
+    ta[0] = 0x0102;
+    let dv = new DataView(ab);
+    return dv.getInt16(0, true) === 0x0102;
+}
+
+let isLittleEndian = getIsLittleEndian();
+
+function adjustForEndianessFloat32(value) {
+    if (isLittleEndian)
+        return value;
+
+    let ab = new ArrayBuffer(4);
+    let ta = new Float32Array(ab);
+    ta[0] = value;
+    let dv = new DataView(ab);
+    return dv.getFloat32(0, true);
+}
+
 function test() {
     function storeLittleEndian(dv, index, value) {
         dv.setFloat32(index, value, true);
@@ -29,24 +50,28 @@
     let dv = new DataView(buffer);
 
     for (let i = 0; i < 10000; ++i) {
-        storeLittleEndian(dv, 0, 1.5);
+        storeLittleEndian(dv, 0, adjustForEndianessFloat32(1.5));
         assert(arr[0] === 1.5);
 
-        storeLittleEndian(dv, 0, 12912.124123215122);
+        // The right way how to process this test is to uncomment the line below
+        // and comment out the line below it. But strangely it doesn't work. I
+        // opened https://bugs.webkit.org/show_bug.cgi?id=209289 for it.
+        //storeLittleEndian(dv, 0, adjustForEndianessFloat32(12912.124123215122));
+        store(dv, 0, 12912.124123215122, isLittleEndian);
         assert(arr[0] === 12912.1240234375);
         assert(bits[0] === 0x4649c07f);
 
-        storeLittleEndian(dv, 0, NaN);
+        storeLittleEndian(dv, 0, adjustForEndianessFloat32(NaN));
         assert(isNaN(arr[0]));
         assert(bits[0] === 0x7FC00000);
 
-        storeLittleEndian(dv, 0, 2.3879393e-38);
+        storeLittleEndian(dv, 0, adjustForEndianessFloat32(2.3879393e-38));
         assert(arr[0] === 2.387939260590663e-38);
         assert(bits[0] === 0x01020304);
 
-        storeBigEndian(dv, 0, 2.3879393e-38);
+        storeBigEndian(dv, 0, adjustForEndianessFloat32(2.3879393e-38));
         assert(arr[0] === 1.539989614439558e-36);
         assert(bits[0] === 0x04030201);
     }
 }
-test();
\ No newline at end of file
+test();

Modified: trunk/JSTests/stress/dataview-jit-set.js (258709 => 258710)


--- trunk/JSTests/stress/dataview-jit-set.js	2020-03-19 17:44:19 UTC (rev 258709)
+++ trunk/JSTests/stress/dataview-jit-set.js	2020-03-19 17:44:22 UTC (rev 258710)
@@ -5,13 +5,17 @@
         throw new Error;
 }
 
+function getIsLittleEndian() {
+    let ab = new ArrayBuffer(2);
+    let ta = new Int16Array(ab);
+    ta[0] = 0x0102;
+    let dv = new DataView(ab);
+    return dv.getInt16(0, true) === 0x0102;
+}
+
+let isLittleEndian = getIsLittleEndian();
+
 function readHex(dv, bytes) {
-    function isLittleEndian() { 
-        let b = new ArrayBuffer(4);
-        let dv = new DataView(b);
-        dv.setInt32(0, 0x00112233, true);
-        return dv.getUint8(0) === 0x33;
-    }
     let str = "";
     function readByte(i) {
         let b = dv.getUint8(i).toString(16);
@@ -21,7 +25,7 @@
             assert(b.length === 2)
         return b;
     }
-    if (isLittleEndian()) {
+    if (isLittleEndian) {
         for (let i = bytes; i--;)
             str = str + readByte(i);
     } else {
@@ -35,10 +39,21 @@
 {
     let b = new ArrayBuffer(4);
     let dv = new DataView(b);
-    dv.setInt32(0, 0x00112233, true);
+    dv.setInt32(0, 0x00112233, isLittleEndian);
     assert(readHex(dv, 4) === "0x00112233");
 }
 
+function adjustForEndianessUint16(value) {
+    if (isLittleEndian)
+        return value;
+
+    let ab = new ArrayBuffer(4);
+    let ta = new Uint16Array(ab);
+    ta[0] = value;
+    let dv = new DataView(ab);
+    return dv.getUint16(0, true);
+}
+
 function test() {
     function storeLittleEndian(dv, index, value) {
         dv.setInt16(index, value, true);
@@ -60,52 +75,52 @@
     let dv = new DataView(buffer);
 
     for (let i = 0; i < 10000; ++i) {
-        storeLittleEndian(dv, 0, 0xfaba);
+        storeLittleEndian(dv, 0, adjustForEndianessUint16(0xfaba));
         assert(arr[0] === 0xfaba);
 
-        store(dv, 0, 0xabcd, true);
+        store(dv, 0, adjustForEndianessUint16(0xabcd), true);
         assert(arr[0] === 0xabcd);
 
-        store(dv, 0, 0xbadbeef, true);
+        store(dv, 0, adjustForEndianessUint16(0xbadbeef), true);
         assert(arr[0] === 0xbeef);
 
-        storeLittleEndian(dv, 0, 0xbb4db33f, true);
+        storeLittleEndian(dv, 0, adjustForEndianessUint16(0xbb4db33f), true);
         assert(arr[0] === 0xb33f);
 
-        storeBigEndian(dv, 0, 0xfada);
+        storeBigEndian(dv, 0, adjustForEndianessUint16(0xfada));
         assert(arr[0] === 0xdafa);
 
-        storeBigEndian(dv, 0, 0x12ab);
+        storeBigEndian(dv, 0, adjustForEndianessUint16(0x12ab));
         assert(arr[0] === 0xab12);
 
-        store(dv, 0, 0x1234, false);
+        store(dv, 0, adjustForEndianessUint16(0x1234), false);
         assert(arr[0] === 0x3412);
 
-        store(dv, 0, 0x0102, false);
+        store(dv, 0, adjustForEndianessUint16(0x0102), false);
         assert(arr[0] === 0x0201);
 
-        store(dv, 0, -1, false);
+        store(dv, 0, adjustForEndianessUint16(-1), false);
         assert(arr[0] === 0xffff);
 
-        store(dv, 0, -2, false);
+        store(dv, 0, adjustForEndianessUint16(-2), false);
         assert(arr[0] === 0xfeff);
 
-        storeBigEndian(dv, 0, -1);
+        storeBigEndian(dv, 0, adjustForEndianessUint16(-1));
         assert(arr[0] === 0xffff);
 
-        storeBigEndian(dv, 0, -2);
+        storeBigEndian(dv, 0, adjustForEndianessUint16(-2));
         assert(arr[0] === 0xfeff);
 
-        storeBigEndian(dv, 0, -2147483648); 
+        storeBigEndian(dv, 0, adjustForEndianessUint16(-2147483648));
         assert(arr[0] === 0x0000);
 
-        storeLittleEndian(dv, 0, -2147483648); 
+        storeLittleEndian(dv, 0, adjustForEndianessUint16(-2147483648));
         assert(arr[0] === 0x0000);
 
-        storeLittleEndian(dv, 0, -2147478988); 
+        storeLittleEndian(dv, 0, adjustForEndianessUint16(-2147478988));
         assert(arr[0] === 0x1234);
 
-        storeBigEndian(dv, 0, -2147478988); 
+        storeBigEndian(dv, 0, adjustForEndianessUint16(-2147478988));
         assert(arr[0] === 0x3412);
     }
 }
@@ -132,57 +147,68 @@
     let dv = new DataView(buffer);
 
     for (let i = 0; i < 10000; ++i) {
-        storeLittleEndian(dv, 0, 0xfaba);
+        storeLittleEndian(dv, 0, adjustForEndianessUint16(0xfaba));
         assert(arr[0] === 0xfaba);
 
-        store(dv, 0, 0xabcd, true);
+        store(dv, 0, adjustForEndianessUint16(0xabcd), true);
         assert(arr[0] === 0xabcd);
 
-        store(dv, 0, 0xbadbeef, true);
+        store(dv, 0, adjustForEndianessUint16(0xbadbeef), true);
         assert(arr[0] === 0xbeef);
 
-        storeLittleEndian(dv, 0, 0xbb4db33f, true);
+        storeLittleEndian(dv, 0, adjustForEndianessUint16(0xbb4db33f), true);
         assert(arr[0] === 0xb33f);
 
-        storeBigEndian(dv, 0, 0xfada);
+        storeBigEndian(dv, 0, adjustForEndianessUint16(0xfada));
         assert(arr[0] === 0xdafa);
 
-        storeBigEndian(dv, 0, 0x12ab);
+        storeBigEndian(dv, 0, adjustForEndianessUint16(0x12ab));
         assert(arr[0] === 0xab12);
 
-        store(dv, 0, 0x1234, false);
+        store(dv, 0, adjustForEndianessUint16(0x1234), false);
         assert(arr[0] === 0x3412);
 
-        store(dv, 0, 0x0102, false);
+        store(dv, 0, adjustForEndianessUint16(0x0102), false);
         assert(arr[0] === 0x0201);
 
-        store(dv, 0, -1, false);
+        store(dv, 0, adjustForEndianessUint16(-1), false);
         assert(arr[0] === 0xffff);
 
-        store(dv, 0, -2, false);
+        store(dv, 0, adjustForEndianessUint16(-2), false);
         assert(arr[0] === 0xfeff);
 
-        storeBigEndian(dv, 0, -1);
+        storeBigEndian(dv, 0, adjustForEndianessUint16(-1));
         assert(arr[0] === 0xffff);
 
-        storeBigEndian(dv, 0, -2);
+        storeBigEndian(dv, 0, adjustForEndianessUint16(-2));
         assert(arr[0] === 0xfeff);
 
-        storeBigEndian(dv, 0, -2147483648); 
+        storeBigEndian(dv, 0, adjustForEndianessUint16(-2147483648));
         assert(arr[0] === 0x0000);
 
-        storeLittleEndian(dv, 0, -2147483648); 
+        storeLittleEndian(dv, 0, adjustForEndianessUint16(-2147483648));
         assert(arr[0] === 0x0000);
 
-        storeLittleEndian(dv, 0, -2147478988); 
+        storeLittleEndian(dv, 0, adjustForEndianessUint16(-2147478988));
         assert(arr[0] === 0x1234);
 
-        storeBigEndian(dv, 0, -2147478988); 
+        storeBigEndian(dv, 0, adjustForEndianessUint16(-2147478988));
         assert(arr[0] === 0x3412);
     }
 }
 test2();
 
+function adjustForEndianessUint32(value) {
+    if (isLittleEndian)
+        return value;
+
+    let ab = new ArrayBuffer(4);
+    let ta = new Uint32Array(ab);
+    ta[0] = value;
+    let dv = new DataView(ab);
+    return dv.getUint32(0, true);
+}
+
 function test3() {
     function storeLittleEndian(dv, index, value) {
         dv.setUint32(index, value, true);
@@ -205,29 +231,29 @@
     let dv = new DataView(buffer);
 
     for (let i = 0; i < 10000; ++i) {
-        storeLittleEndian(dv, 0, 0xffffffff);
+        storeLittleEndian(dv, 0, adjustForEndianessUint32(0xffffffff));
         assert(arr[0] === 0xffffffff);
         assert(arr2[0] === -1);
 
-        storeLittleEndian(dv, 0, 0xffaabbcc);
+        storeLittleEndian(dv, 0, adjustForEndianessUint32(0xffaabbcc));
         assert(arr[0] === 0xffaabbcc);
 
-        storeBigEndian(dv, 0, 0x12345678);
+        storeBigEndian(dv, 0, adjustForEndianessUint32(0x12345678));
         assert(arr[0] === 0x78563412);
 
-        storeBigEndian(dv, 0, 0xffaabbcc);
+        storeBigEndian(dv, 0, adjustForEndianessUint32(0xffaabbcc));
         assert(arr[0] === 0xccbbaaff);
 
-        store(dv, 0, 0xfaeadaca, false);
+        store(dv, 0, adjustForEndianessUint32(0xfaeadaca), false);
         assert(arr[0] === 0xcadaeafa);
 
-        store(dv, 0, 0xcadaeafa, false);
+        store(dv, 0, adjustForEndianessUint32(0xcadaeafa), false);
         assert(arr2[0] === -85271862);
 
-        store(dv, 0, 0x12345678, false);
+        store(dv, 0, adjustForEndianessUint32(0x12345678), false);
         assert(arr[0] === 0x78563412);
 
-        storeBigEndian(dv, 0, 0xbeeffeeb);
+        storeBigEndian(dv, 0, adjustForEndianessUint32(0xbeeffeeb));
         assert(arr2[0] === -335614018);
     }
 }
@@ -255,34 +281,45 @@
     let dv = new DataView(buffer);
 
     for (let i = 0; i < 10000; ++i) {
-        storeLittleEndian(dv, 0, 0xffffffff);
+        storeLittleEndian(dv, 0, adjustForEndianessUint32(0xffffffff));
         assert(arr[0] === 0xffffffff);
         assert(arr2[0] === -1);
 
-        storeLittleEndian(dv, 0, 0xffaabbcc);
+        storeLittleEndian(dv, 0, adjustForEndianessUint32(0xffaabbcc));
         assert(arr[0] === 0xffaabbcc);
 
-        storeBigEndian(dv, 0, 0x12345678);
+        storeBigEndian(dv, 0, adjustForEndianessUint32(0x12345678));
         assert(arr[0] === 0x78563412);
 
-        storeBigEndian(dv, 0, 0xffaabbcc);
+        storeBigEndian(dv, 0, adjustForEndianessUint32(0xffaabbcc));
         assert(arr[0] === 0xccbbaaff);
 
-        store(dv, 0, 0xfaeadaca, false);
+        store(dv, 0, adjustForEndianessUint32(0xfaeadaca), false);
         assert(arr[0] === 0xcadaeafa);
 
-        store(dv, 0, 0xcadaeafa, false);
+        store(dv, 0, adjustForEndianessUint32(0xcadaeafa), false);
         assert(arr2[0] === -85271862);
 
-        store(dv, 0, 0x12345678, false);
+        store(dv, 0, adjustForEndianessUint32(0x12345678), false);
         assert(arr[0] === 0x78563412);
 
-        storeBigEndian(dv, 0, 0xbeeffeeb);
+        storeBigEndian(dv, 0, adjustForEndianessUint32(0xbeeffeeb));
         assert(arr2[0] === -335614018);
     }
 }
 test4();
 
+function adjustForEndianessFloat32(value) {
+    if (isLittleEndian)
+        return value;
+
+    let ab = new ArrayBuffer(4);
+    let ta = new Float32Array(ab);
+    ta[0] = value;
+    let dv = new DataView(ab);
+    return dv.getFloat32(0, true);
+}
+
 function test5() {
     function storeLittleEndian(dv, index, value) {
         dv.setFloat32(index, value, true);
@@ -305,21 +342,21 @@
     let dv = new DataView(buffer);
 
     for (let i = 0; i < 10000; ++i) {
-        storeLittleEndian(dv, 0, 1.5);
+        storeLittleEndian(dv, 0, adjustForEndianessFloat32(1.5));
         assert(arr[0] === 1.5);
 
-        storeLittleEndian(dv, 0, 12912.124123215122);
+        store(dv, 0, 12912.124123215122, isLittleEndian);
+        assert(bits[0] === 0x4649c07f);
         assert(arr[0] === 12912.1240234375);
-        assert(bits[0] === 0x4649c07f);
 
-        storeLittleEndian(dv, 0, NaN);
+        storeLittleEndian(dv, 0, adjustForEndianessFloat32(NaN));
         assert(isNaN(arr[0]));
 
-        storeLittleEndian(dv, 0, 2.3879393e-38);
+        storeLittleEndian(dv, 0, adjustForEndianessFloat32(2.3879393e-38));
         assert(arr[0] === 2.387939260590663e-38);
         assert(bits[0] === 0x01020304);
 
-        storeBigEndian(dv, 0, 2.3879393e-38);
+        storeBigEndian(dv, 0, adjustForEndianessFloat32(2.3879393e-38));
         assert(arr[0] === 1.539989614439558e-36);
         assert(bits[0] === 0x04030201);
     }
@@ -326,6 +363,17 @@
 }
 test5();
 
+function adjustForEndianessFloat64(value) {
+    if (isLittleEndian)
+        return value;
+
+    let ab = new ArrayBuffer(8);
+    let ta = new Float64Array(ab);
+    ta[0] = value;
+    let dv = new DataView(ab);
+    return dv.getFloat64(0, true);
+}
+
 function test6() {
     function storeLittleEndian(dv, index, value) {
         dv.setFloat64(index, value, true);
@@ -347,30 +395,30 @@
     let dv = new DataView(buffer);
 
     for (let i = 0; i < 10000; ++i) {
-        storeLittleEndian(dv, 0, NaN);
+        storeLittleEndian(dv, 0, adjustForEndianessFloat64(NaN));
         assert(isNaN(arr[0]));
 
-        storeLittleEndian(dv, 0, -2.5075187084135162e+284);
+        storeLittleEndian(dv, 0, adjustForEndianessFloat64(-2.5075187084135162e+284));
         assert(arr[0] === -2.5075187084135162e+284);
         assert(readHex(dv, 8) === "0xfafafafafafafafa");
 
-        store(dv, 0, 124.553, true);
+        store(dv, 0, adjustForEndianessFloat64(124.553), true);
         assert(readHex(dv, 8) === "0x405f23645a1cac08");
 
-        store(dv, 0, Infinity, true);
+        store(dv, 0, adjustForEndianessFloat64(Infinity), true);
         assert(readHex(dv, 8) === "0x7ff0000000000000");
 
-        store(dv, 0, Infinity, false);
+        store(dv, 0, adjustForEndianessFloat64(Infinity), false);
         assert(readHex(dv, 8) === "0x000000000000f07f");
 
-        store(dv, 0, -Infinity, true);
+        store(dv, 0, adjustForEndianessFloat64(-Infinity), true);
         assert(readHex(dv, 8) === "0xfff0000000000000");
 
-        storeBigEndian(dv, 0, -2.5075187084135162e+284);
+        storeBigEndian(dv, 0, adjustForEndianessFloat64(-2.5075187084135162e+284));
         assert(arr[0] === -2.5075187084135162e+284);
         assert(readHex(dv, 8) === "0xfafafafafafafafa");
 
-        storeBigEndian(dv, 0, 124.553);
+        storeBigEndian(dv, 0, adjustForEndianessFloat64(124.553));
         assert(readHex(dv, 8) === "0x08ac1c5a64235f40");
     }
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to