Implement iabs for x86 SIMD

This only covers the types necessary for implementing the Wasm SIMD spec--`i8x16`, `i16x8`, `i32x4`.
This commit is contained in:
Andrew Brown
2020-06-29 15:51:25 -07:00
parent 26bdf9c333
commit 737cf1d605
4 changed files with 28 additions and 0 deletions

View File

@@ -10,6 +10,7 @@ block0(v0: i8x16 [%xmm6], v1: i8x16 [%xmm2]):
[-, %xmm6] v5 = ssub_sat v0, v1 ; bin: 66 0f e8 f2
[-, %xmm6] v6 = usub_sat v0, v1 ; bin: 66 0f d8 f2
[-, %xmm6] v7 = avg_round v0, v1 ; bin: 66 0f e0 f2
[-, %xmm6] v9 = iabs v1 ; bin: 66 0f 38 1c f2
return
}
@@ -23,6 +24,7 @@ block0(v0: i16x8 [%xmm3], v1: i16x8 [%xmm5]):
[-, %xmm3] v6 = ssub_sat v0, v1 ; bin: 66 0f e9 dd
[-, %xmm3] v7 = usub_sat v0, v1 ; bin: 66 0f d9 dd
[-, %xmm3] v8 = avg_round v0, v1 ; bin: 66 0f e3 dd
[-, %xmm3] v9 = iabs v1 ; bin: 66 0f 38 1d dd
return
}
@@ -32,6 +34,7 @@ block0(v0: i32x4 [%xmm0], v1: i32x4 [%xmm1]):
[-, %xmm0] v2 = iadd v0, v1 ; bin: 66 0f fe c1
[-, %xmm0] v3 = isub v0, v1 ; bin: 66 0f fa c1
[-, %xmm0] v4 = imul v0, v1 ; bin: 66 0f 38 40 c1
[-, %xmm0] v5 = iabs v1 ; bin: 66 0f 38 1e c1
return
}

View File

@@ -270,3 +270,10 @@ block0:
return v5
}
; run
function %iabs(i32x4) -> i32x4 {
block0(v0: i32x4):
v1 = iabs v0
return v1
}
; run: %iabs([-42 -1 0 1]) == [42 1 0 1]