1 // SPDX-License-Identifier: GPL-2.0+ 2 3 #include <linux/errno.h> 4 5 #include "test_fpu.h" 6 7 int test_fpu(void) 8 { 9 /* 10 * This sequence of operations tests that rounding mode is 11 * to nearest and that denormal numbers are supported. 12 * Volatile variables are used to avoid compiler optimizing 13 * the calculations away. 14 */ 15 volatile double a, b, c, d, e, f, g; 16 17 a = 4.0; 18 b = 1e-15; 19 c = 1e-310; 20 21 /* Sets precision flag */ 22 d = a + b; 23 24 /* Result depends on rounding mode */ 25 e = a + b / 2; 26 27 /* Denormal and very large values */ 28 f = b / c; 29 30 /* Depends on denormal support */ 31 g = a + c * f; 32 33 if (d > a && e > a && g > a) 34 return 0; 35 else 36 return -EINVAL; 37 } 38