123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #ifndef _FPU_CONTROL_H
- #define _FPU_CONTROL_H
- #include <features.h>
- #define _FPU_RC_NEAREST 0x00
- #define _FPU_RC_DOWN 0x03
- #define _FPU_RC_UP 0x02
- #define _FPU_RC_ZERO 0x01
- #define _FPU_MASK_NI 0x04
- #define _FPU_MASK_ZM 0x10
- #define _FPU_MASK_OM 0x40
- #define _FPU_MASK_UM 0x20
- #define _FPU_MASK_XM 0x08
- #define _FPU_MASK_IM 0x80
- #define _FPU_DEFAULT 0x00000000
- typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__)));
- #ifdef __CONFIG_E500__
- #define _FPU_RESERVED 0xff3fff7f
- #define _FPU_IEEE 0x000003c0
- #define _FPU_GETCW(__cw) ({ \
- unsigned int env; \
- __asm__ __volatile__ ("mfspefscr %0" : "=r" (env)); \
- (__cw) = env; })
- #define _FPU_SETCW(__cw) ({ \
- unsigned int env = __cw; \
- __asm__ __volatile__ ("mtspefscr %0" : : "r" (env)); })
- #else
- #define _FPU_RESERVED 0xffffff00
- #define _FPU_IEEE 0x000000f0
- #define _FPU_GETCW(__cw) ( { \
- union { double d; fpu_control_t cw[2]; } \
- tmp __attribute__ ((__aligned__(8))); \
- __asm__ ("mffs 0; stfd%U0 0,%0" : "=m" (tmp.d) : : "fr0"); \
- (__cw)=tmp.cw[1]; \
- tmp.cw[1]; } )
- #define _FPU_SETCW(__cw) { \
- union { double d; fpu_control_t cw[2]; } \
- tmp __attribute__ ((__aligned__(8))); \
- tmp.cw[0] = 0xFFF80000; \
- tmp.cw[1] = __cw; \
- __asm__ ("lfd%U0 0,%0; mtfsf 255,0" : : "m" (tmp.d) : "fr0"); \
- }
- #endif
- #if 0
- extern fpu_control_t __fpu_control;
- #endif
- #endif
|