| 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();
 | 
| 
 |