Blame view

kernel/linux-imx6_3.14.28/arch/arm/nwfpe/fpsr.h 3.82 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
  /*
      NetWinder Floating Point Emulator
      (c) Rebel.com, 1998-1999
  
      Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
  
      This program is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published by
      the Free Software Foundation; either version 2 of the License, or
      (at your option) any later version.
  
      This program is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      GNU General Public License for more details.
  
      You should have received a copy of the GNU General Public License
      along with this program; if not, write to the Free Software
      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
  
  #ifndef __FPSR_H__
  #define __FPSR_H__
  
  /*
  The FPSR is a 32 bit register consisting of 4 parts, each exactly
  one byte.
  
  	SYSTEM ID
  	EXCEPTION TRAP ENABLE BYTE
  	SYSTEM CONTROL BYTE
  	CUMULATIVE EXCEPTION FLAGS BYTE
  
  The FPCR is a 32 bit register consisting of bit flags.
  */
  
  /* SYSTEM ID
  ------------
  Note: the system id byte is read only  */
  
  typedef unsigned int FPSR;	/* type for floating point status register */
  typedef unsigned int FPCR;	/* type for floating point control register */
  
  #define MASK_SYSID		0xff000000
  #define BIT_HARDWARE		0x80000000
  #define FP_EMULATOR		0x01000000	/* System ID for emulator */
  #define FP_ACCELERATOR		0x81000000	/* System ID for FPA11 */
  
  /* EXCEPTION TRAP ENABLE BYTE
  ----------------------------- */
  
  #define MASK_TRAP_ENABLE	0x00ff0000
  #define MASK_TRAP_ENABLE_STRICT	0x001f0000
  #define BIT_IXE		0x00100000	/* inexact exception enable */
  #define BIT_UFE		0x00080000	/* underflow exception enable */
  #define BIT_OFE		0x00040000	/* overflow exception enable */
  #define BIT_DZE		0x00020000	/* divide by zero exception enable */
  #define BIT_IOE		0x00010000	/* invalid operation exception enable */
  
  /* SYSTEM CONTROL BYTE
  ---------------------- */
  
  #define MASK_SYSTEM_CONTROL	0x0000ff00
  #define MASK_TRAP_STRICT	0x00001f00
  
  #define BIT_AC	0x00001000	/* use alternative C-flag definition
  				   for compares */
  #define BIT_EP	0x00000800	/* use expanded packed decimal format */
  #define BIT_SO	0x00000400	/* select synchronous operation of FPA */
  #define BIT_NE	0x00000200	/* NaN exception bit */
  #define BIT_ND	0x00000100	/* no denormalized numbers bit */
  
  /* CUMULATIVE EXCEPTION FLAGS BYTE
  ---------------------------------- */
  
  #define MASK_EXCEPTION_FLAGS		0x000000ff
  #define MASK_EXCEPTION_FLAGS_STRICT	0x0000001f
  
  #define BIT_IXC		0x00000010	/* inexact exception flag */
  #define BIT_UFC		0x00000008	/* underflow exception flag */
  #define BIT_OFC		0x00000004	/* overfloat exception flag */
  #define BIT_DZC		0x00000002	/* divide by zero exception flag */
  #define BIT_IOC		0x00000001	/* invalid operation exception flag */
  
  /* Floating Point Control Register
  ----------------------------------*/
  
  #define BIT_RU		0x80000000	/* rounded up bit */
  #define BIT_IE		0x10000000	/* inexact bit */
  #define BIT_MO		0x08000000	/* mantissa overflow bit */
  #define BIT_EO		0x04000000	/* exponent overflow bit */
  #define BIT_SB		0x00000800	/* store bounce */
  #define BIT_AB		0x00000400	/* arithmetic bounce */
  #define BIT_RE		0x00000200	/* rounding exception */
  #define BIT_DA		0x00000100	/* disable FPA */
  
  #define MASK_OP		0x00f08010	/* AU operation code */
  #define MASK_PR		0x00080080	/* AU precision */
  #define MASK_S1		0x00070000	/* AU source register 1 */
  #define MASK_S2		0x00000007	/* AU source register 2 */
  #define MASK_DS		0x00007000	/* AU destination register */
  #define MASK_RM		0x00000060	/* AU rounding mode */
  #define MASK_ALU	0x9cfff2ff	/* only ALU can write these bits */
  #define MASK_RESET	0x00000d00	/* bits set on reset, all others cleared */
  #define MASK_WFC	MASK_RESET
  #define MASK_RFC	~MASK_RESET
  
  #endif