cranelift: Use round_ties_even for nearest in interpreter (#4413)
As @MaxGraey pointed out (thanks!) in #4397, `round` has different behavior from `nearest`. And it looks like the native rust implementation is still pending stabilization. Right now we duplicate the wasmtime implementation, merged in #2171. However, we definitely should switch to the rust native version when it is available.
This commit is contained in:
@@ -14,6 +14,13 @@ block0(v0: f32):
|
||||
; run: %ceil_f32(0x1.5) == 0x1.0p1
|
||||
; run: %ceil_f32(0x2.9) == 0x1.8p1
|
||||
; run: %ceil_f32(0x1.1p10) == 0x1.1p10
|
||||
; run: %ceil_f32(0x1.400000p1) == 0x1.8p1
|
||||
; run: %ceil_f32(0x1.4cccccp0) == 0x1.0p1
|
||||
; run: %ceil_f32(0x1.800000p0) == 0x1.0p1
|
||||
; run: %ceil_f32(0x1.b33334p0) == 0x1.0p1
|
||||
; run: %ceil_f32(0x1.99999ap-2) == 0x1.0
|
||||
; run: %ceil_f32(0x1.333334p-1) == 0x1.0
|
||||
; run: %ceil_f32(0x1.666666p1) == 0x1.8p1
|
||||
|
||||
; Negatives
|
||||
; run: %ceil_f32(-0x0.5) == -0x0.0
|
||||
@@ -21,6 +28,13 @@ block0(v0: f32):
|
||||
; run: %ceil_f32(-0x1.5) == -0x1.0
|
||||
; run: %ceil_f32(-0x2.9) == -0x1.0p1
|
||||
; run: %ceil_f32(-0x1.1p10) == -0x1.1p10
|
||||
; run: %ceil_f32(-0x1.333334p-1) == -0x0.0
|
||||
; run: %ceil_f32(-0x1.99999ap-2) == -0x0.0
|
||||
; run: %ceil_f32(-0x1.4cccccp0) == -0x1.0
|
||||
; run: %ceil_f32(-0x1.800000p0) == -0x1.0
|
||||
; run: %ceil_f32(-0x1.b33334p0) == -0x1.0
|
||||
; run: %ceil_f32(-0x1.400000p1) == -0x1.0p1
|
||||
; run: %ceil_f32(-0x1.666666p1) == -0x1.0p1
|
||||
|
||||
; Specials
|
||||
; run: %ceil_f32(0x0.0) == 0x0.0
|
||||
@@ -71,6 +85,13 @@ block0(v0: f64):
|
||||
; run: %ceil_f64(0x1.5) == 0x1.0p1
|
||||
; run: %ceil_f64(0x2.9) == 0x1.8p1
|
||||
; run: %ceil_f64(0x1.1p10) == 0x1.1p10
|
||||
; run: %ceil_f64(0x1.4000000000000p1) == 0x1.8p1
|
||||
; run: %ceil_f64(0x1.4cccccccccccdp0) == 0x1.0p1
|
||||
; run: %ceil_f64(0x1.8000000000000p0) == 0x1.0p1
|
||||
; run: %ceil_f64(0x1.b333333333333p0) == 0x1.0p1
|
||||
; run: %ceil_f64(0x1.999999999999ap-2) == 0x1.0
|
||||
; run: %ceil_f64(0x1.3333333333333p-1) == 0x1.0
|
||||
; run: %ceil_f64(0x1.6666666666666p1) == 0x1.8p1
|
||||
|
||||
; Negatives
|
||||
; run: %ceil_f64(-0x0.5) == -0x0.0
|
||||
@@ -78,6 +99,13 @@ block0(v0: f64):
|
||||
; run: %ceil_f64(-0x1.5) == -0x1.0
|
||||
; run: %ceil_f64(-0x2.9) == -0x1.0p1
|
||||
; run: %ceil_f64(-0x1.1p10) == -0x1.1p10
|
||||
; run: %ceil_f64(-0x1.3333333333333p-1) == -0x0.0
|
||||
; run: %ceil_f64(-0x1.999999999999ap-2) == -0x0.0
|
||||
; run: %ceil_f64(-0x1.4cccccccccccdp0) == -0x1.0
|
||||
; run: %ceil_f64(-0x1.8000000000000p0) == -0x1.0
|
||||
; run: %ceil_f64(-0x1.b333333333333p0) == -0x1.0
|
||||
; run: %ceil_f64(-0x1.4000000000000p1) == -0x1.0p1
|
||||
; run: %ceil_f64(-0x1.6666666666666p1) == -0x1.0p1
|
||||
|
||||
; Specials
|
||||
; run: %ceil_f64(0x0.0) == 0x0.0
|
||||
|
||||
@@ -14,6 +14,13 @@ block0(v0: f32):
|
||||
; run: %floor_f32(0x1.5) == 0x1.0
|
||||
; run: %floor_f32(0x2.9) == 0x1.0p1
|
||||
; run: %floor_f32(0x1.1p10) == 0x1.1p10
|
||||
; run: %floor_f32(0x1.400000p1) == 0x1.0p1
|
||||
; run: %floor_f32(0x1.4cccccp0) == 0x1.0
|
||||
; run: %floor_f32(0x1.800000p0) == 0x1.0
|
||||
; run: %floor_f32(0x1.b33334p0) == 0x1.0
|
||||
; run: %floor_f32(0x1.99999ap-2) == 0x0.0
|
||||
; run: %floor_f32(0x1.333334p-1) == 0x0.0
|
||||
; run: %floor_f32(0x1.666666p1) == 0x1.0p1
|
||||
|
||||
; Negatives
|
||||
; run: %floor_f32(-0x0.5) == -0x1.0
|
||||
@@ -21,6 +28,13 @@ block0(v0: f32):
|
||||
; run: %floor_f32(-0x1.5) == -0x1.0p1
|
||||
; run: %floor_f32(-0x2.9) == -0x1.8p1
|
||||
; run: %floor_f32(-0x1.1p10) == -0x1.1p10
|
||||
; run: %floor_f32(-0x1.333334p-1) == -0x1.0
|
||||
; run: %floor_f32(-0x1.99999ap-2) == -0x1.0
|
||||
; run: %floor_f32(-0x1.4cccccp0) == -0x1.0p1
|
||||
; run: %floor_f32(-0x1.800000p0) == -0x1.0p1
|
||||
; run: %floor_f32(-0x1.b33334p0) == -0x1.0p1
|
||||
; run: %floor_f32(-0x1.400000p1) == -0x1.8p1
|
||||
; run: %floor_f32(-0x1.666666p1) == -0x1.8p1
|
||||
|
||||
; Specials
|
||||
; run: %floor_f32(0x0.0) == 0x0.0
|
||||
@@ -71,6 +85,13 @@ block0(v0: f64):
|
||||
; run: %floor_f64(0x1.5) == 0x1.0
|
||||
; run: %floor_f64(0x2.9) == 0x1.0p1
|
||||
; run: %floor_f64(0x1.1p10) == 0x1.1p10
|
||||
; run: %floor_f64(0x1.4000000000000p1) == 0x1.0p1
|
||||
; run: %floor_f64(0x1.4cccccccccccdp0) == 0x1.0
|
||||
; run: %floor_f64(0x1.8000000000000p0) == 0x1.0
|
||||
; run: %floor_f64(0x1.b333333333333p0) == 0x1.0
|
||||
; run: %floor_f64(0x1.999999999999ap-2) == 0x0.0
|
||||
; run: %floor_f64(0x1.3333333333333p-1) == 0x0.0
|
||||
; run: %floor_f64(0x1.6666666666666p1) == 0x1.0p1
|
||||
|
||||
; Negatives
|
||||
; run: %floor_f64(-0x0.5) == -0x1.0
|
||||
@@ -78,6 +99,13 @@ block0(v0: f64):
|
||||
; run: %floor_f64(-0x1.5) == -0x1.0p1
|
||||
; run: %floor_f64(-0x2.9) == -0x1.8p1
|
||||
; run: %floor_f64(-0x1.1p10) == -0x1.1p10
|
||||
; run: %floor_f64(-0x1.3333333333333p-1) == -0x1.0
|
||||
; run: %floor_f64(-0x1.999999999999ap-2) == -0x1.0
|
||||
; run: %floor_f64(-0x1.4cccccccccccdp0) == -0x1.0p1
|
||||
; run: %floor_f64(-0x1.8000000000000p0) == -0x1.0p1
|
||||
; run: %floor_f64(-0x1.b333333333333p0) == -0x1.0p1
|
||||
; run: %floor_f64(-0x1.4000000000000p1) == -0x1.8p1
|
||||
; run: %floor_f64(-0x1.6666666666666p1) == -0x1.8p1
|
||||
|
||||
; Specials
|
||||
; run: %floor_f64(0x0.0) == 0x0.0
|
||||
|
||||
@@ -14,6 +14,13 @@ block0(v0: f32):
|
||||
; run: %nearest_f32(0x1.5) == 0x1.0
|
||||
; run: %nearest_f32(0x2.9) == 0x1.8p1
|
||||
; run: %nearest_f32(0x1.1p10) == 0x1.1p10
|
||||
; run: %nearest_f32(0x1.400000p1) == 0x1.0p1
|
||||
; run: %nearest_f32(0x1.4cccccp0) == 0x1.0
|
||||
; run: %nearest_f32(0x1.800000p0) == 0x1.0p1
|
||||
; run: %nearest_f32(0x1.b33334p0) == 0x1.0p1
|
||||
; run: %nearest_f32(0x1.99999ap-2) == 0x0.0
|
||||
; run: %nearest_f32(0x1.333334p-1) == 0x1.0
|
||||
; run: %nearest_f32(0x1.666666p1) == 0x1.8p1
|
||||
|
||||
; Negatives
|
||||
; run: %nearest_f32(-0x0.5) == -0x0.0
|
||||
@@ -21,6 +28,13 @@ block0(v0: f32):
|
||||
; run: %nearest_f32(-0x1.5) == -0x1.0
|
||||
; run: %nearest_f32(-0x2.9) == -0x1.8p1
|
||||
; run: %nearest_f32(-0x1.1p10) == -0x1.1p10
|
||||
; run: %nearest_f32(-0x1.333334p-1) == -0x1.0
|
||||
; run: %nearest_f32(-0x1.99999ap-2) == -0x0.0
|
||||
; run: %nearest_f32(-0x1.4cccccp0) == -0x1.0
|
||||
; run: %nearest_f32(-0x1.800000p0) == -0x1.0p1
|
||||
; run: %nearest_f32(-0x1.b33334p0) == -0x1.0p1
|
||||
; run: %nearest_f32(-0x1.400000p1) == -0x1.0p1
|
||||
; run: %nearest_f32(-0x1.666666p1) == -0x1.8p1
|
||||
|
||||
; Specials
|
||||
; run: %nearest_f32(0x0.0) == 0x0.0
|
||||
@@ -71,6 +85,13 @@ block0(v0: f64):
|
||||
; run: %nearest_f64(0x1.5) == 0x1.0
|
||||
; run: %nearest_f64(0x2.9) == 0x1.8p1
|
||||
; run: %nearest_f64(0x1.1p10) == 0x1.1p10
|
||||
; run: %nearest_f64(0x1.4000000000000p1) == 0x1.0p1
|
||||
; run: %nearest_f64(0x1.4cccccccccccdp0) == 0x1.0
|
||||
; run: %nearest_f64(0x1.8000000000000p0) == 0x1.0p1
|
||||
; run: %nearest_f64(0x1.b333333333333p0) == 0x1.0p1
|
||||
; run: %nearest_f64(0x1.999999999999ap-2) == 0x0.0
|
||||
; run: %nearest_f64(0x1.3333333333333p-1) == 0x1.0
|
||||
; run: %nearest_f64(0x1.6666666666666p1) == 0x1.8p1
|
||||
|
||||
; Negatives
|
||||
; run: %nearest_f64(-0x0.5) == -0x0.0
|
||||
@@ -78,6 +99,13 @@ block0(v0: f64):
|
||||
; run: %nearest_f64(-0x1.5) == -0x1.0
|
||||
; run: %nearest_f64(-0x2.9) == -0x1.8p1
|
||||
; run: %nearest_f64(-0x1.1p10) == -0x1.1p10
|
||||
; run: %nearest_f64(-0x1.3333333333333p-1) == -0x1.0
|
||||
; run: %nearest_f64(-0x1.999999999999ap-2) == -0x0.0
|
||||
; run: %nearest_f64(-0x1.4cccccccccccdp0) == -0x1.0
|
||||
; run: %nearest_f64(-0x1.8000000000000p0) == -0x1.0p1
|
||||
; run: %nearest_f64(-0x1.b333333333333p0) == -0x1.0p1
|
||||
; run: %nearest_f64(-0x1.4000000000000p1) == -0x1.0p1
|
||||
; run: %nearest_f64(-0x1.6666666666666p1) == -0x1.8p1
|
||||
|
||||
; Specials
|
||||
; run: %nearest_f64(0x0.0) == 0x0.0
|
||||
|
||||
@@ -14,6 +14,13 @@ block0(v0: f32):
|
||||
; run: %trunc_f32(0x1.5) == 0x1.0
|
||||
; run: %trunc_f32(0x2.9) == 0x1.0p1
|
||||
; run: %trunc_f32(0x1.1p10) == 0x1.1p10
|
||||
; run: %trunc_f32(0x1.400000p1) == 0x1.0p1
|
||||
; run: %trunc_f32(0x1.4cccccp0) == 0x1.0
|
||||
; run: %trunc_f32(0x1.800000p0) == 0x1.0
|
||||
; run: %trunc_f32(0x1.b33334p0) == 0x1.0
|
||||
; run: %trunc_f32(0x1.99999ap-2) == 0x0.0
|
||||
; run: %trunc_f32(0x1.333334p-1) == 0x0.0
|
||||
; run: %trunc_f32(0x1.666666p1) == 0x1.0p1
|
||||
|
||||
; Negatives
|
||||
; run: %trunc_f32(-0x0.5) == -0x0.0
|
||||
@@ -21,6 +28,13 @@ block0(v0: f32):
|
||||
; run: %trunc_f32(-0x1.5) == -0x1.0
|
||||
; run: %trunc_f32(-0x2.9) == -0x1.0p1
|
||||
; run: %trunc_f32(-0x1.1p10) == -0x1.1p10
|
||||
; run: %trunc_f32(-0x1.333334p-1) == -0x0.0
|
||||
; run: %trunc_f32(-0x1.99999ap-2) == -0x0.0
|
||||
; run: %trunc_f32(-0x1.4cccccp0) == -0x1.0
|
||||
; run: %trunc_f32(-0x1.800000p0) == -0x1.0
|
||||
; run: %trunc_f32(-0x1.b33334p0) == -0x1.0
|
||||
; run: %trunc_f32(-0x1.400000p1) == -0x1.0p1
|
||||
; run: %trunc_f32(-0x1.666666p1) == -0x1.0p1
|
||||
|
||||
; Specials
|
||||
; run: %trunc_f32(0x0.0) == 0x0.0
|
||||
@@ -71,6 +85,13 @@ block0(v0: f64):
|
||||
; run: %trunc_f64(0x1.5) == 0x1.0
|
||||
; run: %trunc_f64(0x2.9) == 0x1.0p1
|
||||
; run: %trunc_f64(0x1.1p10) == 0x1.1p10
|
||||
; run: %trunc_f64(0x1.4000000000000p1) == 0x1.0p1
|
||||
; run: %trunc_f64(0x1.4cccccccccccdp0) == 0x1.0
|
||||
; run: %trunc_f64(0x1.8000000000000p0) == 0x1.0
|
||||
; run: %trunc_f64(0x1.b333333333333p0) == 0x1.0
|
||||
; run: %trunc_f64(0x1.999999999999ap-2) == 0x0.0
|
||||
; run: %trunc_f64(0x1.3333333333333p-1) == 0x0.0
|
||||
; run: %trunc_f64(0x1.6666666666666p1) == 0x1.0p1
|
||||
|
||||
; Negatives
|
||||
; run: %trunc_f64(-0x0.5) == -0x0.0
|
||||
@@ -78,6 +99,13 @@ block0(v0: f64):
|
||||
; run: %trunc_f64(-0x1.5) == -0x1.0
|
||||
; run: %trunc_f64(-0x2.9) == -0x1.0p1
|
||||
; run: %trunc_f64(-0x1.1p10) == -0x1.1p10
|
||||
; run: %trunc_f64(-0x1.3333333333333p-1) == -0x0.0
|
||||
; run: %trunc_f64(-0x1.999999999999ap-2) == -0x0.0
|
||||
; run: %trunc_f64(-0x1.4cccccccccccdp0) == -0x1.0
|
||||
; run: %trunc_f64(-0x1.8000000000000p0) == -0x1.0
|
||||
; run: %trunc_f64(-0x1.b333333333333p0) == -0x1.0
|
||||
; run: %trunc_f64(-0x1.4000000000000p1) == -0x1.0p1
|
||||
; run: %trunc_f64(-0x1.6666666666666p1) == -0x1.0p1
|
||||
|
||||
; Specials
|
||||
; run: %trunc_f64(0x0.0) == 0x0.0
|
||||
|
||||
Reference in New Issue
Block a user