if (!this.hasOwnProperty("SIMD"))
  quit();

load(libdir + 'simd.js');

setJitCompilerOption("ion.warmup.trigger", 50);

function f() {
    var i4 = SIMD.Int32x4(1, 2, 3, 4);

    var leet = Math.fround(13.37);
    var f4 = SIMD.Float32x4(-.5, -0, Infinity, leet);

    var compI = [
        [1,2,3,4],
        [2,3,4,1],
        [3,4,1,2],
        [4,1,2,3]
    ];

    var compF = [
        [-.5, -0, Infinity, leet],
        [-0, Infinity, leet, -.5],
        [Infinity, leet, -.5, -0],
        [leet, -.5, -0, Infinity]
    ];

    for (var i = 0; i < 150; i++) {
        // Variable lanes
        var r = SIMD.Float32x4.swizzle(f4, i % 4, (i + 1) % 4, (i + 2) % 4, (i + 3) % 4);
        assertEqX4(r, compF[i % 4]);

        // Constant lanes
        assertEqX4(SIMD.Float32x4.swizzle(f4, 3, 2, 1, 0), [leet, Infinity, -0, -.5]);

        // Variable lanes
        var r = SIMD.Int32x4.swizzle(i4, i % 4, (i + 1) % 4, (i + 2) % 4, (i + 3) % 4);
        assertEqX4(r, compI[i % 4]);

        // Constant lanes
        assertEqX4(SIMD.Int32x4.swizzle(i4, 3, 2, 1, 0), [4, 3, 2, 1]);
    }
}

function testBailouts(uglyDuckling) {
    var i4 = SIMD.Int32x4(1, 2, 3, 4);
    for (var i = 0; i < 150; i++) {
        // Test bailouts
        var value = i == 149 ? uglyDuckling : 0;
        var caught = false;
        try {
            assertEqX4(SIMD.Int32x4.swizzle(i4, value, 3, 2, 0), [1, 4, 3, 1]);
        } catch(e) {
            print(e);
            caught = true;
            assertEq(i, 149);
            assertEq(e instanceof TypeError, true);
        }
        assertEq(i < 149 || caught, true);
    }
}

function testInt32x4SwizzleBailout() {
    // Test out-of-bounds non-constant indices. This is expected to throw.
    var i4 = SIMD.Int32x4(1, 2, 3, 4);
    for (var i = 0; i < 150; i++) {
        assertEqX4(SIMD.Int32x4.swizzle(i4, i, 3, 2, 0), [i + 1, 4, 3, 1]);
    }
}

f();
testBailouts(-1);
testBailouts(4);
testBailouts(2.5);
testBailouts(undefined);
testBailouts(null);
testBailouts({});
testBailouts('one');
testBailouts(true);

try {
    testInt32x4SwizzleBailout();
    throw 'not caught';
} catch(e) {
    assertEq(e instanceof TypeError, true);
}

(function() {
    var zappa = 0;

    function testBailouts() {
        var i4 = SIMD.Int32x4(1, 2, 3, 4);
        for (var i = 0; i < 300; i++) {
            var value = i == 299 ? 2.5 : 1;
            SIMD.Int32x4.swizzle(i4, value, 3, 2, 0);
            zappa = i;
        }
    }

    try { testBailouts(); } catch (e) {}
    assertEq(zappa, 298);
})();
