Source code

Revision control

Copy as Markdown

Other Tools

// |jit-test| skip-if: !wasmSimdEnabled() || !hasDisassembler() || wasmCompileMode() != "ion" || !getBuildConfiguration("arm64"); include:codegen-arm64-test.js
// A replace_lane fed by an extract_lane of at least its lane size moves the
// lane directly instead of through a general register.
for (const [replace, extract, expected] of [
["i8x16.replace_lane 15", "i32x4.extract_lane 3", "mov v0\\.b\\[15\\], v1\\.b\\[12\\]"],
["i8x16.replace_lane 2", "i16x8.extract_lane_s 5", "mov v0\\.b\\[2\\], v1\\.b\\[10\\]"],
["i8x16.replace_lane 7", "i8x16.extract_lane_u 9", "mov v0\\.b\\[7\\], v1\\.b\\[9\\]"],
["i16x8.replace_lane 1", "i32x4.extract_lane 2", "mov v0\\.h\\[1\\], v1\\.h\\[4\\]"],
["i32x4.replace_lane 0", "i32x4.extract_lane 3", "mov v0\\.s\\[0\\], v1\\.s\\[3\\]"],
["i64x2.replace_lane 1", "i64x2.extract_lane 0", "mov v0\\.d\\[1\\], v1\\.d\\[0\\]"],
]) {
codegenTestARM64_adhoc(
`(module
(func (export "f") (param v128 v128) (result v128)
(${replace} (local.get 0) (${extract} (local.get 1)))))`,
"f",
expected);
}
codegenTestARM64_adhoc(
`(module
(func (export "f") (param v128) (result v128)
(i32x4.replace_lane 1 (local.get 0) (i32x4.extract_lane 2 (local.get 0)))))`,
"f",
"mov v0\\.s\\[1\\], v0\\.s\\[2\\]");