blob: 99e61abc9e9470b181c94a1f61a7066b6a2719ee [file] [edit]
//@ requireOptions("--useWasmSIMD=1")
//@ skip if !$isSIMDPlatform
import { instantiate } from "../wabt-wrapper.js"
import * as assert from "../assert.js"
let wat = `
(module
(func (export "test_lower") (param i32 i32) (result i32) (local v128 v128)
v128.const i32x4 1 2 3 4
local.set 2
v128.const i32x4 5 6 7 8
local.set 3
local.get 2
local.get 3
local.get 0
local.get 1
i32.eq
select
i32x4.extract_lane 0
)
(func (export "test_upper") (param i32 i32) (result i32) (local v128 v128)
v128.const i32x4 1 2 3 4
local.set 2
v128.const i32x4 5 6 7 8
local.set 3
local.get 2
local.get 3
local.get 0
local.get 1
i32.eq
select
i32x4.extract_lane 3
)
(func (export "test_select_t_lower") (param i32 i32) (result i32) (local v128 v128)
v128.const i32x4 10 20 30 40
local.set 2
v128.const i32x4 50 60 70 80
local.set 3
local.get 2
local.get 3
local.get 0
local.get 1
i32.eq
select (result v128)
i32x4.extract_lane 0
)
(func (export "test_select_t_upper") (param i32 i32) (result i32) (local v128 v128)
v128.const i32x4 10 20 30 40
local.set 2
v128.const i32x4 50 60 70 80
local.set 3
local.get 2
local.get 3
local.get 0
local.get 1
i32.eq
select (result v128)
i32x4.extract_lane 3
)
)
`
async function test() {
const instance = await instantiate(wat, {}, { simd: true });
const { test_lower, test_upper, test_select_t_lower, test_select_t_upper } = instance.exports;
for (let i = 0; i < wasmTestLoopCount; i++) {
assert.eq(test_lower(42, 42), 1);
assert.eq(test_lower(42, 43), 5);
assert.eq(test_upper(42, 42), 4);
assert.eq(test_upper(42, 43), 8);
assert.eq(test_select_t_lower(42, 42), 10);
assert.eq(test_select_t_lower(42, 43), 50);
assert.eq(test_select_t_upper(42, 42), 40);
assert.eq(test_select_t_upper(42, 43), 80);
}
}
await assert.asyncTest(test())