Statistics
| Branch: | Revision:

root / target-arm / nwfpe / fpsr.h @ 3b46e624

History | View | Annotate | Download (3.8 kB)

1
/*
2
    NetWinder Floating Point Emulator
3
    (c) Rebel.com, 1998-1999
4

5
    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
6

7
    This program is free software; you can redistribute it and/or modify
8
    it under the terms of the GNU General Public License as published by
9
    the Free Software Foundation; either version 2 of the License, or
10
    (at your option) any later version.
11

12
    This program is distributed in the hope that it will be useful,
13
    but WITHOUT ANY WARRANTY; without even the implied warranty of
14
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
    GNU General Public License for more details.
16

17
    You should have received a copy of the GNU General Public License
18
    along with this program; if not, write to the Free Software
19
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
*/
21

    
22
#ifndef __FPSR_H__
23
#define __FPSR_H__
24

    
25
/*
26
The FPSR is a 32 bit register consisting of 4 parts, each exactly
27
one byte.
28

29
        SYSTEM ID
30
        EXCEPTION TRAP ENABLE BYTE
31
        SYSTEM CONTROL BYTE
32
        CUMULATIVE EXCEPTION FLAGS BYTE
33

34
The FPCR is a 32 bit register consisting of bit flags.
35
*/
36

    
37
/* SYSTEM ID
38
------------
39
Note: the system id byte is read only  */
40

    
41
typedef unsigned int FPSR;  /* type for floating point status register */
42
typedef unsigned int FPCR;  /* type for floating point control register */
43

    
44
#define MASK_SYSID                0xff000000
45
#define BIT_HARDWARE                0x80000000
46
#define FP_EMULATOR                0x01000000        /* System ID for emulator */
47
#define FP_ACCELERATOR                0x81000000        /* System ID for FPA11 */
48

    
49
/* EXCEPTION TRAP ENABLE BYTE
50
----------------------------- */
51

    
52
#define MASK_TRAP_ENABLE        0x00ff0000
53
#define MASK_TRAP_ENABLE_STRICT        0x001f0000
54
#define BIT_IXE                0x00100000   /* inexact exception enable */
55
#define BIT_UFE                0x00080000   /* underflow exception enable */
56
#define BIT_OFE                0x00040000   /* overflow exception enable */
57
#define BIT_DZE                0x00020000   /* divide by zero exception enable */
58
#define BIT_IOE                0x00010000   /* invalid operation exception enable */
59

    
60
/* SYSTEM CONTROL BYTE
61
---------------------- */
62

    
63
#define MASK_SYSTEM_CONTROL        0x0000ff00
64
#define MASK_TRAP_STRICT        0x00001f00
65

    
66
#define BIT_AC        0x00001000        /* use alternative C-flag definition
67
                                   for compares */
68
#define BIT_EP        0x00000800        /* use expanded packed decimal format */
69
#define BIT_SO        0x00000400        /* select synchronous operation of FPA */
70
#define BIT_NE        0x00000200        /* NaN exception bit */
71
#define BIT_ND        0x00000100        /* no denormalized numbers bit */
72

    
73
/* CUMULATIVE EXCEPTION FLAGS BYTE
74
---------------------------------- */
75

    
76
#define MASK_EXCEPTION_FLAGS                0x000000ff
77
#define MASK_EXCEPTION_FLAGS_STRICT        0x0000001f
78

    
79
#define BIT_IXC                0x00000010        /* inexact exception flag */
80
#define BIT_UFC                0x00000008        /* underflow exception flag */
81
#define BIT_OFC                0x00000004        /* overfloat exception flag */
82
#define BIT_DZC                0x00000002        /* divide by zero exception flag */
83
#define BIT_IOC                0x00000001        /* invalid operation exception flag */
84

    
85
/* Floating Point Control Register
86
----------------------------------*/
87

    
88
#define BIT_RU                0x80000000        /* rounded up bit */
89
#define BIT_IE                0x10000000        /* inexact bit */
90
#define BIT_MO                0x08000000        /* mantissa overflow bit */
91
#define BIT_EO                0x04000000        /* exponent overflow bit */
92
#define BIT_SB                0x00000800        /* store bounce */
93
#define BIT_AB                0x00000400        /* arithmetic bounce */
94
#define BIT_RE                0x00000200        /* rounding exception */
95
#define BIT_DA                0x00000100        /* disable FPA */
96

    
97
#define MASK_OP                0x00f08010        /* AU operation code */
98
#define MASK_PR                0x00080080        /* AU precision */
99
#define MASK_S1                0x00070000        /* AU source register 1 */
100
#define MASK_S2                0x00000007        /* AU source register 2 */
101
#define MASK_DS                0x00007000        /* AU destination register */
102
#define MASK_RM                0x00000060        /* AU rounding mode */
103
#define MASK_ALU        0x9cfff2ff        /* only ALU can write these bits */
104
#define MASK_RESET        0x00000d00        /* bits set on reset, all others cleared */
105
#define MASK_WFC        MASK_RESET
106
#define MASK_RFC        ~MASK_RESET
107

    
108
#endif