1*29cc2a2dSguenther /* $OpenBSD: fpgetround.c,v 1.5 2016/07/26 19:07:09 guenther Exp $ */ 2c9d6e9aeSmiod 3c9d6e9aeSmiod /* 44451fc0fSmiod * Written by Miodrag Vallat. Public domain 5c9d6e9aeSmiod */ 6c9d6e9aeSmiod 7c9d6e9aeSmiod #include <sys/types.h> 8c9d6e9aeSmiod #include <ieeefp.h> 9c9d6e9aeSmiod 10c9d6e9aeSmiod fp_rnd fpgetround(void)11*29cc2a2dSguentherfpgetround(void) 12c9d6e9aeSmiod { 138524f5e4Smickey u_int64_t fpsr; 14c9d6e9aeSmiod 15b5aa3b33Sguenther __asm__ volatile("fstd %%fr0,0(%1)" : "=m" (fpsr) : "r" (&fpsr)); 168524f5e4Smickey return ((fpsr >> 41) & 0x3); 17c9d6e9aeSmiod } 18*29cc2a2dSguenther DEF_WEAK(fpgetround); 19