Index: test/mjsunit/simd/int32x4.js |
diff --git a/test/mjsunit/simd/int32x4.js b/test/mjsunit/simd/int32x4.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d56a37b7e748b62404230d28bdf09720f1a28eb2 |
--- /dev/null |
+++ b/test/mjsunit/simd/int32x4.js |
@@ -0,0 +1,873 @@ |
+// Copyright 2011 the V8 project authors. All rights reserved. |
+// Redistribution and use in source and binary forms, with or without |
+// modification, are permitted provided that the following conditions are |
+// met: |
+// |
+// * Redistributions of source code must retain the above copyright |
+// notice, this list of conditions and the following disclaimer. |
+// * Redistributions in binary form must reproduce the above |
+// copyright notice, this list of conditions and the following |
+// disclaimer in the documentation and/or other materials provided |
+// with the distribution. |
+// * Neither the name of Google Inc. nor the names of its |
+// contributors may be used to endorse or promote products derived |
+// from this software without specific prior written permission. |
+// |
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+ |
+// Flags: --simd_object --allow-natives-syntax |
+ |
+function testConstructor() { |
+ var u4 = int32x4(1, 2, 3, 4); |
+ var new_u4 = new int32x4(1, 2, 3, 4); |
+ assertEquals(1, u4.x); |
+ assertEquals(2, u4.y); |
+ assertEquals(3, u4.z); |
+ assertEquals(4, u4.w); |
+ assertEquals(1, new_u4.x); |
+ assertEquals(2, new_u4.y); |
+ assertEquals(3, new_u4.z); |
+ assertEquals(4, new_u4.w); |
+} |
+ |
+testConstructor(); |
+ |
+function testBoolConstructor() { |
+ var u4 = int32x4.bool(true, false, true, false); |
+ assertEquals(-1, u4.x); |
+ assertEquals(0, u4.y); |
+ assertEquals(-1, u4.z); |
+ assertEquals(0, u4.w); |
+ |
+ var new_u4 = int32x4.bool(false, true, false, true); |
+ assertEquals(0, new_u4.x); |
+ assertEquals(-1, new_u4.y); |
+ assertEquals(0, new_u4.z); |
+ assertEquals(-1, new_u4.w); |
+} |
+ |
+testBoolConstructor(); |
+testBoolConstructor(); |
+%OptimizeFunctionOnNextCall(testBoolConstructor); |
+testBoolConstructor(); |
+ |
+function testSplatConstructor() { |
+ var u4 = int32x4.splat(4); |
+ assertEquals(4, u4.x); |
+ assertEquals(4, u4.y); |
+ assertEquals(4, u4.z); |
+ assertEquals(4, u4.w); |
+} |
+ |
+testSplatConstructor(); |
+testSplatConstructor(); |
+%OptimizeFunctionOnNextCall(testSplatConstructor); |
+testSplatConstructor(); |
+ |
+function testTypeof() { |
+ var u4 = int32x4(1, 2, 3, 4); |
+ assertEquals(typeof(u4), "int32x4"); |
+ |
+ var new_u4 = new int32x4(1, 2, 3, 4); |
+ assertEquals(typeof(new_u4), "object"); |
+ assertEquals(typeof(new_u4.valueOf()), "int32x4"); |
+ assertEquals(Object.prototype.toString.call(new_u4), "[object int32x4]"); |
+} |
+ |
+testTypeof(); |
+ |
+function testSignMaskGetter() { |
+ var a = int32x4(0x80000000 - 0xFFFFFFFF - 1, 0x7000000, -1, 0x0); |
+ assertEquals(0x5, a.signMask); |
+ var b = int32x4(0x0, 0x0, 0x0, 0x0); |
+ assertEquals(0x0, b.signMask); |
+ var c = int32x4(-1, -1, -1, -1); |
+ assertEquals(0xf, c.signMask); |
+} |
+ |
+testSignMaskGetter(); |
+testSignMaskGetter(); |
+%OptimizeFunctionOnNextCall(testSignMaskGetter); |
+testSignMaskGetter(); |
+ |
+ |
+function testSIMDAnd() { |
+ var m = int32x4(0xAAAAAAAA - 0xFFFFFFFF - 1, 0xAAAAAAAA - 0xFFFFFFFF - 1, |
+ 0xAAAAAAAA - 0xFFFFFFFF - 1, 0xAAAAAAAA - 0xFFFFFFFF - 1); |
+ var n = int32x4(0x55555555, 0x55555555, 0x55555555, 0x55555555); |
+ assertEquals(0xAAAAAAAA - 0xFFFFFFFF - 1, m.x); |
+ assertEquals(0xAAAAAAAA - 0xFFFFFFFF - 1, m.y); |
+ assertEquals(0xAAAAAAAA - 0xFFFFFFFF - 1, m.z); |
+ assertEquals(0xAAAAAAAA - 0xFFFFFFFF - 1, m.w); |
+ assertEquals(0x55555555, n.x); |
+ assertEquals(0x55555555, n.y); |
+ assertEquals(0x55555555, n.z); |
+ assertEquals(0x55555555, n.w); |
+ assertEquals(true, n.flagX); |
+ assertEquals(true, n.flagY); |
+ assertEquals(true, n.flagZ); |
+ assertEquals(true, n.flagW); |
+ o = SIMD.int32x4.and(m,n); // and |
+ assertEquals(0x0, o.x); |
+ assertEquals(0x0, o.y); |
+ assertEquals(0x0, o.z); |
+ assertEquals(0x0, o.w); |
+ assertEquals(false, o.flagX); |
+ assertEquals(false, o.flagY); |
+ assertEquals(false, o.flagZ); |
+ assertEquals(false, o.flagW); |
+} |
+ |
+testSIMDAnd(); |
+testSIMDAnd(); |
+%OptimizeFunctionOnNextCall(testSIMDAnd); |
+testSIMDAnd(); |
+ |
+function testSIMDOr() { |
+ var m = int32x4(0xAAAAAAAA - 0xFFFFFFFF - 1, 0xAAAAAAAA - 0xFFFFFFFF - 1, |
+ 0xAAAAAAAA - 0xFFFFFFFF - 1, 0xAAAAAAAA - 0xFFFFFFFF - 1); |
+ var n = int32x4(0x55555555, 0x55555555, 0x55555555, 0x55555555); |
+ var o = SIMD.int32x4.or(m,n); // or |
+ assertEquals(-1, o.x); |
+ assertEquals(-1, o.y); |
+ assertEquals(-1, o.z); |
+ assertEquals(-1, o.w); |
+ assertEquals(true, o.flagX); |
+ assertEquals(true, o.flagY); |
+ assertEquals(true, o.flagZ); |
+ assertEquals(true, o.flagW); |
+} |
+ |
+testSIMDOr(); |
+testSIMDOr(); |
+%OptimizeFunctionOnNextCall(testSIMDOr); |
+testSIMDOr(); |
+ |
+function testSIMDInt32x4Or() { |
+ var m = int32x4(0xAAAAAAAA - 0xFFFFFFFF - 1, 0xAAAAAAAA - 0xFFFFFFFF - 1, |
+ 0xAAAAAAAA - 0xFFFFFFFF - 1, 0xAAAAAAAA - 0xFFFFFFFF - 1); |
+ var n = int32x4(0xAAAAAAAA - 0xFFFFFFFF - 1, 0xAAAAAAAA - 0xFFFFFFFF - 1, |
+ 0xAAAAAAAA - 0xFFFFFFFF - 1, 0xAAAAAAAA - 0xFFFFFFFF - 1); |
+ var o = SIMD.int32x4.xor(m,n); // xor |
+ assertEquals(0x0, o.x); |
+ assertEquals(0x0, o.y); |
+ assertEquals(0x0, o.z); |
+ assertEquals(0x0, o.w); |
+ assertEquals(false, o.flagX); |
+ assertEquals(false, o.flagY); |
+ assertEquals(false, o.flagZ); |
+ assertEquals(false, o.flagW); |
+} |
+ |
+testSIMDInt32x4Or(); |
+testSIMDInt32x4Or(); |
+%OptimizeFunctionOnNextCall(testSIMDInt32x4Or); |
+testSIMDInt32x4Or(); |
+ |
+function testSIMDNot() { |
+ var m = int32x4(0xAAAAAAAA - 0xFFFFFFFF - 1, 0xAAAAAAAA - 0xFFFFFFFF - 1, |
+ 0xAAAAAAAA - 0xFFFFFFFF - 1, 0xAAAAAAAA - 0xFFFFFFFF - 1); |
+ var n = int32x4(0x55555555, 0x55555555, 0x55555555, 0x55555555); |
+ m = SIMD.int32x4.not(m); |
+ n = SIMD.int32x4.not(n); |
+ assertEquals(0xAAAAAAAA - 0xFFFFFFFF - 1, n.x); |
+ assertEquals(0xAAAAAAAA - 0xFFFFFFFF - 1, n.y); |
+ assertEquals(0xAAAAAAAA - 0xFFFFFFFF - 1, n.z); |
+ assertEquals(0xAAAAAAAA - 0xFFFFFFFF - 1, n.w); |
+ assertEquals(0x55555555, m.x); |
+ assertEquals(0x55555555, m.y); |
+ assertEquals(0x55555555, m.z); |
+ assertEquals(0x55555555, m.w); |
+} |
+ |
+testSIMDNot(); |
+testSIMDNot(); |
+%OptimizeFunctionOnNextCall(testSIMDNot); |
+testSIMDNot(); |
+ |
+function testSIMDNegu32() { |
+ var m = int32x4(-1, 1, -1, 1); |
+ m = SIMD.int32x4.neg(m); |
+ assertEquals(1, m.x); |
+ assertEquals(-1, m.y); |
+ assertEquals(1, m.z); |
+ assertEquals(-1, m.w); |
+} |
+ |
+testSIMDNegu32(); |
+testSIMDNegu32(); |
+%OptimizeFunctionOnNextCall(testSIMDNegu32); |
+testSIMDNegu32(); |
+ |
+function testSIMDSelect() { |
+ var m = int32x4.bool(true, true, false, false); |
+ var t = float32x4(1.0, 2.0, 3.0, 4.0); |
+ var f = float32x4(5.0, 6.0, 7.0, 8.0); |
+ var s = SIMD.int32x4.select(m, t, f); |
+ assertEquals(1.0, s.x); |
+ assertEquals(2.0, s.y); |
+ assertEquals(7.0, s.z); |
+ assertEquals(8.0, s.w); |
+} |
+ |
+testSIMDSelect(); |
+testSIMDSelect(); |
+%OptimizeFunctionOnNextCall(testSIMDSelect); |
+testSIMDSelect(); |
+ |
+ |
+function testSIMDWithXu32() { |
+ var a = int32x4(1, 2, 3, 4); |
+ var c = SIMD.int32x4.withX(a, 20); |
+ assertEquals(20, c.x); |
+ assertEquals(2, c.y); |
+ assertEquals(3, c.z); |
+ assertEquals(4, c.w); |
+} |
+ |
+testSIMDWithXu32(); |
+testSIMDWithXu32(); |
+%OptimizeFunctionOnNextCall(testSIMDWithXu32); |
+testSIMDWithXu32(); |
+ |
+function testSIMDWithYu32() { |
+ var a = int32x4(1, 2, 3, 4); |
+ var c = SIMD.int32x4.withY(a, 20); |
+ assertEquals(1, c.x); |
+ assertEquals(20, c.y); |
+ assertEquals(3, c.z); |
+ assertEquals(4, c.w); |
+} |
+ |
+testSIMDWithYu32(); |
+testSIMDWithYu32(); |
+%OptimizeFunctionOnNextCall(testSIMDWithYu32); |
+testSIMDWithYu32(); |
+ |
+function testSIMDWithZu32() { |
+ var a = int32x4(1, 2, 3, 4); |
+ var c = SIMD.int32x4.withZ(a, 20); |
+ assertEquals(1, c.x); |
+ assertEquals(2, c.y); |
+ assertEquals(20, c.z); |
+ assertEquals(4, c.w); |
+} |
+ |
+testSIMDWithZu32(); |
+testSIMDWithZu32(); |
+%OptimizeFunctionOnNextCall(testSIMDWithZu32); |
+testSIMDWithZu32(); |
+ |
+function testSIMDWithWu32() { |
+ var a = int32x4(1, 2, 3, 4); |
+ var c = SIMD.int32x4.withW(a, 20); |
+ assertEquals(1, c.x); |
+ assertEquals(2, c.y); |
+ assertEquals(3, c.z); |
+ assertEquals(20, c.w); |
+} |
+ |
+testSIMDWithWu32(); |
+testSIMDWithWu32(); |
+%OptimizeFunctionOnNextCall(testSIMDWithWu32); |
+testSIMDWithWu32(); |
+ |
+function testSIMDWithFlagX() { |
+ var a = int32x4.bool(true, false, true, false); |
+ |
+ // boolean |
+ var c = SIMD.int32x4.withFlagX(a, true); |
+ assertEquals(true, c.flagX); |
+ assertEquals(false, c.flagY); |
+ assertEquals(true, c.flagZ); |
+ assertEquals(false, c.flagW); |
+ c = SIMD.int32x4.withFlagX(a, false); |
+ assertEquals(false, c.flagX); |
+ assertEquals(false, c.flagY); |
+ assertEquals(true, c.flagZ); |
+ assertEquals(false, c.flagW); |
+ assertEquals(0x0, c.x); |
+ assertEquals(0x0, c.y); |
+ assertEquals(-1, c.z); |
+ assertEquals(0x0, c.w); |
+ |
+ // smi |
+ c = SIMD.int32x4.withFlagX(a, 2); |
+ assertEquals(true, c.flagX); |
+ assertEquals(false, c.flagY); |
+ assertEquals(true, c.flagZ); |
+ assertEquals(false, c.flagW); |
+ assertEquals(-1, c.x); |
+ assertEquals(0x0, c.y); |
+ assertEquals(-1, c.z); |
+ assertEquals(0x0, c.w); |
+ c = SIMD.int32x4.withFlagX(a, 0); |
+ assertEquals(false, c.flagX); |
+ assertEquals(false, c.flagY); |
+ assertEquals(true, c.flagZ); |
+ assertEquals(false, c.flagW); |
+ assertEquals(0x0, c.x); |
+ assertEquals(0x0, c.y); |
+ assertEquals(-1, c.z); |
+ assertEquals(0x0, c.w); |
+ |
+ // string |
+ c = SIMD.int32x4.withFlagX(a, 'true'); |
+ assertEquals(true, c.flagX); |
+ assertEquals(false, c.flagY); |
+ assertEquals(true, c.flagZ); |
+ assertEquals(false, c.flagW); |
+ assertEquals(-1, c.x); |
+ assertEquals(0x0, c.y); |
+ assertEquals(-1, c.z); |
+ assertEquals(0x0, c.w); |
+ c = SIMD.int32x4.withFlagX(a, ''); |
+ assertEquals(false, c.flagX); |
+ assertEquals(false, c.flagY); |
+ assertEquals(true, c.flagZ); |
+ assertEquals(false, c.flagW); |
+ assertEquals(0x0, c.x); |
+ assertEquals(0x0, c.y); |
+ assertEquals(-1, c.z); |
+ assertEquals(0x0, c.w); |
+ |
+ // heap number |
+ c = SIMD.int32x4.withFlagX(a, 3.14); |
+ assertEquals(true, c.flagX); |
+ assertEquals(false, c.flagY); |
+ assertEquals(true, c.flagZ); |
+ assertEquals(false, c.flagW); |
+ assertEquals(-1, c.x); |
+ assertEquals(0x0, c.y); |
+ assertEquals(-1, c.z); |
+ assertEquals(0x0, c.w); |
+ c = SIMD.int32x4.withFlagX(a, 0.0); |
+ assertEquals(false, c.flagX); |
+ assertEquals(false, c.flagY); |
+ assertEquals(true, c.flagZ); |
+ assertEquals(false, c.flagW); |
+ assertEquals(0x0, c.x); |
+ assertEquals(0x0, c.y); |
+ assertEquals(-1, c.z); |
+ assertEquals(0x0, c.w); |
+ |
+ // JS Array |
+ var array = [1]; |
+ c = SIMD.int32x4.withFlagX(a, array); |
+ assertEquals(true, c.flagX); |
+ assertEquals(false, c.flagY); |
+ assertEquals(true, c.flagZ); |
+ assertEquals(false, c.flagW); |
+ assertEquals(-1, c.x); |
+ assertEquals(0x0, c.y); |
+ assertEquals(-1, c.z); |
+ assertEquals(0x0, c.w); |
+ |
+ c = SIMD.int32x4.withFlagX(a, undefined); |
+ assertEquals(false, c.flagX); |
+ assertEquals(false, c.flagY); |
+ assertEquals(true, c.flagZ); |
+ assertEquals(false, c.flagW); |
+ assertEquals(0x0, c.x); |
+ assertEquals(0x0, c.y); |
+ assertEquals(-1, c.z); |
+ assertEquals(0x0, c.w); |
+} |
+ |
+testSIMDWithFlagX(); |
+testSIMDWithFlagX(); |
+%OptimizeFunctionOnNextCall(testSIMDWithFlagX); |
+testSIMDWithFlagX(); |
+ |
+function testSIMDWithFlagY() { |
+ var a = int32x4.bool(true, false, true, false); |
+ var c = SIMD.int32x4.withFlagY(a, true); |
+ assertEquals(true, c.flagX); |
+ assertEquals(true, c.flagY); |
+ assertEquals(true, c.flagZ); |
+ assertEquals(false, c.flagW); |
+ c = SIMD.int32x4.withFlagY(a, false); |
+ assertEquals(true, c.flagX); |
+ assertEquals(false, c.flagY); |
+ assertEquals(true, c.flagZ); |
+ assertEquals(false, c.flagW); |
+ assertEquals(-1, c.x); |
+ assertEquals(0x0, c.y); |
+ assertEquals(-1, c.z); |
+ assertEquals(0x0, c.w); |
+} |
+ |
+testSIMDWithFlagY(); |
+testSIMDWithFlagY(); |
+%OptimizeFunctionOnNextCall(testSIMDWithFlagY); |
+testSIMDWithFlagY(); |
+ |
+function testSIMDWithFlagZ() { |
+ var a = int32x4.bool(true, false, true, false); |
+ var c = SIMD.int32x4.withFlagZ(a, true); |
+ assertEquals(true, c.flagX); |
+ assertEquals(false, c.flagY); |
+ assertEquals(true, c.flagZ); |
+ assertEquals(false, c.flagW); |
+ c = SIMD.int32x4.withFlagZ(a, false); |
+ assertEquals(true, c.flagX); |
+ assertEquals(false, c.flagY); |
+ assertEquals(false, c.flagZ); |
+ assertEquals(false, c.flagW); |
+ assertEquals(-1, c.x); |
+ assertEquals(0x0, c.y); |
+ assertEquals(0x0, c.z); |
+ assertEquals(0x0, c.w); |
+} |
+ |
+testSIMDWithFlagZ(); |
+testSIMDWithFlagZ(); |
+%OptimizeFunctionOnNextCall(testSIMDWithFlagZ); |
+testSIMDWithFlagZ(); |
+ |
+function testSIMDWithFlagW() { |
+ var a = int32x4.bool(true, false, true, false); |
+ var c = SIMD.int32x4.withFlagW(a, true); |
+ assertEquals(true, c.flagX); |
+ assertEquals(false, c.flagY); |
+ assertEquals(true, c.flagZ); |
+ assertEquals(true, c.flagW); |
+ c = SIMD.int32x4.withFlagW(a, false); |
+ assertEquals(true, c.flagX); |
+ assertEquals(false, c.flagY); |
+ assertEquals(true, c.flagZ); |
+ assertEquals(false, c.flagW); |
+ assertEquals(-1, c.x); |
+ assertEquals(0x0, c.y); |
+ assertEquals(-1, c.z); |
+ assertEquals(0x0, c.w); |
+} |
+ |
+testSIMDWithFlagW(); |
+testSIMDWithFlagW(); |
+%OptimizeFunctionOnNextCall(testSIMDWithFlagW); |
+testSIMDWithFlagW(); |
+ |
+function testSIMDAddu32() { |
+ var a = int32x4(-1, -1, 0x7fffffff, 0x0); |
+ var b = int32x4(0x1, -1, 0x1, -1); |
+ var c = SIMD.int32x4.add(a, b); |
+ assertEquals(0x0, c.x); |
+ assertEquals(-2, c.y); |
+ assertEquals(0x80000000 - 0xFFFFFFFF - 1, c.z); |
+ assertEquals(-1, c.w); |
+} |
+ |
+testSIMDAddu32(); |
+testSIMDAddu32(); |
+%OptimizeFunctionOnNextCall(testSIMDAddu32); |
+testSIMDAddu32(); |
+ |
+function testSIMDSubu32() { |
+ var a = int32x4(-1, -1, 0x80000000 - 0xFFFFFFFF - 1, 0x0); |
+ var b = int32x4(0x1, -1, 0x1, -1); |
+ var c = SIMD.int32x4.sub(a, b); |
+ assertEquals(-2, c.x); |
+ assertEquals(0x0, c.y); |
+ assertEquals(0x7FFFFFFF, c.z); |
+ assertEquals(0x1, c.w); |
+} |
+ |
+testSIMDSubu32(); |
+testSIMDSubu32(); |
+%OptimizeFunctionOnNextCall(testSIMDSubu32); |
+testSIMDSubu32(); |
+ |
+function testSIMDMulu32() { |
+ var a = int32x4(-1, -1, 0x80000000 - 0xFFFFFFFF - 1, 0x0); |
+ var b = int32x4(0x1, -1, 0x80000000 - 0xFFFFFFFF - 1, -1); |
+ var c = SIMD.int32x4.mul(a, b); |
+ assertEquals(-1, c.x); |
+ assertEquals(0x1, c.y); |
+ assertEquals(0x0, c.z); |
+ assertEquals(0x0, c.w); |
+} |
+ |
+testSIMDMulu32(); |
+testSIMDMulu32(); |
+%OptimizeFunctionOnNextCall(testSIMDMulu32); |
+testSIMDMulu32(); |
+ |
+function testSIMDShuffleu32() { |
+ var m = int32x4(1, 2, 3, 4); |
+ var xxxx = SIMD.int32x4.shuffle(m, SIMD.XXXX); |
+ assertEquals(1, xxxx.x); |
+ assertEquals(1, xxxx.y); |
+ assertEquals(1, xxxx.z); |
+ assertEquals(1, xxxx.w); |
+ var yyyy = SIMD.int32x4.shuffle(m, SIMD.YYYY); |
+ assertEquals(2, yyyy.x); |
+ assertEquals(2, yyyy.y); |
+ assertEquals(2, yyyy.z); |
+ assertEquals(2, yyyy.w); |
+ var zzzz = SIMD.int32x4.shuffle(m, SIMD.ZZZZ); |
+ assertEquals(3, zzzz.x); |
+ assertEquals(3, zzzz.y); |
+ assertEquals(3, zzzz.z); |
+ assertEquals(3, zzzz.w); |
+ var wwww = SIMD.int32x4.shuffle(m, SIMD.WWWW); |
+ assertEquals(4, wwww.x); |
+ assertEquals(4, wwww.y); |
+ assertEquals(4, wwww.z); |
+ assertEquals(4, wwww.w); |
+ var wzyx = SIMD.int32x4.shuffle(m, SIMD.WZYX); |
+ assertEquals(4, wzyx.x); |
+ assertEquals(3, wzyx.y); |
+ assertEquals(2, wzyx.z); |
+ assertEquals(1, wzyx.w); |
+ var wwzz = SIMD.int32x4.shuffle(m, SIMD.WWZZ); |
+ assertEquals(4, wwzz.x); |
+ assertEquals(4, wwzz.y); |
+ assertEquals(3, wwzz.z); |
+ assertEquals(3, wwzz.w); |
+ var xxyy = SIMD.int32x4.shuffle(m, SIMD.XXYY); |
+ assertEquals(1, xxyy.x); |
+ assertEquals(1, xxyy.y); |
+ assertEquals(2, xxyy.z); |
+ assertEquals(2, xxyy.w); |
+ var yyww = SIMD.int32x4.shuffle(m, SIMD.YYWW); |
+ assertEquals(2, yyww.x); |
+ assertEquals(2, yyww.y); |
+ assertEquals(4, yyww.z); |
+ assertEquals(4, yyww.w); |
+} |
+ |
+testSIMDShuffleu32(); |
+testSIMDShuffleu32(); |
+%OptimizeFunctionOnNextCall(testSIMDShuffleu32); |
+testSIMDShuffleu32(); |
+ |
+function testInt32x4ArrayBasic() { |
+ var a = new Int32x4Array(1); |
+ assertEquals(1, a.length); |
+ assertEquals(16, a.byteLength); |
+ assertEquals(16, a.BYTES_PER_ELEMENT); |
+ assertEquals(16, Int32x4Array.BYTES_PER_ELEMENT); |
+ assertEquals(0, a.byteOffset); |
+ assertTrue(undefined != a.buffer); |
+ var b = new Int32x4Array(4); |
+ assertEquals(4, b.length); |
+ assertEquals(64, b.byteLength); |
+ assertEquals(16, b.BYTES_PER_ELEMENT); |
+ assertEquals(16, Int32x4Array.BYTES_PER_ELEMENT); |
+ assertEquals(0, b.byteOffset); |
+ assertTrue(undefined != b.buffer); |
+} |
+ |
+testInt32x4ArrayBasic(); |
+ |
+function testInt32x4ArrayGetAndSet() { |
+ var a = new Int32x4Array(4); |
+ a[0] = int32x4(1, 2, 3, 4); |
+ a[1] = int32x4(5, 6, 7, 8); |
+ a[2] = int32x4(9, 10, 11, 12); |
+ a[3] = int32x4(13, 14, 15, 16); |
+ assertEquals(a[0].x, 1); |
+ assertEquals(a[0].y, 2); |
+ assertEquals(a[0].z, 3); |
+ assertEquals(a[0].w, 4); |
+ |
+ assertEquals(a[1].x, 5); |
+ assertEquals(a[1].y, 6); |
+ assertEquals(a[1].z, 7); |
+ assertEquals(a[1].w, 8); |
+ |
+ assertEquals(a[2].x, 9); |
+ assertEquals(a[2].y, 10); |
+ assertEquals(a[2].z, 11); |
+ assertEquals(a[2].w, 12); |
+ |
+ assertEquals(a[3].x, 13); |
+ assertEquals(a[3].y, 14); |
+ assertEquals(a[3].z, 15); |
+ assertEquals(a[3].w, 16); |
+ |
+ var b = new Int32x4Array(4); |
+ b.setAt(0, int32x4(1, 2, 3, 4)); |
+ b.setAt(1, int32x4(5, 6, 7, 8)); |
+ b.setAt(2, int32x4(9, 10, 11, 12)); |
+ b.setAt(3, int32x4(13, 14, 15, 16)); |
+ |
+ assertEquals(b.getAt(0).x, 1); |
+ assertEquals(b.getAt(0).y, 2); |
+ assertEquals(b.getAt(0).z, 3); |
+ assertEquals(b.getAt(0).w, 4); |
+ |
+ assertEquals(b.getAt(1).x, 5); |
+ assertEquals(b.getAt(1).y, 6); |
+ assertEquals(b.getAt(1).z, 7); |
+ assertEquals(b.getAt(1).w, 8); |
+ |
+ assertEquals(b.getAt(2).x, 9); |
+ assertEquals(b.getAt(2).y, 10); |
+ assertEquals(b.getAt(2).z, 11); |
+ assertEquals(b.getAt(2).w, 12); |
+ |
+ assertEquals(b.getAt(3).x, 13); |
+ assertEquals(b.getAt(3).y, 14); |
+ assertEquals(b.getAt(3).z, 15); |
+ assertEquals(b.getAt(3).w, 16); |
+} |
+ |
+testInt32x4ArrayGetAndSet(); |
+ |
+function testInt32x4ArraySwap() { |
+ var a = new Int32x4Array(4); |
+ a[0] = int32x4(1, 2, 3, 4); |
+ a[1] = int32x4(5, 6, 7, 8); |
+ a[2] = int32x4(9, 10, 11, 12); |
+ a[3] = int32x4(13, 14, 15, 16); |
+ |
+ // Swap element 0 and element 3 |
+ var t = a[0]; |
+ a[0] = a[3]; |
+ a[3] = t; |
+ |
+ assertEquals(a[3].x, 1); |
+ assertEquals(a[3].y, 2); |
+ assertEquals(a[3].z, 3); |
+ assertEquals(a[3].w, 4); |
+ |
+ assertEquals(a[1].x, 5); |
+ assertEquals(a[1].y, 6); |
+ assertEquals(a[1].z, 7); |
+ assertEquals(a[1].w, 8); |
+ |
+ assertEquals(a[2].x, 9); |
+ assertEquals(a[2].y, 10); |
+ assertEquals(a[2].z, 11); |
+ assertEquals(a[2].w, 12); |
+ |
+ assertEquals(a[0].x, 13); |
+ assertEquals(a[0].y, 14); |
+ assertEquals(a[0].z, 15); |
+ assertEquals(a[0].w, 16); |
+} |
+ |
+testInt32x4ArraySwap(); |
+testInt32x4ArraySwap(); |
+%OptimizeFunctionOnNextCall(testInt32x4ArraySwap); |
+testInt32x4ArraySwap(); |
+ |
+function testInt32x4ArrayCopy() { |
+ var a = new Int32x4Array(4); |
+ a[0] = int32x4(1, 2, 3, 4); |
+ a[1] = int32x4(5, 6, 7, 8); |
+ a[2] = int32x4(9, 10, 11, 12); |
+ a[3] = int32x4(13, 14, 15, 16); |
+ var b = new Int32x4Array(a); |
+ assertEquals(a[0].x, b[0].x); |
+ assertEquals(a[0].y, b[0].y); |
+ assertEquals(a[0].z, b[0].z); |
+ assertEquals(a[0].w, b[0].w); |
+ |
+ assertEquals(a[1].x, b[1].x); |
+ assertEquals(a[1].y, b[1].y); |
+ assertEquals(a[1].z, b[1].z); |
+ assertEquals(a[1].w, b[1].w); |
+ |
+ assertEquals(a[2].x, b[2].x); |
+ assertEquals(a[2].y, b[2].y); |
+ assertEquals(a[2].z, b[2].z); |
+ assertEquals(a[2].w, b[2].w); |
+ |
+ assertEquals(a[3].x, b[3].x); |
+ assertEquals(a[3].y, b[3].y); |
+ assertEquals(a[3].z, b[3].z); |
+ assertEquals(a[3].w, b[3].w); |
+ |
+ a[2] = int32x4(17, 18, 19, 20); |
+ |
+ assertEquals(a[2].x, 17); |
+ assertEquals(a[2].y, 18); |
+ assertEquals(a[2].z, 19); |
+ assertEquals(a[2].w, 20); |
+ |
+ assertTrue(a[2].x != b[2].x); |
+ assertTrue(a[2].y != b[2].y); |
+ assertTrue(a[2].z != b[2].z); |
+ assertTrue(a[2].w != b[2].w); |
+} |
+ |
+testInt32x4ArrayCopy(); |
+ |
+function testInt32x4ArrayViewBasic() { |
+ var a = new Uint32Array(8); |
+ // view with no offset. |
+ var b = new Int32x4Array(a.buffer, 0); |
+ // view with offset. |
+ var c = new Int32x4Array(a.buffer, 16); |
+ // view with no offset but shorter than original list. |
+ var d = new Int32x4Array(a.buffer, 0, 1); |
+ assertEquals(a.length, 8); |
+ assertEquals(b.length, 2); |
+ assertEquals(c.length, 1); |
+ assertEquals(d.length, 1); |
+ assertEquals(a.byteLength, 32); |
+ assertEquals(b.byteLength, 32); |
+ assertEquals(c.byteLength, 16); |
+ assertEquals(d.byteLength, 16) |
+ assertEquals(a.byteOffset, 0); |
+ assertEquals(b.byteOffset, 0); |
+ assertEquals(c.byteOffset, 16); |
+ assertEquals(d.byteOffset, 0); |
+} |
+ |
+testInt32x4ArrayViewBasic(); |
+ |
+function testInt32x4ArrayViewValues() { |
+ var a = new Uint32Array(8); |
+ var b = new Int32x4Array(a.buffer, 0); |
+ var c = new Int32x4Array(a.buffer, 16); |
+ var d = new Int32x4Array(a.buffer, 0, 1); |
+ var start = 100; |
+ for (var i = 0; i < b.length; i++) { |
+ assertEquals(0, b[i].x); |
+ assertEquals(0, b[i].y); |
+ assertEquals(0, b[i].z); |
+ assertEquals(0, b[i].w); |
+ } |
+ for (var i = 0; i < c.length; i++) { |
+ assertEquals(0, c[i].x); |
+ assertEquals(0, c[i].y); |
+ assertEquals(0, c[i].z); |
+ assertEquals(0, c[i].w); |
+ } |
+ for (var i = 0; i < d.length; i++) { |
+ assertEquals(0, d[i].x); |
+ assertEquals(0, d[i].y); |
+ assertEquals(0, d[i].z); |
+ assertEquals(0, d[i].w); |
+ } |
+ for (var i = 0; i < a.length; i++) { |
+ a[i] = i+start; |
+ } |
+ for (var i = 0; i < b.length; i++) { |
+ assertTrue(0 != b[i].x); |
+ assertTrue(0 != b[i].y); |
+ assertTrue(0 != b[i].z); |
+ assertTrue(0 != b[i].w); |
+ } |
+ for (var i = 0; i < c.length; i++) { |
+ assertTrue(0 != c[i].x); |
+ assertTrue(0 != c[i].y); |
+ assertTrue(0 != c[i].z); |
+ assertTrue(0 != c[i].w); |
+ } |
+ for (var i = 0; i < d.length; i++) { |
+ assertTrue(0 != d[i].x); |
+ assertTrue(0 != d[i].y); |
+ assertTrue(0 != d[i].z); |
+ assertTrue(0 != d[i].w); |
+ } |
+ assertEquals(start+0, b[0].x); |
+ assertEquals(start+1, b[0].y); |
+ assertEquals(start+2, b[0].z); |
+ assertEquals(start+3, b[0].w); |
+ assertEquals(start+4, b[1].x); |
+ assertEquals(start+5, b[1].y); |
+ assertEquals(start+6, b[1].z); |
+ assertEquals(start+7, b[1].w); |
+ |
+ assertEquals(start+4, c[0].x); |
+ assertEquals(start+5, c[0].y); |
+ assertEquals(start+6, c[0].z); |
+ assertEquals(start+7, c[0].w); |
+ |
+ assertEquals(start+0, d[0].x); |
+ assertEquals(start+1, d[0].y); |
+ assertEquals(start+2, d[0].z); |
+ assertEquals(start+3, d[0].w); |
+} |
+ |
+testInt32x4ArrayViewValues(); |
+ |
+function testViewOnInt32x4Array() { |
+ var a = new Int32x4Array(4); |
+ a[0] = int32x4(1, 2, 3, 4); |
+ a[1] = int32x4(5, 6, 7, 8); |
+ a[2] = int32x4(9, 10, 11, 12); |
+ a[3] = int32x4(13, 14, 15, 16); |
+ assertEquals(a[0].x, 1); |
+ assertEquals(a[0].y, 2); |
+ assertEquals(a[0].z, 3); |
+ assertEquals(a[0].w, 4); |
+ |
+ assertEquals(a[1].x, 5); |
+ assertEquals(a[1].y, 6); |
+ assertEquals(a[1].z, 7); |
+ assertEquals(a[1].w, 8); |
+ |
+ assertEquals(a[2].x, 9); |
+ assertEquals(a[2].y, 10); |
+ assertEquals(a[2].z, 11); |
+ assertEquals(a[2].w, 12); |
+ |
+ assertEquals(a[3].x, 13); |
+ assertEquals(a[3].y, 14); |
+ assertEquals(a[3].z, 15); |
+ assertEquals(a[3].w, 16); |
+ |
+ // Create view on a. |
+ var b = new Uint32Array(a.buffer); |
+ assertEquals(b.length, 16); |
+ assertEquals(b.byteLength, 64); |
+ b[2] = 99.0; |
+ b[6] = 1.0; |
+ |
+ // Observe changes in "a" |
+ assertEquals(a[0].x, 1); |
+ assertEquals(a[0].y, 2); |
+ assertEquals(a[0].z, 99); |
+ assertEquals(a[0].w, 4); |
+ |
+ assertEquals(a[1].x, 5); |
+ assertEquals(a[1].y, 6); |
+ assertEquals(a[1].z, 1); |
+ assertEquals(a[1].w, 8); |
+ |
+ assertEquals(a[2].x, 9); |
+ assertEquals(a[2].y, 10); |
+ assertEquals(a[2].z, 11); |
+ assertEquals(a[2].w, 12); |
+ |
+ assertEquals(a[3].x, 13); |
+ assertEquals(a[3].y, 14); |
+ assertEquals(a[3].z, 15); |
+ assertEquals(a[3].w, 16); |
+} |
+ |
+testViewOnInt32x4Array(); |
+ |
+function testArrayOfInt32x4() { |
+ var a = []; |
+ var a4 = new Int32x4Array(2); |
+ for (var i = 0; i < a4.length; i++) { |
+ a[i] = int32x4(i, i + 1, i + 2, i + 3); |
+ a4[i] = int32x4(i, i + 1, i + 2, i + 3); |
+ } |
+ |
+ for (var i = 0; i < a4.length; i++) { |
+ assertEquals(a[i].x, a4[i].x); |
+ assertEquals(a[i].y, a4[i].y); |
+ assertEquals(a[i].z, a4[i].z); |
+ assertEquals(a[i].w, a4[i].w); |
+ } |
+} |
+ |
+testArrayOfInt32x4(); |