1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- * Copyright (C) 2016-2017 Andes Technology, Inc.
- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
- */
- #ifndef _FPU_CONTROL_H
- #ifdef __NDS32_ABI_2FP_PLUS__
- /*
- * Andes Floating-Point Control Status Register
- * 31-20 -> Reserved
- * 19 -> RIT (RO)
- * 18 -> DNIT(RO)
- * 17 -> IEXT(RO)
- * 16 -> UDFT(RO)
- * 15 -> OVFT(RO)
- * 14 -> DBZT(RO)
- * 13 -> IVOT(RO)
- * 12 -> DNZ(RW),Denormalized flush-to-Zero mode.
- * 11 -> IEXE(RW),IEEE Ineaxct (IEX) exception trapping enable.
- * 10 -> UDFE(RW),IEEE Underflow (UDF) exception trapping enable.
- * 9 -> OVFE(RW),IEEE Overflow (OVF) exception trapping enable.
- * 8 -> DBZE(RW),IEEE Divide by Zero (DBZ) exception trapping enable.
- * 7 -> IVOE(RW),IEEE Invalid Operation (IVO) exception trapping enable.
- * 6 -> IEX(RW),IEEE Inexact (IEX) cumulative exception flag.
- * 5 -> UDF(RW),IEEE Underflow (UDF) cumulative exception flag.
- * 4 -> OVF(RW),IEEE Overflow (OVF) cumulative exception flag.
- * 3 -> DBZ(RW),IEEE Divide by Zero (DBZ) cumulative exception flag.
- * 2 -> IVO(RW),IEEE Invalid Operation (IVO) cumulative exception flag.
- * 1-0 -> Rounding modes.
- *
- * Rounding modes.
- * 00 - rounding to nearest (RN)
- * 01 - rounding (up) toward plus infinity (RP)
- * 10 - rounding (down)toward minus infinity (RM)
- * 11 - rounding toward zero (RZ)
- *
- */
- /* masking of interrupts */
- #define _FPU_MASK_IEX 0x0800 /* Invalid operation */
- #define _FPU_MASK_UDF 0x0400 /* Underflow */
- #define _FPU_MASK_OVF 0x0200 /* Overflow */
- #define _FPU_MASK_DBZ 0x0100 /* Division by zero */
- #define _FPU_MASK_IVO 0x0080 /* Invalid operation */
- /*Reserved and read-only bits*/
- #define _FPU_RESERVED 0xffffe000
- #define _FPU_DEFAULT 0x00000000
- /* Default + exceptions enabled. */
- #define _FPU_IEEE (_FPU_DEFAULT | 0x00000f80)
- /* Type of the control word. */
- typedef unsigned int fpu_control_t;
- /* Macros for accessing the hardware control word. */
- /* This is fmrx %0, fpscr. */
- #define _FPU_GETCW(cw) \
- __asm__ __volatile__ ("fmfcsr\t %0\n\t" : "=r" (cw))
- /* This is fmxr fpscr, %0. */
- #define _FPU_SETCW(cw) \
- __asm__ __volatile__ ("fmtcsr\t %0\n\t": : "r" (cw))
- /* Default control word set at startup. */
- extern fpu_control_t __fpu_control;
- #else
- #define _FPU_GETCW(cw) (cw) = 0
- #define _FPU_SETCW(cw) (void) (cw)
- #define _FPU_RESERVED 0xffffffff
- #define _FPU_DEFAULT 0x00000000
- typedef unsigned int fpu_control_t;
- extern fpu_control_t __fpu_control;
- #endif //__NDS32_ABI_2FP_PLUS__
- #endif //_FPU_CONTROL_H
|