1*433075b6Spvalchev /* $OpenBSD: ieeefp.h,v 1.4 2002/04/28 20:55:14 pvalchev Exp $ */ 2df930be7Sderaadt /* $NetBSD: ieeefp.h,v 1.1 1995/04/29 01:09:17 cgd Exp $ */ 3df930be7Sderaadt 4df930be7Sderaadt /* 5df930be7Sderaadt * Written by J.T. Conklin, Apr 28, 1995 6df930be7Sderaadt * Public domain. 7df930be7Sderaadt */ 8df930be7Sderaadt 9df930be7Sderaadt #ifndef _ALPHA_IEEEFP_H_ 10df930be7Sderaadt #define _ALPHA_IEEEFP_H_ 11df930be7Sderaadt 12df930be7Sderaadt typedef int fp_except; 13*433075b6Spvalchev 14*433075b6Spvalchev #ifdef _KERNEL 15*433075b6Spvalchev 16*433075b6Spvalchev #include <sys/param.h> 17*433075b6Spvalchev #include <sys/proc.h> 18*433075b6Spvalchev #include <machine/fpu.h> 19*433075b6Spvalchev #include <machine/cpu.h> 20*433075b6Spvalchev 21*433075b6Spvalchev /* FP_X_IOV is intentionally omitted from the architecture flags mask */ 22*433075b6Spvalchev 23*433075b6Spvalchev #define FP_AA_FLAGS (FP_X_INV | FP_X_DZ | FP_X_OFL | FP_X_UFL | FP_X_IMP) 24*433075b6Spvalchev 25*433075b6Spvalchev #define float_raise(f) \ 26*433075b6Spvalchev do curproc->p_md.md_flags |= OPENBSD_FLAG_TO_FP_C(f); \ 27*433075b6Spvalchev while(0) 28*433075b6Spvalchev 29*433075b6Spvalchev #define float_set_inexact() float_raise(FP_X_IMP) 30*433075b6Spvalchev #define float_set_invalid() float_raise(FP_X_INV) 31*433075b6Spvalchev #define fpgetround() (alpha_read_fpcr() >> 58 & 3) 32*433075b6Spvalchev 33*433075b6Spvalchev #endif 34*433075b6Spvalchev 35df930be7Sderaadt #define FP_X_INV 0x01 /* invalid operation exception */ 36df930be7Sderaadt #define FP_X_DZ 0x02 /* divide-by-zero exception */ 37df930be7Sderaadt #define FP_X_OFL 0x04 /* overflow exception */ 38df930be7Sderaadt #define FP_X_UFL 0x08 /* underflow exception */ 39df930be7Sderaadt #define FP_X_IMP 0x10 /* imprecise (loss of precision; "inexact") */ 40*433075b6Spvalchev #define FP_X_IOV 0x20 /* integer overflow */ 41df930be7Sderaadt 42*433075b6Spvalchev /* 43*433075b6Spvalchev * fp_rnd bits match the fpcr, below, as well as bits 12:11 44*433075b6Spvalchev * in fp operate instructions 45*433075b6Spvalchev */ 46df930be7Sderaadt typedef enum { 47df930be7Sderaadt FP_RZ = 0, /* round to zero (truncate) */ 48df930be7Sderaadt FP_RM = 1, /* round toward negative infinity */ 49df930be7Sderaadt FP_RN = 2, /* round to nearest representable number */ 50*433075b6Spvalchev FP_RP = 3, /* round toward positive infinity */ 51*433075b6Spvalchev _FP_DYNAMIC=FP_RP 52df930be7Sderaadt } fp_rnd; 53df930be7Sderaadt 54df930be7Sderaadt #endif /* _ALPHA_IEEEFP_H_ */ 55