38 lines · c
1// SPDX-License-Identifier: GPL-2.0+2 3#include <linux/errno.h>4 5#include "test_fpu.h"6 7int test_fpu(void)8{9 /*10 * This sequence of operations tests that rounding mode is11 * to nearest and that denormal numbers are supported.12 * Volatile variables are used to avoid compiler optimizing13 * 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 else36 return -EINVAL;37}38