summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/wasm/spec/spec/simd_address.wast.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/wasm/spec/spec/simd_address.wast.js')
-rw-r--r--js/src/jit-test/tests/wasm/spec/spec/simd_address.wast.js348
1 files changed, 348 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/spec/spec/simd_address.wast.js b/js/src/jit-test/tests/wasm/spec/spec/simd_address.wast.js
new file mode 100644
index 0000000000..c94be782b9
--- /dev/null
+++ b/js/src/jit-test/tests/wasm/spec/spec/simd_address.wast.js
@@ -0,0 +1,348 @@
+// |jit-test| skip-if: !wasmSimdEnabled()
+
+/* Copyright 2021 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// ./test/core/simd/simd_address.wast
+
+// ./test/core/simd/simd_address.wast:3
+let $0 = instantiate(`(module
+ (memory 1)
+ (data (i32.const 0) "\\00\\01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15")
+ (data (offset (i32.const 65505)) "\\16\\17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31")
+
+ (func (export "load_data_1") (param $$i i32) (result v128)
+ (v128.load offset=0 (local.get $$i)) ;; 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15
+ )
+ (func (export "load_data_2") (param $$i i32) (result v128)
+ (v128.load align=1 (local.get $$i)) ;; 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15
+ )
+ (func (export "load_data_3") (param $$i i32) (result v128)
+ (v128.load offset=1 align=1 (local.get $$i)) ;; 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15 0x00
+ )
+ (func (export "load_data_4") (param $$i i32) (result v128)
+ (v128.load offset=2 align=1 (local.get $$i)) ;; 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15 0x00 0x00
+ )
+ (func (export "load_data_5") (param $$i i32) (result v128)
+ (v128.load offset=15 align=1 (local.get $$i)) ;; 0x15 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
+ )
+
+ (func (export "store_data_0") (result v128)
+ (v128.store offset=0 (i32.const 0) (v128.const f32x4 0 1 2 3))
+ (v128.load offset=0 (i32.const 0))
+ )
+ (func (export "store_data_1") (result v128)
+ (v128.store align=1 (i32.const 0) (v128.const i32x4 0 1 2 3))
+ (v128.load align=1 (i32.const 0))
+ )
+ (func (export "store_data_2") (result v128)
+ (v128.store offset=1 align=1 (i32.const 0) (v128.const i16x8 0 1 2 3 4 5 6 7))
+ (v128.load offset=1 align=1 (i32.const 0))
+ )
+ (func (export "store_data_3") (result v128)
+ (v128.store offset=2 align=1 (i32.const 0) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15))
+ (v128.load offset=2 align=1 (i32.const 0))
+ )
+ (func (export "store_data_4") (result v128)
+ (v128.store offset=15 align=1 (i32.const 0) (v128.const i32x4 0 1 2 3))
+ (v128.load offset=15 (i32.const 0))
+ )
+ (func (export "store_data_5") (result v128)
+ (v128.store offset=65520 align=1 (i32.const 0) (v128.const i32x4 0 1 2 3))
+ (v128.load offset=65520 (i32.const 0))
+ )
+ (func (export "store_data_6") (param $$i i32)
+ (v128.store offset=1 align=1 (local.get $$i) (v128.const i32x4 0 1 2 3))
+ )
+)`);
+
+// ./test/core/simd/simd_address.wast:53
+assert_return(
+ () => invoke($0, `load_data_1`, [0]),
+ [i32x4([0x3020100, 0x7060504, 0x11100908, 0x15141312])],
+);
+
+// ./test/core/simd/simd_address.wast:54
+assert_return(
+ () => invoke($0, `load_data_2`, [0]),
+ [i32x4([0x3020100, 0x7060504, 0x11100908, 0x15141312])],
+);
+
+// ./test/core/simd/simd_address.wast:55
+assert_return(
+ () => invoke($0, `load_data_3`, [0]),
+ [i32x4([0x4030201, 0x8070605, 0x12111009, 0x151413])],
+);
+
+// ./test/core/simd/simd_address.wast:56
+assert_return(() => invoke($0, `load_data_4`, [0]), [i32x4([0x5040302, 0x9080706, 0x13121110, 0x1514])]);
+
+// ./test/core/simd/simd_address.wast:57
+assert_return(() => invoke($0, `load_data_5`, [0]), [i32x4([0x15, 0x0, 0x0, 0x0])]);
+
+// ./test/core/simd/simd_address.wast:59
+assert_return(
+ () => invoke($0, `load_data_1`, [0]),
+ [i16x8([0x100, 0x302, 0x504, 0x706, 0x908, 0x1110, 0x1312, 0x1514])],
+);
+
+// ./test/core/simd/simd_address.wast:60
+assert_return(
+ () => invoke($0, `load_data_2`, [0]),
+ [i16x8([0x100, 0x302, 0x504, 0x706, 0x908, 0x1110, 0x1312, 0x1514])],
+);
+
+// ./test/core/simd/simd_address.wast:61
+assert_return(
+ () => invoke($0, `load_data_3`, [0]),
+ [i16x8([0x201, 0x403, 0x605, 0x807, 0x1009, 0x1211, 0x1413, 0x15])],
+);
+
+// ./test/core/simd/simd_address.wast:62
+assert_return(
+ () => invoke($0, `load_data_4`, [0]),
+ [i16x8([0x302, 0x504, 0x706, 0x908, 0x1110, 0x1312, 0x1514, 0x0])],
+);
+
+// ./test/core/simd/simd_address.wast:63
+assert_return(() => invoke($0, `load_data_5`, [0]), [i16x8([0x15, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0])]);
+
+// ./test/core/simd/simd_address.wast:65
+assert_return(
+ () => invoke($0, `load_data_1`, [0]),
+ [
+ i8x16([0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15]),
+ ],
+);
+
+// ./test/core/simd/simd_address.wast:66
+assert_return(
+ () => invoke($0, `load_data_2`, [0]),
+ [
+ i8x16([0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15]),
+ ],
+);
+
+// ./test/core/simd/simd_address.wast:67
+assert_return(
+ () => invoke($0, `load_data_3`, [0]),
+ [
+ i8x16([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x0]),
+ ],
+);
+
+// ./test/core/simd/simd_address.wast:68
+assert_return(
+ () => invoke($0, `load_data_4`, [0]),
+ [
+ i8x16([0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x0, 0x0]),
+ ],
+);
+
+// ./test/core/simd/simd_address.wast:69
+assert_return(
+ () => invoke($0, `load_data_5`, [0]),
+ [
+ i8x16([0x15, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]),
+ ],
+);
+
+// ./test/core/simd/simd_address.wast:71
+assert_return(
+ () => invoke($0, `load_data_1`, [65505]),
+ [i32x4([0x19181716, 0x23222120, 0x27262524, 0x31302928])],
+);
+
+// ./test/core/simd/simd_address.wast:72
+assert_return(
+ () => invoke($0, `load_data_2`, [65505]),
+ [i32x4([0x19181716, 0x23222120, 0x27262524, 0x31302928])],
+);
+
+// ./test/core/simd/simd_address.wast:73
+assert_return(
+ () => invoke($0, `load_data_3`, [65505]),
+ [i32x4([0x20191817, 0x24232221, 0x28272625, 0x313029])],
+);
+
+// ./test/core/simd/simd_address.wast:74
+assert_return(
+ () => invoke($0, `load_data_4`, [65505]),
+ [i32x4([0x21201918, 0x25242322, 0x29282726, 0x3130])],
+);
+
+// ./test/core/simd/simd_address.wast:75
+assert_return(() => invoke($0, `load_data_5`, [65505]), [i32x4([0x31, 0x0, 0x0, 0x0])]);
+
+// ./test/core/simd/simd_address.wast:77
+assert_return(
+ () => invoke($0, `load_data_1`, [65505]),
+ [i16x8([0x1716, 0x1918, 0x2120, 0x2322, 0x2524, 0x2726, 0x2928, 0x3130])],
+);
+
+// ./test/core/simd/simd_address.wast:78
+assert_return(
+ () => invoke($0, `load_data_2`, [65505]),
+ [i16x8([0x1716, 0x1918, 0x2120, 0x2322, 0x2524, 0x2726, 0x2928, 0x3130])],
+);
+
+// ./test/core/simd/simd_address.wast:79
+assert_return(
+ () => invoke($0, `load_data_3`, [65505]),
+ [i16x8([0x1817, 0x2019, 0x2221, 0x2423, 0x2625, 0x2827, 0x3029, 0x31])],
+);
+
+// ./test/core/simd/simd_address.wast:80
+assert_return(
+ () => invoke($0, `load_data_4`, [65505]),
+ [i16x8([0x1918, 0x2120, 0x2322, 0x2524, 0x2726, 0x2928, 0x3130, 0x0])],
+);
+
+// ./test/core/simd/simd_address.wast:81
+assert_return(
+ () => invoke($0, `load_data_5`, [65505]),
+ [i16x8([0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0])],
+);
+
+// ./test/core/simd/simd_address.wast:83
+assert_return(
+ () => invoke($0, `load_data_1`, [65505]),
+ [
+ i8x16([0x16, 0x17, 0x18, 0x19, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x30, 0x31]),
+ ],
+);
+
+// ./test/core/simd/simd_address.wast:84
+assert_return(
+ () => invoke($0, `load_data_2`, [65505]),
+ [
+ i8x16([0x16, 0x17, 0x18, 0x19, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x30, 0x31]),
+ ],
+);
+
+// ./test/core/simd/simd_address.wast:85
+assert_return(
+ () => invoke($0, `load_data_3`, [65505]),
+ [
+ i8x16([0x17, 0x18, 0x19, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x30, 0x31, 0x0]),
+ ],
+);
+
+// ./test/core/simd/simd_address.wast:86
+assert_return(
+ () => invoke($0, `load_data_4`, [65505]),
+ [
+ i8x16([0x18, 0x19, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x30, 0x31, 0x0, 0x0]),
+ ],
+);
+
+// ./test/core/simd/simd_address.wast:87
+assert_return(
+ () => invoke($0, `load_data_5`, [65505]),
+ [
+ i8x16([0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]),
+ ],
+);
+
+// ./test/core/simd/simd_address.wast:89
+assert_trap(() => invoke($0, `load_data_3`, [-1]), `out of bounds memory access`);
+
+// ./test/core/simd/simd_address.wast:90
+assert_trap(() => invoke($0, `load_data_5`, [65506]), `out of bounds memory access`);
+
+// ./test/core/simd/simd_address.wast:92
+assert_return(
+ () => invoke($0, `store_data_0`, []),
+ [
+ new F32x4Pattern(
+ value("f32", 0),
+ value("f32", 1),
+ value("f32", 2),
+ value("f32", 3),
+ ),
+ ],
+);
+
+// ./test/core/simd/simd_address.wast:93
+assert_return(() => invoke($0, `store_data_1`, []), [i32x4([0x0, 0x1, 0x2, 0x3])]);
+
+// ./test/core/simd/simd_address.wast:94
+assert_return(() => invoke($0, `store_data_2`, []), [i16x8([0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7])]);
+
+// ./test/core/simd/simd_address.wast:95
+assert_return(
+ () => invoke($0, `store_data_3`, []),
+ [
+ i8x16([0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf]),
+ ],
+);
+
+// ./test/core/simd/simd_address.wast:96
+assert_return(() => invoke($0, `store_data_4`, []), [i32x4([0x0, 0x1, 0x2, 0x3])]);
+
+// ./test/core/simd/simd_address.wast:97
+assert_return(() => invoke($0, `store_data_5`, []), [i32x4([0x0, 0x1, 0x2, 0x3])]);
+
+// ./test/core/simd/simd_address.wast:99
+assert_trap(() => invoke($0, `store_data_6`, [-1]), `out of bounds memory access`);
+
+// ./test/core/simd/simd_address.wast:100
+assert_trap(() => invoke($0, `store_data_6`, [65535]), `out of bounds memory access`);
+
+// ./test/core/simd/simd_address.wast:104
+let $1 = instantiate(`(module
+ (memory 1)
+ (func (export "v128.load_offset_65521")
+ (drop (v128.load offset=65521 (i32.const 0)))
+ )
+)`);
+
+// ./test/core/simd/simd_address.wast:110
+assert_trap(() => invoke($1, `v128.load_offset_65521`, []), `out of bounds memory access`);
+
+// ./test/core/simd/simd_address.wast:112
+assert_malformed(
+ () => instantiate(`(memory 1) (func (drop (v128.load offset=-1 (i32.const 0))) ) `),
+ `unknown operator`,
+);
+
+// ./test/core/simd/simd_address.wast:122
+let $2 = instantiate(`(module
+ (memory 1)
+ (func (export "v128.store_offset_65521")
+ (v128.store offset=65521 (i32.const 0) (v128.const i32x4 0 0 0 0))
+ )
+)`);
+
+// ./test/core/simd/simd_address.wast:128
+assert_trap(() => invoke($2, `v128.store_offset_65521`, []), `out of bounds memory access`);
+
+// ./test/core/simd/simd_address.wast:130
+assert_malformed(
+ () => instantiate(`(memory 1) (func (v128.store offset=-1 (i32.const 0) (v128.const i32x4 0 0 0 0)) ) `),
+ `unknown operator`,
+);
+
+// ./test/core/simd/simd_address.wast:143
+assert_malformed(
+ () => instantiate(`(memory 1) (func (drop (v128.load offset=4294967296 (i32.const 0)))) `),
+ `i32 constant`,
+);
+
+// ./test/core/simd/simd_address.wast:151
+assert_malformed(
+ () => instantiate(`(memory 1) (func (v128.store offset=4294967296 (i32.const 0) (v128.const i32x4 0 0 0 0))) `),
+ `i32 constant`,
+);