Add x86 SIMD implementation of float comparison
This commit is contained in:
@@ -52,3 +52,29 @@ ebb0(v0: i32x4 [%xmm2], v1: i32x4 [%xmm4]):
|
||||
[-, %xmm2] v5 = x86_pminu v0, v1 ; bin: 66 0f 38 3b d4
|
||||
return
|
||||
}
|
||||
|
||||
function %fcmp_f32x4(f32x4, f32x4) {
|
||||
ebb0(v0: f32x4 [%xmm2], v1: f32x4 [%xmm4]):
|
||||
[-, %xmm2] v2 = fcmp eq v0, v1 ; bin: 40 0f c2 d4 00
|
||||
[-, %xmm2] v3 = fcmp lt v0, v1 ; bin: 40 0f c2 d4 01
|
||||
[-, %xmm2] v4 = fcmp le v0, v1 ; bin: 40 0f c2 d4 02
|
||||
[-, %xmm2] v5 = fcmp uno v0, v1 ; bin: 40 0f c2 d4 03
|
||||
[-, %xmm2] v6 = fcmp ne v0, v1 ; bin: 40 0f c2 d4 04
|
||||
[-, %xmm2] v7 = fcmp ge v0, v1 ; bin: 40 0f c2 d4 05
|
||||
[-, %xmm2] v8 = fcmp gt v0, v1 ; bin: 40 0f c2 d4 06
|
||||
[-, %xmm2] v9 = fcmp ord v0, v1 ; bin: 40 0f c2 d4 07
|
||||
return
|
||||
}
|
||||
|
||||
function %fcmp_f64x2(f64x2, f64x2) {
|
||||
ebb0(v0: f64x2 [%xmm2], v1: f64x2 [%xmm0]):
|
||||
[-, %xmm2] v2 = fcmp eq v0, v1 ; bin: 66 40 0f c2 d0 00
|
||||
[-, %xmm2] v3 = fcmp lt v0, v1 ; bin: 66 40 0f c2 d0 01
|
||||
[-, %xmm2] v4 = fcmp le v0, v1 ; bin: 66 40 0f c2 d0 02
|
||||
[-, %xmm2] v5 = fcmp uno v0, v1 ; bin: 66 40 0f c2 d0 03
|
||||
[-, %xmm2] v6 = fcmp ne v0, v1 ; bin: 66 40 0f c2 d0 04
|
||||
[-, %xmm2] v7 = fcmp ge v0, v1 ; bin: 66 40 0f c2 d0 05
|
||||
[-, %xmm2] v8 = fcmp gt v0, v1 ; bin: 66 40 0f c2 d0 06
|
||||
[-, %xmm2] v9 = fcmp ord v0, v1 ; bin: 66 40 0f c2 d0 07
|
||||
return
|
||||
}
|
||||
|
||||
@@ -177,3 +177,43 @@ ebb0:
|
||||
return v8
|
||||
}
|
||||
; run
|
||||
|
||||
function %fcmp_eq_f32x4() -> b1 {
|
||||
ebb0:
|
||||
v0 = vconst.f32x4 [0.0 -0x4.2 0x0.33333 -0.0]
|
||||
v1 = vconst.f32x4 [0.0 -0x4.2 0x0.33333 -0.0]
|
||||
v2 = fcmp eq v0, v1
|
||||
v8 = vall_true v2
|
||||
return v8
|
||||
}
|
||||
; run
|
||||
|
||||
function %fcmp_lt_f32x4() -> b1 {
|
||||
ebb0:
|
||||
v0 = vconst.f32x4 [0.0 -0x4.2 0x0.0 -0.0]
|
||||
v1 = vconst.f32x4 [0x0.001 0x4.2 0x0.33333 0x1.0]
|
||||
v2 = fcmp lt v0, v1
|
||||
v8 = vall_true v2
|
||||
return v8
|
||||
}
|
||||
; run
|
||||
|
||||
function %fcmp_ge_f64x2() -> b1 {
|
||||
ebb0:
|
||||
v0 = vconst.f64x2 [0x0.0 0x4.2]
|
||||
v1 = vconst.f64x2 [0.0 0x4.1]
|
||||
v2 = fcmp ge v0, v1
|
||||
v8 = vall_true v2
|
||||
return v8
|
||||
}
|
||||
; run
|
||||
|
||||
function %fcmp_uno_f64x2() -> b1 {
|
||||
ebb0:
|
||||
v0 = vconst.f64x2 [0.0 NaN]
|
||||
v1 = vconst.f64x2 [NaN 0x4.1]
|
||||
v2 = fcmp uno v0, v1
|
||||
v8 = vall_true v2
|
||||
return v8
|
||||
}
|
||||
; run
|
||||
|
||||
Reference in New Issue
Block a user