fpu.h (55205) | fpu.h (57890) |
---|---|
1/*- 2 * Copyright (c) 1990 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * William Jolitz. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 20 unchanged lines hidden (view full) --- 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * 36 * from: @(#)npx.h 5.3 (Berkeley) 1/18/91 | 1/*- 2 * Copyright (c) 1990 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * William Jolitz. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 20 unchanged lines hidden (view full) --- 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * 36 * from: @(#)npx.h 5.3 (Berkeley) 1/18/91 |
37 * $FreeBSD: head/sys/amd64/include/fpu.h 55205 1999-12-29 04:46:21Z peter $ | 37 * $FreeBSD: head/sys/amd64/include/fpu.h 57890 2000-03-10 17:56:33Z cracauer $ |
38 */ 39 40/* 41 * 287/387 NPX Coprocessor Data Structures and Constants 42 * W. Jolitz 1/90 43 */ 44 45#ifndef _MACHINE_NPX_H_ --- 36 unchanged lines hidden (view full) --- 82 * before it is inspected for ptracing or for core dumps. Some 83 * emulators overwrite the whole struct. We have no good way of 84 * knowing how much padding to leave. Leave just enough for the 85 * GPL emulator's i387_union (176 bytes total). 86 */ 87 u_char sv_pad[64]; /* padding; used by emulators */ 88}; 89 | 38 */ 39 40/* 41 * 287/387 NPX Coprocessor Data Structures and Constants 42 * W. Jolitz 1/90 43 */ 44 45#ifndef _MACHINE_NPX_H_ --- 36 unchanged lines hidden (view full) --- 82 * before it is inspected for ptracing or for core dumps. Some 83 * emulators overwrite the whole struct. We have no good way of 84 * knowing how much padding to leave. Leave just enough for the 85 * GPL emulator's i387_union (176 bytes total). 86 */ 87 u_char sv_pad[64]; /* padding; used by emulators */ 88}; 89 |
90/* Intel prefers long real (53 bit) precision */ 91#define __iBCS_NPXCW__ 0x262 92/* wfj prefers temporary real (64 bit) precision */ 93#define __386BSD_NPXCW__ 0x362 | |
94/* | 90/* |
95 * bde prefers 53 bit precision and all exceptions masked. | 91 * The hardware default control word for i387's and later coprocessors is 92 * 0x37F, giving: |
96 * | 93 * |
97 * The standard control word from finit is 0x37F, giving: 98 * | |
99 * round to nearest 100 * 64-bit precision 101 * all exceptions masked. 102 * | 94 * round to nearest 95 * 64-bit precision 96 * all exceptions masked. 97 * |
103 * Now I want: | 98 * We modify the affine mode bit and precision bits in this to give: |
104 * 105 * affine mode for 287's (if they work at all) (1 in bitfield 1<<12) 106 * 53-bit precision (2 in bitfield 3<<8) | 99 * 100 * affine mode for 287's (if they work at all) (1 in bitfield 1<<12) 101 * 53-bit precision (2 in bitfield 3<<8) |
107 * overflow exception unmasked (0 in bitfield 1<<3) 108 * zero divide exception unmasked (0 in bitfield 1<<2) 109 * invalid-operand exception unmasked (0 in bitfield 1<<0). | |
110 * 111 * 64-bit precision often gives bad results with high level languages 112 * because it makes the results of calculations depend on whether 113 * intermediate values are stored in memory or in FPU registers. | 102 * 103 * 64-bit precision often gives bad results with high level languages 104 * because it makes the results of calculations depend on whether 105 * intermediate values are stored in memory or in FPU registers. |
114 * 115 * The "Intel" and wfj control words have: 116 * 117 * underflow exception unmasked (0 in bitfield 1<<4) 118 * 119 * but that causes an unexpected exception in the test program 'paranoia' 120 * and makes denormals useless (DBL_MIN / 2 underflows). It doesn't make 121 * a lot of sense to trap underflow without trapping denormals. 122 * 123 * Later I will want the IEEE default of all exceptions masked. See the 124 * 0.0 math manpage for why this is better. The 0.1 math manpage is empty. | |
125 */ | 106 */ |
126#define __BDE_NPXCW__ 0x1272 127#define __BETTER_BDE_NPXCW__ 0x127f | 107#define __INITIAL_NPXCW__ 0x127F |
128 | 108 |
129#ifdef __BROKEN_NPXCW__ 130#ifdef __FreeBSD__ 131#define __INITIAL_NPXCW__ __386BSD_NPXCW__ 132#else 133#define __INITIAL_NPXCW__ __iBCS_NPXCW__ 134#endif 135#else 136#define __INITIAL_NPXCW__ __BDE_NPXCW__ 137#endif 138 | |
139#ifdef _KERNEL 140#ifndef npxproc 141extern struct proc *npxproc; 142#endif 143 144int npxdna __P((void)); 145void npxexit __P((struct proc *p)); 146void npxinit __P((int control)); 147void npxsave __P((struct save87 *addr)); 148#endif 149 150#endif /* !_MACHINE_NPX_H_ */ | 109#ifdef _KERNEL 110#ifndef npxproc 111extern struct proc *npxproc; 112#endif 113 114int npxdna __P((void)); 115void npxexit __P((struct proc *p)); 116void npxinit __P((int control)); 117void npxsave __P((struct save87 *addr)); 118#endif 119 120#endif /* !_MACHINE_NPX_H_ */ |