diff --git a/cranelift/codegen/src/ir/immediates.rs b/cranelift/codegen/src/ir/immediates.rs index 3dba406452..ad09b1b65c 100644 --- a/cranelift/codegen/src/ir/immediates.rs +++ b/cranelift/codegen/src/ir/immediates.rs @@ -473,7 +473,7 @@ impl FromStr for Offset32 { /// containing the bit pattern. /// /// All bit patterns are allowed. -#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)] +#[derive(Copy, Clone, Debug, Eq, Hash)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[repr(C)] pub struct Ieee32(u32); @@ -482,7 +482,7 @@ pub struct Ieee32(u32); /// containing the bit pattern. /// /// All bit patterns are allowed. -#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)] +#[derive(Copy, Clone, Debug, Eq, Hash)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[repr(C)] pub struct Ieee64(u64); @@ -839,6 +839,12 @@ impl PartialOrd for Ieee32 { } } +impl PartialEq for Ieee32 { + fn eq(&self, other: &Ieee32) -> bool { + self.as_f32().eq(&other.as_f32()) + } +} + impl Display for Ieee32 { fn fmt(&self, f: &mut Formatter) -> fmt::Result { let bits: u32 = self.0; @@ -1025,6 +1031,12 @@ impl PartialOrd for Ieee64 { } } +impl PartialEq for Ieee64 { + fn eq(&self, other: &Ieee64) -> bool { + self.as_f64().eq(&other.as_f64()) + } +} + impl Display for Ieee64 { fn fmt(&self, f: &mut Formatter) -> fmt::Result { let bits: u64 = self.0; diff --git a/cranelift/filetests/filetests/runtests/fcmp-eq.clif b/cranelift/filetests/filetests/runtests/fcmp-eq.clif new file mode 100644 index 0000000000..1bac6a35d2 --- /dev/null +++ b/cranelift/filetests/filetests/runtests/fcmp-eq.clif @@ -0,0 +1,319 @@ +test interpret +test run +target x86_64 +target aarch64 +target s390x + +function %fcmp_eq_f32(f32, f32) -> b1 { +block0(v0: f32, v1: f32): + v2 = fcmp eq v0, v1 + return v2 +} +; run: %fcmp_eq_f32(0x0.5, 0x0.5) == true +; run: %fcmp_eq_f32(0x1.0, 0x1.0) == true +; run: %fcmp_eq_f32(-0x1.0, 0x1.0) == false +; run: %fcmp_eq_f32(0x1.0, -0x1.0) == false +; run: %fcmp_eq_f32(0x0.5, 0x1.0) == false +; run: %fcmp_eq_f32(0x1.5, 0x2.9) == false +; run: %fcmp_eq_f32(0x1.1p10, 0x1.4p1) == false +; run: %fcmp_eq_f32(0x1.4cccccp0, 0x1.8p0) == false +; run: %fcmp_eq_f32(0x1.b33334p0, 0x1.99999ap-2) == false +; run: %fcmp_eq_f32(0x1.333334p-1, 0x1.666666p1) == false +; run: %fcmp_eq_f32(-0x0.5, -0x1.0) == false +; run: %fcmp_eq_f32(-0x1.5, -0x2.9) == false +; run: %fcmp_eq_f32(-0x1.1p10, -0x1.333334p-1) == false +; run: %fcmp_eq_f32(-0x1.99999ap-2, -0x1.4cccccp0) == false +; run: %fcmp_eq_f32(-0x1.8p0, -0x1.b33334p0) == false +; run: %fcmp_eq_f32(-0x1.4p1, -0x1.666666p1) == false +; run: %fcmp_eq_f32(0x0.5, -0x1.0) == false +; run: %fcmp_eq_f32(0x1.b33334p0, -0x1.b33334p0) == false + +; Zeroes +; run: %fcmp_eq_f32(0x0.0, 0x0.0) == true +; run: %fcmp_eq_f32(-0x0.0, -0x0.0) == true +; run: %fcmp_eq_f32(0x0.0, -0x0.0) == true +; run: %fcmp_eq_f32(-0x0.0, 0x0.0) == true + +; Infinities +; run: %fcmp_eq_f32(Inf, Inf) == true +; run: %fcmp_eq_f32(-Inf, -Inf) == true +; run: %fcmp_eq_f32(Inf, -Inf) == false +; run: %fcmp_eq_f32(-Inf, Inf) == false + +; Inf/Zero +; run: %fcmp_eq_f32(0x0.0, Inf) == false +; run: %fcmp_eq_f32(-0x0.0, Inf) == false +; run: %fcmp_eq_f32(0x0.0, -Inf) == false +; run: %fcmp_eq_f32(-0x0.0, -Inf) == false +; run: %fcmp_eq_f32(Inf, 0x0.0) == false +; run: %fcmp_eq_f32(Inf, -0x0.0) == false +; run: %fcmp_eq_f32(-Inf, 0x0.0) == false +; run: %fcmp_eq_f32(-Inf, -0x0.0) == false + +; Epsilon / Max / Min Positive +; run: %fcmp_eq_f32(0x1.0p-23, 0x1.0p-23) == true +; run: %fcmp_eq_f32(0x1.fffffep127, 0x1.fffffep127) == true +; run: %fcmp_eq_f32(0x1.0p-126, 0x1.0p-126) == true +; run: %fcmp_eq_f32(0x1.0p-23, 0x1.fffffep127) == false +; run: %fcmp_eq_f32(0x1.0p-23, 0x1.0p-126) == false +; run: %fcmp_eq_f32(0x1.0p-126, 0x1.fffffep127) == false + +; Subnormals +; run: %fcmp_eq_f32(0x0.800002p-126, -0x0.800002p-126) == false +; run: %fcmp_eq_f32(-0x0.800002p-126, 0x0.800002p-126) == false +; run: %fcmp_eq_f32(0x0.800002p-126, 0x0.0) == false +; run: %fcmp_eq_f32(-0x0.800002p-126, 0x0.0) == false +; run: %fcmp_eq_f32(0x0.800002p-126, -0x0.0) == false +; run: %fcmp_eq_f32(-0x0.800002p-126, -0x0.0) == false +; run: %fcmp_eq_f32(0x0.0, 0x0.800002p-126) == false +; run: %fcmp_eq_f32(0x0.0, -0x0.800002p-126) == false +; run: %fcmp_eq_f32(-0x0.0, 0x0.800002p-126) == false +; run: %fcmp_eq_f32(-0x0.0, -0x0.800002p-126) == false + +; NaN's +; run: %fcmp_eq_f32(+NaN, +NaN) == false +; run: %fcmp_eq_f32(-NaN, -NaN) == false +; run: %fcmp_eq_f32(+NaN, -NaN) == false +; run: %fcmp_eq_f32(-NaN, +NaN) == false + +; run: %fcmp_eq_f32(+NaN, -0x1.0) == false +; run: %fcmp_eq_f32(-NaN, -0x1.0) == false +; run: %fcmp_eq_f32(+NaN, 0x1.0) == false +; run: %fcmp_eq_f32(-NaN, 0x1.0) == false +; run: %fcmp_eq_f32(+NaN, -0x0.0) == false +; run: %fcmp_eq_f32(-NaN, -0x0.0) == false +; run: %fcmp_eq_f32(+NaN, 0x0.0) == false +; run: %fcmp_eq_f32(-NaN, 0x0.0) == false +; run: %fcmp_eq_f32(+NaN, -Inf) == false +; run: %fcmp_eq_f32(-NaN, -Inf) == false +; run: %fcmp_eq_f32(+NaN, Inf) == false +; run: %fcmp_eq_f32(-NaN, Inf) == false +; run: %fcmp_eq_f32(-0x0.0, +NaN) == false +; run: %fcmp_eq_f32(-0x0.0, -NaN) == false +; run: %fcmp_eq_f32(0x0.0, +NaN) == false +; run: %fcmp_eq_f32(0x0.0, -NaN) == false +; run: %fcmp_eq_f32(-Inf, +NaN) == false +; run: %fcmp_eq_f32(-Inf, -NaN) == false +; run: %fcmp_eq_f32(Inf, +NaN) == false +; run: %fcmp_eq_f32(Inf, -NaN) == false + +; run: %fcmp_eq_f32(+NaN:0x1, +NaN:0x1) == false +; run: %fcmp_eq_f32(-NaN:0x1, -NaN:0x1) == false +; run: %fcmp_eq_f32(+NaN:0x1, -NaN:0x1) == false +; run: %fcmp_eq_f32(-NaN:0x1, +NaN:0x1) == false +; run: %fcmp_eq_f32(+NaN:0x1, +NaN) == false +; run: %fcmp_eq_f32(+NaN:0x1, -NaN) == false +; run: %fcmp_eq_f32(-NaN:0x1, -NaN) == false +; run: %fcmp_eq_f32(-NaN:0x1, +NaN) == false + +; run: %fcmp_eq_f32(+NaN:0x80001, +NaN:0x80001) == false +; run: %fcmp_eq_f32(-NaN:0x80001, -NaN:0x80001) == false +; run: %fcmp_eq_f32(+NaN:0x80001, -NaN:0x80001) == false +; run: %fcmp_eq_f32(-NaN:0x80001, +NaN:0x80001) == false +; run: %fcmp_eq_f32(+NaN:0x80001, +NaN) == false +; run: %fcmp_eq_f32(+NaN:0x80001, -NaN) == false +; run: %fcmp_eq_f32(-NaN:0x80001, -NaN) == false +; run: %fcmp_eq_f32(-NaN:0x80001, +NaN) == false + +; sNaN's +; run: %fcmp_eq_f32(+sNaN:0x1, +sNaN:0x1) == false +; run: %fcmp_eq_f32(-sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_eq_f32(+sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_eq_f32(-sNaN:0x1, +sNaN:0x1) == false + +; run: %fcmp_eq_f32(+sNaN:0x1, -0x1.0) == false +; run: %fcmp_eq_f32(-sNaN:0x1, -0x1.0) == false +; run: %fcmp_eq_f32(+sNaN:0x1, 0x1.0) == false +; run: %fcmp_eq_f32(-sNaN:0x1, 0x1.0) == false +; run: %fcmp_eq_f32(+sNaN:0x1, -0x0.0) == false +; run: %fcmp_eq_f32(-sNaN:0x1, -0x0.0) == false +; run: %fcmp_eq_f32(+sNaN:0x1, 0x0.0) == false +; run: %fcmp_eq_f32(-sNaN:0x1, 0x0.0) == false +; run: %fcmp_eq_f32(+sNaN:0x1, -Inf) == false +; run: %fcmp_eq_f32(-sNaN:0x1, -Inf) == false +; run: %fcmp_eq_f32(+sNaN:0x1, Inf) == false +; run: %fcmp_eq_f32(-sNaN:0x1, Inf) == false +; run: %fcmp_eq_f32(-0x0.0, +sNaN:0x1) == false +; run: %fcmp_eq_f32(-0x0.0, -sNaN:0x1) == false +; run: %fcmp_eq_f32(0x0.0, +sNaN:0x1) == false +; run: %fcmp_eq_f32(0x0.0, -sNaN:0x1) == false +; run: %fcmp_eq_f32(-Inf, +sNaN:0x1) == false +; run: %fcmp_eq_f32(-Inf, -sNaN:0x1) == false +; run: %fcmp_eq_f32(Inf, +sNaN:0x1) == false +; run: %fcmp_eq_f32(Inf, -sNaN:0x1) == false + +; run: %fcmp_eq_f32(+sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_eq_f32(-sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_eq_f32(+sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_eq_f32(-sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_eq_f32(+NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_eq_f32(-NaN:0x1, -sNaN:0x1) == false +; run: %fcmp_eq_f32(-NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_eq_f32(+NaN:0x1, -sNaN:0x1) == false + +; run: %fcmp_eq_f32(+sNaN:0x80001, +sNaN:0x80001) == false +; run: %fcmp_eq_f32(-sNaN:0x80001, -sNaN:0x80001) == false +; run: %fcmp_eq_f32(+sNaN:0x80001, -sNaN:0x80001) == false +; run: %fcmp_eq_f32(-sNaN:0x80001, +sNaN:0x80001) == false +; run: %fcmp_eq_f32(+sNaN:0x80001, +sNaN:0x1) == false +; run: %fcmp_eq_f32(+sNaN:0x80001, -sNaN:0x1) == false +; run: %fcmp_eq_f32(-sNaN:0x80001, -sNaN:0x1) == false +; run: %fcmp_eq_f32(-sNaN:0x80001, +sNaN:0x1) == false + + +function %fcmp_eq_f64(f64, f64) -> b1 { +block0(v0: f64, v1: f64): + v2 = fcmp eq v0, v1 + return v2 +} +; run: %fcmp_eq_f64(0x0.5, 0x0.5) == true +; run: %fcmp_eq_f64(0x1.0, 0x1.0) == true +; run: %fcmp_eq_f64(-0x1.0, 0x1.0) == false +; run: %fcmp_eq_f64(0x1.0, -0x1.0) == false +; run: %fcmp_eq_f64(0x0.5, 0x1.0) == false +; run: %fcmp_eq_f64(0x1.5, 0x2.9) == false +; run: %fcmp_eq_f64(0x1.1p10, 0x1.4p1) == false +; run: %fcmp_eq_f64(0x1.4cccccccccccdp0, 0x1.8p0) == false +; run: %fcmp_eq_f64(0x1.b333333333333p0, 0x1.999999999999ap-2) == false +; run: %fcmp_eq_f64(0x1.3333333333333p-1, 0x1.6666666666666p1) == false +; run: %fcmp_eq_f64(-0x0.5, -0x1.0) == false +; run: %fcmp_eq_f64(-0x1.5, -0x2.9) == false +; run: %fcmp_eq_f64(-0x1.1p10, -0x1.3333333333333p-1) == false +; run: %fcmp_eq_f64(-0x1.999999999999ap-2, -0x1.4cccccccccccdp0) == false +; run: %fcmp_eq_f64(-0x1.8p0, -0x1.b333333333333p0) == false +; run: %fcmp_eq_f64(-0x1.4p1, -0x1.6666666666666p1) == false +; run: %fcmp_eq_f64(0x0.5, -0x1.0) == false +; run: %fcmp_eq_f64(0x1.b333333333333p0, -0x1.b333333333333p0) == false + + +; Zeroes +; run: %fcmp_eq_f64(0x0.0, 0x0.0) == true +; run: %fcmp_eq_f64(-0x0.0, -0x0.0) == true +; run: %fcmp_eq_f64(0x0.0, -0x0.0) == true +; run: %fcmp_eq_f64(-0x0.0, 0x0.0) == true + +; Infinities +; run: %fcmp_eq_f64(Inf, Inf) == true +; run: %fcmp_eq_f64(-Inf, -Inf) == true +; run: %fcmp_eq_f64(Inf, -Inf) == false +; run: %fcmp_eq_f64(-Inf, Inf) == false + +; Inf/Zero +; run: %fcmp_eq_f64(0x0.0, Inf) == false +; run: %fcmp_eq_f64(-0x0.0, Inf) == false +; run: %fcmp_eq_f64(0x0.0, -Inf) == false +; run: %fcmp_eq_f64(-0x0.0, -Inf) == false +; run: %fcmp_eq_f64(Inf, 0x0.0) == false +; run: %fcmp_eq_f64(Inf, -0x0.0) == false +; run: %fcmp_eq_f64(-Inf, 0x0.0) == false +; run: %fcmp_eq_f64(-Inf, -0x0.0) == false + +; Epsilon / Max / Min Positive +; run: %fcmp_eq_f64(0x1.0p-52, 0x1.0p-52) == true +; run: %fcmp_eq_f64(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) == true +; run: %fcmp_eq_f64(0x1.0p-1022, 0x1.0p-1022) == true +; run: %fcmp_eq_f64(0x1.0p-52, 0x1.fffffffffffffp1023) == false +; run: %fcmp_eq_f64(0x1.0p-52, 0x1.0p-1022) == false +; run: %fcmp_eq_f64(0x1.0p-1022, 0x1.fffffffffffffp1023) == false + +; Subnormals +; run: %fcmp_eq_f64(0x0.8p-1022, -0x0.8p-1022) == false +; run: %fcmp_eq_f64(-0x0.8p-1022, 0x0.8p-1022) == false +; run: %fcmp_eq_f64(0x0.8p-1022, 0x0.0) == false +; run: %fcmp_eq_f64(-0x0.8p-1022, 0x0.0) == false +; run: %fcmp_eq_f64(0x0.8p-1022, -0x0.0) == false +; run: %fcmp_eq_f64(-0x0.8p-1022, -0x0.0) == false +; run: %fcmp_eq_f64(0x0.0, 0x0.8p-1022) == false +; run: %fcmp_eq_f64(0x0.0, -0x0.8p-1022) == false +; run: %fcmp_eq_f64(-0x0.0, 0x0.8p-1022) == false +; run: %fcmp_eq_f64(-0x0.0, -0x0.8p-1022) == false + +; NaN's +; run: %fcmp_eq_f64(+NaN, +NaN) == false +; run: %fcmp_eq_f64(-NaN, -NaN) == false +; run: %fcmp_eq_f64(+NaN, -NaN) == false +; run: %fcmp_eq_f64(-NaN, +NaN) == false + +; run: %fcmp_eq_f64(+NaN, -0x1.0) == false +; run: %fcmp_eq_f64(-NaN, -0x1.0) == false +; run: %fcmp_eq_f64(+NaN, 0x1.0) == false +; run: %fcmp_eq_f64(-NaN, 0x1.0) == false +; run: %fcmp_eq_f64(+NaN, -0x0.0) == false +; run: %fcmp_eq_f64(-NaN, -0x0.0) == false +; run: %fcmp_eq_f64(+NaN, 0x0.0) == false +; run: %fcmp_eq_f64(-NaN, 0x0.0) == false +; run: %fcmp_eq_f64(+NaN, -Inf) == false +; run: %fcmp_eq_f64(-NaN, -Inf) == false +; run: %fcmp_eq_f64(+NaN, Inf) == false +; run: %fcmp_eq_f64(-NaN, Inf) == false +; run: %fcmp_eq_f64(-0x0.0, +NaN) == false +; run: %fcmp_eq_f64(-0x0.0, -NaN) == false +; run: %fcmp_eq_f64(0x0.0, +NaN) == false +; run: %fcmp_eq_f64(0x0.0, -NaN) == false +; run: %fcmp_eq_f64(-Inf, +NaN) == false +; run: %fcmp_eq_f64(-Inf, -NaN) == false +; run: %fcmp_eq_f64(Inf, +NaN) == false +; run: %fcmp_eq_f64(Inf, -NaN) == false + +; run: %fcmp_eq_f64(+NaN:0x1, +NaN:0x1) == false +; run: %fcmp_eq_f64(-NaN:0x1, -NaN:0x1) == false +; run: %fcmp_eq_f64(+NaN:0x1, -NaN:0x1) == false +; run: %fcmp_eq_f64(-NaN:0x1, +NaN:0x1) == false +; run: %fcmp_eq_f64(+NaN:0x1, +NaN) == false +; run: %fcmp_eq_f64(+NaN:0x1, -NaN) == false +; run: %fcmp_eq_f64(-NaN:0x1, -NaN) == false +; run: %fcmp_eq_f64(-NaN:0x1, +NaN) == false + +; run: %fcmp_eq_f64(+NaN:0x800000000001, +NaN:0x800000000001) == false +; run: %fcmp_eq_f64(-NaN:0x800000000001, -NaN:0x800000000001) == false +; run: %fcmp_eq_f64(+NaN:0x800000000001, -NaN:0x800000000001) == false +; run: %fcmp_eq_f64(-NaN:0x800000000001, +NaN:0x800000000001) == false +; run: %fcmp_eq_f64(+NaN:0x800000000001, +NaN) == false +; run: %fcmp_eq_f64(+NaN:0x800000000001, -NaN) == false +; run: %fcmp_eq_f64(-NaN:0x800000000001, -NaN) == false +; run: %fcmp_eq_f64(-NaN:0x800000000001, +NaN) == false + +; sNaN's +; run: %fcmp_eq_f64(+sNaN:0x1, +sNaN:0x1) == false +; run: %fcmp_eq_f64(-sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_eq_f64(+sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_eq_f64(-sNaN:0x1, +sNaN:0x1) == false + +; run: %fcmp_eq_f64(+sNaN:0x1, -0x1.0) == false +; run: %fcmp_eq_f64(-sNaN:0x1, -0x1.0) == false +; run: %fcmp_eq_f64(+sNaN:0x1, 0x1.0) == false +; run: %fcmp_eq_f64(-sNaN:0x1, 0x1.0) == false +; run: %fcmp_eq_f64(+sNaN:0x1, -0x0.0) == false +; run: %fcmp_eq_f64(-sNaN:0x1, -0x0.0) == false +; run: %fcmp_eq_f64(+sNaN:0x1, 0x0.0) == false +; run: %fcmp_eq_f64(-sNaN:0x1, 0x0.0) == false +; run: %fcmp_eq_f64(+sNaN:0x1, -Inf) == false +; run: %fcmp_eq_f64(-sNaN:0x1, -Inf) == false +; run: %fcmp_eq_f64(+sNaN:0x1, Inf) == false +; run: %fcmp_eq_f64(-sNaN:0x1, Inf) == false +; run: %fcmp_eq_f64(-0x0.0, +sNaN:0x1) == false +; run: %fcmp_eq_f64(-0x0.0, -sNaN:0x1) == false +; run: %fcmp_eq_f64(0x0.0, +sNaN:0x1) == false +; run: %fcmp_eq_f64(0x0.0, -sNaN:0x1) == false +; run: %fcmp_eq_f64(-Inf, +sNaN:0x1) == false +; run: %fcmp_eq_f64(-Inf, -sNaN:0x1) == false +; run: %fcmp_eq_f64(Inf, +sNaN:0x1) == false +; run: %fcmp_eq_f64(Inf, -sNaN:0x1) == false + +; run: %fcmp_eq_f64(+sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_eq_f64(-sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_eq_f64(+sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_eq_f64(-sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_eq_f64(+NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_eq_f64(-NaN:0x1, -sNaN:0x1) == false +; run: %fcmp_eq_f64(-NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_eq_f64(+NaN:0x1, -sNaN:0x1) == false + +; run: %fcmp_eq_f64(+sNaN:0x800000000001, +sNaN:0x800000000001) == false +; run: %fcmp_eq_f64(-sNaN:0x800000000001, -sNaN:0x800000000001) == false +; run: %fcmp_eq_f64(+sNaN:0x800000000001, -sNaN:0x800000000001) == false +; run: %fcmp_eq_f64(-sNaN:0x800000000001, +sNaN:0x800000000001) == false +; run: %fcmp_eq_f64(+sNaN:0x800000000001, +sNaN:0x1) == false +; run: %fcmp_eq_f64(+sNaN:0x800000000001, -sNaN:0x1) == false +; run: %fcmp_eq_f64(-sNaN:0x800000000001, -sNaN:0x1) == false +; run: %fcmp_eq_f64(-sNaN:0x800000000001, +sNaN:0x1) == false diff --git a/cranelift/filetests/filetests/runtests/fcmp-ge.clif b/cranelift/filetests/filetests/runtests/fcmp-ge.clif new file mode 100644 index 0000000000..311698597e --- /dev/null +++ b/cranelift/filetests/filetests/runtests/fcmp-ge.clif @@ -0,0 +1,319 @@ +test interpret +test run +target x86_64 +target aarch64 +target s390x + +function %fcmp_ge_f32(f32, f32) -> b1 { +block0(v0: f32, v1: f32): + v2 = fcmp ge v0, v1 + return v2 +} +; run: %fcmp_ge_f32(0x0.5, 0x0.5) == true +; run: %fcmp_ge_f32(0x1.0, 0x1.0) == true +; run: %fcmp_ge_f32(-0x1.0, 0x1.0) == false +; run: %fcmp_ge_f32(0x1.0, -0x1.0) == true +; run: %fcmp_ge_f32(0x0.5, 0x1.0) == false +; run: %fcmp_ge_f32(0x1.5, 0x2.9) == false +; run: %fcmp_ge_f32(0x1.1p10, 0x1.4p1) == true +; run: %fcmp_ge_f32(0x1.4cccccp0, 0x1.8p0) == false +; run: %fcmp_ge_f32(0x1.b33334p0, 0x1.99999ap-2) == true +; run: %fcmp_ge_f32(0x1.333334p-1, 0x1.666666p1) == false +; run: %fcmp_ge_f32(-0x0.5, -0x1.0) == true +; run: %fcmp_ge_f32(-0x1.5, -0x2.9) == true +; run: %fcmp_ge_f32(-0x1.1p10, -0x1.333334p-1) == false +; run: %fcmp_ge_f32(-0x1.99999ap-2, -0x1.4cccccp0) == true +; run: %fcmp_ge_f32(-0x1.8p0, -0x1.b33334p0) == true +; run: %fcmp_ge_f32(-0x1.4p1, -0x1.666666p1) == true +; run: %fcmp_ge_f32(0x0.5, -0x1.0) == true +; run: %fcmp_ge_f32(0x1.b33334p0, -0x1.b33334p0) == true + +; Zeroes +; run: %fcmp_ge_f32(0x0.0, 0x0.0) == true +; run: %fcmp_ge_f32(-0x0.0, -0x0.0) == true +; run: %fcmp_ge_f32(0x0.0, -0x0.0) == true +; run: %fcmp_ge_f32(-0x0.0, 0x0.0) == true + +; Infinities +; run: %fcmp_ge_f32(Inf, Inf) == true +; run: %fcmp_ge_f32(-Inf, -Inf) == true +; run: %fcmp_ge_f32(Inf, -Inf) == true +; run: %fcmp_ge_f32(-Inf, Inf) == false + +; Inf/Zero +; run: %fcmp_ge_f32(0x0.0, Inf) == false +; run: %fcmp_ge_f32(-0x0.0, Inf) == false +; run: %fcmp_ge_f32(0x0.0, -Inf) == true +; run: %fcmp_ge_f32(-0x0.0, -Inf) == true +; run: %fcmp_ge_f32(Inf, 0x0.0) == true +; run: %fcmp_ge_f32(Inf, -0x0.0) == true +; run: %fcmp_ge_f32(-Inf, 0x0.0) == false +; run: %fcmp_ge_f32(-Inf, -0x0.0) == false + +; Epsilon / Max / Min Positive +; run: %fcmp_ge_f32(0x1.0p-23, 0x1.0p-23) == true +; run: %fcmp_ge_f32(0x1.fffffep127, 0x1.fffffep127) == true +; run: %fcmp_ge_f32(0x1.0p-126, 0x1.0p-126) == true +; run: %fcmp_ge_f32(0x1.0p-23, 0x1.fffffep127) == false +; run: %fcmp_ge_f32(0x1.0p-23, 0x1.0p-126) == true +; run: %fcmp_ge_f32(0x1.0p-126, 0x1.fffffep127) == false + +; Subnormals +; run: %fcmp_ge_f32(0x0.800002p-126, -0x0.800002p-126) == true +; run: %fcmp_ge_f32(-0x0.800002p-126, 0x0.800002p-126) == false +; run: %fcmp_ge_f32(0x0.800002p-126, 0x0.0) == true +; run: %fcmp_ge_f32(-0x0.800002p-126, 0x0.0) == false +; run: %fcmp_ge_f32(0x0.800002p-126, -0x0.0) == true +; run: %fcmp_ge_f32(-0x0.800002p-126, -0x0.0) == false +; run: %fcmp_ge_f32(0x0.0, 0x0.800002p-126) == false +; run: %fcmp_ge_f32(0x0.0, -0x0.800002p-126) == true +; run: %fcmp_ge_f32(-0x0.0, 0x0.800002p-126) == false +; run: %fcmp_ge_f32(-0x0.0, -0x0.800002p-126) == true + +; NaN's +; run: %fcmp_ge_f32(+NaN, +NaN) == false +; run: %fcmp_ge_f32(-NaN, -NaN) == false +; run: %fcmp_ge_f32(+NaN, -NaN) == false +; run: %fcmp_ge_f32(-NaN, +NaN) == false + +; run: %fcmp_ge_f32(+NaN, -0x1.0) == false +; run: %fcmp_ge_f32(-NaN, -0x1.0) == false +; run: %fcmp_ge_f32(+NaN, 0x1.0) == false +; run: %fcmp_ge_f32(-NaN, 0x1.0) == false +; run: %fcmp_ge_f32(+NaN, -0x0.0) == false +; run: %fcmp_ge_f32(-NaN, -0x0.0) == false +; run: %fcmp_ge_f32(+NaN, 0x0.0) == false +; run: %fcmp_ge_f32(-NaN, 0x0.0) == false +; run: %fcmp_ge_f32(+NaN, -Inf) == false +; run: %fcmp_ge_f32(-NaN, -Inf) == false +; run: %fcmp_ge_f32(+NaN, Inf) == false +; run: %fcmp_ge_f32(-NaN, Inf) == false +; run: %fcmp_ge_f32(-0x0.0, +NaN) == false +; run: %fcmp_ge_f32(-0x0.0, -NaN) == false +; run: %fcmp_ge_f32(0x0.0, +NaN) == false +; run: %fcmp_ge_f32(0x0.0, -NaN) == false +; run: %fcmp_ge_f32(-Inf, +NaN) == false +; run: %fcmp_ge_f32(-Inf, -NaN) == false +; run: %fcmp_ge_f32(Inf, +NaN) == false +; run: %fcmp_ge_f32(Inf, -NaN) == false + +; run: %fcmp_ge_f32(+NaN:0x1, +NaN:0x1) == false +; run: %fcmp_ge_f32(-NaN:0x1, -NaN:0x1) == false +; run: %fcmp_ge_f32(+NaN:0x1, -NaN:0x1) == false +; run: %fcmp_ge_f32(-NaN:0x1, +NaN:0x1) == false +; run: %fcmp_ge_f32(+NaN:0x1, +NaN) == false +; run: %fcmp_ge_f32(+NaN:0x1, -NaN) == false +; run: %fcmp_ge_f32(-NaN:0x1, -NaN) == false +; run: %fcmp_ge_f32(-NaN:0x1, +NaN) == false + +; run: %fcmp_ge_f32(+NaN:0x80001, +NaN:0x80001) == false +; run: %fcmp_ge_f32(-NaN:0x80001, -NaN:0x80001) == false +; run: %fcmp_ge_f32(+NaN:0x80001, -NaN:0x80001) == false +; run: %fcmp_ge_f32(-NaN:0x80001, +NaN:0x80001) == false +; run: %fcmp_ge_f32(+NaN:0x80001, +NaN) == false +; run: %fcmp_ge_f32(+NaN:0x80001, -NaN) == false +; run: %fcmp_ge_f32(-NaN:0x80001, -NaN) == false +; run: %fcmp_ge_f32(-NaN:0x80001, +NaN) == false + +; sNaN's +; run: %fcmp_ge_f32(+sNaN:0x1, +sNaN:0x1) == false +; run: %fcmp_ge_f32(-sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_ge_f32(+sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_ge_f32(-sNaN:0x1, +sNaN:0x1) == false + +; run: %fcmp_ge_f32(+sNaN:0x1, -0x1.0) == false +; run: %fcmp_ge_f32(-sNaN:0x1, -0x1.0) == false +; run: %fcmp_ge_f32(+sNaN:0x1, 0x1.0) == false +; run: %fcmp_ge_f32(-sNaN:0x1, 0x1.0) == false +; run: %fcmp_ge_f32(+sNaN:0x1, -0x0.0) == false +; run: %fcmp_ge_f32(-sNaN:0x1, -0x0.0) == false +; run: %fcmp_ge_f32(+sNaN:0x1, 0x0.0) == false +; run: %fcmp_ge_f32(-sNaN:0x1, 0x0.0) == false +; run: %fcmp_ge_f32(+sNaN:0x1, -Inf) == false +; run: %fcmp_ge_f32(-sNaN:0x1, -Inf) == false +; run: %fcmp_ge_f32(+sNaN:0x1, Inf) == false +; run: %fcmp_ge_f32(-sNaN:0x1, Inf) == false +; run: %fcmp_ge_f32(-0x0.0, +sNaN:0x1) == false +; run: %fcmp_ge_f32(-0x0.0, -sNaN:0x1) == false +; run: %fcmp_ge_f32(0x0.0, +sNaN:0x1) == false +; run: %fcmp_ge_f32(0x0.0, -sNaN:0x1) == false +; run: %fcmp_ge_f32(-Inf, +sNaN:0x1) == false +; run: %fcmp_ge_f32(-Inf, -sNaN:0x1) == false +; run: %fcmp_ge_f32(Inf, +sNaN:0x1) == false +; run: %fcmp_ge_f32(Inf, -sNaN:0x1) == false + +; run: %fcmp_ge_f32(+sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_ge_f32(-sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_ge_f32(+sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_ge_f32(-sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_ge_f32(+NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_ge_f32(-NaN:0x1, -sNaN:0x1) == false +; run: %fcmp_ge_f32(-NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_ge_f32(+NaN:0x1, -sNaN:0x1) == false + +; run: %fcmp_ge_f32(+sNaN:0x80001, +sNaN:0x80001) == false +; run: %fcmp_ge_f32(-sNaN:0x80001, -sNaN:0x80001) == false +; run: %fcmp_ge_f32(+sNaN:0x80001, -sNaN:0x80001) == false +; run: %fcmp_ge_f32(-sNaN:0x80001, +sNaN:0x80001) == false +; run: %fcmp_ge_f32(+sNaN:0x80001, +sNaN:0x1) == false +; run: %fcmp_ge_f32(+sNaN:0x80001, -sNaN:0x1) == false +; run: %fcmp_ge_f32(-sNaN:0x80001, -sNaN:0x1) == false +; run: %fcmp_ge_f32(-sNaN:0x80001, +sNaN:0x1) == false + + +function %fcmp_ge_f64(f64, f64) -> b1 { +block0(v0: f64, v1: f64): + v2 = fcmp ge v0, v1 + return v2 +} +; run: %fcmp_ge_f64(0x0.5, 0x0.5) == true +; run: %fcmp_ge_f64(0x1.0, 0x1.0) == true +; run: %fcmp_ge_f64(-0x1.0, 0x1.0) == false +; run: %fcmp_ge_f64(0x1.0, -0x1.0) == true +; run: %fcmp_ge_f64(0x0.5, 0x1.0) == false +; run: %fcmp_ge_f64(0x1.5, 0x2.9) == false +; run: %fcmp_ge_f64(0x1.1p10, 0x1.4p1) == true +; run: %fcmp_ge_f64(0x1.4cccccccccccdp0, 0x1.8p0) == false +; run: %fcmp_ge_f64(0x1.b333333333333p0, 0x1.999999999999ap-2) == true +; run: %fcmp_ge_f64(0x1.3333333333333p-1, 0x1.6666666666666p1) == false +; run: %fcmp_ge_f64(-0x0.5, -0x1.0) == true +; run: %fcmp_ge_f64(-0x1.5, -0x2.9) == true +; run: %fcmp_ge_f64(-0x1.1p10, -0x1.3333333333333p-1) == false +; run: %fcmp_ge_f64(-0x1.999999999999ap-2, -0x1.4cccccccccccdp0) == true +; run: %fcmp_ge_f64(-0x1.8p0, -0x1.b333333333333p0) == true +; run: %fcmp_ge_f64(-0x1.4p1, -0x1.6666666666666p1) == true +; run: %fcmp_ge_f64(0x0.5, -0x1.0) == true +; run: %fcmp_ge_f64(0x1.b333333333333p0, -0x1.b333333333333p0) == true + + +; Zeroes +; run: %fcmp_ge_f64(0x0.0, 0x0.0) == true +; run: %fcmp_ge_f64(-0x0.0, -0x0.0) == true +; run: %fcmp_ge_f64(0x0.0, -0x0.0) == true +; run: %fcmp_ge_f64(-0x0.0, 0x0.0) == true + +; Infinities +; run: %fcmp_ge_f64(Inf, Inf) == true +; run: %fcmp_ge_f64(-Inf, -Inf) == true +; run: %fcmp_ge_f64(Inf, -Inf) == true +; run: %fcmp_ge_f64(-Inf, Inf) == false + +; Inf/Zero +; run: %fcmp_ge_f64(0x0.0, Inf) == false +; run: %fcmp_ge_f64(-0x0.0, Inf) == false +; run: %fcmp_ge_f64(0x0.0, -Inf) == true +; run: %fcmp_ge_f64(-0x0.0, -Inf) == true +; run: %fcmp_ge_f64(Inf, 0x0.0) == true +; run: %fcmp_ge_f64(Inf, -0x0.0) == true +; run: %fcmp_ge_f64(-Inf, 0x0.0) == false +; run: %fcmp_ge_f64(-Inf, -0x0.0) == false + +; Epsilon / Max / Min Positive +; run: %fcmp_ge_f64(0x1.0p-52, 0x1.0p-52) == true +; run: %fcmp_ge_f64(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) == true +; run: %fcmp_ge_f64(0x1.0p-1022, 0x1.0p-1022) == true +; run: %fcmp_ge_f64(0x1.0p-52, 0x1.fffffffffffffp1023) == false +; run: %fcmp_ge_f64(0x1.0p-52, 0x1.0p-1022) == true +; run: %fcmp_ge_f64(0x1.0p-1022, 0x1.fffffffffffffp1023) == false + +; Subnormals +; run: %fcmp_ge_f64(0x0.8p-1022, -0x0.8p-1022) == true +; run: %fcmp_ge_f64(-0x0.8p-1022, 0x0.8p-1022) == false +; run: %fcmp_ge_f64(0x0.8p-1022, 0x0.0) == true +; run: %fcmp_ge_f64(-0x0.8p-1022, 0x0.0) == false +; run: %fcmp_ge_f64(0x0.8p-1022, -0x0.0) == true +; run: %fcmp_ge_f64(-0x0.8p-1022, -0x0.0) == false +; run: %fcmp_ge_f64(0x0.0, 0x0.8p-1022) == false +; run: %fcmp_ge_f64(0x0.0, -0x0.8p-1022) == true +; run: %fcmp_ge_f64(-0x0.0, 0x0.8p-1022) == false +; run: %fcmp_ge_f64(-0x0.0, -0x0.8p-1022) == true + +; NaN's +; run: %fcmp_ge_f64(+NaN, +NaN) == false +; run: %fcmp_ge_f64(-NaN, -NaN) == false +; run: %fcmp_ge_f64(+NaN, -NaN) == false +; run: %fcmp_ge_f64(-NaN, +NaN) == false + +; run: %fcmp_ge_f64(+NaN, -0x1.0) == false +; run: %fcmp_ge_f64(-NaN, -0x1.0) == false +; run: %fcmp_ge_f64(+NaN, 0x1.0) == false +; run: %fcmp_ge_f64(-NaN, 0x1.0) == false +; run: %fcmp_ge_f64(+NaN, -0x0.0) == false +; run: %fcmp_ge_f64(-NaN, -0x0.0) == false +; run: %fcmp_ge_f64(+NaN, 0x0.0) == false +; run: %fcmp_ge_f64(-NaN, 0x0.0) == false +; run: %fcmp_ge_f64(+NaN, -Inf) == false +; run: %fcmp_ge_f64(-NaN, -Inf) == false +; run: %fcmp_ge_f64(+NaN, Inf) == false +; run: %fcmp_ge_f64(-NaN, Inf) == false +; run: %fcmp_ge_f64(-0x0.0, +NaN) == false +; run: %fcmp_ge_f64(-0x0.0, -NaN) == false +; run: %fcmp_ge_f64(0x0.0, +NaN) == false +; run: %fcmp_ge_f64(0x0.0, -NaN) == false +; run: %fcmp_ge_f64(-Inf, +NaN) == false +; run: %fcmp_ge_f64(-Inf, -NaN) == false +; run: %fcmp_ge_f64(Inf, +NaN) == false +; run: %fcmp_ge_f64(Inf, -NaN) == false + +; run: %fcmp_ge_f64(+NaN:0x1, +NaN:0x1) == false +; run: %fcmp_ge_f64(-NaN:0x1, -NaN:0x1) == false +; run: %fcmp_ge_f64(+NaN:0x1, -NaN:0x1) == false +; run: %fcmp_ge_f64(-NaN:0x1, +NaN:0x1) == false +; run: %fcmp_ge_f64(+NaN:0x1, +NaN) == false +; run: %fcmp_ge_f64(+NaN:0x1, -NaN) == false +; run: %fcmp_ge_f64(-NaN:0x1, -NaN) == false +; run: %fcmp_ge_f64(-NaN:0x1, +NaN) == false + +; run: %fcmp_ge_f64(+NaN:0x800000000001, +NaN:0x800000000001) == false +; run: %fcmp_ge_f64(-NaN:0x800000000001, -NaN:0x800000000001) == false +; run: %fcmp_ge_f64(+NaN:0x800000000001, -NaN:0x800000000001) == false +; run: %fcmp_ge_f64(-NaN:0x800000000001, +NaN:0x800000000001) == false +; run: %fcmp_ge_f64(+NaN:0x800000000001, +NaN) == false +; run: %fcmp_ge_f64(+NaN:0x800000000001, -NaN) == false +; run: %fcmp_ge_f64(-NaN:0x800000000001, -NaN) == false +; run: %fcmp_ge_f64(-NaN:0x800000000001, +NaN) == false + +; sNaN's +; run: %fcmp_ge_f64(+sNaN:0x1, +sNaN:0x1) == false +; run: %fcmp_ge_f64(-sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_ge_f64(+sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_ge_f64(-sNaN:0x1, +sNaN:0x1) == false + +; run: %fcmp_ge_f64(+sNaN:0x1, -0x1.0) == false +; run: %fcmp_ge_f64(-sNaN:0x1, -0x1.0) == false +; run: %fcmp_ge_f64(+sNaN:0x1, 0x1.0) == false +; run: %fcmp_ge_f64(-sNaN:0x1, 0x1.0) == false +; run: %fcmp_ge_f64(+sNaN:0x1, -0x0.0) == false +; run: %fcmp_ge_f64(-sNaN:0x1, -0x0.0) == false +; run: %fcmp_ge_f64(+sNaN:0x1, 0x0.0) == false +; run: %fcmp_ge_f64(-sNaN:0x1, 0x0.0) == false +; run: %fcmp_ge_f64(+sNaN:0x1, -Inf) == false +; run: %fcmp_ge_f64(-sNaN:0x1, -Inf) == false +; run: %fcmp_ge_f64(+sNaN:0x1, Inf) == false +; run: %fcmp_ge_f64(-sNaN:0x1, Inf) == false +; run: %fcmp_ge_f64(-0x0.0, +sNaN:0x1) == false +; run: %fcmp_ge_f64(-0x0.0, -sNaN:0x1) == false +; run: %fcmp_ge_f64(0x0.0, +sNaN:0x1) == false +; run: %fcmp_ge_f64(0x0.0, -sNaN:0x1) == false +; run: %fcmp_ge_f64(-Inf, +sNaN:0x1) == false +; run: %fcmp_ge_f64(-Inf, -sNaN:0x1) == false +; run: %fcmp_ge_f64(Inf, +sNaN:0x1) == false +; run: %fcmp_ge_f64(Inf, -sNaN:0x1) == false + +; run: %fcmp_ge_f64(+sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_ge_f64(-sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_ge_f64(+sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_ge_f64(-sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_ge_f64(+NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_ge_f64(-NaN:0x1, -sNaN:0x1) == false +; run: %fcmp_ge_f64(-NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_ge_f64(+NaN:0x1, -sNaN:0x1) == false + +; run: %fcmp_ge_f64(+sNaN:0x800000000001, +sNaN:0x800000000001) == false +; run: %fcmp_ge_f64(-sNaN:0x800000000001, -sNaN:0x800000000001) == false +; run: %fcmp_ge_f64(+sNaN:0x800000000001, -sNaN:0x800000000001) == false +; run: %fcmp_ge_f64(-sNaN:0x800000000001, +sNaN:0x800000000001) == false +; run: %fcmp_ge_f64(+sNaN:0x800000000001, +sNaN:0x1) == false +; run: %fcmp_ge_f64(+sNaN:0x800000000001, -sNaN:0x1) == false +; run: %fcmp_ge_f64(-sNaN:0x800000000001, -sNaN:0x1) == false +; run: %fcmp_ge_f64(-sNaN:0x800000000001, +sNaN:0x1) == false diff --git a/cranelift/filetests/filetests/runtests/fcmp-gt.clif b/cranelift/filetests/filetests/runtests/fcmp-gt.clif new file mode 100644 index 0000000000..250ebc0e0d --- /dev/null +++ b/cranelift/filetests/filetests/runtests/fcmp-gt.clif @@ -0,0 +1,319 @@ +test interpret +test run +target x86_64 +target aarch64 +target s390x + +function %fcmp_gt_f32(f32, f32) -> b1 { +block0(v0: f32, v1: f32): + v2 = fcmp gt v0, v1 + return v2 +} +; run: %fcmp_gt_f32(0x0.5, 0x0.5) == false +; run: %fcmp_gt_f32(0x1.0, 0x1.0) == false +; run: %fcmp_gt_f32(-0x1.0, 0x1.0) == false +; run: %fcmp_gt_f32(0x1.0, -0x1.0) == true +; run: %fcmp_gt_f32(0x0.5, 0x1.0) == false +; run: %fcmp_gt_f32(0x1.5, 0x2.9) == false +; run: %fcmp_gt_f32(0x1.1p10, 0x1.4p1) == true +; run: %fcmp_gt_f32(0x1.4cccccp0, 0x1.8p0) == false +; run: %fcmp_gt_f32(0x1.b33334p0, 0x1.99999ap-2) == true +; run: %fcmp_gt_f32(0x1.333334p-1, 0x1.666666p1) == false +; run: %fcmp_gt_f32(-0x0.5, -0x1.0) == true +; run: %fcmp_gt_f32(-0x1.5, -0x2.9) == true +; run: %fcmp_gt_f32(-0x1.1p10, -0x1.333334p-1) == false +; run: %fcmp_gt_f32(-0x1.99999ap-2, -0x1.4cccccp0) == true +; run: %fcmp_gt_f32(-0x1.8p0, -0x1.b33334p0) == true +; run: %fcmp_gt_f32(-0x1.4p1, -0x1.666666p1) == true +; run: %fcmp_gt_f32(0x0.5, -0x1.0) == true +; run: %fcmp_gt_f32(0x1.b33334p0, -0x1.b33334p0) == true + +; Zeroes +; run: %fcmp_gt_f32(0x0.0, 0x0.0) == false +; run: %fcmp_gt_f32(-0x0.0, -0x0.0) == false +; run: %fcmp_gt_f32(0x0.0, -0x0.0) == false +; run: %fcmp_gt_f32(-0x0.0, 0x0.0) == false + +; Infinities +; run: %fcmp_gt_f32(Inf, Inf) == false +; run: %fcmp_gt_f32(-Inf, -Inf) == false +; run: %fcmp_gt_f32(Inf, -Inf) == true +; run: %fcmp_gt_f32(-Inf, Inf) == false + +; Inf/Zero +; run: %fcmp_gt_f32(0x0.0, Inf) == false +; run: %fcmp_gt_f32(-0x0.0, Inf) == false +; run: %fcmp_gt_f32(0x0.0, -Inf) == true +; run: %fcmp_gt_f32(-0x0.0, -Inf) == true +; run: %fcmp_gt_f32(Inf, 0x0.0) == true +; run: %fcmp_gt_f32(Inf, -0x0.0) == true +; run: %fcmp_gt_f32(-Inf, 0x0.0) == false +; run: %fcmp_gt_f32(-Inf, -0x0.0) == false + +; Epsilon / Max / Min Positive +; run: %fcmp_gt_f32(0x1.0p-23, 0x1.0p-23) == false +; run: %fcmp_gt_f32(0x1.fffffep127, 0x1.fffffep127) == false +; run: %fcmp_gt_f32(0x1.0p-126, 0x1.0p-126) == false +; run: %fcmp_gt_f32(0x1.0p-23, 0x1.fffffep127) == false +; run: %fcmp_gt_f32(0x1.0p-23, 0x1.0p-126) == true +; run: %fcmp_gt_f32(0x1.0p-126, 0x1.fffffep127) == false + +; Subnormals +; run: %fcmp_gt_f32(0x0.800002p-126, -0x0.800002p-126) == true +; run: %fcmp_gt_f32(-0x0.800002p-126, 0x0.800002p-126) == false +; run: %fcmp_gt_f32(0x0.800002p-126, 0x0.0) == true +; run: %fcmp_gt_f32(-0x0.800002p-126, 0x0.0) == false +; run: %fcmp_gt_f32(0x0.800002p-126, -0x0.0) == true +; run: %fcmp_gt_f32(-0x0.800002p-126, -0x0.0) == false +; run: %fcmp_gt_f32(0x0.0, 0x0.800002p-126) == false +; run: %fcmp_gt_f32(0x0.0, -0x0.800002p-126) == true +; run: %fcmp_gt_f32(-0x0.0, 0x0.800002p-126) == false +; run: %fcmp_gt_f32(-0x0.0, -0x0.800002p-126) == true + +; NaN's +; run: %fcmp_gt_f32(+NaN, +NaN) == false +; run: %fcmp_gt_f32(-NaN, -NaN) == false +; run: %fcmp_gt_f32(+NaN, -NaN) == false +; run: %fcmp_gt_f32(-NaN, +NaN) == false + +; run: %fcmp_gt_f32(+NaN, -0x1.0) == false +; run: %fcmp_gt_f32(-NaN, -0x1.0) == false +; run: %fcmp_gt_f32(+NaN, 0x1.0) == false +; run: %fcmp_gt_f32(-NaN, 0x1.0) == false +; run: %fcmp_gt_f32(+NaN, -0x0.0) == false +; run: %fcmp_gt_f32(-NaN, -0x0.0) == false +; run: %fcmp_gt_f32(+NaN, 0x0.0) == false +; run: %fcmp_gt_f32(-NaN, 0x0.0) == false +; run: %fcmp_gt_f32(+NaN, -Inf) == false +; run: %fcmp_gt_f32(-NaN, -Inf) == false +; run: %fcmp_gt_f32(+NaN, Inf) == false +; run: %fcmp_gt_f32(-NaN, Inf) == false +; run: %fcmp_gt_f32(-0x0.0, +NaN) == false +; run: %fcmp_gt_f32(-0x0.0, -NaN) == false +; run: %fcmp_gt_f32(0x0.0, +NaN) == false +; run: %fcmp_gt_f32(0x0.0, -NaN) == false +; run: %fcmp_gt_f32(-Inf, +NaN) == false +; run: %fcmp_gt_f32(-Inf, -NaN) == false +; run: %fcmp_gt_f32(Inf, +NaN) == false +; run: %fcmp_gt_f32(Inf, -NaN) == false + +; run: %fcmp_gt_f32(+NaN:0x1, +NaN:0x1) == false +; run: %fcmp_gt_f32(-NaN:0x1, -NaN:0x1) == false +; run: %fcmp_gt_f32(+NaN:0x1, -NaN:0x1) == false +; run: %fcmp_gt_f32(-NaN:0x1, +NaN:0x1) == false +; run: %fcmp_gt_f32(+NaN:0x1, +NaN) == false +; run: %fcmp_gt_f32(+NaN:0x1, -NaN) == false +; run: %fcmp_gt_f32(-NaN:0x1, -NaN) == false +; run: %fcmp_gt_f32(-NaN:0x1, +NaN) == false + +; run: %fcmp_gt_f32(+NaN:0x80001, +NaN:0x80001) == false +; run: %fcmp_gt_f32(-NaN:0x80001, -NaN:0x80001) == false +; run: %fcmp_gt_f32(+NaN:0x80001, -NaN:0x80001) == false +; run: %fcmp_gt_f32(-NaN:0x80001, +NaN:0x80001) == false +; run: %fcmp_gt_f32(+NaN:0x80001, +NaN) == false +; run: %fcmp_gt_f32(+NaN:0x80001, -NaN) == false +; run: %fcmp_gt_f32(-NaN:0x80001, -NaN) == false +; run: %fcmp_gt_f32(-NaN:0x80001, +NaN) == false + +; sNaN's +; run: %fcmp_gt_f32(+sNaN:0x1, +sNaN:0x1) == false +; run: %fcmp_gt_f32(-sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_gt_f32(+sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_gt_f32(-sNaN:0x1, +sNaN:0x1) == false + +; run: %fcmp_gt_f32(+sNaN:0x1, -0x1.0) == false +; run: %fcmp_gt_f32(-sNaN:0x1, -0x1.0) == false +; run: %fcmp_gt_f32(+sNaN:0x1, 0x1.0) == false +; run: %fcmp_gt_f32(-sNaN:0x1, 0x1.0) == false +; run: %fcmp_gt_f32(+sNaN:0x1, -0x0.0) == false +; run: %fcmp_gt_f32(-sNaN:0x1, -0x0.0) == false +; run: %fcmp_gt_f32(+sNaN:0x1, 0x0.0) == false +; run: %fcmp_gt_f32(-sNaN:0x1, 0x0.0) == false +; run: %fcmp_gt_f32(+sNaN:0x1, -Inf) == false +; run: %fcmp_gt_f32(-sNaN:0x1, -Inf) == false +; run: %fcmp_gt_f32(+sNaN:0x1, Inf) == false +; run: %fcmp_gt_f32(-sNaN:0x1, Inf) == false +; run: %fcmp_gt_f32(-0x0.0, +sNaN:0x1) == false +; run: %fcmp_gt_f32(-0x0.0, -sNaN:0x1) == false +; run: %fcmp_gt_f32(0x0.0, +sNaN:0x1) == false +; run: %fcmp_gt_f32(0x0.0, -sNaN:0x1) == false +; run: %fcmp_gt_f32(-Inf, +sNaN:0x1) == false +; run: %fcmp_gt_f32(-Inf, -sNaN:0x1) == false +; run: %fcmp_gt_f32(Inf, +sNaN:0x1) == false +; run: %fcmp_gt_f32(Inf, -sNaN:0x1) == false + +; run: %fcmp_gt_f32(+sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_gt_f32(-sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_gt_f32(+sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_gt_f32(-sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_gt_f32(+NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_gt_f32(-NaN:0x1, -sNaN:0x1) == false +; run: %fcmp_gt_f32(-NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_gt_f32(+NaN:0x1, -sNaN:0x1) == false + +; run: %fcmp_gt_f32(+sNaN:0x80001, +sNaN:0x80001) == false +; run: %fcmp_gt_f32(-sNaN:0x80001, -sNaN:0x80001) == false +; run: %fcmp_gt_f32(+sNaN:0x80001, -sNaN:0x80001) == false +; run: %fcmp_gt_f32(-sNaN:0x80001, +sNaN:0x80001) == false +; run: %fcmp_gt_f32(+sNaN:0x80001, +sNaN:0x1) == false +; run: %fcmp_gt_f32(+sNaN:0x80001, -sNaN:0x1) == false +; run: %fcmp_gt_f32(-sNaN:0x80001, -sNaN:0x1) == false +; run: %fcmp_gt_f32(-sNaN:0x80001, +sNaN:0x1) == false + + +function %fcmp_gt_f64(f64, f64) -> b1 { +block0(v0: f64, v1: f64): + v2 = fcmp gt v0, v1 + return v2 +} +; run: %fcmp_gt_f64(0x0.5, 0x0.5) == false +; run: %fcmp_gt_f64(0x1.0, 0x1.0) == false +; run: %fcmp_gt_f64(-0x1.0, 0x1.0) == false +; run: %fcmp_gt_f64(0x1.0, -0x1.0) == true +; run: %fcmp_gt_f64(0x0.5, 0x1.0) == false +; run: %fcmp_gt_f64(0x1.5, 0x2.9) == false +; run: %fcmp_gt_f64(0x1.1p10, 0x1.4p1) == true +; run: %fcmp_gt_f64(0x1.4cccccccccccdp0, 0x1.8p0) == false +; run: %fcmp_gt_f64(0x1.b333333333333p0, 0x1.999999999999ap-2) == true +; run: %fcmp_gt_f64(0x1.3333333333333p-1, 0x1.6666666666666p1) == false +; run: %fcmp_gt_f64(-0x0.5, -0x1.0) == true +; run: %fcmp_gt_f64(-0x1.5, -0x2.9) == true +; run: %fcmp_gt_f64(-0x1.1p10, -0x1.3333333333333p-1) == false +; run: %fcmp_gt_f64(-0x1.999999999999ap-2, -0x1.4cccccccccccdp0) == true +; run: %fcmp_gt_f64(-0x1.8p0, -0x1.b333333333333p0) == true +; run: %fcmp_gt_f64(-0x1.4p1, -0x1.6666666666666p1) == true +; run: %fcmp_gt_f64(0x0.5, -0x1.0) == true +; run: %fcmp_gt_f64(0x1.b333333333333p0, -0x1.b333333333333p0) == true + + +; Zeroes +; run: %fcmp_gt_f64(0x0.0, 0x0.0) == false +; run: %fcmp_gt_f64(-0x0.0, -0x0.0) == false +; run: %fcmp_gt_f64(0x0.0, -0x0.0) == false +; run: %fcmp_gt_f64(-0x0.0, 0x0.0) == false + +; Infinities +; run: %fcmp_gt_f64(Inf, Inf) == false +; run: %fcmp_gt_f64(-Inf, -Inf) == false +; run: %fcmp_gt_f64(Inf, -Inf) == true +; run: %fcmp_gt_f64(-Inf, Inf) == false + +; Inf/Zero +; run: %fcmp_gt_f64(0x0.0, Inf) == false +; run: %fcmp_gt_f64(-0x0.0, Inf) == false +; run: %fcmp_gt_f64(0x0.0, -Inf) == true +; run: %fcmp_gt_f64(-0x0.0, -Inf) == true +; run: %fcmp_gt_f64(Inf, 0x0.0) == true +; run: %fcmp_gt_f64(Inf, -0x0.0) == true +; run: %fcmp_gt_f64(-Inf, 0x0.0) == false +; run: %fcmp_gt_f64(-Inf, -0x0.0) == false + +; Epsilon / Max / Min Positive +; run: %fcmp_gt_f64(0x1.0p-52, 0x1.0p-52) == false +; run: %fcmp_gt_f64(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) == false +; run: %fcmp_gt_f64(0x1.0p-1022, 0x1.0p-1022) == false +; run: %fcmp_gt_f64(0x1.0p-52, 0x1.fffffffffffffp1023) == false +; run: %fcmp_gt_f64(0x1.0p-52, 0x1.0p-1022) == true +; run: %fcmp_gt_f64(0x1.0p-1022, 0x1.fffffffffffffp1023) == false + +; Subnormals +; run: %fcmp_gt_f64(0x0.8p-1022, -0x0.8p-1022) == true +; run: %fcmp_gt_f64(-0x0.8p-1022, 0x0.8p-1022) == false +; run: %fcmp_gt_f64(0x0.8p-1022, 0x0.0) == true +; run: %fcmp_gt_f64(-0x0.8p-1022, 0x0.0) == false +; run: %fcmp_gt_f64(0x0.8p-1022, -0x0.0) == true +; run: %fcmp_gt_f64(-0x0.8p-1022, -0x0.0) == false +; run: %fcmp_gt_f64(0x0.0, 0x0.8p-1022) == false +; run: %fcmp_gt_f64(0x0.0, -0x0.8p-1022) == true +; run: %fcmp_gt_f64(-0x0.0, 0x0.8p-1022) == false +; run: %fcmp_gt_f64(-0x0.0, -0x0.8p-1022) == true + +; NaN's +; run: %fcmp_gt_f64(+NaN, +NaN) == false +; run: %fcmp_gt_f64(-NaN, -NaN) == false +; run: %fcmp_gt_f64(+NaN, -NaN) == false +; run: %fcmp_gt_f64(-NaN, +NaN) == false + +; run: %fcmp_gt_f64(+NaN, -0x1.0) == false +; run: %fcmp_gt_f64(-NaN, -0x1.0) == false +; run: %fcmp_gt_f64(+NaN, 0x1.0) == false +; run: %fcmp_gt_f64(-NaN, 0x1.0) == false +; run: %fcmp_gt_f64(+NaN, -0x0.0) == false +; run: %fcmp_gt_f64(-NaN, -0x0.0) == false +; run: %fcmp_gt_f64(+NaN, 0x0.0) == false +; run: %fcmp_gt_f64(-NaN, 0x0.0) == false +; run: %fcmp_gt_f64(+NaN, -Inf) == false +; run: %fcmp_gt_f64(-NaN, -Inf) == false +; run: %fcmp_gt_f64(+NaN, Inf) == false +; run: %fcmp_gt_f64(-NaN, Inf) == false +; run: %fcmp_gt_f64(-0x0.0, +NaN) == false +; run: %fcmp_gt_f64(-0x0.0, -NaN) == false +; run: %fcmp_gt_f64(0x0.0, +NaN) == false +; run: %fcmp_gt_f64(0x0.0, -NaN) == false +; run: %fcmp_gt_f64(-Inf, +NaN) == false +; run: %fcmp_gt_f64(-Inf, -NaN) == false +; run: %fcmp_gt_f64(Inf, +NaN) == false +; run: %fcmp_gt_f64(Inf, -NaN) == false + +; run: %fcmp_gt_f64(+NaN:0x1, +NaN:0x1) == false +; run: %fcmp_gt_f64(-NaN:0x1, -NaN:0x1) == false +; run: %fcmp_gt_f64(+NaN:0x1, -NaN:0x1) == false +; run: %fcmp_gt_f64(-NaN:0x1, +NaN:0x1) == false +; run: %fcmp_gt_f64(+NaN:0x1, +NaN) == false +; run: %fcmp_gt_f64(+NaN:0x1, -NaN) == false +; run: %fcmp_gt_f64(-NaN:0x1, -NaN) == false +; run: %fcmp_gt_f64(-NaN:0x1, +NaN) == false + +; run: %fcmp_gt_f64(+NaN:0x800000000001, +NaN:0x800000000001) == false +; run: %fcmp_gt_f64(-NaN:0x800000000001, -NaN:0x800000000001) == false +; run: %fcmp_gt_f64(+NaN:0x800000000001, -NaN:0x800000000001) == false +; run: %fcmp_gt_f64(-NaN:0x800000000001, +NaN:0x800000000001) == false +; run: %fcmp_gt_f64(+NaN:0x800000000001, +NaN) == false +; run: %fcmp_gt_f64(+NaN:0x800000000001, -NaN) == false +; run: %fcmp_gt_f64(-NaN:0x800000000001, -NaN) == false +; run: %fcmp_gt_f64(-NaN:0x800000000001, +NaN) == false + +; sNaN's +; run: %fcmp_gt_f64(+sNaN:0x1, +sNaN:0x1) == false +; run: %fcmp_gt_f64(-sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_gt_f64(+sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_gt_f64(-sNaN:0x1, +sNaN:0x1) == false + +; run: %fcmp_gt_f64(+sNaN:0x1, -0x1.0) == false +; run: %fcmp_gt_f64(-sNaN:0x1, -0x1.0) == false +; run: %fcmp_gt_f64(+sNaN:0x1, 0x1.0) == false +; run: %fcmp_gt_f64(-sNaN:0x1, 0x1.0) == false +; run: %fcmp_gt_f64(+sNaN:0x1, -0x0.0) == false +; run: %fcmp_gt_f64(-sNaN:0x1, -0x0.0) == false +; run: %fcmp_gt_f64(+sNaN:0x1, 0x0.0) == false +; run: %fcmp_gt_f64(-sNaN:0x1, 0x0.0) == false +; run: %fcmp_gt_f64(+sNaN:0x1, -Inf) == false +; run: %fcmp_gt_f64(-sNaN:0x1, -Inf) == false +; run: %fcmp_gt_f64(+sNaN:0x1, Inf) == false +; run: %fcmp_gt_f64(-sNaN:0x1, Inf) == false +; run: %fcmp_gt_f64(-0x0.0, +sNaN:0x1) == false +; run: %fcmp_gt_f64(-0x0.0, -sNaN:0x1) == false +; run: %fcmp_gt_f64(0x0.0, +sNaN:0x1) == false +; run: %fcmp_gt_f64(0x0.0, -sNaN:0x1) == false +; run: %fcmp_gt_f64(-Inf, +sNaN:0x1) == false +; run: %fcmp_gt_f64(-Inf, -sNaN:0x1) == false +; run: %fcmp_gt_f64(Inf, +sNaN:0x1) == false +; run: %fcmp_gt_f64(Inf, -sNaN:0x1) == false + +; run: %fcmp_gt_f64(+sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_gt_f64(-sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_gt_f64(+sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_gt_f64(-sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_gt_f64(+NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_gt_f64(-NaN:0x1, -sNaN:0x1) == false +; run: %fcmp_gt_f64(-NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_gt_f64(+NaN:0x1, -sNaN:0x1) == false + +; run: %fcmp_gt_f64(+sNaN:0x800000000001, +sNaN:0x800000000001) == false +; run: %fcmp_gt_f64(-sNaN:0x800000000001, -sNaN:0x800000000001) == false +; run: %fcmp_gt_f64(+sNaN:0x800000000001, -sNaN:0x800000000001) == false +; run: %fcmp_gt_f64(-sNaN:0x800000000001, +sNaN:0x800000000001) == false +; run: %fcmp_gt_f64(+sNaN:0x800000000001, +sNaN:0x1) == false +; run: %fcmp_gt_f64(+sNaN:0x800000000001, -sNaN:0x1) == false +; run: %fcmp_gt_f64(-sNaN:0x800000000001, -sNaN:0x1) == false +; run: %fcmp_gt_f64(-sNaN:0x800000000001, +sNaN:0x1) == false diff --git a/cranelift/filetests/filetests/runtests/fcmp-le.clif b/cranelift/filetests/filetests/runtests/fcmp-le.clif new file mode 100644 index 0000000000..45f3059406 --- /dev/null +++ b/cranelift/filetests/filetests/runtests/fcmp-le.clif @@ -0,0 +1,319 @@ +test interpret +test run +target x86_64 +target aarch64 +target s390x + +function %fcmp_le_f32(f32, f32) -> b1 { +block0(v0: f32, v1: f32): + v2 = fcmp le v0, v1 + return v2 +} +; run: %fcmp_le_f32(0x0.5, 0x0.5) == true +; run: %fcmp_le_f32(0x1.0, 0x1.0) == true +; run: %fcmp_le_f32(-0x1.0, 0x1.0) == true +; run: %fcmp_le_f32(0x1.0, -0x1.0) == false +; run: %fcmp_le_f32(0x0.5, 0x1.0) == true +; run: %fcmp_le_f32(0x1.5, 0x2.9) == true +; run: %fcmp_le_f32(0x1.1p10, 0x1.4p1) == false +; run: %fcmp_le_f32(0x1.4cccccp0, 0x1.8p0) == true +; run: %fcmp_le_f32(0x1.b33334p0, 0x1.99999ap-2) == false +; run: %fcmp_le_f32(0x1.333334p-1, 0x1.666666p1) == true +; run: %fcmp_le_f32(-0x0.5, -0x1.0) == false +; run: %fcmp_le_f32(-0x1.5, -0x2.9) == false +; run: %fcmp_le_f32(-0x1.1p10, -0x1.333334p-1) == true +; run: %fcmp_le_f32(-0x1.99999ap-2, -0x1.4cccccp0) == false +; run: %fcmp_le_f32(-0x1.8p0, -0x1.b33334p0) == false +; run: %fcmp_le_f32(-0x1.4p1, -0x1.666666p1) == false +; run: %fcmp_le_f32(0x0.5, -0x1.0) == false +; run: %fcmp_le_f32(0x1.b33334p0, -0x1.b33334p0) == false + +; Zeroes +; run: %fcmp_le_f32(0x0.0, 0x0.0) == true +; run: %fcmp_le_f32(-0x0.0, -0x0.0) == true +; run: %fcmp_le_f32(0x0.0, -0x0.0) == true +; run: %fcmp_le_f32(-0x0.0, 0x0.0) == true + +; Infinities +; run: %fcmp_le_f32(Inf, Inf) == true +; run: %fcmp_le_f32(-Inf, -Inf) == true +; run: %fcmp_le_f32(Inf, -Inf) == false +; run: %fcmp_le_f32(-Inf, Inf) == true + +; Inf/Zero +; run: %fcmp_le_f32(0x0.0, Inf) == true +; run: %fcmp_le_f32(-0x0.0, Inf) == true +; run: %fcmp_le_f32(0x0.0, -Inf) == false +; run: %fcmp_le_f32(-0x0.0, -Inf) == false +; run: %fcmp_le_f32(Inf, 0x0.0) == false +; run: %fcmp_le_f32(Inf, -0x0.0) == false +; run: %fcmp_le_f32(-Inf, 0x0.0) == true +; run: %fcmp_le_f32(-Inf, -0x0.0) == true + +; Epsilon / Max / Min Positive +; run: %fcmp_le_f32(0x1.0p-23, 0x1.0p-23) == true +; run: %fcmp_le_f32(0x1.fffffep127, 0x1.fffffep127) == true +; run: %fcmp_le_f32(0x1.0p-126, 0x1.0p-126) == true +; run: %fcmp_le_f32(0x1.0p-23, 0x1.fffffep127) == true +; run: %fcmp_le_f32(0x1.0p-23, 0x1.0p-126) == false +; run: %fcmp_le_f32(0x1.0p-126, 0x1.fffffep127) == true + +; Subnormals +; run: %fcmp_le_f32(0x0.800002p-126, -0x0.800002p-126) == false +; run: %fcmp_le_f32(-0x0.800002p-126, 0x0.800002p-126) == true +; run: %fcmp_le_f32(0x0.800002p-126, 0x0.0) == false +; run: %fcmp_le_f32(-0x0.800002p-126, 0x0.0) == true +; run: %fcmp_le_f32(0x0.800002p-126, -0x0.0) == false +; run: %fcmp_le_f32(-0x0.800002p-126, -0x0.0) == true +; run: %fcmp_le_f32(0x0.0, 0x0.800002p-126) == true +; run: %fcmp_le_f32(0x0.0, -0x0.800002p-126) == false +; run: %fcmp_le_f32(-0x0.0, 0x0.800002p-126) == true +; run: %fcmp_le_f32(-0x0.0, -0x0.800002p-126) == false + +; NaN's +; run: %fcmp_le_f32(+NaN, +NaN) == false +; run: %fcmp_le_f32(-NaN, -NaN) == false +; run: %fcmp_le_f32(+NaN, -NaN) == false +; run: %fcmp_le_f32(-NaN, +NaN) == false + +; run: %fcmp_le_f32(+NaN, -0x1.0) == false +; run: %fcmp_le_f32(-NaN, -0x1.0) == false +; run: %fcmp_le_f32(+NaN, 0x1.0) == false +; run: %fcmp_le_f32(-NaN, 0x1.0) == false +; run: %fcmp_le_f32(+NaN, -0x0.0) == false +; run: %fcmp_le_f32(-NaN, -0x0.0) == false +; run: %fcmp_le_f32(+NaN, 0x0.0) == false +; run: %fcmp_le_f32(-NaN, 0x0.0) == false +; run: %fcmp_le_f32(+NaN, -Inf) == false +; run: %fcmp_le_f32(-NaN, -Inf) == false +; run: %fcmp_le_f32(+NaN, Inf) == false +; run: %fcmp_le_f32(-NaN, Inf) == false +; run: %fcmp_le_f32(-0x0.0, +NaN) == false +; run: %fcmp_le_f32(-0x0.0, -NaN) == false +; run: %fcmp_le_f32(0x0.0, +NaN) == false +; run: %fcmp_le_f32(0x0.0, -NaN) == false +; run: %fcmp_le_f32(-Inf, +NaN) == false +; run: %fcmp_le_f32(-Inf, -NaN) == false +; run: %fcmp_le_f32(Inf, +NaN) == false +; run: %fcmp_le_f32(Inf, -NaN) == false + +; run: %fcmp_le_f32(+NaN:0x1, +NaN:0x1) == false +; run: %fcmp_le_f32(-NaN:0x1, -NaN:0x1) == false +; run: %fcmp_le_f32(+NaN:0x1, -NaN:0x1) == false +; run: %fcmp_le_f32(-NaN:0x1, +NaN:0x1) == false +; run: %fcmp_le_f32(+NaN:0x1, +NaN) == false +; run: %fcmp_le_f32(+NaN:0x1, -NaN) == false +; run: %fcmp_le_f32(-NaN:0x1, -NaN) == false +; run: %fcmp_le_f32(-NaN:0x1, +NaN) == false + +; run: %fcmp_le_f32(+NaN:0x80001, +NaN:0x80001) == false +; run: %fcmp_le_f32(-NaN:0x80001, -NaN:0x80001) == false +; run: %fcmp_le_f32(+NaN:0x80001, -NaN:0x80001) == false +; run: %fcmp_le_f32(-NaN:0x80001, +NaN:0x80001) == false +; run: %fcmp_le_f32(+NaN:0x80001, +NaN) == false +; run: %fcmp_le_f32(+NaN:0x80001, -NaN) == false +; run: %fcmp_le_f32(-NaN:0x80001, -NaN) == false +; run: %fcmp_le_f32(-NaN:0x80001, +NaN) == false + +; sNaN's +; run: %fcmp_le_f32(+sNaN:0x1, +sNaN:0x1) == false +; run: %fcmp_le_f32(-sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_le_f32(+sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_le_f32(-sNaN:0x1, +sNaN:0x1) == false + +; run: %fcmp_le_f32(+sNaN:0x1, -0x1.0) == false +; run: %fcmp_le_f32(-sNaN:0x1, -0x1.0) == false +; run: %fcmp_le_f32(+sNaN:0x1, 0x1.0) == false +; run: %fcmp_le_f32(-sNaN:0x1, 0x1.0) == false +; run: %fcmp_le_f32(+sNaN:0x1, -0x0.0) == false +; run: %fcmp_le_f32(-sNaN:0x1, -0x0.0) == false +; run: %fcmp_le_f32(+sNaN:0x1, 0x0.0) == false +; run: %fcmp_le_f32(-sNaN:0x1, 0x0.0) == false +; run: %fcmp_le_f32(+sNaN:0x1, -Inf) == false +; run: %fcmp_le_f32(-sNaN:0x1, -Inf) == false +; run: %fcmp_le_f32(+sNaN:0x1, Inf) == false +; run: %fcmp_le_f32(-sNaN:0x1, Inf) == false +; run: %fcmp_le_f32(-0x0.0, +sNaN:0x1) == false +; run: %fcmp_le_f32(-0x0.0, -sNaN:0x1) == false +; run: %fcmp_le_f32(0x0.0, +sNaN:0x1) == false +; run: %fcmp_le_f32(0x0.0, -sNaN:0x1) == false +; run: %fcmp_le_f32(-Inf, +sNaN:0x1) == false +; run: %fcmp_le_f32(-Inf, -sNaN:0x1) == false +; run: %fcmp_le_f32(Inf, +sNaN:0x1) == false +; run: %fcmp_le_f32(Inf, -sNaN:0x1) == false + +; run: %fcmp_le_f32(+sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_le_f32(-sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_le_f32(+sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_le_f32(-sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_le_f32(+NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_le_f32(-NaN:0x1, -sNaN:0x1) == false +; run: %fcmp_le_f32(-NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_le_f32(+NaN:0x1, -sNaN:0x1) == false + +; run: %fcmp_le_f32(+sNaN:0x80001, +sNaN:0x80001) == false +; run: %fcmp_le_f32(-sNaN:0x80001, -sNaN:0x80001) == false +; run: %fcmp_le_f32(+sNaN:0x80001, -sNaN:0x80001) == false +; run: %fcmp_le_f32(-sNaN:0x80001, +sNaN:0x80001) == false +; run: %fcmp_le_f32(+sNaN:0x80001, +sNaN:0x1) == false +; run: %fcmp_le_f32(+sNaN:0x80001, -sNaN:0x1) == false +; run: %fcmp_le_f32(-sNaN:0x80001, -sNaN:0x1) == false +; run: %fcmp_le_f32(-sNaN:0x80001, +sNaN:0x1) == false + + +function %fcmp_le_f64(f64, f64) -> b1 { +block0(v0: f64, v1: f64): + v2 = fcmp le v0, v1 + return v2 +} +; run: %fcmp_le_f64(0x0.5, 0x0.5) == true +; run: %fcmp_le_f64(0x1.0, 0x1.0) == true +; run: %fcmp_le_f64(-0x1.0, 0x1.0) == true +; run: %fcmp_le_f64(0x1.0, -0x1.0) == false +; run: %fcmp_le_f64(0x0.5, 0x1.0) == true +; run: %fcmp_le_f64(0x1.5, 0x2.9) == true +; run: %fcmp_le_f64(0x1.1p10, 0x1.4p1) == false +; run: %fcmp_le_f64(0x1.4cccccccccccdp0, 0x1.8p0) == true +; run: %fcmp_le_f64(0x1.b333333333333p0, 0x1.999999999999ap-2) == false +; run: %fcmp_le_f64(0x1.3333333333333p-1, 0x1.6666666666666p1) == true +; run: %fcmp_le_f64(-0x0.5, -0x1.0) == false +; run: %fcmp_le_f64(-0x1.5, -0x2.9) == false +; run: %fcmp_le_f64(-0x1.1p10, -0x1.3333333333333p-1) == true +; run: %fcmp_le_f64(-0x1.999999999999ap-2, -0x1.4cccccccccccdp0) == false +; run: %fcmp_le_f64(-0x1.8p0, -0x1.b333333333333p0) == false +; run: %fcmp_le_f64(-0x1.4p1, -0x1.6666666666666p1) == false +; run: %fcmp_le_f64(0x0.5, -0x1.0) == false +; run: %fcmp_le_f64(0x1.b333333333333p0, -0x1.b333333333333p0) == false + + +; Zeroes +; run: %fcmp_le_f64(0x0.0, 0x0.0) == true +; run: %fcmp_le_f64(-0x0.0, -0x0.0) == true +; run: %fcmp_le_f64(0x0.0, -0x0.0) == true +; run: %fcmp_le_f64(-0x0.0, 0x0.0) == true + +; Infinities +; run: %fcmp_le_f64(Inf, Inf) == true +; run: %fcmp_le_f64(-Inf, -Inf) == true +; run: %fcmp_le_f64(Inf, -Inf) == false +; run: %fcmp_le_f64(-Inf, Inf) == true + +; Inf/Zero +; run: %fcmp_le_f64(0x0.0, Inf) == true +; run: %fcmp_le_f64(-0x0.0, Inf) == true +; run: %fcmp_le_f64(0x0.0, -Inf) == false +; run: %fcmp_le_f64(-0x0.0, -Inf) == false +; run: %fcmp_le_f64(Inf, 0x0.0) == false +; run: %fcmp_le_f64(Inf, -0x0.0) == false +; run: %fcmp_le_f64(-Inf, 0x0.0) == true +; run: %fcmp_le_f64(-Inf, -0x0.0) == true + +; Epsilon / Max / Min Positive +; run: %fcmp_le_f64(0x1.0p-52, 0x1.0p-52) == true +; run: %fcmp_le_f64(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) == true +; run: %fcmp_le_f64(0x1.0p-1022, 0x1.0p-1022) == true +; run: %fcmp_le_f64(0x1.0p-52, 0x1.fffffffffffffp1023) == true +; run: %fcmp_le_f64(0x1.0p-52, 0x1.0p-1022) == false +; run: %fcmp_le_f64(0x1.0p-1022, 0x1.fffffffffffffp1023) == true + +; Subnormals +; run: %fcmp_le_f64(0x0.8p-1022, -0x0.8p-1022) == false +; run: %fcmp_le_f64(-0x0.8p-1022, 0x0.8p-1022) == true +; run: %fcmp_le_f64(0x0.8p-1022, 0x0.0) == false +; run: %fcmp_le_f64(-0x0.8p-1022, 0x0.0) == true +; run: %fcmp_le_f64(0x0.8p-1022, -0x0.0) == false +; run: %fcmp_le_f64(-0x0.8p-1022, -0x0.0) == true +; run: %fcmp_le_f64(0x0.0, 0x0.8p-1022) == true +; run: %fcmp_le_f64(0x0.0, -0x0.8p-1022) == false +; run: %fcmp_le_f64(-0x0.0, 0x0.8p-1022) == true +; run: %fcmp_le_f64(-0x0.0, -0x0.8p-1022) == false + +; NaN's +; run: %fcmp_le_f64(+NaN, +NaN) == false +; run: %fcmp_le_f64(-NaN, -NaN) == false +; run: %fcmp_le_f64(+NaN, -NaN) == false +; run: %fcmp_le_f64(-NaN, +NaN) == false + +; run: %fcmp_le_f64(+NaN, -0x1.0) == false +; run: %fcmp_le_f64(-NaN, -0x1.0) == false +; run: %fcmp_le_f64(+NaN, 0x1.0) == false +; run: %fcmp_le_f64(-NaN, 0x1.0) == false +; run: %fcmp_le_f64(+NaN, -0x0.0) == false +; run: %fcmp_le_f64(-NaN, -0x0.0) == false +; run: %fcmp_le_f64(+NaN, 0x0.0) == false +; run: %fcmp_le_f64(-NaN, 0x0.0) == false +; run: %fcmp_le_f64(+NaN, -Inf) == false +; run: %fcmp_le_f64(-NaN, -Inf) == false +; run: %fcmp_le_f64(+NaN, Inf) == false +; run: %fcmp_le_f64(-NaN, Inf) == false +; run: %fcmp_le_f64(-0x0.0, +NaN) == false +; run: %fcmp_le_f64(-0x0.0, -NaN) == false +; run: %fcmp_le_f64(0x0.0, +NaN) == false +; run: %fcmp_le_f64(0x0.0, -NaN) == false +; run: %fcmp_le_f64(-Inf, +NaN) == false +; run: %fcmp_le_f64(-Inf, -NaN) == false +; run: %fcmp_le_f64(Inf, +NaN) == false +; run: %fcmp_le_f64(Inf, -NaN) == false + +; run: %fcmp_le_f64(+NaN:0x1, +NaN:0x1) == false +; run: %fcmp_le_f64(-NaN:0x1, -NaN:0x1) == false +; run: %fcmp_le_f64(+NaN:0x1, -NaN:0x1) == false +; run: %fcmp_le_f64(-NaN:0x1, +NaN:0x1) == false +; run: %fcmp_le_f64(+NaN:0x1, +NaN) == false +; run: %fcmp_le_f64(+NaN:0x1, -NaN) == false +; run: %fcmp_le_f64(-NaN:0x1, -NaN) == false +; run: %fcmp_le_f64(-NaN:0x1, +NaN) == false + +; run: %fcmp_le_f64(+NaN:0x800000000001, +NaN:0x800000000001) == false +; run: %fcmp_le_f64(-NaN:0x800000000001, -NaN:0x800000000001) == false +; run: %fcmp_le_f64(+NaN:0x800000000001, -NaN:0x800000000001) == false +; run: %fcmp_le_f64(-NaN:0x800000000001, +NaN:0x800000000001) == false +; run: %fcmp_le_f64(+NaN:0x800000000001, +NaN) == false +; run: %fcmp_le_f64(+NaN:0x800000000001, -NaN) == false +; run: %fcmp_le_f64(-NaN:0x800000000001, -NaN) == false +; run: %fcmp_le_f64(-NaN:0x800000000001, +NaN) == false + +; sNaN's +; run: %fcmp_le_f64(+sNaN:0x1, +sNaN:0x1) == false +; run: %fcmp_le_f64(-sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_le_f64(+sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_le_f64(-sNaN:0x1, +sNaN:0x1) == false + +; run: %fcmp_le_f64(+sNaN:0x1, -0x1.0) == false +; run: %fcmp_le_f64(-sNaN:0x1, -0x1.0) == false +; run: %fcmp_le_f64(+sNaN:0x1, 0x1.0) == false +; run: %fcmp_le_f64(-sNaN:0x1, 0x1.0) == false +; run: %fcmp_le_f64(+sNaN:0x1, -0x0.0) == false +; run: %fcmp_le_f64(-sNaN:0x1, -0x0.0) == false +; run: %fcmp_le_f64(+sNaN:0x1, 0x0.0) == false +; run: %fcmp_le_f64(-sNaN:0x1, 0x0.0) == false +; run: %fcmp_le_f64(+sNaN:0x1, -Inf) == false +; run: %fcmp_le_f64(-sNaN:0x1, -Inf) == false +; run: %fcmp_le_f64(+sNaN:0x1, Inf) == false +; run: %fcmp_le_f64(-sNaN:0x1, Inf) == false +; run: %fcmp_le_f64(-0x0.0, +sNaN:0x1) == false +; run: %fcmp_le_f64(-0x0.0, -sNaN:0x1) == false +; run: %fcmp_le_f64(0x0.0, +sNaN:0x1) == false +; run: %fcmp_le_f64(0x0.0, -sNaN:0x1) == false +; run: %fcmp_le_f64(-Inf, +sNaN:0x1) == false +; run: %fcmp_le_f64(-Inf, -sNaN:0x1) == false +; run: %fcmp_le_f64(Inf, +sNaN:0x1) == false +; run: %fcmp_le_f64(Inf, -sNaN:0x1) == false + +; run: %fcmp_le_f64(+sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_le_f64(-sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_le_f64(+sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_le_f64(-sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_le_f64(+NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_le_f64(-NaN:0x1, -sNaN:0x1) == false +; run: %fcmp_le_f64(-NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_le_f64(+NaN:0x1, -sNaN:0x1) == false + +; run: %fcmp_le_f64(+sNaN:0x800000000001, +sNaN:0x800000000001) == false +; run: %fcmp_le_f64(-sNaN:0x800000000001, -sNaN:0x800000000001) == false +; run: %fcmp_le_f64(+sNaN:0x800000000001, -sNaN:0x800000000001) == false +; run: %fcmp_le_f64(-sNaN:0x800000000001, +sNaN:0x800000000001) == false +; run: %fcmp_le_f64(+sNaN:0x800000000001, +sNaN:0x1) == false +; run: %fcmp_le_f64(+sNaN:0x800000000001, -sNaN:0x1) == false +; run: %fcmp_le_f64(-sNaN:0x800000000001, -sNaN:0x1) == false +; run: %fcmp_le_f64(-sNaN:0x800000000001, +sNaN:0x1) == false diff --git a/cranelift/filetests/filetests/runtests/fcmp-lt.clif b/cranelift/filetests/filetests/runtests/fcmp-lt.clif new file mode 100644 index 0000000000..c94501f30a --- /dev/null +++ b/cranelift/filetests/filetests/runtests/fcmp-lt.clif @@ -0,0 +1,319 @@ +test interpret +test run +target x86_64 +target aarch64 +target s390x + +function %fcmp_lt_f32(f32, f32) -> b1 { +block0(v0: f32, v1: f32): + v2 = fcmp lt v0, v1 + return v2 +} +; run: %fcmp_lt_f32(0x0.5, 0x0.5) == false +; run: %fcmp_lt_f32(0x1.0, 0x1.0) == false +; run: %fcmp_lt_f32(-0x1.0, 0x1.0) == true +; run: %fcmp_lt_f32(0x1.0, -0x1.0) == false +; run: %fcmp_lt_f32(0x0.5, 0x1.0) == true +; run: %fcmp_lt_f32(0x1.5, 0x2.9) == true +; run: %fcmp_lt_f32(0x1.1p10, 0x1.4p1) == false +; run: %fcmp_lt_f32(0x1.4cccccp0, 0x1.8p0) == true +; run: %fcmp_lt_f32(0x1.b33334p0, 0x1.99999ap-2) == false +; run: %fcmp_lt_f32(0x1.333334p-1, 0x1.666666p1) == true +; run: %fcmp_lt_f32(-0x0.5, -0x1.0) == false +; run: %fcmp_lt_f32(-0x1.5, -0x2.9) == false +; run: %fcmp_lt_f32(-0x1.1p10, -0x1.333334p-1) == true +; run: %fcmp_lt_f32(-0x1.99999ap-2, -0x1.4cccccp0) == false +; run: %fcmp_lt_f32(-0x1.8p0, -0x1.b33334p0) == false +; run: %fcmp_lt_f32(-0x1.4p1, -0x1.666666p1) == false +; run: %fcmp_lt_f32(0x0.5, -0x1.0) == false +; run: %fcmp_lt_f32(0x1.b33334p0, -0x1.b33334p0) == false + +; Zeroes +; run: %fcmp_lt_f32(0x0.0, 0x0.0) == false +; run: %fcmp_lt_f32(-0x0.0, -0x0.0) == false +; run: %fcmp_lt_f32(0x0.0, -0x0.0) == false +; run: %fcmp_lt_f32(-0x0.0, 0x0.0) == false + +; Infinities +; run: %fcmp_lt_f32(Inf, Inf) == false +; run: %fcmp_lt_f32(-Inf, -Inf) == false +; run: %fcmp_lt_f32(Inf, -Inf) == false +; run: %fcmp_lt_f32(-Inf, Inf) == true + +; Inf/Zero +; run: %fcmp_lt_f32(0x0.0, Inf) == true +; run: %fcmp_lt_f32(-0x0.0, Inf) == true +; run: %fcmp_lt_f32(0x0.0, -Inf) == false +; run: %fcmp_lt_f32(-0x0.0, -Inf) == false +; run: %fcmp_lt_f32(Inf, 0x0.0) == false +; run: %fcmp_lt_f32(Inf, -0x0.0) == false +; run: %fcmp_lt_f32(-Inf, 0x0.0) == true +; run: %fcmp_lt_f32(-Inf, -0x0.0) == true + +; Epsilon / Max / Min Positive +; run: %fcmp_lt_f32(0x1.0p-23, 0x1.0p-23) == false +; run: %fcmp_lt_f32(0x1.fffffep127, 0x1.fffffep127) == false +; run: %fcmp_lt_f32(0x1.0p-126, 0x1.0p-126) == false +; run: %fcmp_lt_f32(0x1.0p-23, 0x1.fffffep127) == true +; run: %fcmp_lt_f32(0x1.0p-23, 0x1.0p-126) == false +; run: %fcmp_lt_f32(0x1.0p-126, 0x1.fffffep127) == true + +; Subnormals +; run: %fcmp_lt_f32(0x0.800002p-126, -0x0.800002p-126) == false +; run: %fcmp_lt_f32(-0x0.800002p-126, 0x0.800002p-126) == true +; run: %fcmp_lt_f32(0x0.800002p-126, 0x0.0) == false +; run: %fcmp_lt_f32(-0x0.800002p-126, 0x0.0) == true +; run: %fcmp_lt_f32(0x0.800002p-126, -0x0.0) == false +; run: %fcmp_lt_f32(-0x0.800002p-126, -0x0.0) == true +; run: %fcmp_lt_f32(0x0.0, 0x0.800002p-126) == true +; run: %fcmp_lt_f32(0x0.0, -0x0.800002p-126) == false +; run: %fcmp_lt_f32(-0x0.0, 0x0.800002p-126) == true +; run: %fcmp_lt_f32(-0x0.0, -0x0.800002p-126) == false + +; NaN's +; run: %fcmp_lt_f32(+NaN, +NaN) == false +; run: %fcmp_lt_f32(-NaN, -NaN) == false +; run: %fcmp_lt_f32(+NaN, -NaN) == false +; run: %fcmp_lt_f32(-NaN, +NaN) == false + +; run: %fcmp_lt_f32(+NaN, -0x1.0) == false +; run: %fcmp_lt_f32(-NaN, -0x1.0) == false +; run: %fcmp_lt_f32(+NaN, 0x1.0) == false +; run: %fcmp_lt_f32(-NaN, 0x1.0) == false +; run: %fcmp_lt_f32(+NaN, -0x0.0) == false +; run: %fcmp_lt_f32(-NaN, -0x0.0) == false +; run: %fcmp_lt_f32(+NaN, 0x0.0) == false +; run: %fcmp_lt_f32(-NaN, 0x0.0) == false +; run: %fcmp_lt_f32(+NaN, -Inf) == false +; run: %fcmp_lt_f32(-NaN, -Inf) == false +; run: %fcmp_lt_f32(+NaN, Inf) == false +; run: %fcmp_lt_f32(-NaN, Inf) == false +; run: %fcmp_lt_f32(-0x0.0, +NaN) == false +; run: %fcmp_lt_f32(-0x0.0, -NaN) == false +; run: %fcmp_lt_f32(0x0.0, +NaN) == false +; run: %fcmp_lt_f32(0x0.0, -NaN) == false +; run: %fcmp_lt_f32(-Inf, +NaN) == false +; run: %fcmp_lt_f32(-Inf, -NaN) == false +; run: %fcmp_lt_f32(Inf, +NaN) == false +; run: %fcmp_lt_f32(Inf, -NaN) == false + +; run: %fcmp_lt_f32(+NaN:0x1, +NaN:0x1) == false +; run: %fcmp_lt_f32(-NaN:0x1, -NaN:0x1) == false +; run: %fcmp_lt_f32(+NaN:0x1, -NaN:0x1) == false +; run: %fcmp_lt_f32(-NaN:0x1, +NaN:0x1) == false +; run: %fcmp_lt_f32(+NaN:0x1, +NaN) == false +; run: %fcmp_lt_f32(+NaN:0x1, -NaN) == false +; run: %fcmp_lt_f32(-NaN:0x1, -NaN) == false +; run: %fcmp_lt_f32(-NaN:0x1, +NaN) == false + +; run: %fcmp_lt_f32(+NaN:0x80001, +NaN:0x80001) == false +; run: %fcmp_lt_f32(-NaN:0x80001, -NaN:0x80001) == false +; run: %fcmp_lt_f32(+NaN:0x80001, -NaN:0x80001) == false +; run: %fcmp_lt_f32(-NaN:0x80001, +NaN:0x80001) == false +; run: %fcmp_lt_f32(+NaN:0x80001, +NaN) == false +; run: %fcmp_lt_f32(+NaN:0x80001, -NaN) == false +; run: %fcmp_lt_f32(-NaN:0x80001, -NaN) == false +; run: %fcmp_lt_f32(-NaN:0x80001, +NaN) == false + +; sNaN's +; run: %fcmp_lt_f32(+sNaN:0x1, +sNaN:0x1) == false +; run: %fcmp_lt_f32(-sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_lt_f32(+sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_lt_f32(-sNaN:0x1, +sNaN:0x1) == false + +; run: %fcmp_lt_f32(+sNaN:0x1, -0x1.0) == false +; run: %fcmp_lt_f32(-sNaN:0x1, -0x1.0) == false +; run: %fcmp_lt_f32(+sNaN:0x1, 0x1.0) == false +; run: %fcmp_lt_f32(-sNaN:0x1, 0x1.0) == false +; run: %fcmp_lt_f32(+sNaN:0x1, -0x0.0) == false +; run: %fcmp_lt_f32(-sNaN:0x1, -0x0.0) == false +; run: %fcmp_lt_f32(+sNaN:0x1, 0x0.0) == false +; run: %fcmp_lt_f32(-sNaN:0x1, 0x0.0) == false +; run: %fcmp_lt_f32(+sNaN:0x1, -Inf) == false +; run: %fcmp_lt_f32(-sNaN:0x1, -Inf) == false +; run: %fcmp_lt_f32(+sNaN:0x1, Inf) == false +; run: %fcmp_lt_f32(-sNaN:0x1, Inf) == false +; run: %fcmp_lt_f32(-0x0.0, +sNaN:0x1) == false +; run: %fcmp_lt_f32(-0x0.0, -sNaN:0x1) == false +; run: %fcmp_lt_f32(0x0.0, +sNaN:0x1) == false +; run: %fcmp_lt_f32(0x0.0, -sNaN:0x1) == false +; run: %fcmp_lt_f32(-Inf, +sNaN:0x1) == false +; run: %fcmp_lt_f32(-Inf, -sNaN:0x1) == false +; run: %fcmp_lt_f32(Inf, +sNaN:0x1) == false +; run: %fcmp_lt_f32(Inf, -sNaN:0x1) == false + +; run: %fcmp_lt_f32(+sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_lt_f32(-sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_lt_f32(+sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_lt_f32(-sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_lt_f32(+NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_lt_f32(-NaN:0x1, -sNaN:0x1) == false +; run: %fcmp_lt_f32(-NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_lt_f32(+NaN:0x1, -sNaN:0x1) == false + +; run: %fcmp_lt_f32(+sNaN:0x80001, +sNaN:0x80001) == false +; run: %fcmp_lt_f32(-sNaN:0x80001, -sNaN:0x80001) == false +; run: %fcmp_lt_f32(+sNaN:0x80001, -sNaN:0x80001) == false +; run: %fcmp_lt_f32(-sNaN:0x80001, +sNaN:0x80001) == false +; run: %fcmp_lt_f32(+sNaN:0x80001, +sNaN:0x1) == false +; run: %fcmp_lt_f32(+sNaN:0x80001, -sNaN:0x1) == false +; run: %fcmp_lt_f32(-sNaN:0x80001, -sNaN:0x1) == false +; run: %fcmp_lt_f32(-sNaN:0x80001, +sNaN:0x1) == false + + +function %fcmp_lt_f64(f64, f64) -> b1 { +block0(v0: f64, v1: f64): + v2 = fcmp lt v0, v1 + return v2 +} +; run: %fcmp_lt_f64(0x0.5, 0x0.5) == false +; run: %fcmp_lt_f64(0x1.0, 0x1.0) == false +; run: %fcmp_lt_f64(-0x1.0, 0x1.0) == true +; run: %fcmp_lt_f64(0x1.0, -0x1.0) == false +; run: %fcmp_lt_f64(0x0.5, 0x1.0) == true +; run: %fcmp_lt_f64(0x1.5, 0x2.9) == true +; run: %fcmp_lt_f64(0x1.1p10, 0x1.4p1) == false +; run: %fcmp_lt_f64(0x1.4cccccccccccdp0, 0x1.8p0) == true +; run: %fcmp_lt_f64(0x1.b333333333333p0, 0x1.999999999999ap-2) == false +; run: %fcmp_lt_f64(0x1.3333333333333p-1, 0x1.6666666666666p1) == true +; run: %fcmp_lt_f64(-0x0.5, -0x1.0) == false +; run: %fcmp_lt_f64(-0x1.5, -0x2.9) == false +; run: %fcmp_lt_f64(-0x1.1p10, -0x1.3333333333333p-1) == true +; run: %fcmp_lt_f64(-0x1.999999999999ap-2, -0x1.4cccccccccccdp0) == false +; run: %fcmp_lt_f64(-0x1.8p0, -0x1.b333333333333p0) == false +; run: %fcmp_lt_f64(-0x1.4p1, -0x1.6666666666666p1) == false +; run: %fcmp_lt_f64(0x0.5, -0x1.0) == false +; run: %fcmp_lt_f64(0x1.b333333333333p0, -0x1.b333333333333p0) == false + + +; Zeroes +; run: %fcmp_lt_f64(0x0.0, 0x0.0) == false +; run: %fcmp_lt_f64(-0x0.0, -0x0.0) == false +; run: %fcmp_lt_f64(0x0.0, -0x0.0) == false +; run: %fcmp_lt_f64(-0x0.0, 0x0.0) == false + +; Infinities +; run: %fcmp_lt_f64(Inf, Inf) == false +; run: %fcmp_lt_f64(-Inf, -Inf) == false +; run: %fcmp_lt_f64(Inf, -Inf) == false +; run: %fcmp_lt_f64(-Inf, Inf) == true + +; Inf/Zero +; run: %fcmp_lt_f64(0x0.0, Inf) == true +; run: %fcmp_lt_f64(-0x0.0, Inf) == true +; run: %fcmp_lt_f64(0x0.0, -Inf) == false +; run: %fcmp_lt_f64(-0x0.0, -Inf) == false +; run: %fcmp_lt_f64(Inf, 0x0.0) == false +; run: %fcmp_lt_f64(Inf, -0x0.0) == false +; run: %fcmp_lt_f64(-Inf, 0x0.0) == true +; run: %fcmp_lt_f64(-Inf, -0x0.0) == true + +; Epsilon / Max / Min Positive +; run: %fcmp_lt_f64(0x1.0p-52, 0x1.0p-52) == false +; run: %fcmp_lt_f64(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) == false +; run: %fcmp_lt_f64(0x1.0p-1022, 0x1.0p-1022) == false +; run: %fcmp_lt_f64(0x1.0p-52, 0x1.fffffffffffffp1023) == true +; run: %fcmp_lt_f64(0x1.0p-52, 0x1.0p-1022) == false +; run: %fcmp_lt_f64(0x1.0p-1022, 0x1.fffffffffffffp1023) == true + +; Subnormals +; run: %fcmp_lt_f64(0x0.8p-1022, -0x0.8p-1022) == false +; run: %fcmp_lt_f64(-0x0.8p-1022, 0x0.8p-1022) == true +; run: %fcmp_lt_f64(0x0.8p-1022, 0x0.0) == false +; run: %fcmp_lt_f64(-0x0.8p-1022, 0x0.0) == true +; run: %fcmp_lt_f64(0x0.8p-1022, -0x0.0) == false +; run: %fcmp_lt_f64(-0x0.8p-1022, -0x0.0) == true +; run: %fcmp_lt_f64(0x0.0, 0x0.8p-1022) == true +; run: %fcmp_lt_f64(0x0.0, -0x0.8p-1022) == false +; run: %fcmp_lt_f64(-0x0.0, 0x0.8p-1022) == true +; run: %fcmp_lt_f64(-0x0.0, -0x0.8p-1022) == false + +; NaN's +; run: %fcmp_lt_f64(+NaN, +NaN) == false +; run: %fcmp_lt_f64(-NaN, -NaN) == false +; run: %fcmp_lt_f64(+NaN, -NaN) == false +; run: %fcmp_lt_f64(-NaN, +NaN) == false + +; run: %fcmp_lt_f64(+NaN, -0x1.0) == false +; run: %fcmp_lt_f64(-NaN, -0x1.0) == false +; run: %fcmp_lt_f64(+NaN, 0x1.0) == false +; run: %fcmp_lt_f64(-NaN, 0x1.0) == false +; run: %fcmp_lt_f64(+NaN, -0x0.0) == false +; run: %fcmp_lt_f64(-NaN, -0x0.0) == false +; run: %fcmp_lt_f64(+NaN, 0x0.0) == false +; run: %fcmp_lt_f64(-NaN, 0x0.0) == false +; run: %fcmp_lt_f64(+NaN, -Inf) == false +; run: %fcmp_lt_f64(-NaN, -Inf) == false +; run: %fcmp_lt_f64(+NaN, Inf) == false +; run: %fcmp_lt_f64(-NaN, Inf) == false +; run: %fcmp_lt_f64(-0x0.0, +NaN) == false +; run: %fcmp_lt_f64(-0x0.0, -NaN) == false +; run: %fcmp_lt_f64(0x0.0, +NaN) == false +; run: %fcmp_lt_f64(0x0.0, -NaN) == false +; run: %fcmp_lt_f64(-Inf, +NaN) == false +; run: %fcmp_lt_f64(-Inf, -NaN) == false +; run: %fcmp_lt_f64(Inf, +NaN) == false +; run: %fcmp_lt_f64(Inf, -NaN) == false + +; run: %fcmp_lt_f64(+NaN:0x1, +NaN:0x1) == false +; run: %fcmp_lt_f64(-NaN:0x1, -NaN:0x1) == false +; run: %fcmp_lt_f64(+NaN:0x1, -NaN:0x1) == false +; run: %fcmp_lt_f64(-NaN:0x1, +NaN:0x1) == false +; run: %fcmp_lt_f64(+NaN:0x1, +NaN) == false +; run: %fcmp_lt_f64(+NaN:0x1, -NaN) == false +; run: %fcmp_lt_f64(-NaN:0x1, -NaN) == false +; run: %fcmp_lt_f64(-NaN:0x1, +NaN) == false + +; run: %fcmp_lt_f64(+NaN:0x800000000001, +NaN:0x800000000001) == false +; run: %fcmp_lt_f64(-NaN:0x800000000001, -NaN:0x800000000001) == false +; run: %fcmp_lt_f64(+NaN:0x800000000001, -NaN:0x800000000001) == false +; run: %fcmp_lt_f64(-NaN:0x800000000001, +NaN:0x800000000001) == false +; run: %fcmp_lt_f64(+NaN:0x800000000001, +NaN) == false +; run: %fcmp_lt_f64(+NaN:0x800000000001, -NaN) == false +; run: %fcmp_lt_f64(-NaN:0x800000000001, -NaN) == false +; run: %fcmp_lt_f64(-NaN:0x800000000001, +NaN) == false + +; sNaN's +; run: %fcmp_lt_f64(+sNaN:0x1, +sNaN:0x1) == false +; run: %fcmp_lt_f64(-sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_lt_f64(+sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_lt_f64(-sNaN:0x1, +sNaN:0x1) == false + +; run: %fcmp_lt_f64(+sNaN:0x1, -0x1.0) == false +; run: %fcmp_lt_f64(-sNaN:0x1, -0x1.0) == false +; run: %fcmp_lt_f64(+sNaN:0x1, 0x1.0) == false +; run: %fcmp_lt_f64(-sNaN:0x1, 0x1.0) == false +; run: %fcmp_lt_f64(+sNaN:0x1, -0x0.0) == false +; run: %fcmp_lt_f64(-sNaN:0x1, -0x0.0) == false +; run: %fcmp_lt_f64(+sNaN:0x1, 0x0.0) == false +; run: %fcmp_lt_f64(-sNaN:0x1, 0x0.0) == false +; run: %fcmp_lt_f64(+sNaN:0x1, -Inf) == false +; run: %fcmp_lt_f64(-sNaN:0x1, -Inf) == false +; run: %fcmp_lt_f64(+sNaN:0x1, Inf) == false +; run: %fcmp_lt_f64(-sNaN:0x1, Inf) == false +; run: %fcmp_lt_f64(-0x0.0, +sNaN:0x1) == false +; run: %fcmp_lt_f64(-0x0.0, -sNaN:0x1) == false +; run: %fcmp_lt_f64(0x0.0, +sNaN:0x1) == false +; run: %fcmp_lt_f64(0x0.0, -sNaN:0x1) == false +; run: %fcmp_lt_f64(-Inf, +sNaN:0x1) == false +; run: %fcmp_lt_f64(-Inf, -sNaN:0x1) == false +; run: %fcmp_lt_f64(Inf, +sNaN:0x1) == false +; run: %fcmp_lt_f64(Inf, -sNaN:0x1) == false + +; run: %fcmp_lt_f64(+sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_lt_f64(-sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_lt_f64(+sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_lt_f64(-sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_lt_f64(+NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_lt_f64(-NaN:0x1, -sNaN:0x1) == false +; run: %fcmp_lt_f64(-NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_lt_f64(+NaN:0x1, -sNaN:0x1) == false + +; run: %fcmp_lt_f64(+sNaN:0x800000000001, +sNaN:0x800000000001) == false +; run: %fcmp_lt_f64(-sNaN:0x800000000001, -sNaN:0x800000000001) == false +; run: %fcmp_lt_f64(+sNaN:0x800000000001, -sNaN:0x800000000001) == false +; run: %fcmp_lt_f64(-sNaN:0x800000000001, +sNaN:0x800000000001) == false +; run: %fcmp_lt_f64(+sNaN:0x800000000001, +sNaN:0x1) == false +; run: %fcmp_lt_f64(+sNaN:0x800000000001, -sNaN:0x1) == false +; run: %fcmp_lt_f64(-sNaN:0x800000000001, -sNaN:0x1) == false +; run: %fcmp_lt_f64(-sNaN:0x800000000001, +sNaN:0x1) == false diff --git a/cranelift/filetests/filetests/runtests/fcmp-ne.clif b/cranelift/filetests/filetests/runtests/fcmp-ne.clif new file mode 100644 index 0000000000..9aeec4f20b --- /dev/null +++ b/cranelift/filetests/filetests/runtests/fcmp-ne.clif @@ -0,0 +1,319 @@ +test interpret +test run +target x86_64 +target aarch64 +target s390x + +function %fcmp_ne_f32(f32, f32) -> b1 { +block0(v0: f32, v1: f32): + v2 = fcmp ne v0, v1 + return v2 +} +; run: %fcmp_ne_f32(0x0.5, 0x0.5) == false +; run: %fcmp_ne_f32(0x1.0, 0x1.0) == false +; run: %fcmp_ne_f32(-0x1.0, 0x1.0) == true +; run: %fcmp_ne_f32(0x1.0, -0x1.0) == true +; run: %fcmp_ne_f32(0x0.5, 0x1.0) == true +; run: %fcmp_ne_f32(0x1.5, 0x2.9) == true +; run: %fcmp_ne_f32(0x1.1p10, 0x1.4p1) == true +; run: %fcmp_ne_f32(0x1.4cccccp0, 0x1.8p0) == true +; run: %fcmp_ne_f32(0x1.b33334p0, 0x1.99999ap-2) == true +; run: %fcmp_ne_f32(0x1.333334p-1, 0x1.666666p1) == true +; run: %fcmp_ne_f32(-0x0.5, -0x1.0) == true +; run: %fcmp_ne_f32(-0x1.5, -0x2.9) == true +; run: %fcmp_ne_f32(-0x1.1p10, -0x1.333334p-1) == true +; run: %fcmp_ne_f32(-0x1.99999ap-2, -0x1.4cccccp0) == true +; run: %fcmp_ne_f32(-0x1.8p0, -0x1.b33334p0) == true +; run: %fcmp_ne_f32(-0x1.4p1, -0x1.666666p1) == true +; run: %fcmp_ne_f32(0x0.5, -0x1.0) == true +; run: %fcmp_ne_f32(0x1.b33334p0, -0x1.b33334p0) == true + +; Zeroes +; run: %fcmp_ne_f32(0x0.0, 0x0.0) == false +; run: %fcmp_ne_f32(-0x0.0, -0x0.0) == false +; run: %fcmp_ne_f32(0x0.0, -0x0.0) == false +; run: %fcmp_ne_f32(-0x0.0, 0x0.0) == false + +; Infinities +; run: %fcmp_ne_f32(Inf, Inf) == false +; run: %fcmp_ne_f32(-Inf, -Inf) == false +; run: %fcmp_ne_f32(Inf, -Inf) == true +; run: %fcmp_ne_f32(-Inf, Inf) == true + +; Inf/Zero +; run: %fcmp_ne_f32(0x0.0, Inf) == true +; run: %fcmp_ne_f32(-0x0.0, Inf) == true +; run: %fcmp_ne_f32(0x0.0, -Inf) == true +; run: %fcmp_ne_f32(-0x0.0, -Inf) == true +; run: %fcmp_ne_f32(Inf, 0x0.0) == true +; run: %fcmp_ne_f32(Inf, -0x0.0) == true +; run: %fcmp_ne_f32(-Inf, 0x0.0) == true +; run: %fcmp_ne_f32(-Inf, -0x0.0) == true + +; Epsilon / Max / Min Positive +; run: %fcmp_ne_f32(0x1.0p-23, 0x1.0p-23) == false +; run: %fcmp_ne_f32(0x1.fffffep127, 0x1.fffffep127) == false +; run: %fcmp_ne_f32(0x1.0p-126, 0x1.0p-126) == false +; run: %fcmp_ne_f32(0x1.0p-23, 0x1.fffffep127) == true +; run: %fcmp_ne_f32(0x1.0p-23, 0x1.0p-126) == true +; run: %fcmp_ne_f32(0x1.0p-126, 0x1.fffffep127) == true + +; Subnormals +; run: %fcmp_ne_f32(0x0.800002p-126, -0x0.800002p-126) == true +; run: %fcmp_ne_f32(-0x0.800002p-126, 0x0.800002p-126) == true +; run: %fcmp_ne_f32(0x0.800002p-126, 0x0.0) == true +; run: %fcmp_ne_f32(-0x0.800002p-126, 0x0.0) == true +; run: %fcmp_ne_f32(0x0.800002p-126, -0x0.0) == true +; run: %fcmp_ne_f32(-0x0.800002p-126, -0x0.0) == true +; run: %fcmp_ne_f32(0x0.0, 0x0.800002p-126) == true +; run: %fcmp_ne_f32(0x0.0, -0x0.800002p-126) == true +; run: %fcmp_ne_f32(-0x0.0, 0x0.800002p-126) == true +; run: %fcmp_ne_f32(-0x0.0, -0x0.800002p-126) == true + +; NaN's +; run: %fcmp_ne_f32(+NaN, +NaN) == true +; run: %fcmp_ne_f32(-NaN, -NaN) == true +; run: %fcmp_ne_f32(+NaN, -NaN) == true +; run: %fcmp_ne_f32(-NaN, +NaN) == true + +; run: %fcmp_ne_f32(+NaN, -0x1.0) == true +; run: %fcmp_ne_f32(-NaN, -0x1.0) == true +; run: %fcmp_ne_f32(+NaN, 0x1.0) == true +; run: %fcmp_ne_f32(-NaN, 0x1.0) == true +; run: %fcmp_ne_f32(+NaN, -0x0.0) == true +; run: %fcmp_ne_f32(-NaN, -0x0.0) == true +; run: %fcmp_ne_f32(+NaN, 0x0.0) == true +; run: %fcmp_ne_f32(-NaN, 0x0.0) == true +; run: %fcmp_ne_f32(+NaN, -Inf) == true +; run: %fcmp_ne_f32(-NaN, -Inf) == true +; run: %fcmp_ne_f32(+NaN, Inf) == true +; run: %fcmp_ne_f32(-NaN, Inf) == true +; run: %fcmp_ne_f32(-0x0.0, +NaN) == true +; run: %fcmp_ne_f32(-0x0.0, -NaN) == true +; run: %fcmp_ne_f32(0x0.0, +NaN) == true +; run: %fcmp_ne_f32(0x0.0, -NaN) == true +; run: %fcmp_ne_f32(-Inf, +NaN) == true +; run: %fcmp_ne_f32(-Inf, -NaN) == true +; run: %fcmp_ne_f32(Inf, +NaN) == true +; run: %fcmp_ne_f32(Inf, -NaN) == true + +; run: %fcmp_ne_f32(+NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ne_f32(-NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ne_f32(+NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ne_f32(-NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ne_f32(+NaN:0x1, +NaN) == true +; run: %fcmp_ne_f32(+NaN:0x1, -NaN) == true +; run: %fcmp_ne_f32(-NaN:0x1, -NaN) == true +; run: %fcmp_ne_f32(-NaN:0x1, +NaN) == true + +; run: %fcmp_ne_f32(+NaN:0x80001, +NaN:0x80001) == true +; run: %fcmp_ne_f32(-NaN:0x80001, -NaN:0x80001) == true +; run: %fcmp_ne_f32(+NaN:0x80001, -NaN:0x80001) == true +; run: %fcmp_ne_f32(-NaN:0x80001, +NaN:0x80001) == true +; run: %fcmp_ne_f32(+NaN:0x80001, +NaN) == true +; run: %fcmp_ne_f32(+NaN:0x80001, -NaN) == true +; run: %fcmp_ne_f32(-NaN:0x80001, -NaN) == true +; run: %fcmp_ne_f32(-NaN:0x80001, +NaN) == true + +; sNaN's +; run: %fcmp_ne_f32(+sNaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ne_f32(-sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ne_f32(+sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ne_f32(-sNaN:0x1, +sNaN:0x1) == true + +; run: %fcmp_ne_f32(+sNaN:0x1, -0x1.0) == true +; run: %fcmp_ne_f32(-sNaN:0x1, -0x1.0) == true +; run: %fcmp_ne_f32(+sNaN:0x1, 0x1.0) == true +; run: %fcmp_ne_f32(-sNaN:0x1, 0x1.0) == true +; run: %fcmp_ne_f32(+sNaN:0x1, -0x0.0) == true +; run: %fcmp_ne_f32(-sNaN:0x1, -0x0.0) == true +; run: %fcmp_ne_f32(+sNaN:0x1, 0x0.0) == true +; run: %fcmp_ne_f32(-sNaN:0x1, 0x0.0) == true +; run: %fcmp_ne_f32(+sNaN:0x1, -Inf) == true +; run: %fcmp_ne_f32(-sNaN:0x1, -Inf) == true +; run: %fcmp_ne_f32(+sNaN:0x1, Inf) == true +; run: %fcmp_ne_f32(-sNaN:0x1, Inf) == true +; run: %fcmp_ne_f32(-0x0.0, +sNaN:0x1) == true +; run: %fcmp_ne_f32(-0x0.0, -sNaN:0x1) == true +; run: %fcmp_ne_f32(0x0.0, +sNaN:0x1) == true +; run: %fcmp_ne_f32(0x0.0, -sNaN:0x1) == true +; run: %fcmp_ne_f32(-Inf, +sNaN:0x1) == true +; run: %fcmp_ne_f32(-Inf, -sNaN:0x1) == true +; run: %fcmp_ne_f32(Inf, +sNaN:0x1) == true +; run: %fcmp_ne_f32(Inf, -sNaN:0x1) == true + +; run: %fcmp_ne_f32(+sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ne_f32(-sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ne_f32(+sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ne_f32(-sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ne_f32(+NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ne_f32(-NaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ne_f32(-NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ne_f32(+NaN:0x1, -sNaN:0x1) == true + +; run: %fcmp_ne_f32(+sNaN:0x80001, +sNaN:0x80001) == true +; run: %fcmp_ne_f32(-sNaN:0x80001, -sNaN:0x80001) == true +; run: %fcmp_ne_f32(+sNaN:0x80001, -sNaN:0x80001) == true +; run: %fcmp_ne_f32(-sNaN:0x80001, +sNaN:0x80001) == true +; run: %fcmp_ne_f32(+sNaN:0x80001, +sNaN:0x1) == true +; run: %fcmp_ne_f32(+sNaN:0x80001, -sNaN:0x1) == true +; run: %fcmp_ne_f32(-sNaN:0x80001, -sNaN:0x1) == true +; run: %fcmp_ne_f32(-sNaN:0x80001, +sNaN:0x1) == true + + +function %fcmp_ne_f64(f64, f64) -> b1 { +block0(v0: f64, v1: f64): + v2 = fcmp ne v0, v1 + return v2 +} +; run: %fcmp_ne_f64(0x0.5, 0x0.5) == false +; run: %fcmp_ne_f64(0x1.0, 0x1.0) == false +; run: %fcmp_ne_f64(-0x1.0, 0x1.0) == true +; run: %fcmp_ne_f64(0x1.0, -0x1.0) == true +; run: %fcmp_ne_f64(0x0.5, 0x1.0) == true +; run: %fcmp_ne_f64(0x1.5, 0x2.9) == true +; run: %fcmp_ne_f64(0x1.1p10, 0x1.4p1) == true +; run: %fcmp_ne_f64(0x1.4cccccccccccdp0, 0x1.8p0) == true +; run: %fcmp_ne_f64(0x1.b333333333333p0, 0x1.999999999999ap-2) == true +; run: %fcmp_ne_f64(0x1.3333333333333p-1, 0x1.6666666666666p1) == true +; run: %fcmp_ne_f64(-0x0.5, -0x1.0) == true +; run: %fcmp_ne_f64(-0x1.5, -0x2.9) == true +; run: %fcmp_ne_f64(-0x1.1p10, -0x1.3333333333333p-1) == true +; run: %fcmp_ne_f64(-0x1.999999999999ap-2, -0x1.4cccccccccccdp0) == true +; run: %fcmp_ne_f64(-0x1.8p0, -0x1.b333333333333p0) == true +; run: %fcmp_ne_f64(-0x1.4p1, -0x1.6666666666666p1) == true +; run: %fcmp_ne_f64(0x0.5, -0x1.0) == true +; run: %fcmp_ne_f64(0x1.b333333333333p0, -0x1.b333333333333p0) == true + + +; Zeroes +; run: %fcmp_ne_f64(0x0.0, 0x0.0) == false +; run: %fcmp_ne_f64(-0x0.0, -0x0.0) == false +; run: %fcmp_ne_f64(0x0.0, -0x0.0) == false +; run: %fcmp_ne_f64(-0x0.0, 0x0.0) == false + +; Infinities +; run: %fcmp_ne_f64(Inf, Inf) == false +; run: %fcmp_ne_f64(-Inf, -Inf) == false +; run: %fcmp_ne_f64(Inf, -Inf) == true +; run: %fcmp_ne_f64(-Inf, Inf) == true + +; Inf/Zero +; run: %fcmp_ne_f64(0x0.0, Inf) == true +; run: %fcmp_ne_f64(-0x0.0, Inf) == true +; run: %fcmp_ne_f64(0x0.0, -Inf) == true +; run: %fcmp_ne_f64(-0x0.0, -Inf) == true +; run: %fcmp_ne_f64(Inf, 0x0.0) == true +; run: %fcmp_ne_f64(Inf, -0x0.0) == true +; run: %fcmp_ne_f64(-Inf, 0x0.0) == true +; run: %fcmp_ne_f64(-Inf, -0x0.0) == true + +; Epsilon / Max / Min Positive +; run: %fcmp_ne_f64(0x1.0p-52, 0x1.0p-52) == false +; run: %fcmp_ne_f64(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) == false +; run: %fcmp_ne_f64(0x1.0p-1022, 0x1.0p-1022) == false +; run: %fcmp_ne_f64(0x1.0p-52, 0x1.fffffffffffffp1023) == true +; run: %fcmp_ne_f64(0x1.0p-52, 0x1.0p-1022) == true +; run: %fcmp_ne_f64(0x1.0p-1022, 0x1.fffffffffffffp1023) == true + +; Subnormals +; run: %fcmp_ne_f64(0x0.8p-1022, -0x0.8p-1022) == true +; run: %fcmp_ne_f64(-0x0.8p-1022, 0x0.8p-1022) == true +; run: %fcmp_ne_f64(0x0.8p-1022, 0x0.0) == true +; run: %fcmp_ne_f64(-0x0.8p-1022, 0x0.0) == true +; run: %fcmp_ne_f64(0x0.8p-1022, -0x0.0) == true +; run: %fcmp_ne_f64(-0x0.8p-1022, -0x0.0) == true +; run: %fcmp_ne_f64(0x0.0, 0x0.8p-1022) == true +; run: %fcmp_ne_f64(0x0.0, -0x0.8p-1022) == true +; run: %fcmp_ne_f64(-0x0.0, 0x0.8p-1022) == true +; run: %fcmp_ne_f64(-0x0.0, -0x0.8p-1022) == true + +; NaN's +; run: %fcmp_ne_f64(+NaN, +NaN) == true +; run: %fcmp_ne_f64(-NaN, -NaN) == true +; run: %fcmp_ne_f64(+NaN, -NaN) == true +; run: %fcmp_ne_f64(-NaN, +NaN) == true + +; run: %fcmp_ne_f64(+NaN, -0x1.0) == true +; run: %fcmp_ne_f64(-NaN, -0x1.0) == true +; run: %fcmp_ne_f64(+NaN, 0x1.0) == true +; run: %fcmp_ne_f64(-NaN, 0x1.0) == true +; run: %fcmp_ne_f64(+NaN, -0x0.0) == true +; run: %fcmp_ne_f64(-NaN, -0x0.0) == true +; run: %fcmp_ne_f64(+NaN, 0x0.0) == true +; run: %fcmp_ne_f64(-NaN, 0x0.0) == true +; run: %fcmp_ne_f64(+NaN, -Inf) == true +; run: %fcmp_ne_f64(-NaN, -Inf) == true +; run: %fcmp_ne_f64(+NaN, Inf) == true +; run: %fcmp_ne_f64(-NaN, Inf) == true +; run: %fcmp_ne_f64(-0x0.0, +NaN) == true +; run: %fcmp_ne_f64(-0x0.0, -NaN) == true +; run: %fcmp_ne_f64(0x0.0, +NaN) == true +; run: %fcmp_ne_f64(0x0.0, -NaN) == true +; run: %fcmp_ne_f64(-Inf, +NaN) == true +; run: %fcmp_ne_f64(-Inf, -NaN) == true +; run: %fcmp_ne_f64(Inf, +NaN) == true +; run: %fcmp_ne_f64(Inf, -NaN) == true + +; run: %fcmp_ne_f64(+NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ne_f64(-NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ne_f64(+NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ne_f64(-NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ne_f64(+NaN:0x1, +NaN) == true +; run: %fcmp_ne_f64(+NaN:0x1, -NaN) == true +; run: %fcmp_ne_f64(-NaN:0x1, -NaN) == true +; run: %fcmp_ne_f64(-NaN:0x1, +NaN) == true + +; run: %fcmp_ne_f64(+NaN:0x800000000001, +NaN:0x800000000001) == true +; run: %fcmp_ne_f64(-NaN:0x800000000001, -NaN:0x800000000001) == true +; run: %fcmp_ne_f64(+NaN:0x800000000001, -NaN:0x800000000001) == true +; run: %fcmp_ne_f64(-NaN:0x800000000001, +NaN:0x800000000001) == true +; run: %fcmp_ne_f64(+NaN:0x800000000001, +NaN) == true +; run: %fcmp_ne_f64(+NaN:0x800000000001, -NaN) == true +; run: %fcmp_ne_f64(-NaN:0x800000000001, -NaN) == true +; run: %fcmp_ne_f64(-NaN:0x800000000001, +NaN) == true + +; sNaN's +; run: %fcmp_ne_f64(+sNaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ne_f64(-sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ne_f64(+sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ne_f64(-sNaN:0x1, +sNaN:0x1) == true + +; run: %fcmp_ne_f64(+sNaN:0x1, -0x1.0) == true +; run: %fcmp_ne_f64(-sNaN:0x1, -0x1.0) == true +; run: %fcmp_ne_f64(+sNaN:0x1, 0x1.0) == true +; run: %fcmp_ne_f64(-sNaN:0x1, 0x1.0) == true +; run: %fcmp_ne_f64(+sNaN:0x1, -0x0.0) == true +; run: %fcmp_ne_f64(-sNaN:0x1, -0x0.0) == true +; run: %fcmp_ne_f64(+sNaN:0x1, 0x0.0) == true +; run: %fcmp_ne_f64(-sNaN:0x1, 0x0.0) == true +; run: %fcmp_ne_f64(+sNaN:0x1, -Inf) == true +; run: %fcmp_ne_f64(-sNaN:0x1, -Inf) == true +; run: %fcmp_ne_f64(+sNaN:0x1, Inf) == true +; run: %fcmp_ne_f64(-sNaN:0x1, Inf) == true +; run: %fcmp_ne_f64(-0x0.0, +sNaN:0x1) == true +; run: %fcmp_ne_f64(-0x0.0, -sNaN:0x1) == true +; run: %fcmp_ne_f64(0x0.0, +sNaN:0x1) == true +; run: %fcmp_ne_f64(0x0.0, -sNaN:0x1) == true +; run: %fcmp_ne_f64(-Inf, +sNaN:0x1) == true +; run: %fcmp_ne_f64(-Inf, -sNaN:0x1) == true +; run: %fcmp_ne_f64(Inf, +sNaN:0x1) == true +; run: %fcmp_ne_f64(Inf, -sNaN:0x1) == true + +; run: %fcmp_ne_f64(+sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ne_f64(-sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ne_f64(+sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ne_f64(-sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ne_f64(+NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ne_f64(-NaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ne_f64(-NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ne_f64(+NaN:0x1, -sNaN:0x1) == true + +; run: %fcmp_ne_f64(+sNaN:0x800000000001, +sNaN:0x800000000001) == true +; run: %fcmp_ne_f64(-sNaN:0x800000000001, -sNaN:0x800000000001) == true +; run: %fcmp_ne_f64(+sNaN:0x800000000001, -sNaN:0x800000000001) == true +; run: %fcmp_ne_f64(-sNaN:0x800000000001, +sNaN:0x800000000001) == true +; run: %fcmp_ne_f64(+sNaN:0x800000000001, +sNaN:0x1) == true +; run: %fcmp_ne_f64(+sNaN:0x800000000001, -sNaN:0x1) == true +; run: %fcmp_ne_f64(-sNaN:0x800000000001, -sNaN:0x1) == true +; run: %fcmp_ne_f64(-sNaN:0x800000000001, +sNaN:0x1) == true diff --git a/cranelift/filetests/filetests/runtests/fcmp-one.clif b/cranelift/filetests/filetests/runtests/fcmp-one.clif new file mode 100644 index 0000000000..cf5c48d600 --- /dev/null +++ b/cranelift/filetests/filetests/runtests/fcmp-one.clif @@ -0,0 +1,318 @@ +test interpret +test run +target x86_64 +target s390x + +function %fcmp_one_f32(f32, f32) -> b1 { +block0(v0: f32, v1: f32): + v2 = fcmp one v0, v1 + return v2 +} +; run: %fcmp_one_f32(0x0.5, 0x0.5) == false +; run: %fcmp_one_f32(0x1.0, 0x1.0) == false +; run: %fcmp_one_f32(-0x1.0, 0x1.0) == true +; run: %fcmp_one_f32(0x1.0, -0x1.0) == true +; run: %fcmp_one_f32(0x0.5, 0x1.0) == true +; run: %fcmp_one_f32(0x1.5, 0x2.9) == true +; run: %fcmp_one_f32(0x1.1p10, 0x1.4p1) == true +; run: %fcmp_one_f32(0x1.4cccccp0, 0x1.8p0) == true +; run: %fcmp_one_f32(0x1.b33334p0, 0x1.99999ap-2) == true +; run: %fcmp_one_f32(0x1.333334p-1, 0x1.666666p1) == true +; run: %fcmp_one_f32(-0x0.5, -0x1.0) == true +; run: %fcmp_one_f32(-0x1.5, -0x2.9) == true +; run: %fcmp_one_f32(-0x1.1p10, -0x1.333334p-1) == true +; run: %fcmp_one_f32(-0x1.99999ap-2, -0x1.4cccccp0) == true +; run: %fcmp_one_f32(-0x1.8p0, -0x1.b33334p0) == true +; run: %fcmp_one_f32(-0x1.4p1, -0x1.666666p1) == true +; run: %fcmp_one_f32(0x0.5, -0x1.0) == true +; run: %fcmp_one_f32(0x1.b33334p0, -0x1.b33334p0) == true + +; Zeroes +; run: %fcmp_one_f32(0x0.0, 0x0.0) == false +; run: %fcmp_one_f32(-0x0.0, -0x0.0) == false +; run: %fcmp_one_f32(0x0.0, -0x0.0) == false +; run: %fcmp_one_f32(-0x0.0, 0x0.0) == false + +; Infinities +; run: %fcmp_one_f32(Inf, Inf) == false +; run: %fcmp_one_f32(-Inf, -Inf) == false +; run: %fcmp_one_f32(Inf, -Inf) == true +; run: %fcmp_one_f32(-Inf, Inf) == true + +; Inf/Zero +; run: %fcmp_one_f32(0x0.0, Inf) == true +; run: %fcmp_one_f32(-0x0.0, Inf) == true +; run: %fcmp_one_f32(0x0.0, -Inf) == true +; run: %fcmp_one_f32(-0x0.0, -Inf) == true +; run: %fcmp_one_f32(Inf, 0x0.0) == true +; run: %fcmp_one_f32(Inf, -0x0.0) == true +; run: %fcmp_one_f32(-Inf, 0x0.0) == true +; run: %fcmp_one_f32(-Inf, -0x0.0) == true + +; Epsilon / Max / Min Positive +; run: %fcmp_one_f32(0x1.0p-23, 0x1.0p-23) == false +; run: %fcmp_one_f32(0x1.fffffep127, 0x1.fffffep127) == false +; run: %fcmp_one_f32(0x1.0p-126, 0x1.0p-126) == false +; run: %fcmp_one_f32(0x1.0p-23, 0x1.fffffep127) == true +; run: %fcmp_one_f32(0x1.0p-23, 0x1.0p-126) == true +; run: %fcmp_one_f32(0x1.0p-126, 0x1.fffffep127) == true + +; Subnormals +; run: %fcmp_one_f32(0x0.800002p-126, -0x0.800002p-126) == true +; run: %fcmp_one_f32(-0x0.800002p-126, 0x0.800002p-126) == true +; run: %fcmp_one_f32(0x0.800002p-126, 0x0.0) == true +; run: %fcmp_one_f32(-0x0.800002p-126, 0x0.0) == true +; run: %fcmp_one_f32(0x0.800002p-126, -0x0.0) == true +; run: %fcmp_one_f32(-0x0.800002p-126, -0x0.0) == true +; run: %fcmp_one_f32(0x0.0, 0x0.800002p-126) == true +; run: %fcmp_one_f32(0x0.0, -0x0.800002p-126) == true +; run: %fcmp_one_f32(-0x0.0, 0x0.800002p-126) == true +; run: %fcmp_one_f32(-0x0.0, -0x0.800002p-126) == true + +; NaN's +; run: %fcmp_one_f32(+NaN, +NaN) == false +; run: %fcmp_one_f32(-NaN, -NaN) == false +; run: %fcmp_one_f32(+NaN, -NaN) == false +; run: %fcmp_one_f32(-NaN, +NaN) == false + +; run: %fcmp_one_f32(+NaN, -0x1.0) == false +; run: %fcmp_one_f32(-NaN, -0x1.0) == false +; run: %fcmp_one_f32(+NaN, 0x1.0) == false +; run: %fcmp_one_f32(-NaN, 0x1.0) == false +; run: %fcmp_one_f32(+NaN, -0x0.0) == false +; run: %fcmp_one_f32(-NaN, -0x0.0) == false +; run: %fcmp_one_f32(+NaN, 0x0.0) == false +; run: %fcmp_one_f32(-NaN, 0x0.0) == false +; run: %fcmp_one_f32(+NaN, -Inf) == false +; run: %fcmp_one_f32(-NaN, -Inf) == false +; run: %fcmp_one_f32(+NaN, Inf) == false +; run: %fcmp_one_f32(-NaN, Inf) == false +; run: %fcmp_one_f32(-0x0.0, +NaN) == false +; run: %fcmp_one_f32(-0x0.0, -NaN) == false +; run: %fcmp_one_f32(0x0.0, +NaN) == false +; run: %fcmp_one_f32(0x0.0, -NaN) == false +; run: %fcmp_one_f32(-Inf, +NaN) == false +; run: %fcmp_one_f32(-Inf, -NaN) == false +; run: %fcmp_one_f32(Inf, +NaN) == false +; run: %fcmp_one_f32(Inf, -NaN) == false + +; run: %fcmp_one_f32(+NaN:0x1, +NaN:0x1) == false +; run: %fcmp_one_f32(-NaN:0x1, -NaN:0x1) == false +; run: %fcmp_one_f32(+NaN:0x1, -NaN:0x1) == false +; run: %fcmp_one_f32(-NaN:0x1, +NaN:0x1) == false +; run: %fcmp_one_f32(+NaN:0x1, +NaN) == false +; run: %fcmp_one_f32(+NaN:0x1, -NaN) == false +; run: %fcmp_one_f32(-NaN:0x1, -NaN) == false +; run: %fcmp_one_f32(-NaN:0x1, +NaN) == false + +; run: %fcmp_one_f32(+NaN:0x80001, +NaN:0x80001) == false +; run: %fcmp_one_f32(-NaN:0x80001, -NaN:0x80001) == false +; run: %fcmp_one_f32(+NaN:0x80001, -NaN:0x80001) == false +; run: %fcmp_one_f32(-NaN:0x80001, +NaN:0x80001) == false +; run: %fcmp_one_f32(+NaN:0x80001, +NaN) == false +; run: %fcmp_one_f32(+NaN:0x80001, -NaN) == false +; run: %fcmp_one_f32(-NaN:0x80001, -NaN) == false +; run: %fcmp_one_f32(-NaN:0x80001, +NaN) == false + +; sNaN's +; run: %fcmp_one_f32(+sNaN:0x1, +sNaN:0x1) == false +; run: %fcmp_one_f32(-sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_one_f32(+sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_one_f32(-sNaN:0x1, +sNaN:0x1) == false + +; run: %fcmp_one_f32(+sNaN:0x1, -0x1.0) == false +; run: %fcmp_one_f32(-sNaN:0x1, -0x1.0) == false +; run: %fcmp_one_f32(+sNaN:0x1, 0x1.0) == false +; run: %fcmp_one_f32(-sNaN:0x1, 0x1.0) == false +; run: %fcmp_one_f32(+sNaN:0x1, -0x0.0) == false +; run: %fcmp_one_f32(-sNaN:0x1, -0x0.0) == false +; run: %fcmp_one_f32(+sNaN:0x1, 0x0.0) == false +; run: %fcmp_one_f32(-sNaN:0x1, 0x0.0) == false +; run: %fcmp_one_f32(+sNaN:0x1, -Inf) == false +; run: %fcmp_one_f32(-sNaN:0x1, -Inf) == false +; run: %fcmp_one_f32(+sNaN:0x1, Inf) == false +; run: %fcmp_one_f32(-sNaN:0x1, Inf) == false +; run: %fcmp_one_f32(-0x0.0, +sNaN:0x1) == false +; run: %fcmp_one_f32(-0x0.0, -sNaN:0x1) == false +; run: %fcmp_one_f32(0x0.0, +sNaN:0x1) == false +; run: %fcmp_one_f32(0x0.0, -sNaN:0x1) == false +; run: %fcmp_one_f32(-Inf, +sNaN:0x1) == false +; run: %fcmp_one_f32(-Inf, -sNaN:0x1) == false +; run: %fcmp_one_f32(Inf, +sNaN:0x1) == false +; run: %fcmp_one_f32(Inf, -sNaN:0x1) == false + +; run: %fcmp_one_f32(+sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_one_f32(-sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_one_f32(+sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_one_f32(-sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_one_f32(+NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_one_f32(-NaN:0x1, -sNaN:0x1) == false +; run: %fcmp_one_f32(-NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_one_f32(+NaN:0x1, -sNaN:0x1) == false + +; run: %fcmp_one_f32(+sNaN:0x80001, +sNaN:0x80001) == false +; run: %fcmp_one_f32(-sNaN:0x80001, -sNaN:0x80001) == false +; run: %fcmp_one_f32(+sNaN:0x80001, -sNaN:0x80001) == false +; run: %fcmp_one_f32(-sNaN:0x80001, +sNaN:0x80001) == false +; run: %fcmp_one_f32(+sNaN:0x80001, +sNaN:0x1) == false +; run: %fcmp_one_f32(+sNaN:0x80001, -sNaN:0x1) == false +; run: %fcmp_one_f32(-sNaN:0x80001, -sNaN:0x1) == false +; run: %fcmp_one_f32(-sNaN:0x80001, +sNaN:0x1) == false + + +function %fcmp_one_f64(f64, f64) -> b1 { +block0(v0: f64, v1: f64): + v2 = fcmp one v0, v1 + return v2 +} +; run: %fcmp_one_f64(0x0.5, 0x0.5) == false +; run: %fcmp_one_f64(0x1.0, 0x1.0) == false +; run: %fcmp_one_f64(-0x1.0, 0x1.0) == true +; run: %fcmp_one_f64(0x1.0, -0x1.0) == true +; run: %fcmp_one_f64(0x0.5, 0x1.0) == true +; run: %fcmp_one_f64(0x1.5, 0x2.9) == true +; run: %fcmp_one_f64(0x1.1p10, 0x1.4p1) == true +; run: %fcmp_one_f64(0x1.4cccccccccccdp0, 0x1.8p0) == true +; run: %fcmp_one_f64(0x1.b333333333333p0, 0x1.999999999999ap-2) == true +; run: %fcmp_one_f64(0x1.3333333333333p-1, 0x1.6666666666666p1) == true +; run: %fcmp_one_f64(-0x0.5, -0x1.0) == true +; run: %fcmp_one_f64(-0x1.5, -0x2.9) == true +; run: %fcmp_one_f64(-0x1.1p10, -0x1.3333333333333p-1) == true +; run: %fcmp_one_f64(-0x1.999999999999ap-2, -0x1.4cccccccccccdp0) == true +; run: %fcmp_one_f64(-0x1.8p0, -0x1.b333333333333p0) == true +; run: %fcmp_one_f64(-0x1.4p1, -0x1.6666666666666p1) == true +; run: %fcmp_one_f64(0x0.5, -0x1.0) == true +; run: %fcmp_one_f64(0x1.b333333333333p0, -0x1.b333333333333p0) == true + + +; Zeroes +; run: %fcmp_one_f64(0x0.0, 0x0.0) == false +; run: %fcmp_one_f64(-0x0.0, -0x0.0) == false +; run: %fcmp_one_f64(0x0.0, -0x0.0) == false +; run: %fcmp_one_f64(-0x0.0, 0x0.0) == false + +; Infinities +; run: %fcmp_one_f64(Inf, Inf) == false +; run: %fcmp_one_f64(-Inf, -Inf) == false +; run: %fcmp_one_f64(Inf, -Inf) == true +; run: %fcmp_one_f64(-Inf, Inf) == true + +; Inf/Zero +; run: %fcmp_one_f64(0x0.0, Inf) == true +; run: %fcmp_one_f64(-0x0.0, Inf) == true +; run: %fcmp_one_f64(0x0.0, -Inf) == true +; run: %fcmp_one_f64(-0x0.0, -Inf) == true +; run: %fcmp_one_f64(Inf, 0x0.0) == true +; run: %fcmp_one_f64(Inf, -0x0.0) == true +; run: %fcmp_one_f64(-Inf, 0x0.0) == true +; run: %fcmp_one_f64(-Inf, -0x0.0) == true + +; Epsilon / Max / Min Positive +; run: %fcmp_one_f64(0x1.0p-52, 0x1.0p-52) == false +; run: %fcmp_one_f64(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) == false +; run: %fcmp_one_f64(0x1.0p-1022, 0x1.0p-1022) == false +; run: %fcmp_one_f64(0x1.0p-52, 0x1.fffffffffffffp1023) == true +; run: %fcmp_one_f64(0x1.0p-52, 0x1.0p-1022) == true +; run: %fcmp_one_f64(0x1.0p-1022, 0x1.fffffffffffffp1023) == true + +; Subnormals +; run: %fcmp_one_f64(0x0.8p-1022, -0x0.8p-1022) == true +; run: %fcmp_one_f64(-0x0.8p-1022, 0x0.8p-1022) == true +; run: %fcmp_one_f64(0x0.8p-1022, 0x0.0) == true +; run: %fcmp_one_f64(-0x0.8p-1022, 0x0.0) == true +; run: %fcmp_one_f64(0x0.8p-1022, -0x0.0) == true +; run: %fcmp_one_f64(-0x0.8p-1022, -0x0.0) == true +; run: %fcmp_one_f64(0x0.0, 0x0.8p-1022) == true +; run: %fcmp_one_f64(0x0.0, -0x0.8p-1022) == true +; run: %fcmp_one_f64(-0x0.0, 0x0.8p-1022) == true +; run: %fcmp_one_f64(-0x0.0, -0x0.8p-1022) == true + +; NaN's +; run: %fcmp_one_f64(+NaN, +NaN) == false +; run: %fcmp_one_f64(-NaN, -NaN) == false +; run: %fcmp_one_f64(+NaN, -NaN) == false +; run: %fcmp_one_f64(-NaN, +NaN) == false + +; run: %fcmp_one_f64(+NaN, -0x1.0) == false +; run: %fcmp_one_f64(-NaN, -0x1.0) == false +; run: %fcmp_one_f64(+NaN, 0x1.0) == false +; run: %fcmp_one_f64(-NaN, 0x1.0) == false +; run: %fcmp_one_f64(+NaN, -0x0.0) == false +; run: %fcmp_one_f64(-NaN, -0x0.0) == false +; run: %fcmp_one_f64(+NaN, 0x0.0) == false +; run: %fcmp_one_f64(-NaN, 0x0.0) == false +; run: %fcmp_one_f64(+NaN, -Inf) == false +; run: %fcmp_one_f64(-NaN, -Inf) == false +; run: %fcmp_one_f64(+NaN, Inf) == false +; run: %fcmp_one_f64(-NaN, Inf) == false +; run: %fcmp_one_f64(-0x0.0, +NaN) == false +; run: %fcmp_one_f64(-0x0.0, -NaN) == false +; run: %fcmp_one_f64(0x0.0, +NaN) == false +; run: %fcmp_one_f64(0x0.0, -NaN) == false +; run: %fcmp_one_f64(-Inf, +NaN) == false +; run: %fcmp_one_f64(-Inf, -NaN) == false +; run: %fcmp_one_f64(Inf, +NaN) == false +; run: %fcmp_one_f64(Inf, -NaN) == false + +; run: %fcmp_one_f64(+NaN:0x1, +NaN:0x1) == false +; run: %fcmp_one_f64(-NaN:0x1, -NaN:0x1) == false +; run: %fcmp_one_f64(+NaN:0x1, -NaN:0x1) == false +; run: %fcmp_one_f64(-NaN:0x1, +NaN:0x1) == false +; run: %fcmp_one_f64(+NaN:0x1, +NaN) == false +; run: %fcmp_one_f64(+NaN:0x1, -NaN) == false +; run: %fcmp_one_f64(-NaN:0x1, -NaN) == false +; run: %fcmp_one_f64(-NaN:0x1, +NaN) == false + +; run: %fcmp_one_f64(+NaN:0x800000000001, +NaN:0x800000000001) == false +; run: %fcmp_one_f64(-NaN:0x800000000001, -NaN:0x800000000001) == false +; run: %fcmp_one_f64(+NaN:0x800000000001, -NaN:0x800000000001) == false +; run: %fcmp_one_f64(-NaN:0x800000000001, +NaN:0x800000000001) == false +; run: %fcmp_one_f64(+NaN:0x800000000001, +NaN) == false +; run: %fcmp_one_f64(+NaN:0x800000000001, -NaN) == false +; run: %fcmp_one_f64(-NaN:0x800000000001, -NaN) == false +; run: %fcmp_one_f64(-NaN:0x800000000001, +NaN) == false + +; sNaN's +; run: %fcmp_one_f64(+sNaN:0x1, +sNaN:0x1) == false +; run: %fcmp_one_f64(-sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_one_f64(+sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_one_f64(-sNaN:0x1, +sNaN:0x1) == false + +; run: %fcmp_one_f64(+sNaN:0x1, -0x1.0) == false +; run: %fcmp_one_f64(-sNaN:0x1, -0x1.0) == false +; run: %fcmp_one_f64(+sNaN:0x1, 0x1.0) == false +; run: %fcmp_one_f64(-sNaN:0x1, 0x1.0) == false +; run: %fcmp_one_f64(+sNaN:0x1, -0x0.0) == false +; run: %fcmp_one_f64(-sNaN:0x1, -0x0.0) == false +; run: %fcmp_one_f64(+sNaN:0x1, 0x0.0) == false +; run: %fcmp_one_f64(-sNaN:0x1, 0x0.0) == false +; run: %fcmp_one_f64(+sNaN:0x1, -Inf) == false +; run: %fcmp_one_f64(-sNaN:0x1, -Inf) == false +; run: %fcmp_one_f64(+sNaN:0x1, Inf) == false +; run: %fcmp_one_f64(-sNaN:0x1, Inf) == false +; run: %fcmp_one_f64(-0x0.0, +sNaN:0x1) == false +; run: %fcmp_one_f64(-0x0.0, -sNaN:0x1) == false +; run: %fcmp_one_f64(0x0.0, +sNaN:0x1) == false +; run: %fcmp_one_f64(0x0.0, -sNaN:0x1) == false +; run: %fcmp_one_f64(-Inf, +sNaN:0x1) == false +; run: %fcmp_one_f64(-Inf, -sNaN:0x1) == false +; run: %fcmp_one_f64(Inf, +sNaN:0x1) == false +; run: %fcmp_one_f64(Inf, -sNaN:0x1) == false + +; run: %fcmp_one_f64(+sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_one_f64(-sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_one_f64(+sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_one_f64(-sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_one_f64(+NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_one_f64(-NaN:0x1, -sNaN:0x1) == false +; run: %fcmp_one_f64(-NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_one_f64(+NaN:0x1, -sNaN:0x1) == false + +; run: %fcmp_one_f64(+sNaN:0x800000000001, +sNaN:0x800000000001) == false +; run: %fcmp_one_f64(-sNaN:0x800000000001, -sNaN:0x800000000001) == false +; run: %fcmp_one_f64(+sNaN:0x800000000001, -sNaN:0x800000000001) == false +; run: %fcmp_one_f64(-sNaN:0x800000000001, +sNaN:0x800000000001) == false +; run: %fcmp_one_f64(+sNaN:0x800000000001, +sNaN:0x1) == false +; run: %fcmp_one_f64(+sNaN:0x800000000001, -sNaN:0x1) == false +; run: %fcmp_one_f64(-sNaN:0x800000000001, -sNaN:0x1) == false +; run: %fcmp_one_f64(-sNaN:0x800000000001, +sNaN:0x1) == false diff --git a/cranelift/filetests/filetests/runtests/fcmp-ord.clif b/cranelift/filetests/filetests/runtests/fcmp-ord.clif new file mode 100644 index 0000000000..78aef77cad --- /dev/null +++ b/cranelift/filetests/filetests/runtests/fcmp-ord.clif @@ -0,0 +1,318 @@ +test interpret +test run +target x86_64 +target s390x + +function %fcmp_ord_f32(f32, f32) -> b1 { +block0(v0: f32, v1: f32): + v2 = fcmp ord v0, v1 + return v2 +} +; run: %fcmp_ord_f32(0x0.5, 0x0.5) == true +; run: %fcmp_ord_f32(0x1.0, 0x1.0) == true +; run: %fcmp_ord_f32(-0x1.0, 0x1.0) == true +; run: %fcmp_ord_f32(0x1.0, -0x1.0) == true +; run: %fcmp_ord_f32(0x0.5, 0x1.0) == true +; run: %fcmp_ord_f32(0x1.5, 0x2.9) == true +; run: %fcmp_ord_f32(0x1.1p10, 0x1.4p1) == true +; run: %fcmp_ord_f32(0x1.4cccccp0, 0x1.8p0) == true +; run: %fcmp_ord_f32(0x1.b33334p0, 0x1.99999ap-2) == true +; run: %fcmp_ord_f32(0x1.333334p-1, 0x1.666666p1) == true +; run: %fcmp_ord_f32(-0x0.5, -0x1.0) == true +; run: %fcmp_ord_f32(-0x1.5, -0x2.9) == true +; run: %fcmp_ord_f32(-0x1.1p10, -0x1.333334p-1) == true +; run: %fcmp_ord_f32(-0x1.99999ap-2, -0x1.4cccccp0) == true +; run: %fcmp_ord_f32(-0x1.8p0, -0x1.b33334p0) == true +; run: %fcmp_ord_f32(-0x1.4p1, -0x1.666666p1) == true +; run: %fcmp_ord_f32(0x0.5, -0x1.0) == true +; run: %fcmp_ord_f32(0x1.b33334p0, -0x1.b33334p0) == true + +; Zeroes +; run: %fcmp_ord_f32(0x0.0, 0x0.0) == true +; run: %fcmp_ord_f32(-0x0.0, -0x0.0) == true +; run: %fcmp_ord_f32(0x0.0, -0x0.0) == true +; run: %fcmp_ord_f32(-0x0.0, 0x0.0) == true + +; Infinities +; run: %fcmp_ord_f32(Inf, Inf) == true +; run: %fcmp_ord_f32(-Inf, -Inf) == true +; run: %fcmp_ord_f32(Inf, -Inf) == true +; run: %fcmp_ord_f32(-Inf, Inf) == true + +; Inf/Zero +; run: %fcmp_ord_f32(0x0.0, Inf) == true +; run: %fcmp_ord_f32(-0x0.0, Inf) == true +; run: %fcmp_ord_f32(0x0.0, -Inf) == true +; run: %fcmp_ord_f32(-0x0.0, -Inf) == true +; run: %fcmp_ord_f32(Inf, 0x0.0) == true +; run: %fcmp_ord_f32(Inf, -0x0.0) == true +; run: %fcmp_ord_f32(-Inf, 0x0.0) == true +; run: %fcmp_ord_f32(-Inf, -0x0.0) == true + +; Epsilon / Max / Min Positive +; run: %fcmp_ord_f32(0x1.0p-23, 0x1.0p-23) == true +; run: %fcmp_ord_f32(0x1.fffffep127, 0x1.fffffep127) == true +; run: %fcmp_ord_f32(0x1.0p-126, 0x1.0p-126) == true +; run: %fcmp_ord_f32(0x1.0p-23, 0x1.fffffep127) == true +; run: %fcmp_ord_f32(0x1.0p-23, 0x1.0p-126) == true +; run: %fcmp_ord_f32(0x1.0p-126, 0x1.fffffep127) == true + +; Subnormals +; run: %fcmp_ord_f32(0x0.800002p-126, -0x0.800002p-126) == true +; run: %fcmp_ord_f32(-0x0.800002p-126, 0x0.800002p-126) == true +; run: %fcmp_ord_f32(0x0.800002p-126, 0x0.0) == true +; run: %fcmp_ord_f32(-0x0.800002p-126, 0x0.0) == true +; run: %fcmp_ord_f32(0x0.800002p-126, -0x0.0) == true +; run: %fcmp_ord_f32(-0x0.800002p-126, -0x0.0) == true +; run: %fcmp_ord_f32(0x0.0, 0x0.800002p-126) == true +; run: %fcmp_ord_f32(0x0.0, -0x0.800002p-126) == true +; run: %fcmp_ord_f32(-0x0.0, 0x0.800002p-126) == true +; run: %fcmp_ord_f32(-0x0.0, -0x0.800002p-126) == true + +; NaN's +; run: %fcmp_ord_f32(+NaN, +NaN) == false +; run: %fcmp_ord_f32(-NaN, -NaN) == false +; run: %fcmp_ord_f32(+NaN, -NaN) == false +; run: %fcmp_ord_f32(-NaN, +NaN) == false + +; run: %fcmp_ord_f32(+NaN, -0x1.0) == false +; run: %fcmp_ord_f32(-NaN, -0x1.0) == false +; run: %fcmp_ord_f32(+NaN, 0x1.0) == false +; run: %fcmp_ord_f32(-NaN, 0x1.0) == false +; run: %fcmp_ord_f32(+NaN, -0x0.0) == false +; run: %fcmp_ord_f32(-NaN, -0x0.0) == false +; run: %fcmp_ord_f32(+NaN, 0x0.0) == false +; run: %fcmp_ord_f32(-NaN, 0x0.0) == false +; run: %fcmp_ord_f32(+NaN, -Inf) == false +; run: %fcmp_ord_f32(-NaN, -Inf) == false +; run: %fcmp_ord_f32(+NaN, Inf) == false +; run: %fcmp_ord_f32(-NaN, Inf) == false +; run: %fcmp_ord_f32(-0x0.0, +NaN) == false +; run: %fcmp_ord_f32(-0x0.0, -NaN) == false +; run: %fcmp_ord_f32(0x0.0, +NaN) == false +; run: %fcmp_ord_f32(0x0.0, -NaN) == false +; run: %fcmp_ord_f32(-Inf, +NaN) == false +; run: %fcmp_ord_f32(-Inf, -NaN) == false +; run: %fcmp_ord_f32(Inf, +NaN) == false +; run: %fcmp_ord_f32(Inf, -NaN) == false + +; run: %fcmp_ord_f32(+NaN:0x1, +NaN:0x1) == false +; run: %fcmp_ord_f32(-NaN:0x1, -NaN:0x1) == false +; run: %fcmp_ord_f32(+NaN:0x1, -NaN:0x1) == false +; run: %fcmp_ord_f32(-NaN:0x1, +NaN:0x1) == false +; run: %fcmp_ord_f32(+NaN:0x1, +NaN) == false +; run: %fcmp_ord_f32(+NaN:0x1, -NaN) == false +; run: %fcmp_ord_f32(-NaN:0x1, -NaN) == false +; run: %fcmp_ord_f32(-NaN:0x1, +NaN) == false + +; run: %fcmp_ord_f32(+NaN:0x80001, +NaN:0x80001) == false +; run: %fcmp_ord_f32(-NaN:0x80001, -NaN:0x80001) == false +; run: %fcmp_ord_f32(+NaN:0x80001, -NaN:0x80001) == false +; run: %fcmp_ord_f32(-NaN:0x80001, +NaN:0x80001) == false +; run: %fcmp_ord_f32(+NaN:0x80001, +NaN) == false +; run: %fcmp_ord_f32(+NaN:0x80001, -NaN) == false +; run: %fcmp_ord_f32(-NaN:0x80001, -NaN) == false +; run: %fcmp_ord_f32(-NaN:0x80001, +NaN) == false + +; sNaN's +; run: %fcmp_ord_f32(+sNaN:0x1, +sNaN:0x1) == false +; run: %fcmp_ord_f32(-sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_ord_f32(+sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_ord_f32(-sNaN:0x1, +sNaN:0x1) == false + +; run: %fcmp_ord_f32(+sNaN:0x1, -0x1.0) == false +; run: %fcmp_ord_f32(-sNaN:0x1, -0x1.0) == false +; run: %fcmp_ord_f32(+sNaN:0x1, 0x1.0) == false +; run: %fcmp_ord_f32(-sNaN:0x1, 0x1.0) == false +; run: %fcmp_ord_f32(+sNaN:0x1, -0x0.0) == false +; run: %fcmp_ord_f32(-sNaN:0x1, -0x0.0) == false +; run: %fcmp_ord_f32(+sNaN:0x1, 0x0.0) == false +; run: %fcmp_ord_f32(-sNaN:0x1, 0x0.0) == false +; run: %fcmp_ord_f32(+sNaN:0x1, -Inf) == false +; run: %fcmp_ord_f32(-sNaN:0x1, -Inf) == false +; run: %fcmp_ord_f32(+sNaN:0x1, Inf) == false +; run: %fcmp_ord_f32(-sNaN:0x1, Inf) == false +; run: %fcmp_ord_f32(-0x0.0, +sNaN:0x1) == false +; run: %fcmp_ord_f32(-0x0.0, -sNaN:0x1) == false +; run: %fcmp_ord_f32(0x0.0, +sNaN:0x1) == false +; run: %fcmp_ord_f32(0x0.0, -sNaN:0x1) == false +; run: %fcmp_ord_f32(-Inf, +sNaN:0x1) == false +; run: %fcmp_ord_f32(-Inf, -sNaN:0x1) == false +; run: %fcmp_ord_f32(Inf, +sNaN:0x1) == false +; run: %fcmp_ord_f32(Inf, -sNaN:0x1) == false + +; run: %fcmp_ord_f32(+sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_ord_f32(-sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_ord_f32(+sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_ord_f32(-sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_ord_f32(+NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_ord_f32(-NaN:0x1, -sNaN:0x1) == false +; run: %fcmp_ord_f32(-NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_ord_f32(+NaN:0x1, -sNaN:0x1) == false + +; run: %fcmp_ord_f32(+sNaN:0x80001, +sNaN:0x80001) == false +; run: %fcmp_ord_f32(-sNaN:0x80001, -sNaN:0x80001) == false +; run: %fcmp_ord_f32(+sNaN:0x80001, -sNaN:0x80001) == false +; run: %fcmp_ord_f32(-sNaN:0x80001, +sNaN:0x80001) == false +; run: %fcmp_ord_f32(+sNaN:0x80001, +sNaN:0x1) == false +; run: %fcmp_ord_f32(+sNaN:0x80001, -sNaN:0x1) == false +; run: %fcmp_ord_f32(-sNaN:0x80001, -sNaN:0x1) == false +; run: %fcmp_ord_f32(-sNaN:0x80001, +sNaN:0x1) == false + + +function %fcmp_ord_f64(f64, f64) -> b1 { +block0(v0: f64, v1: f64): + v2 = fcmp ord v0, v1 + return v2 +} +; run: %fcmp_ord_f64(0x0.5, 0x0.5) == true +; run: %fcmp_ord_f64(0x1.0, 0x1.0) == true +; run: %fcmp_ord_f64(-0x1.0, 0x1.0) == true +; run: %fcmp_ord_f64(0x1.0, -0x1.0) == true +; run: %fcmp_ord_f64(0x0.5, 0x1.0) == true +; run: %fcmp_ord_f64(0x1.5, 0x2.9) == true +; run: %fcmp_ord_f64(0x1.1p10, 0x1.4p1) == true +; run: %fcmp_ord_f64(0x1.4cccccccccccdp0, 0x1.8p0) == true +; run: %fcmp_ord_f64(0x1.b333333333333p0, 0x1.999999999999ap-2) == true +; run: %fcmp_ord_f64(0x1.3333333333333p-1, 0x1.6666666666666p1) == true +; run: %fcmp_ord_f64(-0x0.5, -0x1.0) == true +; run: %fcmp_ord_f64(-0x1.5, -0x2.9) == true +; run: %fcmp_ord_f64(-0x1.1p10, -0x1.3333333333333p-1) == true +; run: %fcmp_ord_f64(-0x1.999999999999ap-2, -0x1.4cccccccccccdp0) == true +; run: %fcmp_ord_f64(-0x1.8p0, -0x1.b333333333333p0) == true +; run: %fcmp_ord_f64(-0x1.4p1, -0x1.6666666666666p1) == true +; run: %fcmp_ord_f64(0x0.5, -0x1.0) == true +; run: %fcmp_ord_f64(0x1.b333333333333p0, -0x1.b333333333333p0) == true + + +; Zeroes +; run: %fcmp_ord_f64(0x0.0, 0x0.0) == true +; run: %fcmp_ord_f64(-0x0.0, -0x0.0) == true +; run: %fcmp_ord_f64(0x0.0, -0x0.0) == true +; run: %fcmp_ord_f64(-0x0.0, 0x0.0) == true + +; Infinities +; run: %fcmp_ord_f64(Inf, Inf) == true +; run: %fcmp_ord_f64(-Inf, -Inf) == true +; run: %fcmp_ord_f64(Inf, -Inf) == true +; run: %fcmp_ord_f64(-Inf, Inf) == true + +; Inf/Zero +; run: %fcmp_ord_f64(0x0.0, Inf) == true +; run: %fcmp_ord_f64(-0x0.0, Inf) == true +; run: %fcmp_ord_f64(0x0.0, -Inf) == true +; run: %fcmp_ord_f64(-0x0.0, -Inf) == true +; run: %fcmp_ord_f64(Inf, 0x0.0) == true +; run: %fcmp_ord_f64(Inf, -0x0.0) == true +; run: %fcmp_ord_f64(-Inf, 0x0.0) == true +; run: %fcmp_ord_f64(-Inf, -0x0.0) == true + +; Epsilon / Max / Min Positive +; run: %fcmp_ord_f64(0x1.0p-52, 0x1.0p-52) == true +; run: %fcmp_ord_f64(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) == true +; run: %fcmp_ord_f64(0x1.0p-1022, 0x1.0p-1022) == true +; run: %fcmp_ord_f64(0x1.0p-52, 0x1.fffffffffffffp1023) == true +; run: %fcmp_ord_f64(0x1.0p-52, 0x1.0p-1022) == true +; run: %fcmp_ord_f64(0x1.0p-1022, 0x1.fffffffffffffp1023) == true + +; Subnormals +; run: %fcmp_ord_f64(0x0.8p-1022, -0x0.8p-1022) == true +; run: %fcmp_ord_f64(-0x0.8p-1022, 0x0.8p-1022) == true +; run: %fcmp_ord_f64(0x0.8p-1022, 0x0.0) == true +; run: %fcmp_ord_f64(-0x0.8p-1022, 0x0.0) == true +; run: %fcmp_ord_f64(0x0.8p-1022, -0x0.0) == true +; run: %fcmp_ord_f64(-0x0.8p-1022, -0x0.0) == true +; run: %fcmp_ord_f64(0x0.0, 0x0.8p-1022) == true +; run: %fcmp_ord_f64(0x0.0, -0x0.8p-1022) == true +; run: %fcmp_ord_f64(-0x0.0, 0x0.8p-1022) == true +; run: %fcmp_ord_f64(-0x0.0, -0x0.8p-1022) == true + +; NaN's +; run: %fcmp_ord_f64(+NaN, +NaN) == false +; run: %fcmp_ord_f64(-NaN, -NaN) == false +; run: %fcmp_ord_f64(+NaN, -NaN) == false +; run: %fcmp_ord_f64(-NaN, +NaN) == false + +; run: %fcmp_ord_f64(+NaN, -0x1.0) == false +; run: %fcmp_ord_f64(-NaN, -0x1.0) == false +; run: %fcmp_ord_f64(+NaN, 0x1.0) == false +; run: %fcmp_ord_f64(-NaN, 0x1.0) == false +; run: %fcmp_ord_f64(+NaN, -0x0.0) == false +; run: %fcmp_ord_f64(-NaN, -0x0.0) == false +; run: %fcmp_ord_f64(+NaN, 0x0.0) == false +; run: %fcmp_ord_f64(-NaN, 0x0.0) == false +; run: %fcmp_ord_f64(+NaN, -Inf) == false +; run: %fcmp_ord_f64(-NaN, -Inf) == false +; run: %fcmp_ord_f64(+NaN, Inf) == false +; run: %fcmp_ord_f64(-NaN, Inf) == false +; run: %fcmp_ord_f64(-0x0.0, +NaN) == false +; run: %fcmp_ord_f64(-0x0.0, -NaN) == false +; run: %fcmp_ord_f64(0x0.0, +NaN) == false +; run: %fcmp_ord_f64(0x0.0, -NaN) == false +; run: %fcmp_ord_f64(-Inf, +NaN) == false +; run: %fcmp_ord_f64(-Inf, -NaN) == false +; run: %fcmp_ord_f64(Inf, +NaN) == false +; run: %fcmp_ord_f64(Inf, -NaN) == false + +; run: %fcmp_ord_f64(+NaN:0x1, +NaN:0x1) == false +; run: %fcmp_ord_f64(-NaN:0x1, -NaN:0x1) == false +; run: %fcmp_ord_f64(+NaN:0x1, -NaN:0x1) == false +; run: %fcmp_ord_f64(-NaN:0x1, +NaN:0x1) == false +; run: %fcmp_ord_f64(+NaN:0x1, +NaN) == false +; run: %fcmp_ord_f64(+NaN:0x1, -NaN) == false +; run: %fcmp_ord_f64(-NaN:0x1, -NaN) == false +; run: %fcmp_ord_f64(-NaN:0x1, +NaN) == false + +; run: %fcmp_ord_f64(+NaN:0x800000000001, +NaN:0x800000000001) == false +; run: %fcmp_ord_f64(-NaN:0x800000000001, -NaN:0x800000000001) == false +; run: %fcmp_ord_f64(+NaN:0x800000000001, -NaN:0x800000000001) == false +; run: %fcmp_ord_f64(-NaN:0x800000000001, +NaN:0x800000000001) == false +; run: %fcmp_ord_f64(+NaN:0x800000000001, +NaN) == false +; run: %fcmp_ord_f64(+NaN:0x800000000001, -NaN) == false +; run: %fcmp_ord_f64(-NaN:0x800000000001, -NaN) == false +; run: %fcmp_ord_f64(-NaN:0x800000000001, +NaN) == false + +; sNaN's +; run: %fcmp_ord_f64(+sNaN:0x1, +sNaN:0x1) == false +; run: %fcmp_ord_f64(-sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_ord_f64(+sNaN:0x1, -sNaN:0x1) == false +; run: %fcmp_ord_f64(-sNaN:0x1, +sNaN:0x1) == false + +; run: %fcmp_ord_f64(+sNaN:0x1, -0x1.0) == false +; run: %fcmp_ord_f64(-sNaN:0x1, -0x1.0) == false +; run: %fcmp_ord_f64(+sNaN:0x1, 0x1.0) == false +; run: %fcmp_ord_f64(-sNaN:0x1, 0x1.0) == false +; run: %fcmp_ord_f64(+sNaN:0x1, -0x0.0) == false +; run: %fcmp_ord_f64(-sNaN:0x1, -0x0.0) == false +; run: %fcmp_ord_f64(+sNaN:0x1, 0x0.0) == false +; run: %fcmp_ord_f64(-sNaN:0x1, 0x0.0) == false +; run: %fcmp_ord_f64(+sNaN:0x1, -Inf) == false +; run: %fcmp_ord_f64(-sNaN:0x1, -Inf) == false +; run: %fcmp_ord_f64(+sNaN:0x1, Inf) == false +; run: %fcmp_ord_f64(-sNaN:0x1, Inf) == false +; run: %fcmp_ord_f64(-0x0.0, +sNaN:0x1) == false +; run: %fcmp_ord_f64(-0x0.0, -sNaN:0x1) == false +; run: %fcmp_ord_f64(0x0.0, +sNaN:0x1) == false +; run: %fcmp_ord_f64(0x0.0, -sNaN:0x1) == false +; run: %fcmp_ord_f64(-Inf, +sNaN:0x1) == false +; run: %fcmp_ord_f64(-Inf, -sNaN:0x1) == false +; run: %fcmp_ord_f64(Inf, +sNaN:0x1) == false +; run: %fcmp_ord_f64(Inf, -sNaN:0x1) == false + +; run: %fcmp_ord_f64(+sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_ord_f64(-sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_ord_f64(+sNaN:0x1, -NaN:0x1) == false +; run: %fcmp_ord_f64(-sNaN:0x1, +NaN:0x1) == false +; run: %fcmp_ord_f64(+NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_ord_f64(-NaN:0x1, -sNaN:0x1) == false +; run: %fcmp_ord_f64(-NaN:0x1, +sNaN:0x1) == false +; run: %fcmp_ord_f64(+NaN:0x1, -sNaN:0x1) == false + +; run: %fcmp_ord_f64(+sNaN:0x800000000001, +sNaN:0x800000000001) == false +; run: %fcmp_ord_f64(-sNaN:0x800000000001, -sNaN:0x800000000001) == false +; run: %fcmp_ord_f64(+sNaN:0x800000000001, -sNaN:0x800000000001) == false +; run: %fcmp_ord_f64(-sNaN:0x800000000001, +sNaN:0x800000000001) == false +; run: %fcmp_ord_f64(+sNaN:0x800000000001, +sNaN:0x1) == false +; run: %fcmp_ord_f64(+sNaN:0x800000000001, -sNaN:0x1) == false +; run: %fcmp_ord_f64(-sNaN:0x800000000001, -sNaN:0x1) == false +; run: %fcmp_ord_f64(-sNaN:0x800000000001, +sNaN:0x1) == false diff --git a/cranelift/filetests/filetests/runtests/fcmp-ueq.clif b/cranelift/filetests/filetests/runtests/fcmp-ueq.clif new file mode 100644 index 0000000000..d6f65885ae --- /dev/null +++ b/cranelift/filetests/filetests/runtests/fcmp-ueq.clif @@ -0,0 +1,318 @@ +test interpret +test run +target x86_64 +target s390x + +function %fcmp_ueq_f32(f32, f32) -> b1 { +block0(v0: f32, v1: f32): + v2 = fcmp ueq v0, v1 + return v2 +} +; run: %fcmp_ueq_f32(0x0.5, 0x0.5) == true +; run: %fcmp_ueq_f32(0x1.0, 0x1.0) == true +; run: %fcmp_ueq_f32(-0x1.0, 0x1.0) == false +; run: %fcmp_ueq_f32(0x1.0, -0x1.0) == false +; run: %fcmp_ueq_f32(0x0.5, 0x1.0) == false +; run: %fcmp_ueq_f32(0x1.5, 0x2.9) == false +; run: %fcmp_ueq_f32(0x1.1p10, 0x1.4p1) == false +; run: %fcmp_ueq_f32(0x1.4cccccp0, 0x1.8p0) == false +; run: %fcmp_ueq_f32(0x1.b33334p0, 0x1.99999ap-2) == false +; run: %fcmp_ueq_f32(0x1.333334p-1, 0x1.666666p1) == false +; run: %fcmp_ueq_f32(-0x0.5, -0x1.0) == false +; run: %fcmp_ueq_f32(-0x1.5, -0x2.9) == false +; run: %fcmp_ueq_f32(-0x1.1p10, -0x1.333334p-1) == false +; run: %fcmp_ueq_f32(-0x1.99999ap-2, -0x1.4cccccp0) == false +; run: %fcmp_ueq_f32(-0x1.8p0, -0x1.b33334p0) == false +; run: %fcmp_ueq_f32(-0x1.4p1, -0x1.666666p1) == false +; run: %fcmp_ueq_f32(0x0.5, -0x1.0) == false +; run: %fcmp_ueq_f32(0x1.b33334p0, -0x1.b33334p0) == false + +; Zeroes +; run: %fcmp_ueq_f32(0x0.0, 0x0.0) == true +; run: %fcmp_ueq_f32(-0x0.0, -0x0.0) == true +; run: %fcmp_ueq_f32(0x0.0, -0x0.0) == true +; run: %fcmp_ueq_f32(-0x0.0, 0x0.0) == true + +; Infinities +; run: %fcmp_ueq_f32(Inf, Inf) == true +; run: %fcmp_ueq_f32(-Inf, -Inf) == true +; run: %fcmp_ueq_f32(Inf, -Inf) == false +; run: %fcmp_ueq_f32(-Inf, Inf) == false + +; Inf/Zero +; run: %fcmp_ueq_f32(0x0.0, Inf) == false +; run: %fcmp_ueq_f32(-0x0.0, Inf) == false +; run: %fcmp_ueq_f32(0x0.0, -Inf) == false +; run: %fcmp_ueq_f32(-0x0.0, -Inf) == false +; run: %fcmp_ueq_f32(Inf, 0x0.0) == false +; run: %fcmp_ueq_f32(Inf, -0x0.0) == false +; run: %fcmp_ueq_f32(-Inf, 0x0.0) == false +; run: %fcmp_ueq_f32(-Inf, -0x0.0) == false + +; Epsilon / Max / Min Positive +; run: %fcmp_ueq_f32(0x1.0p-23, 0x1.0p-23) == true +; run: %fcmp_ueq_f32(0x1.fffffep127, 0x1.fffffep127) == true +; run: %fcmp_ueq_f32(0x1.0p-126, 0x1.0p-126) == true +; run: %fcmp_ueq_f32(0x1.0p-23, 0x1.fffffep127) == false +; run: %fcmp_ueq_f32(0x1.0p-23, 0x1.0p-126) == false +; run: %fcmp_ueq_f32(0x1.0p-126, 0x1.fffffep127) == false + +; Subnormals +; run: %fcmp_ueq_f32(0x0.800002p-126, -0x0.800002p-126) == false +; run: %fcmp_ueq_f32(-0x0.800002p-126, 0x0.800002p-126) == false +; run: %fcmp_ueq_f32(0x0.800002p-126, 0x0.0) == false +; run: %fcmp_ueq_f32(-0x0.800002p-126, 0x0.0) == false +; run: %fcmp_ueq_f32(0x0.800002p-126, -0x0.0) == false +; run: %fcmp_ueq_f32(-0x0.800002p-126, -0x0.0) == false +; run: %fcmp_ueq_f32(0x0.0, 0x0.800002p-126) == false +; run: %fcmp_ueq_f32(0x0.0, -0x0.800002p-126) == false +; run: %fcmp_ueq_f32(-0x0.0, 0x0.800002p-126) == false +; run: %fcmp_ueq_f32(-0x0.0, -0x0.800002p-126) == false + +; NaN's +; run: %fcmp_ueq_f32(+NaN, +NaN) == true +; run: %fcmp_ueq_f32(-NaN, -NaN) == true +; run: %fcmp_ueq_f32(+NaN, -NaN) == true +; run: %fcmp_ueq_f32(-NaN, +NaN) == true + +; run: %fcmp_ueq_f32(+NaN, -0x1.0) == true +; run: %fcmp_ueq_f32(-NaN, -0x1.0) == true +; run: %fcmp_ueq_f32(+NaN, 0x1.0) == true +; run: %fcmp_ueq_f32(-NaN, 0x1.0) == true +; run: %fcmp_ueq_f32(+NaN, -0x0.0) == true +; run: %fcmp_ueq_f32(-NaN, -0x0.0) == true +; run: %fcmp_ueq_f32(+NaN, 0x0.0) == true +; run: %fcmp_ueq_f32(-NaN, 0x0.0) == true +; run: %fcmp_ueq_f32(+NaN, -Inf) == true +; run: %fcmp_ueq_f32(-NaN, -Inf) == true +; run: %fcmp_ueq_f32(+NaN, Inf) == true +; run: %fcmp_ueq_f32(-NaN, Inf) == true +; run: %fcmp_ueq_f32(-0x0.0, +NaN) == true +; run: %fcmp_ueq_f32(-0x0.0, -NaN) == true +; run: %fcmp_ueq_f32(0x0.0, +NaN) == true +; run: %fcmp_ueq_f32(0x0.0, -NaN) == true +; run: %fcmp_ueq_f32(-Inf, +NaN) == true +; run: %fcmp_ueq_f32(-Inf, -NaN) == true +; run: %fcmp_ueq_f32(Inf, +NaN) == true +; run: %fcmp_ueq_f32(Inf, -NaN) == true + +; run: %fcmp_ueq_f32(+NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ueq_f32(-NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ueq_f32(+NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ueq_f32(-NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ueq_f32(+NaN:0x1, +NaN) == true +; run: %fcmp_ueq_f32(+NaN:0x1, -NaN) == true +; run: %fcmp_ueq_f32(-NaN:0x1, -NaN) == true +; run: %fcmp_ueq_f32(-NaN:0x1, +NaN) == true + +; run: %fcmp_ueq_f32(+NaN:0x80001, +NaN:0x80001) == true +; run: %fcmp_ueq_f32(-NaN:0x80001, -NaN:0x80001) == true +; run: %fcmp_ueq_f32(+NaN:0x80001, -NaN:0x80001) == true +; run: %fcmp_ueq_f32(-NaN:0x80001, +NaN:0x80001) == true +; run: %fcmp_ueq_f32(+NaN:0x80001, +NaN) == true +; run: %fcmp_ueq_f32(+NaN:0x80001, -NaN) == true +; run: %fcmp_ueq_f32(-NaN:0x80001, -NaN) == true +; run: %fcmp_ueq_f32(-NaN:0x80001, +NaN) == true + +; sNaN's +; run: %fcmp_ueq_f32(+sNaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ueq_f32(-sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ueq_f32(+sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ueq_f32(-sNaN:0x1, +sNaN:0x1) == true + +; run: %fcmp_ueq_f32(+sNaN:0x1, -0x1.0) == true +; run: %fcmp_ueq_f32(-sNaN:0x1, -0x1.0) == true +; run: %fcmp_ueq_f32(+sNaN:0x1, 0x1.0) == true +; run: %fcmp_ueq_f32(-sNaN:0x1, 0x1.0) == true +; run: %fcmp_ueq_f32(+sNaN:0x1, -0x0.0) == true +; run: %fcmp_ueq_f32(-sNaN:0x1, -0x0.0) == true +; run: %fcmp_ueq_f32(+sNaN:0x1, 0x0.0) == true +; run: %fcmp_ueq_f32(-sNaN:0x1, 0x0.0) == true +; run: %fcmp_ueq_f32(+sNaN:0x1, -Inf) == true +; run: %fcmp_ueq_f32(-sNaN:0x1, -Inf) == true +; run: %fcmp_ueq_f32(+sNaN:0x1, Inf) == true +; run: %fcmp_ueq_f32(-sNaN:0x1, Inf) == true +; run: %fcmp_ueq_f32(-0x0.0, +sNaN:0x1) == true +; run: %fcmp_ueq_f32(-0x0.0, -sNaN:0x1) == true +; run: %fcmp_ueq_f32(0x0.0, +sNaN:0x1) == true +; run: %fcmp_ueq_f32(0x0.0, -sNaN:0x1) == true +; run: %fcmp_ueq_f32(-Inf, +sNaN:0x1) == true +; run: %fcmp_ueq_f32(-Inf, -sNaN:0x1) == true +; run: %fcmp_ueq_f32(Inf, +sNaN:0x1) == true +; run: %fcmp_ueq_f32(Inf, -sNaN:0x1) == true + +; run: %fcmp_ueq_f32(+sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ueq_f32(-sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ueq_f32(+sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ueq_f32(-sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ueq_f32(+NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ueq_f32(-NaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ueq_f32(-NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ueq_f32(+NaN:0x1, -sNaN:0x1) == true + +; run: %fcmp_ueq_f32(+sNaN:0x80001, +sNaN:0x80001) == true +; run: %fcmp_ueq_f32(-sNaN:0x80001, -sNaN:0x80001) == true +; run: %fcmp_ueq_f32(+sNaN:0x80001, -sNaN:0x80001) == true +; run: %fcmp_ueq_f32(-sNaN:0x80001, +sNaN:0x80001) == true +; run: %fcmp_ueq_f32(+sNaN:0x80001, +sNaN:0x1) == true +; run: %fcmp_ueq_f32(+sNaN:0x80001, -sNaN:0x1) == true +; run: %fcmp_ueq_f32(-sNaN:0x80001, -sNaN:0x1) == true +; run: %fcmp_ueq_f32(-sNaN:0x80001, +sNaN:0x1) == true + + +function %fcmp_ueq_f64(f64, f64) -> b1 { +block0(v0: f64, v1: f64): + v2 = fcmp ueq v0, v1 + return v2 +} +; run: %fcmp_ueq_f64(0x0.5, 0x0.5) == true +; run: %fcmp_ueq_f64(0x1.0, 0x1.0) == true +; run: %fcmp_ueq_f64(-0x1.0, 0x1.0) == false +; run: %fcmp_ueq_f64(0x1.0, -0x1.0) == false +; run: %fcmp_ueq_f64(0x0.5, 0x1.0) == false +; run: %fcmp_ueq_f64(0x1.5, 0x2.9) == false +; run: %fcmp_ueq_f64(0x1.1p10, 0x1.4p1) == false +; run: %fcmp_ueq_f64(0x1.4cccccccccccdp0, 0x1.8p0) == false +; run: %fcmp_ueq_f64(0x1.b333333333333p0, 0x1.999999999999ap-2) == false +; run: %fcmp_ueq_f64(0x1.3333333333333p-1, 0x1.6666666666666p1) == false +; run: %fcmp_ueq_f64(-0x0.5, -0x1.0) == false +; run: %fcmp_ueq_f64(-0x1.5, -0x2.9) == false +; run: %fcmp_ueq_f64(-0x1.1p10, -0x1.3333333333333p-1) == false +; run: %fcmp_ueq_f64(-0x1.999999999999ap-2, -0x1.4cccccccccccdp0) == false +; run: %fcmp_ueq_f64(-0x1.8p0, -0x1.b333333333333p0) == false +; run: %fcmp_ueq_f64(-0x1.4p1, -0x1.6666666666666p1) == false +; run: %fcmp_ueq_f64(0x0.5, -0x1.0) == false +; run: %fcmp_ueq_f64(0x1.b333333333333p0, -0x1.b333333333333p0) == false + + +; Zeroes +; run: %fcmp_ueq_f64(0x0.0, 0x0.0) == true +; run: %fcmp_ueq_f64(-0x0.0, -0x0.0) == true +; run: %fcmp_ueq_f64(0x0.0, -0x0.0) == true +; run: %fcmp_ueq_f64(-0x0.0, 0x0.0) == true + +; Infinities +; run: %fcmp_ueq_f64(Inf, Inf) == true +; run: %fcmp_ueq_f64(-Inf, -Inf) == true +; run: %fcmp_ueq_f64(Inf, -Inf) == false +; run: %fcmp_ueq_f64(-Inf, Inf) == false + +; Inf/Zero +; run: %fcmp_ueq_f64(0x0.0, Inf) == false +; run: %fcmp_ueq_f64(-0x0.0, Inf) == false +; run: %fcmp_ueq_f64(0x0.0, -Inf) == false +; run: %fcmp_ueq_f64(-0x0.0, -Inf) == false +; run: %fcmp_ueq_f64(Inf, 0x0.0) == false +; run: %fcmp_ueq_f64(Inf, -0x0.0) == false +; run: %fcmp_ueq_f64(-Inf, 0x0.0) == false +; run: %fcmp_ueq_f64(-Inf, -0x0.0) == false + +; Epsilon / Max / Min Positive +; run: %fcmp_ueq_f64(0x1.0p-52, 0x1.0p-52) == true +; run: %fcmp_ueq_f64(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) == true +; run: %fcmp_ueq_f64(0x1.0p-1022, 0x1.0p-1022) == true +; run: %fcmp_ueq_f64(0x1.0p-52, 0x1.fffffffffffffp1023) == false +; run: %fcmp_ueq_f64(0x1.0p-52, 0x1.0p-1022) == false +; run: %fcmp_ueq_f64(0x1.0p-1022, 0x1.fffffffffffffp1023) == false + +; Subnormals +; run: %fcmp_ueq_f64(0x0.8p-1022, -0x0.8p-1022) == false +; run: %fcmp_ueq_f64(-0x0.8p-1022, 0x0.8p-1022) == false +; run: %fcmp_ueq_f64(0x0.8p-1022, 0x0.0) == false +; run: %fcmp_ueq_f64(-0x0.8p-1022, 0x0.0) == false +; run: %fcmp_ueq_f64(0x0.8p-1022, -0x0.0) == false +; run: %fcmp_ueq_f64(-0x0.8p-1022, -0x0.0) == false +; run: %fcmp_ueq_f64(0x0.0, 0x0.8p-1022) == false +; run: %fcmp_ueq_f64(0x0.0, -0x0.8p-1022) == false +; run: %fcmp_ueq_f64(-0x0.0, 0x0.8p-1022) == false +; run: %fcmp_ueq_f64(-0x0.0, -0x0.8p-1022) == false + +; NaN's +; run: %fcmp_ueq_f64(+NaN, +NaN) == true +; run: %fcmp_ueq_f64(-NaN, -NaN) == true +; run: %fcmp_ueq_f64(+NaN, -NaN) == true +; run: %fcmp_ueq_f64(-NaN, +NaN) == true + +; run: %fcmp_ueq_f64(+NaN, -0x1.0) == true +; run: %fcmp_ueq_f64(-NaN, -0x1.0) == true +; run: %fcmp_ueq_f64(+NaN, 0x1.0) == true +; run: %fcmp_ueq_f64(-NaN, 0x1.0) == true +; run: %fcmp_ueq_f64(+NaN, -0x0.0) == true +; run: %fcmp_ueq_f64(-NaN, -0x0.0) == true +; run: %fcmp_ueq_f64(+NaN, 0x0.0) == true +; run: %fcmp_ueq_f64(-NaN, 0x0.0) == true +; run: %fcmp_ueq_f64(+NaN, -Inf) == true +; run: %fcmp_ueq_f64(-NaN, -Inf) == true +; run: %fcmp_ueq_f64(+NaN, Inf) == true +; run: %fcmp_ueq_f64(-NaN, Inf) == true +; run: %fcmp_ueq_f64(-0x0.0, +NaN) == true +; run: %fcmp_ueq_f64(-0x0.0, -NaN) == true +; run: %fcmp_ueq_f64(0x0.0, +NaN) == true +; run: %fcmp_ueq_f64(0x0.0, -NaN) == true +; run: %fcmp_ueq_f64(-Inf, +NaN) == true +; run: %fcmp_ueq_f64(-Inf, -NaN) == true +; run: %fcmp_ueq_f64(Inf, +NaN) == true +; run: %fcmp_ueq_f64(Inf, -NaN) == true + +; run: %fcmp_ueq_f64(+NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ueq_f64(-NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ueq_f64(+NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ueq_f64(-NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ueq_f64(+NaN:0x1, +NaN) == true +; run: %fcmp_ueq_f64(+NaN:0x1, -NaN) == true +; run: %fcmp_ueq_f64(-NaN:0x1, -NaN) == true +; run: %fcmp_ueq_f64(-NaN:0x1, +NaN) == true + +; run: %fcmp_ueq_f64(+NaN:0x800000000001, +NaN:0x800000000001) == true +; run: %fcmp_ueq_f64(-NaN:0x800000000001, -NaN:0x800000000001) == true +; run: %fcmp_ueq_f64(+NaN:0x800000000001, -NaN:0x800000000001) == true +; run: %fcmp_ueq_f64(-NaN:0x800000000001, +NaN:0x800000000001) == true +; run: %fcmp_ueq_f64(+NaN:0x800000000001, +NaN) == true +; run: %fcmp_ueq_f64(+NaN:0x800000000001, -NaN) == true +; run: %fcmp_ueq_f64(-NaN:0x800000000001, -NaN) == true +; run: %fcmp_ueq_f64(-NaN:0x800000000001, +NaN) == true + +; sNaN's +; run: %fcmp_ueq_f64(+sNaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ueq_f64(-sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ueq_f64(+sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ueq_f64(-sNaN:0x1, +sNaN:0x1) == true + +; run: %fcmp_ueq_f64(+sNaN:0x1, -0x1.0) == true +; run: %fcmp_ueq_f64(-sNaN:0x1, -0x1.0) == true +; run: %fcmp_ueq_f64(+sNaN:0x1, 0x1.0) == true +; run: %fcmp_ueq_f64(-sNaN:0x1, 0x1.0) == true +; run: %fcmp_ueq_f64(+sNaN:0x1, -0x0.0) == true +; run: %fcmp_ueq_f64(-sNaN:0x1, -0x0.0) == true +; run: %fcmp_ueq_f64(+sNaN:0x1, 0x0.0) == true +; run: %fcmp_ueq_f64(-sNaN:0x1, 0x0.0) == true +; run: %fcmp_ueq_f64(+sNaN:0x1, -Inf) == true +; run: %fcmp_ueq_f64(-sNaN:0x1, -Inf) == true +; run: %fcmp_ueq_f64(+sNaN:0x1, Inf) == true +; run: %fcmp_ueq_f64(-sNaN:0x1, Inf) == true +; run: %fcmp_ueq_f64(-0x0.0, +sNaN:0x1) == true +; run: %fcmp_ueq_f64(-0x0.0, -sNaN:0x1) == true +; run: %fcmp_ueq_f64(0x0.0, +sNaN:0x1) == true +; run: %fcmp_ueq_f64(0x0.0, -sNaN:0x1) == true +; run: %fcmp_ueq_f64(-Inf, +sNaN:0x1) == true +; run: %fcmp_ueq_f64(-Inf, -sNaN:0x1) == true +; run: %fcmp_ueq_f64(Inf, +sNaN:0x1) == true +; run: %fcmp_ueq_f64(Inf, -sNaN:0x1) == true + +; run: %fcmp_ueq_f64(+sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ueq_f64(-sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ueq_f64(+sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ueq_f64(-sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ueq_f64(+NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ueq_f64(-NaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ueq_f64(-NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ueq_f64(+NaN:0x1, -sNaN:0x1) == true + +; run: %fcmp_ueq_f64(+sNaN:0x800000000001, +sNaN:0x800000000001) == true +; run: %fcmp_ueq_f64(-sNaN:0x800000000001, -sNaN:0x800000000001) == true +; run: %fcmp_ueq_f64(+sNaN:0x800000000001, -sNaN:0x800000000001) == true +; run: %fcmp_ueq_f64(-sNaN:0x800000000001, +sNaN:0x800000000001) == true +; run: %fcmp_ueq_f64(+sNaN:0x800000000001, +sNaN:0x1) == true +; run: %fcmp_ueq_f64(+sNaN:0x800000000001, -sNaN:0x1) == true +; run: %fcmp_ueq_f64(-sNaN:0x800000000001, -sNaN:0x1) == true +; run: %fcmp_ueq_f64(-sNaN:0x800000000001, +sNaN:0x1) == true diff --git a/cranelift/filetests/filetests/runtests/fcmp-uge.clif b/cranelift/filetests/filetests/runtests/fcmp-uge.clif new file mode 100644 index 0000000000..8e699321e2 --- /dev/null +++ b/cranelift/filetests/filetests/runtests/fcmp-uge.clif @@ -0,0 +1,318 @@ +test interpret +test run +target x86_64 +target s390x + +function %fcmp_uge_f32(f32, f32) -> b1 { +block0(v0: f32, v1: f32): + v2 = fcmp uge v0, v1 + return v2 +} +; run: %fcmp_uge_f32(0x0.5, 0x0.5) == true +; run: %fcmp_uge_f32(0x1.0, 0x1.0) == true +; run: %fcmp_uge_f32(-0x1.0, 0x1.0) == false +; run: %fcmp_uge_f32(0x1.0, -0x1.0) == true +; run: %fcmp_uge_f32(0x0.5, 0x1.0) == false +; run: %fcmp_uge_f32(0x1.5, 0x2.9) == false +; run: %fcmp_uge_f32(0x1.1p10, 0x1.4p1) == true +; run: %fcmp_uge_f32(0x1.4cccccp0, 0x1.8p0) == false +; run: %fcmp_uge_f32(0x1.b33334p0, 0x1.99999ap-2) == true +; run: %fcmp_uge_f32(0x1.333334p-1, 0x1.666666p1) == false +; run: %fcmp_uge_f32(-0x0.5, -0x1.0) == true +; run: %fcmp_uge_f32(-0x1.5, -0x2.9) == true +; run: %fcmp_uge_f32(-0x1.1p10, -0x1.333334p-1) == false +; run: %fcmp_uge_f32(-0x1.99999ap-2, -0x1.4cccccp0) == true +; run: %fcmp_uge_f32(-0x1.8p0, -0x1.b33334p0) == true +; run: %fcmp_uge_f32(-0x1.4p1, -0x1.666666p1) == true +; run: %fcmp_uge_f32(0x0.5, -0x1.0) == true +; run: %fcmp_uge_f32(0x1.b33334p0, -0x1.b33334p0) == true + +; Zeroes +; run: %fcmp_uge_f32(0x0.0, 0x0.0) == true +; run: %fcmp_uge_f32(-0x0.0, -0x0.0) == true +; run: %fcmp_uge_f32(0x0.0, -0x0.0) == true +; run: %fcmp_uge_f32(-0x0.0, 0x0.0) == true + +; Infinities +; run: %fcmp_uge_f32(Inf, Inf) == true +; run: %fcmp_uge_f32(-Inf, -Inf) == true +; run: %fcmp_uge_f32(Inf, -Inf) == true +; run: %fcmp_uge_f32(-Inf, Inf) == false + +; Inf/Zero +; run: %fcmp_uge_f32(0x0.0, Inf) == false +; run: %fcmp_uge_f32(-0x0.0, Inf) == false +; run: %fcmp_uge_f32(0x0.0, -Inf) == true +; run: %fcmp_uge_f32(-0x0.0, -Inf) == true +; run: %fcmp_uge_f32(Inf, 0x0.0) == true +; run: %fcmp_uge_f32(Inf, -0x0.0) == true +; run: %fcmp_uge_f32(-Inf, 0x0.0) == false +; run: %fcmp_uge_f32(-Inf, -0x0.0) == false + +; Epsilon / Max / Min Positive +; run: %fcmp_uge_f32(0x1.0p-23, 0x1.0p-23) == true +; run: %fcmp_uge_f32(0x1.fffffep127, 0x1.fffffep127) == true +; run: %fcmp_uge_f32(0x1.0p-126, 0x1.0p-126) == true +; run: %fcmp_uge_f32(0x1.0p-23, 0x1.fffffep127) == false +; run: %fcmp_uge_f32(0x1.0p-23, 0x1.0p-126) == true +; run: %fcmp_uge_f32(0x1.0p-126, 0x1.fffffep127) == false + +; Subnormals +; run: %fcmp_uge_f32(0x0.800002p-126, -0x0.800002p-126) == true +; run: %fcmp_uge_f32(-0x0.800002p-126, 0x0.800002p-126) == false +; run: %fcmp_uge_f32(0x0.800002p-126, 0x0.0) == true +; run: %fcmp_uge_f32(-0x0.800002p-126, 0x0.0) == false +; run: %fcmp_uge_f32(0x0.800002p-126, -0x0.0) == true +; run: %fcmp_uge_f32(-0x0.800002p-126, -0x0.0) == false +; run: %fcmp_uge_f32(0x0.0, 0x0.800002p-126) == false +; run: %fcmp_uge_f32(0x0.0, -0x0.800002p-126) == true +; run: %fcmp_uge_f32(-0x0.0, 0x0.800002p-126) == false +; run: %fcmp_uge_f32(-0x0.0, -0x0.800002p-126) == true + +; NaN's +; run: %fcmp_uge_f32(+NaN, +NaN) == true +; run: %fcmp_uge_f32(-NaN, -NaN) == true +; run: %fcmp_uge_f32(+NaN, -NaN) == true +; run: %fcmp_uge_f32(-NaN, +NaN) == true + +; run: %fcmp_uge_f32(+NaN, -0x1.0) == true +; run: %fcmp_uge_f32(-NaN, -0x1.0) == true +; run: %fcmp_uge_f32(+NaN, 0x1.0) == true +; run: %fcmp_uge_f32(-NaN, 0x1.0) == true +; run: %fcmp_uge_f32(+NaN, -0x0.0) == true +; run: %fcmp_uge_f32(-NaN, -0x0.0) == true +; run: %fcmp_uge_f32(+NaN, 0x0.0) == true +; run: %fcmp_uge_f32(-NaN, 0x0.0) == true +; run: %fcmp_uge_f32(+NaN, -Inf) == true +; run: %fcmp_uge_f32(-NaN, -Inf) == true +; run: %fcmp_uge_f32(+NaN, Inf) == true +; run: %fcmp_uge_f32(-NaN, Inf) == true +; run: %fcmp_uge_f32(-0x0.0, +NaN) == true +; run: %fcmp_uge_f32(-0x0.0, -NaN) == true +; run: %fcmp_uge_f32(0x0.0, +NaN) == true +; run: %fcmp_uge_f32(0x0.0, -NaN) == true +; run: %fcmp_uge_f32(-Inf, +NaN) == true +; run: %fcmp_uge_f32(-Inf, -NaN) == true +; run: %fcmp_uge_f32(Inf, +NaN) == true +; run: %fcmp_uge_f32(Inf, -NaN) == true + +; run: %fcmp_uge_f32(+NaN:0x1, +NaN:0x1) == true +; run: %fcmp_uge_f32(-NaN:0x1, -NaN:0x1) == true +; run: %fcmp_uge_f32(+NaN:0x1, -NaN:0x1) == true +; run: %fcmp_uge_f32(-NaN:0x1, +NaN:0x1) == true +; run: %fcmp_uge_f32(+NaN:0x1, +NaN) == true +; run: %fcmp_uge_f32(+NaN:0x1, -NaN) == true +; run: %fcmp_uge_f32(-NaN:0x1, -NaN) == true +; run: %fcmp_uge_f32(-NaN:0x1, +NaN) == true + +; run: %fcmp_uge_f32(+NaN:0x80001, +NaN:0x80001) == true +; run: %fcmp_uge_f32(-NaN:0x80001, -NaN:0x80001) == true +; run: %fcmp_uge_f32(+NaN:0x80001, -NaN:0x80001) == true +; run: %fcmp_uge_f32(-NaN:0x80001, +NaN:0x80001) == true +; run: %fcmp_uge_f32(+NaN:0x80001, +NaN) == true +; run: %fcmp_uge_f32(+NaN:0x80001, -NaN) == true +; run: %fcmp_uge_f32(-NaN:0x80001, -NaN) == true +; run: %fcmp_uge_f32(-NaN:0x80001, +NaN) == true + +; sNaN's +; run: %fcmp_uge_f32(+sNaN:0x1, +sNaN:0x1) == true +; run: %fcmp_uge_f32(-sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_uge_f32(+sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_uge_f32(-sNaN:0x1, +sNaN:0x1) == true + +; run: %fcmp_uge_f32(+sNaN:0x1, -0x1.0) == true +; run: %fcmp_uge_f32(-sNaN:0x1, -0x1.0) == true +; run: %fcmp_uge_f32(+sNaN:0x1, 0x1.0) == true +; run: %fcmp_uge_f32(-sNaN:0x1, 0x1.0) == true +; run: %fcmp_uge_f32(+sNaN:0x1, -0x0.0) == true +; run: %fcmp_uge_f32(-sNaN:0x1, -0x0.0) == true +; run: %fcmp_uge_f32(+sNaN:0x1, 0x0.0) == true +; run: %fcmp_uge_f32(-sNaN:0x1, 0x0.0) == true +; run: %fcmp_uge_f32(+sNaN:0x1, -Inf) == true +; run: %fcmp_uge_f32(-sNaN:0x1, -Inf) == true +; run: %fcmp_uge_f32(+sNaN:0x1, Inf) == true +; run: %fcmp_uge_f32(-sNaN:0x1, Inf) == true +; run: %fcmp_uge_f32(-0x0.0, +sNaN:0x1) == true +; run: %fcmp_uge_f32(-0x0.0, -sNaN:0x1) == true +; run: %fcmp_uge_f32(0x0.0, +sNaN:0x1) == true +; run: %fcmp_uge_f32(0x0.0, -sNaN:0x1) == true +; run: %fcmp_uge_f32(-Inf, +sNaN:0x1) == true +; run: %fcmp_uge_f32(-Inf, -sNaN:0x1) == true +; run: %fcmp_uge_f32(Inf, +sNaN:0x1) == true +; run: %fcmp_uge_f32(Inf, -sNaN:0x1) == true + +; run: %fcmp_uge_f32(+sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_uge_f32(-sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_uge_f32(+sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_uge_f32(-sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_uge_f32(+NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_uge_f32(-NaN:0x1, -sNaN:0x1) == true +; run: %fcmp_uge_f32(-NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_uge_f32(+NaN:0x1, -sNaN:0x1) == true + +; run: %fcmp_uge_f32(+sNaN:0x80001, +sNaN:0x80001) == true +; run: %fcmp_uge_f32(-sNaN:0x80001, -sNaN:0x80001) == true +; run: %fcmp_uge_f32(+sNaN:0x80001, -sNaN:0x80001) == true +; run: %fcmp_uge_f32(-sNaN:0x80001, +sNaN:0x80001) == true +; run: %fcmp_uge_f32(+sNaN:0x80001, +sNaN:0x1) == true +; run: %fcmp_uge_f32(+sNaN:0x80001, -sNaN:0x1) == true +; run: %fcmp_uge_f32(-sNaN:0x80001, -sNaN:0x1) == true +; run: %fcmp_uge_f32(-sNaN:0x80001, +sNaN:0x1) == true + + +function %fcmp_uge_f64(f64, f64) -> b1 { +block0(v0: f64, v1: f64): + v2 = fcmp uge v0, v1 + return v2 +} +; run: %fcmp_uge_f64(0x0.5, 0x0.5) == true +; run: %fcmp_uge_f64(0x1.0, 0x1.0) == true +; run: %fcmp_uge_f64(-0x1.0, 0x1.0) == false +; run: %fcmp_uge_f64(0x1.0, -0x1.0) == true +; run: %fcmp_uge_f64(0x0.5, 0x1.0) == false +; run: %fcmp_uge_f64(0x1.5, 0x2.9) == false +; run: %fcmp_uge_f64(0x1.1p10, 0x1.4p1) == true +; run: %fcmp_uge_f64(0x1.4cccccccccccdp0, 0x1.8p0) == false +; run: %fcmp_uge_f64(0x1.b333333333333p0, 0x1.999999999999ap-2) == true +; run: %fcmp_uge_f64(0x1.3333333333333p-1, 0x1.6666666666666p1) == false +; run: %fcmp_uge_f64(-0x0.5, -0x1.0) == true +; run: %fcmp_uge_f64(-0x1.5, -0x2.9) == true +; run: %fcmp_uge_f64(-0x1.1p10, -0x1.3333333333333p-1) == false +; run: %fcmp_uge_f64(-0x1.999999999999ap-2, -0x1.4cccccccccccdp0) == true +; run: %fcmp_uge_f64(-0x1.8p0, -0x1.b333333333333p0) == true +; run: %fcmp_uge_f64(-0x1.4p1, -0x1.6666666666666p1) == true +; run: %fcmp_uge_f64(0x0.5, -0x1.0) == true +; run: %fcmp_uge_f64(0x1.b333333333333p0, -0x1.b333333333333p0) == true + + +; Zeroes +; run: %fcmp_uge_f64(0x0.0, 0x0.0) == true +; run: %fcmp_uge_f64(-0x0.0, -0x0.0) == true +; run: %fcmp_uge_f64(0x0.0, -0x0.0) == true +; run: %fcmp_uge_f64(-0x0.0, 0x0.0) == true + +; Infinities +; run: %fcmp_uge_f64(Inf, Inf) == true +; run: %fcmp_uge_f64(-Inf, -Inf) == true +; run: %fcmp_uge_f64(Inf, -Inf) == true +; run: %fcmp_uge_f64(-Inf, Inf) == false + +; Inf/Zero +; run: %fcmp_uge_f64(0x0.0, Inf) == false +; run: %fcmp_uge_f64(-0x0.0, Inf) == false +; run: %fcmp_uge_f64(0x0.0, -Inf) == true +; run: %fcmp_uge_f64(-0x0.0, -Inf) == true +; run: %fcmp_uge_f64(Inf, 0x0.0) == true +; run: %fcmp_uge_f64(Inf, -0x0.0) == true +; run: %fcmp_uge_f64(-Inf, 0x0.0) == false +; run: %fcmp_uge_f64(-Inf, -0x0.0) == false + +; Epsilon / Max / Min Positive +; run: %fcmp_uge_f64(0x1.0p-52, 0x1.0p-52) == true +; run: %fcmp_uge_f64(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) == true +; run: %fcmp_uge_f64(0x1.0p-1022, 0x1.0p-1022) == true +; run: %fcmp_uge_f64(0x1.0p-52, 0x1.fffffffffffffp1023) == false +; run: %fcmp_uge_f64(0x1.0p-52, 0x1.0p-1022) == true +; run: %fcmp_uge_f64(0x1.0p-1022, 0x1.fffffffffffffp1023) == false + +; Subnormals +; run: %fcmp_uge_f64(0x0.8p-1022, -0x0.8p-1022) == true +; run: %fcmp_uge_f64(-0x0.8p-1022, 0x0.8p-1022) == false +; run: %fcmp_uge_f64(0x0.8p-1022, 0x0.0) == true +; run: %fcmp_uge_f64(-0x0.8p-1022, 0x0.0) == false +; run: %fcmp_uge_f64(0x0.8p-1022, -0x0.0) == true +; run: %fcmp_uge_f64(-0x0.8p-1022, -0x0.0) == false +; run: %fcmp_uge_f64(0x0.0, 0x0.8p-1022) == false +; run: %fcmp_uge_f64(0x0.0, -0x0.8p-1022) == true +; run: %fcmp_uge_f64(-0x0.0, 0x0.8p-1022) == false +; run: %fcmp_uge_f64(-0x0.0, -0x0.8p-1022) == true + +; NaN's +; run: %fcmp_uge_f64(+NaN, +NaN) == true +; run: %fcmp_uge_f64(-NaN, -NaN) == true +; run: %fcmp_uge_f64(+NaN, -NaN) == true +; run: %fcmp_uge_f64(-NaN, +NaN) == true + +; run: %fcmp_uge_f64(+NaN, -0x1.0) == true +; run: %fcmp_uge_f64(-NaN, -0x1.0) == true +; run: %fcmp_uge_f64(+NaN, 0x1.0) == true +; run: %fcmp_uge_f64(-NaN, 0x1.0) == true +; run: %fcmp_uge_f64(+NaN, -0x0.0) == true +; run: %fcmp_uge_f64(-NaN, -0x0.0) == true +; run: %fcmp_uge_f64(+NaN, 0x0.0) == true +; run: %fcmp_uge_f64(-NaN, 0x0.0) == true +; run: %fcmp_uge_f64(+NaN, -Inf) == true +; run: %fcmp_uge_f64(-NaN, -Inf) == true +; run: %fcmp_uge_f64(+NaN, Inf) == true +; run: %fcmp_uge_f64(-NaN, Inf) == true +; run: %fcmp_uge_f64(-0x0.0, +NaN) == true +; run: %fcmp_uge_f64(-0x0.0, -NaN) == true +; run: %fcmp_uge_f64(0x0.0, +NaN) == true +; run: %fcmp_uge_f64(0x0.0, -NaN) == true +; run: %fcmp_uge_f64(-Inf, +NaN) == true +; run: %fcmp_uge_f64(-Inf, -NaN) == true +; run: %fcmp_uge_f64(Inf, +NaN) == true +; run: %fcmp_uge_f64(Inf, -NaN) == true + +; run: %fcmp_uge_f64(+NaN:0x1, +NaN:0x1) == true +; run: %fcmp_uge_f64(-NaN:0x1, -NaN:0x1) == true +; run: %fcmp_uge_f64(+NaN:0x1, -NaN:0x1) == true +; run: %fcmp_uge_f64(-NaN:0x1, +NaN:0x1) == true +; run: %fcmp_uge_f64(+NaN:0x1, +NaN) == true +; run: %fcmp_uge_f64(+NaN:0x1, -NaN) == true +; run: %fcmp_uge_f64(-NaN:0x1, -NaN) == true +; run: %fcmp_uge_f64(-NaN:0x1, +NaN) == true + +; run: %fcmp_uge_f64(+NaN:0x800000000001, +NaN:0x800000000001) == true +; run: %fcmp_uge_f64(-NaN:0x800000000001, -NaN:0x800000000001) == true +; run: %fcmp_uge_f64(+NaN:0x800000000001, -NaN:0x800000000001) == true +; run: %fcmp_uge_f64(-NaN:0x800000000001, +NaN:0x800000000001) == true +; run: %fcmp_uge_f64(+NaN:0x800000000001, +NaN) == true +; run: %fcmp_uge_f64(+NaN:0x800000000001, -NaN) == true +; run: %fcmp_uge_f64(-NaN:0x800000000001, -NaN) == true +; run: %fcmp_uge_f64(-NaN:0x800000000001, +NaN) == true + +; sNaN's +; run: %fcmp_uge_f64(+sNaN:0x1, +sNaN:0x1) == true +; run: %fcmp_uge_f64(-sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_uge_f64(+sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_uge_f64(-sNaN:0x1, +sNaN:0x1) == true + +; run: %fcmp_uge_f64(+sNaN:0x1, -0x1.0) == true +; run: %fcmp_uge_f64(-sNaN:0x1, -0x1.0) == true +; run: %fcmp_uge_f64(+sNaN:0x1, 0x1.0) == true +; run: %fcmp_uge_f64(-sNaN:0x1, 0x1.0) == true +; run: %fcmp_uge_f64(+sNaN:0x1, -0x0.0) == true +; run: %fcmp_uge_f64(-sNaN:0x1, -0x0.0) == true +; run: %fcmp_uge_f64(+sNaN:0x1, 0x0.0) == true +; run: %fcmp_uge_f64(-sNaN:0x1, 0x0.0) == true +; run: %fcmp_uge_f64(+sNaN:0x1, -Inf) == true +; run: %fcmp_uge_f64(-sNaN:0x1, -Inf) == true +; run: %fcmp_uge_f64(+sNaN:0x1, Inf) == true +; run: %fcmp_uge_f64(-sNaN:0x1, Inf) == true +; run: %fcmp_uge_f64(-0x0.0, +sNaN:0x1) == true +; run: %fcmp_uge_f64(-0x0.0, -sNaN:0x1) == true +; run: %fcmp_uge_f64(0x0.0, +sNaN:0x1) == true +; run: %fcmp_uge_f64(0x0.0, -sNaN:0x1) == true +; run: %fcmp_uge_f64(-Inf, +sNaN:0x1) == true +; run: %fcmp_uge_f64(-Inf, -sNaN:0x1) == true +; run: %fcmp_uge_f64(Inf, +sNaN:0x1) == true +; run: %fcmp_uge_f64(Inf, -sNaN:0x1) == true + +; run: %fcmp_uge_f64(+sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_uge_f64(-sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_uge_f64(+sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_uge_f64(-sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_uge_f64(+NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_uge_f64(-NaN:0x1, -sNaN:0x1) == true +; run: %fcmp_uge_f64(-NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_uge_f64(+NaN:0x1, -sNaN:0x1) == true + +; run: %fcmp_uge_f64(+sNaN:0x800000000001, +sNaN:0x800000000001) == true +; run: %fcmp_uge_f64(-sNaN:0x800000000001, -sNaN:0x800000000001) == true +; run: %fcmp_uge_f64(+sNaN:0x800000000001, -sNaN:0x800000000001) == true +; run: %fcmp_uge_f64(-sNaN:0x800000000001, +sNaN:0x800000000001) == true +; run: %fcmp_uge_f64(+sNaN:0x800000000001, +sNaN:0x1) == true +; run: %fcmp_uge_f64(+sNaN:0x800000000001, -sNaN:0x1) == true +; run: %fcmp_uge_f64(-sNaN:0x800000000001, -sNaN:0x1) == true +; run: %fcmp_uge_f64(-sNaN:0x800000000001, +sNaN:0x1) == true diff --git a/cranelift/filetests/filetests/runtests/fcmp-ugt.clif b/cranelift/filetests/filetests/runtests/fcmp-ugt.clif new file mode 100644 index 0000000000..0afcd56725 --- /dev/null +++ b/cranelift/filetests/filetests/runtests/fcmp-ugt.clif @@ -0,0 +1,318 @@ +test interpret +test run +target x86_64 +target s390x + +function %fcmp_ugt_f32(f32, f32) -> b1 { +block0(v0: f32, v1: f32): + v2 = fcmp ugt v0, v1 + return v2 +} +; run: %fcmp_ugt_f32(0x0.5, 0x0.5) == false +; run: %fcmp_ugt_f32(0x1.0, 0x1.0) == false +; run: %fcmp_ugt_f32(-0x1.0, 0x1.0) == false +; run: %fcmp_ugt_f32(0x1.0, -0x1.0) == true +; run: %fcmp_ugt_f32(0x0.5, 0x1.0) == false +; run: %fcmp_ugt_f32(0x1.5, 0x2.9) == false +; run: %fcmp_ugt_f32(0x1.1p10, 0x1.4p1) == true +; run: %fcmp_ugt_f32(0x1.4cccccp0, 0x1.8p0) == false +; run: %fcmp_ugt_f32(0x1.b33334p0, 0x1.99999ap-2) == true +; run: %fcmp_ugt_f32(0x1.333334p-1, 0x1.666666p1) == false +; run: %fcmp_ugt_f32(-0x0.5, -0x1.0) == true +; run: %fcmp_ugt_f32(-0x1.5, -0x2.9) == true +; run: %fcmp_ugt_f32(-0x1.1p10, -0x1.333334p-1) == false +; run: %fcmp_ugt_f32(-0x1.99999ap-2, -0x1.4cccccp0) == true +; run: %fcmp_ugt_f32(-0x1.8p0, -0x1.b33334p0) == true +; run: %fcmp_ugt_f32(-0x1.4p1, -0x1.666666p1) == true +; run: %fcmp_ugt_f32(0x0.5, -0x1.0) == true +; run: %fcmp_ugt_f32(0x1.b33334p0, -0x1.b33334p0) == true + +; Zeroes +; run: %fcmp_ugt_f32(0x0.0, 0x0.0) == false +; run: %fcmp_ugt_f32(-0x0.0, -0x0.0) == false +; run: %fcmp_ugt_f32(0x0.0, -0x0.0) == false +; run: %fcmp_ugt_f32(-0x0.0, 0x0.0) == false + +; Infinities +; run: %fcmp_ugt_f32(Inf, Inf) == false +; run: %fcmp_ugt_f32(-Inf, -Inf) == false +; run: %fcmp_ugt_f32(Inf, -Inf) == true +; run: %fcmp_ugt_f32(-Inf, Inf) == false + +; Inf/Zero +; run: %fcmp_ugt_f32(0x0.0, Inf) == false +; run: %fcmp_ugt_f32(-0x0.0, Inf) == false +; run: %fcmp_ugt_f32(0x0.0, -Inf) == true +; run: %fcmp_ugt_f32(-0x0.0, -Inf) == true +; run: %fcmp_ugt_f32(Inf, 0x0.0) == true +; run: %fcmp_ugt_f32(Inf, -0x0.0) == true +; run: %fcmp_ugt_f32(-Inf, 0x0.0) == false +; run: %fcmp_ugt_f32(-Inf, -0x0.0) == false + +; Epsilon / Max / Min Positive +; run: %fcmp_ugt_f32(0x1.0p-23, 0x1.0p-23) == false +; run: %fcmp_ugt_f32(0x1.fffffep127, 0x1.fffffep127) == false +; run: %fcmp_ugt_f32(0x1.0p-126, 0x1.0p-126) == false +; run: %fcmp_ugt_f32(0x1.0p-23, 0x1.fffffep127) == false +; run: %fcmp_ugt_f32(0x1.0p-23, 0x1.0p-126) == true +; run: %fcmp_ugt_f32(0x1.0p-126, 0x1.fffffep127) == false + +; Subnormals +; run: %fcmp_ugt_f32(0x0.800002p-126, -0x0.800002p-126) == true +; run: %fcmp_ugt_f32(-0x0.800002p-126, 0x0.800002p-126) == false +; run: %fcmp_ugt_f32(0x0.800002p-126, 0x0.0) == true +; run: %fcmp_ugt_f32(-0x0.800002p-126, 0x0.0) == false +; run: %fcmp_ugt_f32(0x0.800002p-126, -0x0.0) == true +; run: %fcmp_ugt_f32(-0x0.800002p-126, -0x0.0) == false +; run: %fcmp_ugt_f32(0x0.0, 0x0.800002p-126) == false +; run: %fcmp_ugt_f32(0x0.0, -0x0.800002p-126) == true +; run: %fcmp_ugt_f32(-0x0.0, 0x0.800002p-126) == false +; run: %fcmp_ugt_f32(-0x0.0, -0x0.800002p-126) == true + +; NaN's +; run: %fcmp_ugt_f32(+NaN, +NaN) == true +; run: %fcmp_ugt_f32(-NaN, -NaN) == true +; run: %fcmp_ugt_f32(+NaN, -NaN) == true +; run: %fcmp_ugt_f32(-NaN, +NaN) == true + +; run: %fcmp_ugt_f32(+NaN, -0x1.0) == true +; run: %fcmp_ugt_f32(-NaN, -0x1.0) == true +; run: %fcmp_ugt_f32(+NaN, 0x1.0) == true +; run: %fcmp_ugt_f32(-NaN, 0x1.0) == true +; run: %fcmp_ugt_f32(+NaN, -0x0.0) == true +; run: %fcmp_ugt_f32(-NaN, -0x0.0) == true +; run: %fcmp_ugt_f32(+NaN, 0x0.0) == true +; run: %fcmp_ugt_f32(-NaN, 0x0.0) == true +; run: %fcmp_ugt_f32(+NaN, -Inf) == true +; run: %fcmp_ugt_f32(-NaN, -Inf) == true +; run: %fcmp_ugt_f32(+NaN, Inf) == true +; run: %fcmp_ugt_f32(-NaN, Inf) == true +; run: %fcmp_ugt_f32(-0x0.0, +NaN) == true +; run: %fcmp_ugt_f32(-0x0.0, -NaN) == true +; run: %fcmp_ugt_f32(0x0.0, +NaN) == true +; run: %fcmp_ugt_f32(0x0.0, -NaN) == true +; run: %fcmp_ugt_f32(-Inf, +NaN) == true +; run: %fcmp_ugt_f32(-Inf, -NaN) == true +; run: %fcmp_ugt_f32(Inf, +NaN) == true +; run: %fcmp_ugt_f32(Inf, -NaN) == true + +; run: %fcmp_ugt_f32(+NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ugt_f32(-NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ugt_f32(+NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ugt_f32(-NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ugt_f32(+NaN:0x1, +NaN) == true +; run: %fcmp_ugt_f32(+NaN:0x1, -NaN) == true +; run: %fcmp_ugt_f32(-NaN:0x1, -NaN) == true +; run: %fcmp_ugt_f32(-NaN:0x1, +NaN) == true + +; run: %fcmp_ugt_f32(+NaN:0x80001, +NaN:0x80001) == true +; run: %fcmp_ugt_f32(-NaN:0x80001, -NaN:0x80001) == true +; run: %fcmp_ugt_f32(+NaN:0x80001, -NaN:0x80001) == true +; run: %fcmp_ugt_f32(-NaN:0x80001, +NaN:0x80001) == true +; run: %fcmp_ugt_f32(+NaN:0x80001, +NaN) == true +; run: %fcmp_ugt_f32(+NaN:0x80001, -NaN) == true +; run: %fcmp_ugt_f32(-NaN:0x80001, -NaN) == true +; run: %fcmp_ugt_f32(-NaN:0x80001, +NaN) == true + +; sNaN's +; run: %fcmp_ugt_f32(+sNaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ugt_f32(-sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ugt_f32(+sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ugt_f32(-sNaN:0x1, +sNaN:0x1) == true + +; run: %fcmp_ugt_f32(+sNaN:0x1, -0x1.0) == true +; run: %fcmp_ugt_f32(-sNaN:0x1, -0x1.0) == true +; run: %fcmp_ugt_f32(+sNaN:0x1, 0x1.0) == true +; run: %fcmp_ugt_f32(-sNaN:0x1, 0x1.0) == true +; run: %fcmp_ugt_f32(+sNaN:0x1, -0x0.0) == true +; run: %fcmp_ugt_f32(-sNaN:0x1, -0x0.0) == true +; run: %fcmp_ugt_f32(+sNaN:0x1, 0x0.0) == true +; run: %fcmp_ugt_f32(-sNaN:0x1, 0x0.0) == true +; run: %fcmp_ugt_f32(+sNaN:0x1, -Inf) == true +; run: %fcmp_ugt_f32(-sNaN:0x1, -Inf) == true +; run: %fcmp_ugt_f32(+sNaN:0x1, Inf) == true +; run: %fcmp_ugt_f32(-sNaN:0x1, Inf) == true +; run: %fcmp_ugt_f32(-0x0.0, +sNaN:0x1) == true +; run: %fcmp_ugt_f32(-0x0.0, -sNaN:0x1) == true +; run: %fcmp_ugt_f32(0x0.0, +sNaN:0x1) == true +; run: %fcmp_ugt_f32(0x0.0, -sNaN:0x1) == true +; run: %fcmp_ugt_f32(-Inf, +sNaN:0x1) == true +; run: %fcmp_ugt_f32(-Inf, -sNaN:0x1) == true +; run: %fcmp_ugt_f32(Inf, +sNaN:0x1) == true +; run: %fcmp_ugt_f32(Inf, -sNaN:0x1) == true + +; run: %fcmp_ugt_f32(+sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ugt_f32(-sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ugt_f32(+sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ugt_f32(-sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ugt_f32(+NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ugt_f32(-NaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ugt_f32(-NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ugt_f32(+NaN:0x1, -sNaN:0x1) == true + +; run: %fcmp_ugt_f32(+sNaN:0x80001, +sNaN:0x80001) == true +; run: %fcmp_ugt_f32(-sNaN:0x80001, -sNaN:0x80001) == true +; run: %fcmp_ugt_f32(+sNaN:0x80001, -sNaN:0x80001) == true +; run: %fcmp_ugt_f32(-sNaN:0x80001, +sNaN:0x80001) == true +; run: %fcmp_ugt_f32(+sNaN:0x80001, +sNaN:0x1) == true +; run: %fcmp_ugt_f32(+sNaN:0x80001, -sNaN:0x1) == true +; run: %fcmp_ugt_f32(-sNaN:0x80001, -sNaN:0x1) == true +; run: %fcmp_ugt_f32(-sNaN:0x80001, +sNaN:0x1) == true + + +function %fcmp_ugt_f64(f64, f64) -> b1 { +block0(v0: f64, v1: f64): + v2 = fcmp ugt v0, v1 + return v2 +} +; run: %fcmp_ugt_f64(0x0.5, 0x0.5) == false +; run: %fcmp_ugt_f64(0x1.0, 0x1.0) == false +; run: %fcmp_ugt_f64(-0x1.0, 0x1.0) == false +; run: %fcmp_ugt_f64(0x1.0, -0x1.0) == true +; run: %fcmp_ugt_f64(0x0.5, 0x1.0) == false +; run: %fcmp_ugt_f64(0x1.5, 0x2.9) == false +; run: %fcmp_ugt_f64(0x1.1p10, 0x1.4p1) == true +; run: %fcmp_ugt_f64(0x1.4cccccccccccdp0, 0x1.8p0) == false +; run: %fcmp_ugt_f64(0x1.b333333333333p0, 0x1.999999999999ap-2) == true +; run: %fcmp_ugt_f64(0x1.3333333333333p-1, 0x1.6666666666666p1) == false +; run: %fcmp_ugt_f64(-0x0.5, -0x1.0) == true +; run: %fcmp_ugt_f64(-0x1.5, -0x2.9) == true +; run: %fcmp_ugt_f64(-0x1.1p10, -0x1.3333333333333p-1) == false +; run: %fcmp_ugt_f64(-0x1.999999999999ap-2, -0x1.4cccccccccccdp0) == true +; run: %fcmp_ugt_f64(-0x1.8p0, -0x1.b333333333333p0) == true +; run: %fcmp_ugt_f64(-0x1.4p1, -0x1.6666666666666p1) == true +; run: %fcmp_ugt_f64(0x0.5, -0x1.0) == true +; run: %fcmp_ugt_f64(0x1.b333333333333p0, -0x1.b333333333333p0) == true + + +; Zeroes +; run: %fcmp_ugt_f64(0x0.0, 0x0.0) == false +; run: %fcmp_ugt_f64(-0x0.0, -0x0.0) == false +; run: %fcmp_ugt_f64(0x0.0, -0x0.0) == false +; run: %fcmp_ugt_f64(-0x0.0, 0x0.0) == false + +; Infinities +; run: %fcmp_ugt_f64(Inf, Inf) == false +; run: %fcmp_ugt_f64(-Inf, -Inf) == false +; run: %fcmp_ugt_f64(Inf, -Inf) == true +; run: %fcmp_ugt_f64(-Inf, Inf) == false + +; Inf/Zero +; run: %fcmp_ugt_f64(0x0.0, Inf) == false +; run: %fcmp_ugt_f64(-0x0.0, Inf) == false +; run: %fcmp_ugt_f64(0x0.0, -Inf) == true +; run: %fcmp_ugt_f64(-0x0.0, -Inf) == true +; run: %fcmp_ugt_f64(Inf, 0x0.0) == true +; run: %fcmp_ugt_f64(Inf, -0x0.0) == true +; run: %fcmp_ugt_f64(-Inf, 0x0.0) == false +; run: %fcmp_ugt_f64(-Inf, -0x0.0) == false + +; Epsilon / Max / Min Positive +; run: %fcmp_ugt_f64(0x1.0p-52, 0x1.0p-52) == false +; run: %fcmp_ugt_f64(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) == false +; run: %fcmp_ugt_f64(0x1.0p-1022, 0x1.0p-1022) == false +; run: %fcmp_ugt_f64(0x1.0p-52, 0x1.fffffffffffffp1023) == false +; run: %fcmp_ugt_f64(0x1.0p-52, 0x1.0p-1022) == true +; run: %fcmp_ugt_f64(0x1.0p-1022, 0x1.fffffffffffffp1023) == false + +; Subnormals +; run: %fcmp_ugt_f64(0x0.8p-1022, -0x0.8p-1022) == true +; run: %fcmp_ugt_f64(-0x0.8p-1022, 0x0.8p-1022) == false +; run: %fcmp_ugt_f64(0x0.8p-1022, 0x0.0) == true +; run: %fcmp_ugt_f64(-0x0.8p-1022, 0x0.0) == false +; run: %fcmp_ugt_f64(0x0.8p-1022, -0x0.0) == true +; run: %fcmp_ugt_f64(-0x0.8p-1022, -0x0.0) == false +; run: %fcmp_ugt_f64(0x0.0, 0x0.8p-1022) == false +; run: %fcmp_ugt_f64(0x0.0, -0x0.8p-1022) == true +; run: %fcmp_ugt_f64(-0x0.0, 0x0.8p-1022) == false +; run: %fcmp_ugt_f64(-0x0.0, -0x0.8p-1022) == true + +; NaN's +; run: %fcmp_ugt_f64(+NaN, +NaN) == true +; run: %fcmp_ugt_f64(-NaN, -NaN) == true +; run: %fcmp_ugt_f64(+NaN, -NaN) == true +; run: %fcmp_ugt_f64(-NaN, +NaN) == true + +; run: %fcmp_ugt_f64(+NaN, -0x1.0) == true +; run: %fcmp_ugt_f64(-NaN, -0x1.0) == true +; run: %fcmp_ugt_f64(+NaN, 0x1.0) == true +; run: %fcmp_ugt_f64(-NaN, 0x1.0) == true +; run: %fcmp_ugt_f64(+NaN, -0x0.0) == true +; run: %fcmp_ugt_f64(-NaN, -0x0.0) == true +; run: %fcmp_ugt_f64(+NaN, 0x0.0) == true +; run: %fcmp_ugt_f64(-NaN, 0x0.0) == true +; run: %fcmp_ugt_f64(+NaN, -Inf) == true +; run: %fcmp_ugt_f64(-NaN, -Inf) == true +; run: %fcmp_ugt_f64(+NaN, Inf) == true +; run: %fcmp_ugt_f64(-NaN, Inf) == true +; run: %fcmp_ugt_f64(-0x0.0, +NaN) == true +; run: %fcmp_ugt_f64(-0x0.0, -NaN) == true +; run: %fcmp_ugt_f64(0x0.0, +NaN) == true +; run: %fcmp_ugt_f64(0x0.0, -NaN) == true +; run: %fcmp_ugt_f64(-Inf, +NaN) == true +; run: %fcmp_ugt_f64(-Inf, -NaN) == true +; run: %fcmp_ugt_f64(Inf, +NaN) == true +; run: %fcmp_ugt_f64(Inf, -NaN) == true + +; run: %fcmp_ugt_f64(+NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ugt_f64(-NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ugt_f64(+NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ugt_f64(-NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ugt_f64(+NaN:0x1, +NaN) == true +; run: %fcmp_ugt_f64(+NaN:0x1, -NaN) == true +; run: %fcmp_ugt_f64(-NaN:0x1, -NaN) == true +; run: %fcmp_ugt_f64(-NaN:0x1, +NaN) == true + +; run: %fcmp_ugt_f64(+NaN:0x800000000001, +NaN:0x800000000001) == true +; run: %fcmp_ugt_f64(-NaN:0x800000000001, -NaN:0x800000000001) == true +; run: %fcmp_ugt_f64(+NaN:0x800000000001, -NaN:0x800000000001) == true +; run: %fcmp_ugt_f64(-NaN:0x800000000001, +NaN:0x800000000001) == true +; run: %fcmp_ugt_f64(+NaN:0x800000000001, +NaN) == true +; run: %fcmp_ugt_f64(+NaN:0x800000000001, -NaN) == true +; run: %fcmp_ugt_f64(-NaN:0x800000000001, -NaN) == true +; run: %fcmp_ugt_f64(-NaN:0x800000000001, +NaN) == true + +; sNaN's +; run: %fcmp_ugt_f64(+sNaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ugt_f64(-sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ugt_f64(+sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ugt_f64(-sNaN:0x1, +sNaN:0x1) == true + +; run: %fcmp_ugt_f64(+sNaN:0x1, -0x1.0) == true +; run: %fcmp_ugt_f64(-sNaN:0x1, -0x1.0) == true +; run: %fcmp_ugt_f64(+sNaN:0x1, 0x1.0) == true +; run: %fcmp_ugt_f64(-sNaN:0x1, 0x1.0) == true +; run: %fcmp_ugt_f64(+sNaN:0x1, -0x0.0) == true +; run: %fcmp_ugt_f64(-sNaN:0x1, -0x0.0) == true +; run: %fcmp_ugt_f64(+sNaN:0x1, 0x0.0) == true +; run: %fcmp_ugt_f64(-sNaN:0x1, 0x0.0) == true +; run: %fcmp_ugt_f64(+sNaN:0x1, -Inf) == true +; run: %fcmp_ugt_f64(-sNaN:0x1, -Inf) == true +; run: %fcmp_ugt_f64(+sNaN:0x1, Inf) == true +; run: %fcmp_ugt_f64(-sNaN:0x1, Inf) == true +; run: %fcmp_ugt_f64(-0x0.0, +sNaN:0x1) == true +; run: %fcmp_ugt_f64(-0x0.0, -sNaN:0x1) == true +; run: %fcmp_ugt_f64(0x0.0, +sNaN:0x1) == true +; run: %fcmp_ugt_f64(0x0.0, -sNaN:0x1) == true +; run: %fcmp_ugt_f64(-Inf, +sNaN:0x1) == true +; run: %fcmp_ugt_f64(-Inf, -sNaN:0x1) == true +; run: %fcmp_ugt_f64(Inf, +sNaN:0x1) == true +; run: %fcmp_ugt_f64(Inf, -sNaN:0x1) == true + +; run: %fcmp_ugt_f64(+sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ugt_f64(-sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ugt_f64(+sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ugt_f64(-sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ugt_f64(+NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ugt_f64(-NaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ugt_f64(-NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ugt_f64(+NaN:0x1, -sNaN:0x1) == true + +; run: %fcmp_ugt_f64(+sNaN:0x800000000001, +sNaN:0x800000000001) == true +; run: %fcmp_ugt_f64(-sNaN:0x800000000001, -sNaN:0x800000000001) == true +; run: %fcmp_ugt_f64(+sNaN:0x800000000001, -sNaN:0x800000000001) == true +; run: %fcmp_ugt_f64(-sNaN:0x800000000001, +sNaN:0x800000000001) == true +; run: %fcmp_ugt_f64(+sNaN:0x800000000001, +sNaN:0x1) == true +; run: %fcmp_ugt_f64(+sNaN:0x800000000001, -sNaN:0x1) == true +; run: %fcmp_ugt_f64(-sNaN:0x800000000001, -sNaN:0x1) == true +; run: %fcmp_ugt_f64(-sNaN:0x800000000001, +sNaN:0x1) == true diff --git a/cranelift/filetests/filetests/runtests/fcmp-ule.clif b/cranelift/filetests/filetests/runtests/fcmp-ule.clif new file mode 100644 index 0000000000..91b4dd90ca --- /dev/null +++ b/cranelift/filetests/filetests/runtests/fcmp-ule.clif @@ -0,0 +1,318 @@ +test interpret +test run +target x86_64 +target s390x + +function %fcmp_ule_f32(f32, f32) -> b1 { +block0(v0: f32, v1: f32): + v2 = fcmp ule v0, v1 + return v2 +} +; run: %fcmp_ule_f32(0x0.5, 0x0.5) == true +; run: %fcmp_ule_f32(0x1.0, 0x1.0) == true +; run: %fcmp_ule_f32(-0x1.0, 0x1.0) == true +; run: %fcmp_ule_f32(0x1.0, -0x1.0) == false +; run: %fcmp_ule_f32(0x0.5, 0x1.0) == true +; run: %fcmp_ule_f32(0x1.5, 0x2.9) == true +; run: %fcmp_ule_f32(0x1.1p10, 0x1.4p1) == false +; run: %fcmp_ule_f32(0x1.4cccccp0, 0x1.8p0) == true +; run: %fcmp_ule_f32(0x1.b33334p0, 0x1.99999ap-2) == false +; run: %fcmp_ule_f32(0x1.333334p-1, 0x1.666666p1) == true +; run: %fcmp_ule_f32(-0x0.5, -0x1.0) == false +; run: %fcmp_ule_f32(-0x1.5, -0x2.9) == false +; run: %fcmp_ule_f32(-0x1.1p10, -0x1.333334p-1) == true +; run: %fcmp_ule_f32(-0x1.99999ap-2, -0x1.4cccccp0) == false +; run: %fcmp_ule_f32(-0x1.8p0, -0x1.b33334p0) == false +; run: %fcmp_ule_f32(-0x1.4p1, -0x1.666666p1) == false +; run: %fcmp_ule_f32(0x0.5, -0x1.0) == false +; run: %fcmp_ule_f32(0x1.b33334p0, -0x1.b33334p0) == false + +; Zeroes +; run: %fcmp_ule_f32(0x0.0, 0x0.0) == true +; run: %fcmp_ule_f32(-0x0.0, -0x0.0) == true +; run: %fcmp_ule_f32(0x0.0, -0x0.0) == true +; run: %fcmp_ule_f32(-0x0.0, 0x0.0) == true + +; Infinities +; run: %fcmp_ule_f32(Inf, Inf) == true +; run: %fcmp_ule_f32(-Inf, -Inf) == true +; run: %fcmp_ule_f32(Inf, -Inf) == false +; run: %fcmp_ule_f32(-Inf, Inf) == true + +; Inf/Zero +; run: %fcmp_ule_f32(0x0.0, Inf) == true +; run: %fcmp_ule_f32(-0x0.0, Inf) == true +; run: %fcmp_ule_f32(0x0.0, -Inf) == false +; run: %fcmp_ule_f32(-0x0.0, -Inf) == false +; run: %fcmp_ule_f32(Inf, 0x0.0) == false +; run: %fcmp_ule_f32(Inf, -0x0.0) == false +; run: %fcmp_ule_f32(-Inf, 0x0.0) == true +; run: %fcmp_ule_f32(-Inf, -0x0.0) == true + +; Epsilon / Max / Min Positive +; run: %fcmp_ule_f32(0x1.0p-23, 0x1.0p-23) == true +; run: %fcmp_ule_f32(0x1.fffffep127, 0x1.fffffep127) == true +; run: %fcmp_ule_f32(0x1.0p-126, 0x1.0p-126) == true +; run: %fcmp_ule_f32(0x1.0p-23, 0x1.fffffep127) == true +; run: %fcmp_ule_f32(0x1.0p-23, 0x1.0p-126) == false +; run: %fcmp_ule_f32(0x1.0p-126, 0x1.fffffep127) == true + +; Subnormals +; run: %fcmp_ule_f32(0x0.800002p-126, -0x0.800002p-126) == false +; run: %fcmp_ule_f32(-0x0.800002p-126, 0x0.800002p-126) == true +; run: %fcmp_ule_f32(0x0.800002p-126, 0x0.0) == false +; run: %fcmp_ule_f32(-0x0.800002p-126, 0x0.0) == true +; run: %fcmp_ule_f32(0x0.800002p-126, -0x0.0) == false +; run: %fcmp_ule_f32(-0x0.800002p-126, -0x0.0) == true +; run: %fcmp_ule_f32(0x0.0, 0x0.800002p-126) == true +; run: %fcmp_ule_f32(0x0.0, -0x0.800002p-126) == false +; run: %fcmp_ule_f32(-0x0.0, 0x0.800002p-126) == true +; run: %fcmp_ule_f32(-0x0.0, -0x0.800002p-126) == false + +; NaN's +; run: %fcmp_ule_f32(+NaN, +NaN) == true +; run: %fcmp_ule_f32(-NaN, -NaN) == true +; run: %fcmp_ule_f32(+NaN, -NaN) == true +; run: %fcmp_ule_f32(-NaN, +NaN) == true + +; run: %fcmp_ule_f32(+NaN, -0x1.0) == true +; run: %fcmp_ule_f32(-NaN, -0x1.0) == true +; run: %fcmp_ule_f32(+NaN, 0x1.0) == true +; run: %fcmp_ule_f32(-NaN, 0x1.0) == true +; run: %fcmp_ule_f32(+NaN, -0x0.0) == true +; run: %fcmp_ule_f32(-NaN, -0x0.0) == true +; run: %fcmp_ule_f32(+NaN, 0x0.0) == true +; run: %fcmp_ule_f32(-NaN, 0x0.0) == true +; run: %fcmp_ule_f32(+NaN, -Inf) == true +; run: %fcmp_ule_f32(-NaN, -Inf) == true +; run: %fcmp_ule_f32(+NaN, Inf) == true +; run: %fcmp_ule_f32(-NaN, Inf) == true +; run: %fcmp_ule_f32(-0x0.0, +NaN) == true +; run: %fcmp_ule_f32(-0x0.0, -NaN) == true +; run: %fcmp_ule_f32(0x0.0, +NaN) == true +; run: %fcmp_ule_f32(0x0.0, -NaN) == true +; run: %fcmp_ule_f32(-Inf, +NaN) == true +; run: %fcmp_ule_f32(-Inf, -NaN) == true +; run: %fcmp_ule_f32(Inf, +NaN) == true +; run: %fcmp_ule_f32(Inf, -NaN) == true + +; run: %fcmp_ule_f32(+NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ule_f32(-NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ule_f32(+NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ule_f32(-NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ule_f32(+NaN:0x1, +NaN) == true +; run: %fcmp_ule_f32(+NaN:0x1, -NaN) == true +; run: %fcmp_ule_f32(-NaN:0x1, -NaN) == true +; run: %fcmp_ule_f32(-NaN:0x1, +NaN) == true + +; run: %fcmp_ule_f32(+NaN:0x80001, +NaN:0x80001) == true +; run: %fcmp_ule_f32(-NaN:0x80001, -NaN:0x80001) == true +; run: %fcmp_ule_f32(+NaN:0x80001, -NaN:0x80001) == true +; run: %fcmp_ule_f32(-NaN:0x80001, +NaN:0x80001) == true +; run: %fcmp_ule_f32(+NaN:0x80001, +NaN) == true +; run: %fcmp_ule_f32(+NaN:0x80001, -NaN) == true +; run: %fcmp_ule_f32(-NaN:0x80001, -NaN) == true +; run: %fcmp_ule_f32(-NaN:0x80001, +NaN) == true + +; sNaN's +; run: %fcmp_ule_f32(+sNaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ule_f32(-sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ule_f32(+sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ule_f32(-sNaN:0x1, +sNaN:0x1) == true + +; run: %fcmp_ule_f32(+sNaN:0x1, -0x1.0) == true +; run: %fcmp_ule_f32(-sNaN:0x1, -0x1.0) == true +; run: %fcmp_ule_f32(+sNaN:0x1, 0x1.0) == true +; run: %fcmp_ule_f32(-sNaN:0x1, 0x1.0) == true +; run: %fcmp_ule_f32(+sNaN:0x1, -0x0.0) == true +; run: %fcmp_ule_f32(-sNaN:0x1, -0x0.0) == true +; run: %fcmp_ule_f32(+sNaN:0x1, 0x0.0) == true +; run: %fcmp_ule_f32(-sNaN:0x1, 0x0.0) == true +; run: %fcmp_ule_f32(+sNaN:0x1, -Inf) == true +; run: %fcmp_ule_f32(-sNaN:0x1, -Inf) == true +; run: %fcmp_ule_f32(+sNaN:0x1, Inf) == true +; run: %fcmp_ule_f32(-sNaN:0x1, Inf) == true +; run: %fcmp_ule_f32(-0x0.0, +sNaN:0x1) == true +; run: %fcmp_ule_f32(-0x0.0, -sNaN:0x1) == true +; run: %fcmp_ule_f32(0x0.0, +sNaN:0x1) == true +; run: %fcmp_ule_f32(0x0.0, -sNaN:0x1) == true +; run: %fcmp_ule_f32(-Inf, +sNaN:0x1) == true +; run: %fcmp_ule_f32(-Inf, -sNaN:0x1) == true +; run: %fcmp_ule_f32(Inf, +sNaN:0x1) == true +; run: %fcmp_ule_f32(Inf, -sNaN:0x1) == true + +; run: %fcmp_ule_f32(+sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ule_f32(-sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ule_f32(+sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ule_f32(-sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ule_f32(+NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ule_f32(-NaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ule_f32(-NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ule_f32(+NaN:0x1, -sNaN:0x1) == true + +; run: %fcmp_ule_f32(+sNaN:0x80001, +sNaN:0x80001) == true +; run: %fcmp_ule_f32(-sNaN:0x80001, -sNaN:0x80001) == true +; run: %fcmp_ule_f32(+sNaN:0x80001, -sNaN:0x80001) == true +; run: %fcmp_ule_f32(-sNaN:0x80001, +sNaN:0x80001) == true +; run: %fcmp_ule_f32(+sNaN:0x80001, +sNaN:0x1) == true +; run: %fcmp_ule_f32(+sNaN:0x80001, -sNaN:0x1) == true +; run: %fcmp_ule_f32(-sNaN:0x80001, -sNaN:0x1) == true +; run: %fcmp_ule_f32(-sNaN:0x80001, +sNaN:0x1) == true + + +function %fcmp_ule_f64(f64, f64) -> b1 { +block0(v0: f64, v1: f64): + v2 = fcmp ule v0, v1 + return v2 +} +; run: %fcmp_ule_f64(0x0.5, 0x0.5) == true +; run: %fcmp_ule_f64(0x1.0, 0x1.0) == true +; run: %fcmp_ule_f64(-0x1.0, 0x1.0) == true +; run: %fcmp_ule_f64(0x1.0, -0x1.0) == false +; run: %fcmp_ule_f64(0x0.5, 0x1.0) == true +; run: %fcmp_ule_f64(0x1.5, 0x2.9) == true +; run: %fcmp_ule_f64(0x1.1p10, 0x1.4p1) == false +; run: %fcmp_ule_f64(0x1.4cccccccccccdp0, 0x1.8p0) == true +; run: %fcmp_ule_f64(0x1.b333333333333p0, 0x1.999999999999ap-2) == false +; run: %fcmp_ule_f64(0x1.3333333333333p-1, 0x1.6666666666666p1) == true +; run: %fcmp_ule_f64(-0x0.5, -0x1.0) == false +; run: %fcmp_ule_f64(-0x1.5, -0x2.9) == false +; run: %fcmp_ule_f64(-0x1.1p10, -0x1.3333333333333p-1) == true +; run: %fcmp_ule_f64(-0x1.999999999999ap-2, -0x1.4cccccccccccdp0) == false +; run: %fcmp_ule_f64(-0x1.8p0, -0x1.b333333333333p0) == false +; run: %fcmp_ule_f64(-0x1.4p1, -0x1.6666666666666p1) == false +; run: %fcmp_ule_f64(0x0.5, -0x1.0) == false +; run: %fcmp_ule_f64(0x1.b333333333333p0, -0x1.b333333333333p0) == false + + +; Zeroes +; run: %fcmp_ule_f64(0x0.0, 0x0.0) == true +; run: %fcmp_ule_f64(-0x0.0, -0x0.0) == true +; run: %fcmp_ule_f64(0x0.0, -0x0.0) == true +; run: %fcmp_ule_f64(-0x0.0, 0x0.0) == true + +; Infinities +; run: %fcmp_ule_f64(Inf, Inf) == true +; run: %fcmp_ule_f64(-Inf, -Inf) == true +; run: %fcmp_ule_f64(Inf, -Inf) == false +; run: %fcmp_ule_f64(-Inf, Inf) == true + +; Inf/Zero +; run: %fcmp_ule_f64(0x0.0, Inf) == true +; run: %fcmp_ule_f64(-0x0.0, Inf) == true +; run: %fcmp_ule_f64(0x0.0, -Inf) == false +; run: %fcmp_ule_f64(-0x0.0, -Inf) == false +; run: %fcmp_ule_f64(Inf, 0x0.0) == false +; run: %fcmp_ule_f64(Inf, -0x0.0) == false +; run: %fcmp_ule_f64(-Inf, 0x0.0) == true +; run: %fcmp_ule_f64(-Inf, -0x0.0) == true + +; Epsilon / Max / Min Positive +; run: %fcmp_ule_f64(0x1.0p-52, 0x1.0p-52) == true +; run: %fcmp_ule_f64(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) == true +; run: %fcmp_ule_f64(0x1.0p-1022, 0x1.0p-1022) == true +; run: %fcmp_ule_f64(0x1.0p-52, 0x1.fffffffffffffp1023) == true +; run: %fcmp_ule_f64(0x1.0p-52, 0x1.0p-1022) == false +; run: %fcmp_ule_f64(0x1.0p-1022, 0x1.fffffffffffffp1023) == true + +; Subnormals +; run: %fcmp_ule_f64(0x0.8p-1022, -0x0.8p-1022) == false +; run: %fcmp_ule_f64(-0x0.8p-1022, 0x0.8p-1022) == true +; run: %fcmp_ule_f64(0x0.8p-1022, 0x0.0) == false +; run: %fcmp_ule_f64(-0x0.8p-1022, 0x0.0) == true +; run: %fcmp_ule_f64(0x0.8p-1022, -0x0.0) == false +; run: %fcmp_ule_f64(-0x0.8p-1022, -0x0.0) == true +; run: %fcmp_ule_f64(0x0.0, 0x0.8p-1022) == true +; run: %fcmp_ule_f64(0x0.0, -0x0.8p-1022) == false +; run: %fcmp_ule_f64(-0x0.0, 0x0.8p-1022) == true +; run: %fcmp_ule_f64(-0x0.0, -0x0.8p-1022) == false + +; NaN's +; run: %fcmp_ule_f64(+NaN, +NaN) == true +; run: %fcmp_ule_f64(-NaN, -NaN) == true +; run: %fcmp_ule_f64(+NaN, -NaN) == true +; run: %fcmp_ule_f64(-NaN, +NaN) == true + +; run: %fcmp_ule_f64(+NaN, -0x1.0) == true +; run: %fcmp_ule_f64(-NaN, -0x1.0) == true +; run: %fcmp_ule_f64(+NaN, 0x1.0) == true +; run: %fcmp_ule_f64(-NaN, 0x1.0) == true +; run: %fcmp_ule_f64(+NaN, -0x0.0) == true +; run: %fcmp_ule_f64(-NaN, -0x0.0) == true +; run: %fcmp_ule_f64(+NaN, 0x0.0) == true +; run: %fcmp_ule_f64(-NaN, 0x0.0) == true +; run: %fcmp_ule_f64(+NaN, -Inf) == true +; run: %fcmp_ule_f64(-NaN, -Inf) == true +; run: %fcmp_ule_f64(+NaN, Inf) == true +; run: %fcmp_ule_f64(-NaN, Inf) == true +; run: %fcmp_ule_f64(-0x0.0, +NaN) == true +; run: %fcmp_ule_f64(-0x0.0, -NaN) == true +; run: %fcmp_ule_f64(0x0.0, +NaN) == true +; run: %fcmp_ule_f64(0x0.0, -NaN) == true +; run: %fcmp_ule_f64(-Inf, +NaN) == true +; run: %fcmp_ule_f64(-Inf, -NaN) == true +; run: %fcmp_ule_f64(Inf, +NaN) == true +; run: %fcmp_ule_f64(Inf, -NaN) == true + +; run: %fcmp_ule_f64(+NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ule_f64(-NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ule_f64(+NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ule_f64(-NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ule_f64(+NaN:0x1, +NaN) == true +; run: %fcmp_ule_f64(+NaN:0x1, -NaN) == true +; run: %fcmp_ule_f64(-NaN:0x1, -NaN) == true +; run: %fcmp_ule_f64(-NaN:0x1, +NaN) == true + +; run: %fcmp_ule_f64(+NaN:0x800000000001, +NaN:0x800000000001) == true +; run: %fcmp_ule_f64(-NaN:0x800000000001, -NaN:0x800000000001) == true +; run: %fcmp_ule_f64(+NaN:0x800000000001, -NaN:0x800000000001) == true +; run: %fcmp_ule_f64(-NaN:0x800000000001, +NaN:0x800000000001) == true +; run: %fcmp_ule_f64(+NaN:0x800000000001, +NaN) == true +; run: %fcmp_ule_f64(+NaN:0x800000000001, -NaN) == true +; run: %fcmp_ule_f64(-NaN:0x800000000001, -NaN) == true +; run: %fcmp_ule_f64(-NaN:0x800000000001, +NaN) == true + +; sNaN's +; run: %fcmp_ule_f64(+sNaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ule_f64(-sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ule_f64(+sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ule_f64(-sNaN:0x1, +sNaN:0x1) == true + +; run: %fcmp_ule_f64(+sNaN:0x1, -0x1.0) == true +; run: %fcmp_ule_f64(-sNaN:0x1, -0x1.0) == true +; run: %fcmp_ule_f64(+sNaN:0x1, 0x1.0) == true +; run: %fcmp_ule_f64(-sNaN:0x1, 0x1.0) == true +; run: %fcmp_ule_f64(+sNaN:0x1, -0x0.0) == true +; run: %fcmp_ule_f64(-sNaN:0x1, -0x0.0) == true +; run: %fcmp_ule_f64(+sNaN:0x1, 0x0.0) == true +; run: %fcmp_ule_f64(-sNaN:0x1, 0x0.0) == true +; run: %fcmp_ule_f64(+sNaN:0x1, -Inf) == true +; run: %fcmp_ule_f64(-sNaN:0x1, -Inf) == true +; run: %fcmp_ule_f64(+sNaN:0x1, Inf) == true +; run: %fcmp_ule_f64(-sNaN:0x1, Inf) == true +; run: %fcmp_ule_f64(-0x0.0, +sNaN:0x1) == true +; run: %fcmp_ule_f64(-0x0.0, -sNaN:0x1) == true +; run: %fcmp_ule_f64(0x0.0, +sNaN:0x1) == true +; run: %fcmp_ule_f64(0x0.0, -sNaN:0x1) == true +; run: %fcmp_ule_f64(-Inf, +sNaN:0x1) == true +; run: %fcmp_ule_f64(-Inf, -sNaN:0x1) == true +; run: %fcmp_ule_f64(Inf, +sNaN:0x1) == true +; run: %fcmp_ule_f64(Inf, -sNaN:0x1) == true + +; run: %fcmp_ule_f64(+sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ule_f64(-sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ule_f64(+sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ule_f64(-sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ule_f64(+NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ule_f64(-NaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ule_f64(-NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ule_f64(+NaN:0x1, -sNaN:0x1) == true + +; run: %fcmp_ule_f64(+sNaN:0x800000000001, +sNaN:0x800000000001) == true +; run: %fcmp_ule_f64(-sNaN:0x800000000001, -sNaN:0x800000000001) == true +; run: %fcmp_ule_f64(+sNaN:0x800000000001, -sNaN:0x800000000001) == true +; run: %fcmp_ule_f64(-sNaN:0x800000000001, +sNaN:0x800000000001) == true +; run: %fcmp_ule_f64(+sNaN:0x800000000001, +sNaN:0x1) == true +; run: %fcmp_ule_f64(+sNaN:0x800000000001, -sNaN:0x1) == true +; run: %fcmp_ule_f64(-sNaN:0x800000000001, -sNaN:0x1) == true +; run: %fcmp_ule_f64(-sNaN:0x800000000001, +sNaN:0x1) == true diff --git a/cranelift/filetests/filetests/runtests/fcmp-ult.clif b/cranelift/filetests/filetests/runtests/fcmp-ult.clif new file mode 100644 index 0000000000..de277c7cd1 --- /dev/null +++ b/cranelift/filetests/filetests/runtests/fcmp-ult.clif @@ -0,0 +1,318 @@ +test interpret +test run +target x86_64 +target s390x + +function %fcmp_ult_f32(f32, f32) -> b1 { +block0(v0: f32, v1: f32): + v2 = fcmp ult v0, v1 + return v2 +} +; run: %fcmp_ult_f32(0x0.5, 0x0.5) == false +; run: %fcmp_ult_f32(0x1.0, 0x1.0) == false +; run: %fcmp_ult_f32(-0x1.0, 0x1.0) == true +; run: %fcmp_ult_f32(0x1.0, -0x1.0) == false +; run: %fcmp_ult_f32(0x0.5, 0x1.0) == true +; run: %fcmp_ult_f32(0x1.5, 0x2.9) == true +; run: %fcmp_ult_f32(0x1.1p10, 0x1.4p1) == false +; run: %fcmp_ult_f32(0x1.4cccccp0, 0x1.8p0) == true +; run: %fcmp_ult_f32(0x1.b33334p0, 0x1.99999ap-2) == false +; run: %fcmp_ult_f32(0x1.333334p-1, 0x1.666666p1) == true +; run: %fcmp_ult_f32(-0x0.5, -0x1.0) == false +; run: %fcmp_ult_f32(-0x1.5, -0x2.9) == false +; run: %fcmp_ult_f32(-0x1.1p10, -0x1.333334p-1) == true +; run: %fcmp_ult_f32(-0x1.99999ap-2, -0x1.4cccccp0) == false +; run: %fcmp_ult_f32(-0x1.8p0, -0x1.b33334p0) == false +; run: %fcmp_ult_f32(-0x1.4p1, -0x1.666666p1) == false +; run: %fcmp_ult_f32(0x0.5, -0x1.0) == false +; run: %fcmp_ult_f32(0x1.b33334p0, -0x1.b33334p0) == false + +; Zeroes +; run: %fcmp_ult_f32(0x0.0, 0x0.0) == false +; run: %fcmp_ult_f32(-0x0.0, -0x0.0) == false +; run: %fcmp_ult_f32(0x0.0, -0x0.0) == false +; run: %fcmp_ult_f32(-0x0.0, 0x0.0) == false + +; Infinities +; run: %fcmp_ult_f32(Inf, Inf) == false +; run: %fcmp_ult_f32(-Inf, -Inf) == false +; run: %fcmp_ult_f32(Inf, -Inf) == false +; run: %fcmp_ult_f32(-Inf, Inf) == true + +; Inf/Zero +; run: %fcmp_ult_f32(0x0.0, Inf) == true +; run: %fcmp_ult_f32(-0x0.0, Inf) == true +; run: %fcmp_ult_f32(0x0.0, -Inf) == false +; run: %fcmp_ult_f32(-0x0.0, -Inf) == false +; run: %fcmp_ult_f32(Inf, 0x0.0) == false +; run: %fcmp_ult_f32(Inf, -0x0.0) == false +; run: %fcmp_ult_f32(-Inf, 0x0.0) == true +; run: %fcmp_ult_f32(-Inf, -0x0.0) == true + +; Epsilon / Max / Min Positive +; run: %fcmp_ult_f32(0x1.0p-23, 0x1.0p-23) == false +; run: %fcmp_ult_f32(0x1.fffffep127, 0x1.fffffep127) == false +; run: %fcmp_ult_f32(0x1.0p-126, 0x1.0p-126) == false +; run: %fcmp_ult_f32(0x1.0p-23, 0x1.fffffep127) == true +; run: %fcmp_ult_f32(0x1.0p-23, 0x1.0p-126) == false +; run: %fcmp_ult_f32(0x1.0p-126, 0x1.fffffep127) == true + +; Subnormals +; run: %fcmp_ult_f32(0x0.800002p-126, -0x0.800002p-126) == false +; run: %fcmp_ult_f32(-0x0.800002p-126, 0x0.800002p-126) == true +; run: %fcmp_ult_f32(0x0.800002p-126, 0x0.0) == false +; run: %fcmp_ult_f32(-0x0.800002p-126, 0x0.0) == true +; run: %fcmp_ult_f32(0x0.800002p-126, -0x0.0) == false +; run: %fcmp_ult_f32(-0x0.800002p-126, -0x0.0) == true +; run: %fcmp_ult_f32(0x0.0, 0x0.800002p-126) == true +; run: %fcmp_ult_f32(0x0.0, -0x0.800002p-126) == false +; run: %fcmp_ult_f32(-0x0.0, 0x0.800002p-126) == true +; run: %fcmp_ult_f32(-0x0.0, -0x0.800002p-126) == false + +; NaN's +; run: %fcmp_ult_f32(+NaN, +NaN) == true +; run: %fcmp_ult_f32(-NaN, -NaN) == true +; run: %fcmp_ult_f32(+NaN, -NaN) == true +; run: %fcmp_ult_f32(-NaN, +NaN) == true + +; run: %fcmp_ult_f32(+NaN, -0x1.0) == true +; run: %fcmp_ult_f32(-NaN, -0x1.0) == true +; run: %fcmp_ult_f32(+NaN, 0x1.0) == true +; run: %fcmp_ult_f32(-NaN, 0x1.0) == true +; run: %fcmp_ult_f32(+NaN, -0x0.0) == true +; run: %fcmp_ult_f32(-NaN, -0x0.0) == true +; run: %fcmp_ult_f32(+NaN, 0x0.0) == true +; run: %fcmp_ult_f32(-NaN, 0x0.0) == true +; run: %fcmp_ult_f32(+NaN, -Inf) == true +; run: %fcmp_ult_f32(-NaN, -Inf) == true +; run: %fcmp_ult_f32(+NaN, Inf) == true +; run: %fcmp_ult_f32(-NaN, Inf) == true +; run: %fcmp_ult_f32(-0x0.0, +NaN) == true +; run: %fcmp_ult_f32(-0x0.0, -NaN) == true +; run: %fcmp_ult_f32(0x0.0, +NaN) == true +; run: %fcmp_ult_f32(0x0.0, -NaN) == true +; run: %fcmp_ult_f32(-Inf, +NaN) == true +; run: %fcmp_ult_f32(-Inf, -NaN) == true +; run: %fcmp_ult_f32(Inf, +NaN) == true +; run: %fcmp_ult_f32(Inf, -NaN) == true + +; run: %fcmp_ult_f32(+NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ult_f32(-NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ult_f32(+NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ult_f32(-NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ult_f32(+NaN:0x1, +NaN) == true +; run: %fcmp_ult_f32(+NaN:0x1, -NaN) == true +; run: %fcmp_ult_f32(-NaN:0x1, -NaN) == true +; run: %fcmp_ult_f32(-NaN:0x1, +NaN) == true + +; run: %fcmp_ult_f32(+NaN:0x80001, +NaN:0x80001) == true +; run: %fcmp_ult_f32(-NaN:0x80001, -NaN:0x80001) == true +; run: %fcmp_ult_f32(+NaN:0x80001, -NaN:0x80001) == true +; run: %fcmp_ult_f32(-NaN:0x80001, +NaN:0x80001) == true +; run: %fcmp_ult_f32(+NaN:0x80001, +NaN) == true +; run: %fcmp_ult_f32(+NaN:0x80001, -NaN) == true +; run: %fcmp_ult_f32(-NaN:0x80001, -NaN) == true +; run: %fcmp_ult_f32(-NaN:0x80001, +NaN) == true + +; sNaN's +; run: %fcmp_ult_f32(+sNaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ult_f32(-sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ult_f32(+sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ult_f32(-sNaN:0x1, +sNaN:0x1) == true + +; run: %fcmp_ult_f32(+sNaN:0x1, -0x1.0) == true +; run: %fcmp_ult_f32(-sNaN:0x1, -0x1.0) == true +; run: %fcmp_ult_f32(+sNaN:0x1, 0x1.0) == true +; run: %fcmp_ult_f32(-sNaN:0x1, 0x1.0) == true +; run: %fcmp_ult_f32(+sNaN:0x1, -0x0.0) == true +; run: %fcmp_ult_f32(-sNaN:0x1, -0x0.0) == true +; run: %fcmp_ult_f32(+sNaN:0x1, 0x0.0) == true +; run: %fcmp_ult_f32(-sNaN:0x1, 0x0.0) == true +; run: %fcmp_ult_f32(+sNaN:0x1, -Inf) == true +; run: %fcmp_ult_f32(-sNaN:0x1, -Inf) == true +; run: %fcmp_ult_f32(+sNaN:0x1, Inf) == true +; run: %fcmp_ult_f32(-sNaN:0x1, Inf) == true +; run: %fcmp_ult_f32(-0x0.0, +sNaN:0x1) == true +; run: %fcmp_ult_f32(-0x0.0, -sNaN:0x1) == true +; run: %fcmp_ult_f32(0x0.0, +sNaN:0x1) == true +; run: %fcmp_ult_f32(0x0.0, -sNaN:0x1) == true +; run: %fcmp_ult_f32(-Inf, +sNaN:0x1) == true +; run: %fcmp_ult_f32(-Inf, -sNaN:0x1) == true +; run: %fcmp_ult_f32(Inf, +sNaN:0x1) == true +; run: %fcmp_ult_f32(Inf, -sNaN:0x1) == true + +; run: %fcmp_ult_f32(+sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ult_f32(-sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ult_f32(+sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ult_f32(-sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ult_f32(+NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ult_f32(-NaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ult_f32(-NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ult_f32(+NaN:0x1, -sNaN:0x1) == true + +; run: %fcmp_ult_f32(+sNaN:0x80001, +sNaN:0x80001) == true +; run: %fcmp_ult_f32(-sNaN:0x80001, -sNaN:0x80001) == true +; run: %fcmp_ult_f32(+sNaN:0x80001, -sNaN:0x80001) == true +; run: %fcmp_ult_f32(-sNaN:0x80001, +sNaN:0x80001) == true +; run: %fcmp_ult_f32(+sNaN:0x80001, +sNaN:0x1) == true +; run: %fcmp_ult_f32(+sNaN:0x80001, -sNaN:0x1) == true +; run: %fcmp_ult_f32(-sNaN:0x80001, -sNaN:0x1) == true +; run: %fcmp_ult_f32(-sNaN:0x80001, +sNaN:0x1) == true + + +function %fcmp_ult_f64(f64, f64) -> b1 { +block0(v0: f64, v1: f64): + v2 = fcmp ult v0, v1 + return v2 +} +; run: %fcmp_ult_f64(0x0.5, 0x0.5) == false +; run: %fcmp_ult_f64(0x1.0, 0x1.0) == false +; run: %fcmp_ult_f64(-0x1.0, 0x1.0) == true +; run: %fcmp_ult_f64(0x1.0, -0x1.0) == false +; run: %fcmp_ult_f64(0x0.5, 0x1.0) == true +; run: %fcmp_ult_f64(0x1.5, 0x2.9) == true +; run: %fcmp_ult_f64(0x1.1p10, 0x1.4p1) == false +; run: %fcmp_ult_f64(0x1.4cccccccccccdp0, 0x1.8p0) == true +; run: %fcmp_ult_f64(0x1.b333333333333p0, 0x1.999999999999ap-2) == false +; run: %fcmp_ult_f64(0x1.3333333333333p-1, 0x1.6666666666666p1) == true +; run: %fcmp_ult_f64(-0x0.5, -0x1.0) == false +; run: %fcmp_ult_f64(-0x1.5, -0x2.9) == false +; run: %fcmp_ult_f64(-0x1.1p10, -0x1.3333333333333p-1) == true +; run: %fcmp_ult_f64(-0x1.999999999999ap-2, -0x1.4cccccccccccdp0) == false +; run: %fcmp_ult_f64(-0x1.8p0, -0x1.b333333333333p0) == false +; run: %fcmp_ult_f64(-0x1.4p1, -0x1.6666666666666p1) == false +; run: %fcmp_ult_f64(0x0.5, -0x1.0) == false +; run: %fcmp_ult_f64(0x1.b333333333333p0, -0x1.b333333333333p0) == false + + +; Zeroes +; run: %fcmp_ult_f64(0x0.0, 0x0.0) == false +; run: %fcmp_ult_f64(-0x0.0, -0x0.0) == false +; run: %fcmp_ult_f64(0x0.0, -0x0.0) == false +; run: %fcmp_ult_f64(-0x0.0, 0x0.0) == false + +; Infinities +; run: %fcmp_ult_f64(Inf, Inf) == false +; run: %fcmp_ult_f64(-Inf, -Inf) == false +; run: %fcmp_ult_f64(Inf, -Inf) == false +; run: %fcmp_ult_f64(-Inf, Inf) == true + +; Inf/Zero +; run: %fcmp_ult_f64(0x0.0, Inf) == true +; run: %fcmp_ult_f64(-0x0.0, Inf) == true +; run: %fcmp_ult_f64(0x0.0, -Inf) == false +; run: %fcmp_ult_f64(-0x0.0, -Inf) == false +; run: %fcmp_ult_f64(Inf, 0x0.0) == false +; run: %fcmp_ult_f64(Inf, -0x0.0) == false +; run: %fcmp_ult_f64(-Inf, 0x0.0) == true +; run: %fcmp_ult_f64(-Inf, -0x0.0) == true + +; Epsilon / Max / Min Positive +; run: %fcmp_ult_f64(0x1.0p-52, 0x1.0p-52) == false +; run: %fcmp_ult_f64(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) == false +; run: %fcmp_ult_f64(0x1.0p-1022, 0x1.0p-1022) == false +; run: %fcmp_ult_f64(0x1.0p-52, 0x1.fffffffffffffp1023) == true +; run: %fcmp_ult_f64(0x1.0p-52, 0x1.0p-1022) == false +; run: %fcmp_ult_f64(0x1.0p-1022, 0x1.fffffffffffffp1023) == true + +; Subnormals +; run: %fcmp_ult_f64(0x0.8p-1022, -0x0.8p-1022) == false +; run: %fcmp_ult_f64(-0x0.8p-1022, 0x0.8p-1022) == true +; run: %fcmp_ult_f64(0x0.8p-1022, 0x0.0) == false +; run: %fcmp_ult_f64(-0x0.8p-1022, 0x0.0) == true +; run: %fcmp_ult_f64(0x0.8p-1022, -0x0.0) == false +; run: %fcmp_ult_f64(-0x0.8p-1022, -0x0.0) == true +; run: %fcmp_ult_f64(0x0.0, 0x0.8p-1022) == true +; run: %fcmp_ult_f64(0x0.0, -0x0.8p-1022) == false +; run: %fcmp_ult_f64(-0x0.0, 0x0.8p-1022) == true +; run: %fcmp_ult_f64(-0x0.0, -0x0.8p-1022) == false + +; NaN's +; run: %fcmp_ult_f64(+NaN, +NaN) == true +; run: %fcmp_ult_f64(-NaN, -NaN) == true +; run: %fcmp_ult_f64(+NaN, -NaN) == true +; run: %fcmp_ult_f64(-NaN, +NaN) == true + +; run: %fcmp_ult_f64(+NaN, -0x1.0) == true +; run: %fcmp_ult_f64(-NaN, -0x1.0) == true +; run: %fcmp_ult_f64(+NaN, 0x1.0) == true +; run: %fcmp_ult_f64(-NaN, 0x1.0) == true +; run: %fcmp_ult_f64(+NaN, -0x0.0) == true +; run: %fcmp_ult_f64(-NaN, -0x0.0) == true +; run: %fcmp_ult_f64(+NaN, 0x0.0) == true +; run: %fcmp_ult_f64(-NaN, 0x0.0) == true +; run: %fcmp_ult_f64(+NaN, -Inf) == true +; run: %fcmp_ult_f64(-NaN, -Inf) == true +; run: %fcmp_ult_f64(+NaN, Inf) == true +; run: %fcmp_ult_f64(-NaN, Inf) == true +; run: %fcmp_ult_f64(-0x0.0, +NaN) == true +; run: %fcmp_ult_f64(-0x0.0, -NaN) == true +; run: %fcmp_ult_f64(0x0.0, +NaN) == true +; run: %fcmp_ult_f64(0x0.0, -NaN) == true +; run: %fcmp_ult_f64(-Inf, +NaN) == true +; run: %fcmp_ult_f64(-Inf, -NaN) == true +; run: %fcmp_ult_f64(Inf, +NaN) == true +; run: %fcmp_ult_f64(Inf, -NaN) == true + +; run: %fcmp_ult_f64(+NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ult_f64(-NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ult_f64(+NaN:0x1, -NaN:0x1) == true +; run: %fcmp_ult_f64(-NaN:0x1, +NaN:0x1) == true +; run: %fcmp_ult_f64(+NaN:0x1, +NaN) == true +; run: %fcmp_ult_f64(+NaN:0x1, -NaN) == true +; run: %fcmp_ult_f64(-NaN:0x1, -NaN) == true +; run: %fcmp_ult_f64(-NaN:0x1, +NaN) == true + +; run: %fcmp_ult_f64(+NaN:0x800000000001, +NaN:0x800000000001) == true +; run: %fcmp_ult_f64(-NaN:0x800000000001, -NaN:0x800000000001) == true +; run: %fcmp_ult_f64(+NaN:0x800000000001, -NaN:0x800000000001) == true +; run: %fcmp_ult_f64(-NaN:0x800000000001, +NaN:0x800000000001) == true +; run: %fcmp_ult_f64(+NaN:0x800000000001, +NaN) == true +; run: %fcmp_ult_f64(+NaN:0x800000000001, -NaN) == true +; run: %fcmp_ult_f64(-NaN:0x800000000001, -NaN) == true +; run: %fcmp_ult_f64(-NaN:0x800000000001, +NaN) == true + +; sNaN's +; run: %fcmp_ult_f64(+sNaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ult_f64(-sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ult_f64(+sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ult_f64(-sNaN:0x1, +sNaN:0x1) == true + +; run: %fcmp_ult_f64(+sNaN:0x1, -0x1.0) == true +; run: %fcmp_ult_f64(-sNaN:0x1, -0x1.0) == true +; run: %fcmp_ult_f64(+sNaN:0x1, 0x1.0) == true +; run: %fcmp_ult_f64(-sNaN:0x1, 0x1.0) == true +; run: %fcmp_ult_f64(+sNaN:0x1, -0x0.0) == true +; run: %fcmp_ult_f64(-sNaN:0x1, -0x0.0) == true +; run: %fcmp_ult_f64(+sNaN:0x1, 0x0.0) == true +; run: %fcmp_ult_f64(-sNaN:0x1, 0x0.0) == true +; run: %fcmp_ult_f64(+sNaN:0x1, -Inf) == true +; run: %fcmp_ult_f64(-sNaN:0x1, -Inf) == true +; run: %fcmp_ult_f64(+sNaN:0x1, Inf) == true +; run: %fcmp_ult_f64(-sNaN:0x1, Inf) == true +; run: %fcmp_ult_f64(-0x0.0, +sNaN:0x1) == true +; run: %fcmp_ult_f64(-0x0.0, -sNaN:0x1) == true +; run: %fcmp_ult_f64(0x0.0, +sNaN:0x1) == true +; run: %fcmp_ult_f64(0x0.0, -sNaN:0x1) == true +; run: %fcmp_ult_f64(-Inf, +sNaN:0x1) == true +; run: %fcmp_ult_f64(-Inf, -sNaN:0x1) == true +; run: %fcmp_ult_f64(Inf, +sNaN:0x1) == true +; run: %fcmp_ult_f64(Inf, -sNaN:0x1) == true + +; run: %fcmp_ult_f64(+sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ult_f64(-sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ult_f64(+sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_ult_f64(-sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_ult_f64(+NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ult_f64(-NaN:0x1, -sNaN:0x1) == true +; run: %fcmp_ult_f64(-NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_ult_f64(+NaN:0x1, -sNaN:0x1) == true + +; run: %fcmp_ult_f64(+sNaN:0x800000000001, +sNaN:0x800000000001) == true +; run: %fcmp_ult_f64(-sNaN:0x800000000001, -sNaN:0x800000000001) == true +; run: %fcmp_ult_f64(+sNaN:0x800000000001, -sNaN:0x800000000001) == true +; run: %fcmp_ult_f64(-sNaN:0x800000000001, +sNaN:0x800000000001) == true +; run: %fcmp_ult_f64(+sNaN:0x800000000001, +sNaN:0x1) == true +; run: %fcmp_ult_f64(+sNaN:0x800000000001, -sNaN:0x1) == true +; run: %fcmp_ult_f64(-sNaN:0x800000000001, -sNaN:0x1) == true +; run: %fcmp_ult_f64(-sNaN:0x800000000001, +sNaN:0x1) == true diff --git a/cranelift/filetests/filetests/runtests/fcmp-uno.clif b/cranelift/filetests/filetests/runtests/fcmp-uno.clif new file mode 100644 index 0000000000..b698b61047 --- /dev/null +++ b/cranelift/filetests/filetests/runtests/fcmp-uno.clif @@ -0,0 +1,318 @@ +test interpret +test run +target x86_64 +target s390x + +function %fcmp_uno_f32(f32, f32) -> b1 { +block0(v0: f32, v1: f32): + v2 = fcmp uno v0, v1 + return v2 +} +; run: %fcmp_uno_f32(0x0.5, 0x0.5) == false +; run: %fcmp_uno_f32(0x1.0, 0x1.0) == false +; run: %fcmp_uno_f32(-0x1.0, 0x1.0) == false +; run: %fcmp_uno_f32(0x1.0, -0x1.0) == false +; run: %fcmp_uno_f32(0x0.5, 0x1.0) == false +; run: %fcmp_uno_f32(0x1.5, 0x2.9) == false +; run: %fcmp_uno_f32(0x1.1p10, 0x1.4p1) == false +; run: %fcmp_uno_f32(0x1.4cccccp0, 0x1.8p0) == false +; run: %fcmp_uno_f32(0x1.b33334p0, 0x1.99999ap-2) == false +; run: %fcmp_uno_f32(0x1.333334p-1, 0x1.666666p1) == false +; run: %fcmp_uno_f32(-0x0.5, -0x1.0) == false +; run: %fcmp_uno_f32(-0x1.5, -0x2.9) == false +; run: %fcmp_uno_f32(-0x1.1p10, -0x1.333334p-1) == false +; run: %fcmp_uno_f32(-0x1.99999ap-2, -0x1.4cccccp0) == false +; run: %fcmp_uno_f32(-0x1.8p0, -0x1.b33334p0) == false +; run: %fcmp_uno_f32(-0x1.4p1, -0x1.666666p1) == false +; run: %fcmp_uno_f32(0x0.5, -0x1.0) == false +; run: %fcmp_uno_f32(0x1.b33334p0, -0x1.b33334p0) == false + +; Zeroes +; run: %fcmp_uno_f32(0x0.0, 0x0.0) == false +; run: %fcmp_uno_f32(-0x0.0, -0x0.0) == false +; run: %fcmp_uno_f32(0x0.0, -0x0.0) == false +; run: %fcmp_uno_f32(-0x0.0, 0x0.0) == false + +; Infinities +; run: %fcmp_uno_f32(Inf, Inf) == false +; run: %fcmp_uno_f32(-Inf, -Inf) == false +; run: %fcmp_uno_f32(Inf, -Inf) == false +; run: %fcmp_uno_f32(-Inf, Inf) == false + +; Inf/Zero +; run: %fcmp_uno_f32(0x0.0, Inf) == false +; run: %fcmp_uno_f32(-0x0.0, Inf) == false +; run: %fcmp_uno_f32(0x0.0, -Inf) == false +; run: %fcmp_uno_f32(-0x0.0, -Inf) == false +; run: %fcmp_uno_f32(Inf, 0x0.0) == false +; run: %fcmp_uno_f32(Inf, -0x0.0) == false +; run: %fcmp_uno_f32(-Inf, 0x0.0) == false +; run: %fcmp_uno_f32(-Inf, -0x0.0) == false + +; Epsilon / Max / Min Positive +; run: %fcmp_uno_f32(0x1.0p-23, 0x1.0p-23) == false +; run: %fcmp_uno_f32(0x1.fffffep127, 0x1.fffffep127) == false +; run: %fcmp_uno_f32(0x1.0p-126, 0x1.0p-126) == false +; run: %fcmp_uno_f32(0x1.0p-23, 0x1.fffffep127) == false +; run: %fcmp_uno_f32(0x1.0p-23, 0x1.0p-126) == false +; run: %fcmp_uno_f32(0x1.0p-126, 0x1.fffffep127) == false + +; Subnormals +; run: %fcmp_uno_f32(0x0.800002p-126, -0x0.800002p-126) == false +; run: %fcmp_uno_f32(-0x0.800002p-126, 0x0.800002p-126) == false +; run: %fcmp_uno_f32(0x0.800002p-126, 0x0.0) == false +; run: %fcmp_uno_f32(-0x0.800002p-126, 0x0.0) == false +; run: %fcmp_uno_f32(0x0.800002p-126, -0x0.0) == false +; run: %fcmp_uno_f32(-0x0.800002p-126, -0x0.0) == false +; run: %fcmp_uno_f32(0x0.0, 0x0.800002p-126) == false +; run: %fcmp_uno_f32(0x0.0, -0x0.800002p-126) == false +; run: %fcmp_uno_f32(-0x0.0, 0x0.800002p-126) == false +; run: %fcmp_uno_f32(-0x0.0, -0x0.800002p-126) == false + +; NaN's +; run: %fcmp_uno_f32(+NaN, +NaN) == true +; run: %fcmp_uno_f32(-NaN, -NaN) == true +; run: %fcmp_uno_f32(+NaN, -NaN) == true +; run: %fcmp_uno_f32(-NaN, +NaN) == true + +; run: %fcmp_uno_f32(+NaN, -0x1.0) == true +; run: %fcmp_uno_f32(-NaN, -0x1.0) == true +; run: %fcmp_uno_f32(+NaN, 0x1.0) == true +; run: %fcmp_uno_f32(-NaN, 0x1.0) == true +; run: %fcmp_uno_f32(+NaN, -0x0.0) == true +; run: %fcmp_uno_f32(-NaN, -0x0.0) == true +; run: %fcmp_uno_f32(+NaN, 0x0.0) == true +; run: %fcmp_uno_f32(-NaN, 0x0.0) == true +; run: %fcmp_uno_f32(+NaN, -Inf) == true +; run: %fcmp_uno_f32(-NaN, -Inf) == true +; run: %fcmp_uno_f32(+NaN, Inf) == true +; run: %fcmp_uno_f32(-NaN, Inf) == true +; run: %fcmp_uno_f32(-0x0.0, +NaN) == true +; run: %fcmp_uno_f32(-0x0.0, -NaN) == true +; run: %fcmp_uno_f32(0x0.0, +NaN) == true +; run: %fcmp_uno_f32(0x0.0, -NaN) == true +; run: %fcmp_uno_f32(-Inf, +NaN) == true +; run: %fcmp_uno_f32(-Inf, -NaN) == true +; run: %fcmp_uno_f32(Inf, +NaN) == true +; run: %fcmp_uno_f32(Inf, -NaN) == true + +; run: %fcmp_uno_f32(+NaN:0x1, +NaN:0x1) == true +; run: %fcmp_uno_f32(-NaN:0x1, -NaN:0x1) == true +; run: %fcmp_uno_f32(+NaN:0x1, -NaN:0x1) == true +; run: %fcmp_uno_f32(-NaN:0x1, +NaN:0x1) == true +; run: %fcmp_uno_f32(+NaN:0x1, +NaN) == true +; run: %fcmp_uno_f32(+NaN:0x1, -NaN) == true +; run: %fcmp_uno_f32(-NaN:0x1, -NaN) == true +; run: %fcmp_uno_f32(-NaN:0x1, +NaN) == true + +; run: %fcmp_uno_f32(+NaN:0x80001, +NaN:0x80001) == true +; run: %fcmp_uno_f32(-NaN:0x80001, -NaN:0x80001) == true +; run: %fcmp_uno_f32(+NaN:0x80001, -NaN:0x80001) == true +; run: %fcmp_uno_f32(-NaN:0x80001, +NaN:0x80001) == true +; run: %fcmp_uno_f32(+NaN:0x80001, +NaN) == true +; run: %fcmp_uno_f32(+NaN:0x80001, -NaN) == true +; run: %fcmp_uno_f32(-NaN:0x80001, -NaN) == true +; run: %fcmp_uno_f32(-NaN:0x80001, +NaN) == true + +; sNaN's +; run: %fcmp_uno_f32(+sNaN:0x1, +sNaN:0x1) == true +; run: %fcmp_uno_f32(-sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_uno_f32(+sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_uno_f32(-sNaN:0x1, +sNaN:0x1) == true + +; run: %fcmp_uno_f32(+sNaN:0x1, -0x1.0) == true +; run: %fcmp_uno_f32(-sNaN:0x1, -0x1.0) == true +; run: %fcmp_uno_f32(+sNaN:0x1, 0x1.0) == true +; run: %fcmp_uno_f32(-sNaN:0x1, 0x1.0) == true +; run: %fcmp_uno_f32(+sNaN:0x1, -0x0.0) == true +; run: %fcmp_uno_f32(-sNaN:0x1, -0x0.0) == true +; run: %fcmp_uno_f32(+sNaN:0x1, 0x0.0) == true +; run: %fcmp_uno_f32(-sNaN:0x1, 0x0.0) == true +; run: %fcmp_uno_f32(+sNaN:0x1, -Inf) == true +; run: %fcmp_uno_f32(-sNaN:0x1, -Inf) == true +; run: %fcmp_uno_f32(+sNaN:0x1, Inf) == true +; run: %fcmp_uno_f32(-sNaN:0x1, Inf) == true +; run: %fcmp_uno_f32(-0x0.0, +sNaN:0x1) == true +; run: %fcmp_uno_f32(-0x0.0, -sNaN:0x1) == true +; run: %fcmp_uno_f32(0x0.0, +sNaN:0x1) == true +; run: %fcmp_uno_f32(0x0.0, -sNaN:0x1) == true +; run: %fcmp_uno_f32(-Inf, +sNaN:0x1) == true +; run: %fcmp_uno_f32(-Inf, -sNaN:0x1) == true +; run: %fcmp_uno_f32(Inf, +sNaN:0x1) == true +; run: %fcmp_uno_f32(Inf, -sNaN:0x1) == true + +; run: %fcmp_uno_f32(+sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_uno_f32(-sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_uno_f32(+sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_uno_f32(-sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_uno_f32(+NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_uno_f32(-NaN:0x1, -sNaN:0x1) == true +; run: %fcmp_uno_f32(-NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_uno_f32(+NaN:0x1, -sNaN:0x1) == true + +; run: %fcmp_uno_f32(+sNaN:0x80001, +sNaN:0x80001) == true +; run: %fcmp_uno_f32(-sNaN:0x80001, -sNaN:0x80001) == true +; run: %fcmp_uno_f32(+sNaN:0x80001, -sNaN:0x80001) == true +; run: %fcmp_uno_f32(-sNaN:0x80001, +sNaN:0x80001) == true +; run: %fcmp_uno_f32(+sNaN:0x80001, +sNaN:0x1) == true +; run: %fcmp_uno_f32(+sNaN:0x80001, -sNaN:0x1) == true +; run: %fcmp_uno_f32(-sNaN:0x80001, -sNaN:0x1) == true +; run: %fcmp_uno_f32(-sNaN:0x80001, +sNaN:0x1) == true + + +function %fcmp_uno_f64(f64, f64) -> b1 { +block0(v0: f64, v1: f64): + v2 = fcmp uno v0, v1 + return v2 +} +; run: %fcmp_uno_f64(0x0.5, 0x0.5) == false +; run: %fcmp_uno_f64(0x1.0, 0x1.0) == false +; run: %fcmp_uno_f64(-0x1.0, 0x1.0) == false +; run: %fcmp_uno_f64(0x1.0, -0x1.0) == false +; run: %fcmp_uno_f64(0x0.5, 0x1.0) == false +; run: %fcmp_uno_f64(0x1.5, 0x2.9) == false +; run: %fcmp_uno_f64(0x1.1p10, 0x1.4p1) == false +; run: %fcmp_uno_f64(0x1.4cccccccccccdp0, 0x1.8p0) == false +; run: %fcmp_uno_f64(0x1.b333333333333p0, 0x1.999999999999ap-2) == false +; run: %fcmp_uno_f64(0x1.3333333333333p-1, 0x1.6666666666666p1) == false +; run: %fcmp_uno_f64(-0x0.5, -0x1.0) == false +; run: %fcmp_uno_f64(-0x1.5, -0x2.9) == false +; run: %fcmp_uno_f64(-0x1.1p10, -0x1.3333333333333p-1) == false +; run: %fcmp_uno_f64(-0x1.999999999999ap-2, -0x1.4cccccccccccdp0) == false +; run: %fcmp_uno_f64(-0x1.8p0, -0x1.b333333333333p0) == false +; run: %fcmp_uno_f64(-0x1.4p1, -0x1.6666666666666p1) == false +; run: %fcmp_uno_f64(0x0.5, -0x1.0) == false +; run: %fcmp_uno_f64(0x1.b333333333333p0, -0x1.b333333333333p0) == false + + +; Zeroes +; run: %fcmp_uno_f64(0x0.0, 0x0.0) == false +; run: %fcmp_uno_f64(-0x0.0, -0x0.0) == false +; run: %fcmp_uno_f64(0x0.0, -0x0.0) == false +; run: %fcmp_uno_f64(-0x0.0, 0x0.0) == false + +; Infinities +; run: %fcmp_uno_f64(Inf, Inf) == false +; run: %fcmp_uno_f64(-Inf, -Inf) == false +; run: %fcmp_uno_f64(Inf, -Inf) == false +; run: %fcmp_uno_f64(-Inf, Inf) == false + +; Inf/Zero +; run: %fcmp_uno_f64(0x0.0, Inf) == false +; run: %fcmp_uno_f64(-0x0.0, Inf) == false +; run: %fcmp_uno_f64(0x0.0, -Inf) == false +; run: %fcmp_uno_f64(-0x0.0, -Inf) == false +; run: %fcmp_uno_f64(Inf, 0x0.0) == false +; run: %fcmp_uno_f64(Inf, -0x0.0) == false +; run: %fcmp_uno_f64(-Inf, 0x0.0) == false +; run: %fcmp_uno_f64(-Inf, -0x0.0) == false + +; Epsilon / Max / Min Positive +; run: %fcmp_uno_f64(0x1.0p-52, 0x1.0p-52) == false +; run: %fcmp_uno_f64(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) == false +; run: %fcmp_uno_f64(0x1.0p-1022, 0x1.0p-1022) == false +; run: %fcmp_uno_f64(0x1.0p-52, 0x1.fffffffffffffp1023) == false +; run: %fcmp_uno_f64(0x1.0p-52, 0x1.0p-1022) == false +; run: %fcmp_uno_f64(0x1.0p-1022, 0x1.fffffffffffffp1023) == false + +; Subnormals +; run: %fcmp_uno_f64(0x0.8p-1022, -0x0.8p-1022) == false +; run: %fcmp_uno_f64(-0x0.8p-1022, 0x0.8p-1022) == false +; run: %fcmp_uno_f64(0x0.8p-1022, 0x0.0) == false +; run: %fcmp_uno_f64(-0x0.8p-1022, 0x0.0) == false +; run: %fcmp_uno_f64(0x0.8p-1022, -0x0.0) == false +; run: %fcmp_uno_f64(-0x0.8p-1022, -0x0.0) == false +; run: %fcmp_uno_f64(0x0.0, 0x0.8p-1022) == false +; run: %fcmp_uno_f64(0x0.0, -0x0.8p-1022) == false +; run: %fcmp_uno_f64(-0x0.0, 0x0.8p-1022) == false +; run: %fcmp_uno_f64(-0x0.0, -0x0.8p-1022) == false + +; NaN's +; run: %fcmp_uno_f64(+NaN, +NaN) == true +; run: %fcmp_uno_f64(-NaN, -NaN) == true +; run: %fcmp_uno_f64(+NaN, -NaN) == true +; run: %fcmp_uno_f64(-NaN, +NaN) == true + +; run: %fcmp_uno_f64(+NaN, -0x1.0) == true +; run: %fcmp_uno_f64(-NaN, -0x1.0) == true +; run: %fcmp_uno_f64(+NaN, 0x1.0) == true +; run: %fcmp_uno_f64(-NaN, 0x1.0) == true +; run: %fcmp_uno_f64(+NaN, -0x0.0) == true +; run: %fcmp_uno_f64(-NaN, -0x0.0) == true +; run: %fcmp_uno_f64(+NaN, 0x0.0) == true +; run: %fcmp_uno_f64(-NaN, 0x0.0) == true +; run: %fcmp_uno_f64(+NaN, -Inf) == true +; run: %fcmp_uno_f64(-NaN, -Inf) == true +; run: %fcmp_uno_f64(+NaN, Inf) == true +; run: %fcmp_uno_f64(-NaN, Inf) == true +; run: %fcmp_uno_f64(-0x0.0, +NaN) == true +; run: %fcmp_uno_f64(-0x0.0, -NaN) == true +; run: %fcmp_uno_f64(0x0.0, +NaN) == true +; run: %fcmp_uno_f64(0x0.0, -NaN) == true +; run: %fcmp_uno_f64(-Inf, +NaN) == true +; run: %fcmp_uno_f64(-Inf, -NaN) == true +; run: %fcmp_uno_f64(Inf, +NaN) == true +; run: %fcmp_uno_f64(Inf, -NaN) == true + +; run: %fcmp_uno_f64(+NaN:0x1, +NaN:0x1) == true +; run: %fcmp_uno_f64(-NaN:0x1, -NaN:0x1) == true +; run: %fcmp_uno_f64(+NaN:0x1, -NaN:0x1) == true +; run: %fcmp_uno_f64(-NaN:0x1, +NaN:0x1) == true +; run: %fcmp_uno_f64(+NaN:0x1, +NaN) == true +; run: %fcmp_uno_f64(+NaN:0x1, -NaN) == true +; run: %fcmp_uno_f64(-NaN:0x1, -NaN) == true +; run: %fcmp_uno_f64(-NaN:0x1, +NaN) == true + +; run: %fcmp_uno_f64(+NaN:0x800000000001, +NaN:0x800000000001) == true +; run: %fcmp_uno_f64(-NaN:0x800000000001, -NaN:0x800000000001) == true +; run: %fcmp_uno_f64(+NaN:0x800000000001, -NaN:0x800000000001) == true +; run: %fcmp_uno_f64(-NaN:0x800000000001, +NaN:0x800000000001) == true +; run: %fcmp_uno_f64(+NaN:0x800000000001, +NaN) == true +; run: %fcmp_uno_f64(+NaN:0x800000000001, -NaN) == true +; run: %fcmp_uno_f64(-NaN:0x800000000001, -NaN) == true +; run: %fcmp_uno_f64(-NaN:0x800000000001, +NaN) == true + +; sNaN's +; run: %fcmp_uno_f64(+sNaN:0x1, +sNaN:0x1) == true +; run: %fcmp_uno_f64(-sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_uno_f64(+sNaN:0x1, -sNaN:0x1) == true +; run: %fcmp_uno_f64(-sNaN:0x1, +sNaN:0x1) == true + +; run: %fcmp_uno_f64(+sNaN:0x1, -0x1.0) == true +; run: %fcmp_uno_f64(-sNaN:0x1, -0x1.0) == true +; run: %fcmp_uno_f64(+sNaN:0x1, 0x1.0) == true +; run: %fcmp_uno_f64(-sNaN:0x1, 0x1.0) == true +; run: %fcmp_uno_f64(+sNaN:0x1, -0x0.0) == true +; run: %fcmp_uno_f64(-sNaN:0x1, -0x0.0) == true +; run: %fcmp_uno_f64(+sNaN:0x1, 0x0.0) == true +; run: %fcmp_uno_f64(-sNaN:0x1, 0x0.0) == true +; run: %fcmp_uno_f64(+sNaN:0x1, -Inf) == true +; run: %fcmp_uno_f64(-sNaN:0x1, -Inf) == true +; run: %fcmp_uno_f64(+sNaN:0x1, Inf) == true +; run: %fcmp_uno_f64(-sNaN:0x1, Inf) == true +; run: %fcmp_uno_f64(-0x0.0, +sNaN:0x1) == true +; run: %fcmp_uno_f64(-0x0.0, -sNaN:0x1) == true +; run: %fcmp_uno_f64(0x0.0, +sNaN:0x1) == true +; run: %fcmp_uno_f64(0x0.0, -sNaN:0x1) == true +; run: %fcmp_uno_f64(-Inf, +sNaN:0x1) == true +; run: %fcmp_uno_f64(-Inf, -sNaN:0x1) == true +; run: %fcmp_uno_f64(Inf, +sNaN:0x1) == true +; run: %fcmp_uno_f64(Inf, -sNaN:0x1) == true + +; run: %fcmp_uno_f64(+sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_uno_f64(-sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_uno_f64(+sNaN:0x1, -NaN:0x1) == true +; run: %fcmp_uno_f64(-sNaN:0x1, +NaN:0x1) == true +; run: %fcmp_uno_f64(+NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_uno_f64(-NaN:0x1, -sNaN:0x1) == true +; run: %fcmp_uno_f64(-NaN:0x1, +sNaN:0x1) == true +; run: %fcmp_uno_f64(+NaN:0x1, -sNaN:0x1) == true + +; run: %fcmp_uno_f64(+sNaN:0x800000000001, +sNaN:0x800000000001) == true +; run: %fcmp_uno_f64(-sNaN:0x800000000001, -sNaN:0x800000000001) == true +; run: %fcmp_uno_f64(+sNaN:0x800000000001, -sNaN:0x800000000001) == true +; run: %fcmp_uno_f64(-sNaN:0x800000000001, +sNaN:0x800000000001) == true +; run: %fcmp_uno_f64(+sNaN:0x800000000001, +sNaN:0x1) == true +; run: %fcmp_uno_f64(+sNaN:0x800000000001, -sNaN:0x1) == true +; run: %fcmp_uno_f64(-sNaN:0x800000000001, -sNaN:0x1) == true +; run: %fcmp_uno_f64(-sNaN:0x800000000001, +sNaN:0x1) == true diff --git a/cranelift/filetests/filetests/runtests/fcmp.clif b/cranelift/filetests/filetests/runtests/fcmp.clif deleted file mode 100644 index eb77f779d0..0000000000 --- a/cranelift/filetests/filetests/runtests/fcmp.clif +++ /dev/null @@ -1,62 +0,0 @@ -test run -target aarch64 -target s390x -target x86_64 - -function %fcmp_eq(f64, f64) -> b1 { -block0(v0: f64, v1: f64): - v2 = fcmp eq v0, v1 - return v2 -} - -; run: %fcmp_eq(0x1.0, 0x1.0) == true -; run: %fcmp_eq(0x1.0, 0x0.0) == false - -function %fcmp_ne(f64, f64) -> b1 { -block0(v0: f64, v1: f64): - v2 = fcmp ne v0, v1 - return v2 -} - -; run: %fcmp_ne(0x1.0, 0x1.0) == false -; run: %fcmp_ne(0x1.0, 0x0.0) == true - -function %fcmp_lt(f64, f64) -> b1 { -block0(v0: f64, v1: f64): - v2 = fcmp lt v0, v1 - return v2 -} - -; run: %fcmp_lt(0x1.0, 0x1.0) == false -; run: %fcmp_lt(0x1.0, 0x0.0) == false -; run: %fcmp_lt(0x1.0, 0x2.3) == true - -function %fcmp_le(f64, f64) -> b1 { -block0(v0: f64, v1: f64): - v2 = fcmp le v0, v1 - return v2 -} - -; run: %fcmp_le(0x1.0, 0x1.0) == true -; run: %fcmp_le(0x1.0, 0x0.0) == false -; run: %fcmp_le(0x1.0, 0x2.3) == true - -function %fcmp_gt(f64, f64) -> b1 { -block0(v0: f64, v1: f64): - v2 = fcmp gt v0, v1 - return v2 -} - -; run: %fcmp_gt(0x1.0, 0x1.0) == false -; run: %fcmp_gt(0x1.0, 0x0.0) == true -; run: %fcmp_gt(0x1.0, 0x2.3) == false - -function %fcmp_ge(f64, f64) -> b1 { -block0(v0: f64, v1: f64): - v2 = fcmp ge v0, v1 - return v2 -} - -; run: %fcmp_ge(0x1.0, 0x1.0) == true -; run: %fcmp_ge(0x1.0, 0x0.0) == true -; run: %fcmp_ge(0x1.0, 0x2.3) == false diff --git a/cranelift/interpreter/src/step.rs b/cranelift/interpreter/src/step.rs index 9e8059328a..16347734f5 100644 --- a/cranelift/interpreter/src/step.rs +++ b/cranelift/interpreter/src/step.rs @@ -1309,16 +1309,14 @@ where FloatCC::OrderedNotEqual => Value::lt(left, right)? || Value::gt(left, right)?, FloatCC::UnorderedOrEqual => Value::eq(left, right)? || Value::uno(left, right)?, FloatCC::LessThan => Value::lt(left, right)?, - FloatCC::LessThanOrEqual => Value::lt(left, right)? || Value::eq(left, right)?, + FloatCC::LessThanOrEqual => Value::le(left, right)?, FloatCC::GreaterThan => Value::gt(left, right)?, - FloatCC::GreaterThanOrEqual => Value::gt(left, right)? || Value::eq(left, right)?, + FloatCC::GreaterThanOrEqual => Value::ge(left, right)?, FloatCC::UnorderedOrLessThan => Value::uno(left, right)? || Value::lt(left, right)?, - FloatCC::UnorderedOrLessThanOrEqual => { - Value::uno(left, right)? || Value::lt(left, right)? || Value::eq(left, right)? - } + FloatCC::UnorderedOrLessThanOrEqual => Value::uno(left, right)? || Value::le(left, right)?, FloatCC::UnorderedOrGreaterThan => Value::uno(left, right)? || Value::gt(left, right)?, FloatCC::UnorderedOrGreaterThanOrEqual => { - Value::uno(left, right)? || Value::gt(left, right)? || Value::eq(left, right)? + Value::uno(left, right)? || Value::ge(left, right)? } }) } diff --git a/cranelift/reader/src/run_command.rs b/cranelift/reader/src/run_command.rs index 99f57e6a03..e0820ed187 100644 --- a/cranelift/reader/src/run_command.rs +++ b/cranelift/reader/src/run_command.rs @@ -39,10 +39,7 @@ impl RunCommand { } RunCommand::Run(invoke, compare, expected) => { let actual = invoke_fn(&invoke.func, &invoke.args)?; - let matched = match compare { - Comparison::Equals => *expected == actual, - Comparison::NotEquals => *expected != actual, - }; + let matched = Self::compare_results(compare, &actual, expected); if !matched { let actual = DisplayDataValues(&actual); return Err(format!("Failed test: {}, actual: {}", self, actual)); @@ -51,6 +48,32 @@ impl RunCommand { } Ok(()) } + + fn compare_results( + compare: &Comparison, + actual: &Vec, + expected: &Vec, + ) -> bool { + let are_equal = actual + .into_iter() + .zip(expected.into_iter()) + .all(|(a, b)| match (a, b) { + // We need to bit compare the floats to ensure that we produce the correct values + // on NaN's. The test suite expects to assert the precise bit pattern on NaN's or + // works around it in the tests themselves. + (DataValue::F32(a), DataValue::F32(b)) => a.bits() == b.bits(), + (DataValue::F64(a), DataValue::F64(b)) => a.bits() == b.bits(), + + // We don't need to worry about F32x4 / F64x2 Since we compare V128 which is already the + // raw bytes anyway + (a, b) => a == b, + }); + + match compare { + Comparison::Equals => are_equal, + Comparison::NotEquals => !are_equal, + } + } } impl Display for RunCommand {