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:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user