1*2fe8fb19SBen Gras /* $NetBSD: fpgetround.c,v 1.4 2005/12/24 21:42:32 perry Exp $ */ 2*2fe8fb19SBen Gras 3*2fe8fb19SBen Gras /* $OpenBSD: fpgetround.c,v 1.3 2002/10/21 18:41:05 mickey Exp $ */ 4*2fe8fb19SBen Gras 5*2fe8fb19SBen Gras /* 6*2fe8fb19SBen Gras * Written by Miodrag Vallat. Public domain 7*2fe8fb19SBen Gras */ 8*2fe8fb19SBen Gras 9*2fe8fb19SBen Gras #include <sys/cdefs.h> 10*2fe8fb19SBen Gras #if defined(LIBC_SCCS) && !defined(lint) 11*2fe8fb19SBen Gras __RCSID("$NetBSD: fpgetround.c,v 1.4 2005/12/24 21:42:32 perry Exp $"); 12*2fe8fb19SBen Gras #endif /* LIBC_SCCS and not lint */ 13*2fe8fb19SBen Gras 14*2fe8fb19SBen Gras #include <sys/types.h> 15*2fe8fb19SBen Gras #include <ieeefp.h> 16*2fe8fb19SBen Gras 17*2fe8fb19SBen Gras fp_rnd 18*2fe8fb19SBen Gras fpgetround(void) 19*2fe8fb19SBen Gras { 20*2fe8fb19SBen Gras uint64_t fpsr; 21*2fe8fb19SBen Gras 22*2fe8fb19SBen Gras __asm volatile("fstd %%fr0,0(%1)" : "=m" (fpsr) : "r" (&fpsr)); 23*2fe8fb19SBen Gras return ((fpsr >> 41) & 0x3); 24*2fe8fb19SBen Gras } 25