diff --git a/src/ARCH_SRC/cray_gu/gu.c b/src/ARCH_SRC/cray_gu/gu.c new file mode 100644 index 0000000000000000000000000000000000000000..24581c7e06e7b6efaeae025b894cd22f80b30634 --- /dev/null +++ b/src/ARCH_SRC/cray_gu/gu.c @@ -0,0 +1,45 @@ +/* + +* Copyright -2022 Hewlett Packard Enterprise Development LP + +*/ + +void __cce_floatingpt_gu( void ); // Gradual Underflow. + + + +static void (*p)(void) __attribute__((section(".init_array"))) = __cce_floatingpt_gu; + + + +#define DENORMS_ARE_ZEROS 6 + +#define FLUSH_TO_ZERO_MASK 15 + + + +void __cce_floatingpt_gu( void ) + +{ + + unsigned long gu_src = (1 << DENORMS_ARE_ZEROS); + + unsigned long gu_dst = (1 << FLUSH_TO_ZERO_MASK); + + + + do { + + unsigned long __mxcsr; + + __asm__ volatile("stmxcsr %0" : : "m" (__mxcsr)); + + __mxcsr &= ~(gu_src | gu_dst); + + __asm__ volatile("ldmxcsr %0" : : "m" (__mxcsr)); + + } + + while (0); + +}