The tests for the SIMD floating-point maximum and minimum operations require particular care because the handling of the NaN values is non-deterministic and may vary between platforms. There is no way to match several NaN values in a test, so the solution is to extract the non-deterministic test cases into a separate file that is subsequently replicated for every backend under test, with adjustments made to the expected results. Copyright (c) 2021, Arm Limited.
24 lines
679 B
Plaintext
24 lines
679 B
Plaintext
; Test the non-deterministic aspects of the SIMD arithmetic operations.
|
|
; If you change this file, you should most likely update
|
|
; simd-arithmetic-nondeterministic*.clif as well.
|
|
test run
|
|
target aarch64
|
|
|
|
function %fmax_f64x2(f64x2, f64x2) -> f64x2 {
|
|
block0(v0: f64x2, v1: f64x2):
|
|
v2 = fmax v0, v1
|
|
return v2
|
|
}
|
|
|
|
; run: %fmax_f64x2([NaN:0x42 0.0], [0x1.0 0.0]) == [NaN:0x42 0.0]
|
|
|
|
function %fmin_f64x2(f64x2, f64x2) -> f64x2 {
|
|
block0(v0: f64x2, v1: f64x2):
|
|
v2 = fmin v0, v1
|
|
return v2
|
|
}
|
|
|
|
; run: %fmin_f64x2([-NaN 0x100.0], [0.0 NaN]) == [-NaN NaN]
|
|
; run: %fmin_f64x2([NaN 0.0], [0.0 0.0]) == [NaN 0.0]
|
|
; run: %fmin_f64x2([NaN:0x42 0.0], [0x1.0 0.0]) == [NaN:0x42 0.0]
|