Add x86 SIMD average rounding
This commit is contained in:
@@ -197,3 +197,15 @@ block0(v0: f64x2 [%xmm3], v1: f64x2 [%xmm5]):
|
||||
[-, %xmm3] v8 = sqrt v0 ; bin: 66 40 0f 51 db
|
||||
return
|
||||
}
|
||||
|
||||
function %average_rounding_i8x16(i8x16, i8x16) {
|
||||
block0(v0: i8x16 [%xmm6], v1: i8x16 [%xmm2]):
|
||||
[-, %xmm6] v2 = avg_round v0, v1 ; bin: 66 0f e0 f2
|
||||
return
|
||||
}
|
||||
|
||||
function %average_rounding_i16x8(i16x8, i16x8) {
|
||||
block0(v0: i16x8 [%xmm6], v1: i16x8 [%xmm2]):
|
||||
[-, %xmm6] v2 = avg_round v0, v1 ; bin: 66 0f e3 f2
|
||||
return
|
||||
}
|
||||
|
||||
@@ -265,3 +265,17 @@ block0:
|
||||
return v4
|
||||
}
|
||||
; run
|
||||
|
||||
function %average_rounding_i16x8() -> b1 {
|
||||
block0:
|
||||
v0 = vconst.i16x8 [0 0 0 1 42 19 -1 -1]
|
||||
v1 = vconst.i16x8 [0 1 2 4 42 18 -1 0]
|
||||
v2 = vconst.i16x8 [0 1 1 3 42 19 -1 -32768] ; -1 (0xffff) + 0 + 1 == -32768 (0x8000)
|
||||
|
||||
v3 = avg_round v0, v1
|
||||
v4 = icmp eq v2, v3
|
||||
v5 = vall_true v4
|
||||
|
||||
return v5
|
||||
}
|
||||
; run
|
||||
|
||||
Reference in New Issue
Block a user