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