Deleted Added
full compact
fpu.h (103834) fpu.h (114349)
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 103834 2002-09-23 05:55:10Z peter $
37 * $FreeBSD: head/sys/amd64/include/fpu.h 114349 2003-05-01 01:05:25Z peter $
38 */
39
40/*
41 * 287/387 NPX Coprocessor Data Structures and Constants
42 * W. Jolitz 1/90
43 */
44
45#ifndef _MACHINE_NPX_H_
46#define _MACHINE_NPX_H_
47
38 */
39
40/*
41 * 287/387 NPX Coprocessor Data Structures and Constants
42 * W. Jolitz 1/90
43 */
44
45#ifndef _MACHINE_NPX_H_
46#define _MACHINE_NPX_H_
47
48/* Environment information of floating point unit */
49struct env87 {
50 long en_cw; /* control word (16bits) */
51 long en_sw; /* status word (16bits) */
52 long en_tw; /* tag word (16bits) */
53 long en_fip; /* floating point instruction pointer */
54 u_short en_fcs; /* floating code segment selector */
55 u_short en_opcode; /* opcode last executed (11 bits ) */
56 long en_foo; /* floating operand offset */
57 long en_fos; /* floating operand segment selector */
58};
59
60/* Contents of each floating point accumulator */
48/* Contents of each x87 floating point accumulator */
61struct fpacc87 {
49struct fpacc87 {
62#ifdef dontdef /* too unportable */
63 u_long fp_mantlo; /* mantissa low (31:0) */
64 u_long fp_manthi; /* mantissa high (63:32) */
65 int fp_exp:15; /* exponent */
66 int fp_sgn:1; /* mantissa sign */
67#else
68 u_char fp_bytes[10];
50 u_char fp_bytes[10];
69#endif
70};
71
51};
52
72/* Floating point context */
73struct save87 {
74 struct env87 sv_env; /* floating point control/status */
75 struct fpacc87 sv_ac[8]; /* accumulator contents, 0-7 */
76 u_char sv_pad0[4]; /* padding for (now unused) saved status word */
77 /*
78 * Bogus padding for emulators. Emulators should use their own
79 * struct and arrange to store into this struct (ending here)
80 * before it is inspected for ptracing or for core dumps. Some
81 * emulators overwrite the whole struct. We have no good way of
82 * knowing how much padding to leave. Leave just enough for the
83 * GPL emulator's i387_union (176 bytes total).
84 */
85 u_char sv_pad[64]; /* padding; used by emulators */
53/* Contents of each SSE extended accumulator */
54struct xmmacc {
55 u_char xmm_bytes[16];
86};
87
88struct envxmm {
89 u_int16_t en_cw; /* control word (16bits) */
90 u_int16_t en_sw; /* status word (16bits) */
56};
57
58struct envxmm {
59 u_int16_t en_cw; /* control word (16bits) */
60 u_int16_t en_sw; /* status word (16bits) */
91 u_int16_t en_tw; /* tag word (16bits) */
61 u_int8_t en_tw; /* tag word (8bits) */
62 u_int8_t en_zero;
92 u_int16_t en_opcode; /* opcode last executed (11 bits ) */
63 u_int16_t en_opcode; /* opcode last executed (11 bits ) */
93 u_int32_t en_fip; /* floating point instruction pointer */
94 u_int16_t en_fcs; /* floating code segment selector */
95 u_int16_t en_pad0; /* padding */
96 u_int32_t en_foo; /* floating operand offset */
97 u_int16_t en_fos; /* floating operand segment selector */
98 u_int16_t en_pad1; /* padding */
64 u_int64_t en_rip; /* floating point instruction pointer */
65 u_int64_t en_rdp; /* floating operand pointer */
99 u_int32_t en_mxcsr; /* SSE sontorol/status register */
66 u_int32_t en_mxcsr; /* SSE sontorol/status register */
100 u_int32_t en_pad2; /* padding */
67 u_int32_t en_mxcsr_mask; /* valid bits in mxcsr */
101};
102
68};
69
103/* Contents of each SSE extended accumulator */
104struct xmmacc {
105 u_char xmm_bytes[16];
106};
107
108struct savexmm {
70struct savefpu {
109 struct envxmm sv_env;
110 struct {
111 struct fpacc87 fp_acc;
112 u_char fp_pad[6]; /* padding */
113 } sv_fp[8];
71 struct envxmm sv_env;
72 struct {
73 struct fpacc87 fp_acc;
74 u_char fp_pad[6]; /* padding */
75 } sv_fp[8];
114 struct xmmacc sv_xmm[8];
115 u_char sv_pad[224];
76 struct xmmacc sv_xmm[16];
77 u_char sv_pad[96];
116} __aligned(16);
117
78} __aligned(16);
79
118union savefpu {
119 struct save87 sv_87;
120 struct savexmm sv_xmm;
121};
122
123/*
124 * The hardware default control word for i387's and later coprocessors is
125 * 0x37F, giving:
126 *
127 * round to nearest
128 * 64-bit precision
129 * all exceptions masked.
130 *

--- 8 unchanged lines hidden (view full) ---

139 */
140#define __INITIAL_NPXCW__ 0x127F
141
142#ifdef _KERNEL
143int npxdna(void);
144void npxdrop(void);
145void npxexit(struct thread *td);
146int npxformat(void);
80/*
81 * The hardware default control word for i387's and later coprocessors is
82 * 0x37F, giving:
83 *
84 * round to nearest
85 * 64-bit precision
86 * all exceptions masked.
87 *

--- 8 unchanged lines hidden (view full) ---

96 */
97#define __INITIAL_NPXCW__ 0x127F
98
99#ifdef _KERNEL
100int npxdna(void);
101void npxdrop(void);
102void npxexit(struct thread *td);
103int npxformat(void);
147int npxgetregs(struct thread *td, union savefpu *addr);
104int npxgetregs(struct thread *td, struct savefpu *addr);
148void npxinit(u_short control);
105void npxinit(u_short control);
149void npxsave(union savefpu *addr);
150void npxsetregs(struct thread *td, union savefpu *addr);
106void npxsave(struct savefpu *addr);
107void npxsetregs(struct thread *td, struct savefpu *addr);
151int npxtrap(void);
152#endif
153
154#endif /* !_MACHINE_NPX_H_ */
108int npxtrap(void);
109#endif
110
111#endif /* !_MACHINE_NPX_H_ */