Split NaN-check into separate test
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 1 Oct 2018 19:40:49 +0000 (19:40 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 1 Oct 2018 19:40:49 +0000 (19:40 +0000)
https://bugs.webkit.org/show_bug.cgi?id=190010

Patch by Dominik Infuehr <dinfuehr@igalia.com> on 2018-10-01
Reviewed by Saam Barati.

DataView exposes NaN-representation, which is not necessarily the same on each
architecture. Therefore move the check of the NaN-representation into its own
file such that we can disable this test on MIPS where NaN-representation can be
different on older CPUs.

* stress/dataview-jit-set-nan.js: Added.
(assert):
(test.storeLittleEndian):
(test.storeBigEndian):
(test.store):
(test):
* stress/dataview-jit-set.js:
(test5):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236684 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JSTests/ChangeLog
JSTests/stress/dataview-jit-set-nan.js [new file with mode: 0644]
JSTests/stress/dataview-jit-set.js

index 0d5cbab..3f626d8 100644 (file)
@@ -1,3 +1,24 @@
+2018-10-01  Dominik Infuehr  <dinfuehr@igalia.com>
+
+        Split NaN-check into separate test
+        https://bugs.webkit.org/show_bug.cgi?id=190010
+
+        Reviewed by Saam Barati.
+
+        DataView exposes NaN-representation, which is not necessarily the same on each
+        architecture. Therefore move the check of the NaN-representation into its own
+        file such that we can disable this test on MIPS where NaN-representation can be
+        different on older CPUs.
+
+        * stress/dataview-jit-set-nan.js: Added.
+        (assert):
+        (test.storeLittleEndian):
+        (test.storeBigEndian):
+        (test.store):
+        (test):
+        * stress/dataview-jit-set.js:
+        (test5):
+
 2018-10-01  Commit Queue  <commit-queue@webkit.org>
 
         Unreviewed, rolling out r236647.
diff --git a/JSTests/stress/dataview-jit-set-nan.js b/JSTests/stress/dataview-jit-set-nan.js
new file mode 100644 (file)
index 0000000..cbd1cdb
--- /dev/null
@@ -0,0 +1,52 @@
+//@ skip if $architecture == "mips"
+
+"use strict";
+
+function assert(b) {
+    if (!b)
+        throw new Error;
+}
+
+function test() {
+    function storeLittleEndian(dv, index, value) {
+        dv.setFloat32(index, value, true);
+    }
+    noInline(storeLittleEndian);
+
+    function storeBigEndian(dv, index, value) {
+        dv.setFloat32(index, value, false);
+    }
+    noInline(storeBigEndian);
+
+    function store(dv, index, value, littleEndian) {
+        dv.setFloat32(index, value, littleEndian);
+    }
+    noInline(store);
+
+    let buffer = new ArrayBuffer(4);
+    let arr = new Float32Array(buffer);
+    let bits = new Uint32Array(buffer);
+    let dv = new DataView(buffer);
+
+    for (let i = 0; i < 10000; ++i) {
+        storeLittleEndian(dv, 0, 1.5);
+        assert(arr[0] === 1.5);
+
+        storeLittleEndian(dv, 0, 12912.124123215122);
+        assert(arr[0] === 12912.1240234375);
+        assert(bits[0] === 0x4649c07f);
+
+        storeLittleEndian(dv, 0, NaN);
+        assert(isNaN(arr[0]));
+        assert(bits[0] === 0x7FC00000);
+
+        storeLittleEndian(dv, 0, 2.3879393e-38);
+        assert(arr[0] === 2.387939260590663e-38);
+        assert(bits[0] === 0x01020304);
+
+        storeBigEndian(dv, 0, 2.3879393e-38);
+        assert(arr[0] === 1.539989614439558e-36);
+        assert(bits[0] === 0x04030201);
+    }
+}
+test();
\ No newline at end of file
index b32ec89..9238eb7 100644 (file)
@@ -314,7 +314,6 @@ function test5() {
 
         storeLittleEndian(dv, 0, NaN);
         assert(isNaN(arr[0]));
-        assert(bits[0] === 0x7FC00000);
 
         storeLittleEndian(dv, 0, 2.3879393e-38);
         assert(arr[0] === 2.387939260590663e-38);