1*2fa72412Spirofti /* $OpenBSD: ieeefp.h,v 1.4 2011/03/23 16:54:36 pirofti Exp $ */ 2f58c7388Spefo 3f58c7388Spefo /* 4f58c7388Spefo * Written by J.T. Conklin, Apr 11, 1995 5f58c7388Spefo * Public domain. 6f58c7388Spefo */ 7f58c7388Spefo 8*2fa72412Spirofti #ifndef _MIPS64_IEEEFP_H_ 9*2fa72412Spirofti #define _MIPS64_IEEEFP_H_ 10f58c7388Spefo 11f58c7388Spefo typedef int fp_except; 12f58c7388Spefo #define FP_X_IMP 0x01 /* imprecise (loss of precision) */ 13f58c7388Spefo #define FP_X_UFL 0x02 /* underflow exception */ 14f58c7388Spefo #define FP_X_OFL 0x04 /* overflow exception */ 15f58c7388Spefo #define FP_X_DZ 0x08 /* divide-by-zero exception */ 16f58c7388Spefo #define FP_X_INV 0x10 /* invalid operation exception */ 17f58c7388Spefo 18f58c7388Spefo typedef enum { 19f58c7388Spefo FP_RN=0, /* round to nearest representable number */ 20f58c7388Spefo FP_RZ=1, /* round to zero (truncate) */ 21f58c7388Spefo FP_RP=2, /* round toward positive infinity */ 22f58c7388Spefo FP_RM=3 /* round toward negative infinity */ 23f58c7388Spefo } fp_rnd; 24f58c7388Spefo 25dd191549Smiod #ifdef _KERNEL 26dd191549Smiod 27dd191549Smiod /* 28dd191549Smiod * Defines for the floating-point completion/emulation code. 29dd191549Smiod */ 30dd191549Smiod 31dd191549Smiod #include <sys/param.h> 32dd191549Smiod #include <sys/systm.h> 33dd191549Smiod #include <sys/proc.h> 34dd191549Smiod #include <machine/fpu.h> 35dd191549Smiod 36dd191549Smiod #define float_raise(bits) \ 37dd191549Smiod do { curproc->p_md.md_regs->fsr |= (bits) << FPCSR_C_SHIFT; } while (0) 38dd191549Smiod #define float_set_inexact() float_raise(FP_X_IMP) 39dd191549Smiod #define float_set_invalid() float_raise(FP_X_INV) 40dd191549Smiod 41dd191549Smiod #define float_get_round(csr) (csr & FPCSR_RM_MASK) 42dd191549Smiod #define fpgetround() float_get_round(curproc->p_md.md_regs->fsr) 43dd191549Smiod 44dd191549Smiod #endif 45dd191549Smiod 46*2fa72412Spirofti #endif /* !_MIPS64_IEEEFP_H_ */ 47