| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |