|
|
1.1 root 1: /*
2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /*
23: * Copyright (c) 1992 NeXT Computer, Inc.
24: *
25: * Intel386 Family: Floating Point unit.
26: *
27: * HISTORY
28: *
29: * 5 October 1992 ? at NeXT
30: * Added names to previously unamed fields in the mantissa.
31: *
32: * 5 April 1992 ? at NeXT
33: * Created.
34: */
35:
36: /*
37: * Data register.
38: */
39:
40: typedef struct fp_data_reg {
41: unsigned short mant;
42: unsigned short mant1 :16,
43: mant2 :16,
44: mant3 :16;
45: unsigned short exp :15,
46: sign :1;
47: } fp_data_reg_t;
48:
49: /*
50: * Data register stack.
51: */
52:
53: typedef struct fp_stack {
54: fp_data_reg_t ST[8];
55: } fp_stack_t;
56:
57: /*
58: * Register stack tag word.
59: */
60:
61: typedef struct fp_tag {
62: unsigned short tag0 :2,
63: tag1 :2,
64: tag2 :2,
65: tag3 :2,
66: tag4 :2,
67: tag5 :2,
68: tag6 :2,
69: tag7 :2;
70: #define FP_TAG_VALID 0
71: #define FP_TAG_ZERO 1
72: #define FP_TAG_SPEC 2
73: #define FP_TAG_EMPTY 3
74: } fp_tag_t;
75:
76: /*
77: * Status word.
78: */
79:
80: typedef struct fp_status {
81: unsigned short invalid :1,
82: denorm :1,
83: zdiv :1,
84: ovrfl :1,
85: undfl :1,
86: precis :1,
87: stkflt :1,
88: errsumm :1,
89: c0 :1,
90: c1 :1,
91: c2 :1,
92: tos :3,
93: c3 :1,
94: busy :1;
95: } fp_status_t;
96:
97: /*
98: * Control word.
99: */
100:
101: typedef struct fp_control {
102: unsigned short invalid :1,
103: denorm :1,
104: zdiv :1,
105: ovrfl :1,
106: undfl :1,
107: precis :1,
108: :2,
109: pc :2,
110: #define FP_PREC_24B 0
111: #define FP_PREC_53B 2
112: #define FP_PREC_64B 3
113: rc :2,
114: #define FP_RND_NEAR 0
115: #define FP_RND_DOWN 1
116: #define FP_RND_UP 2
117: #define FP_CHOP 3
118: /*inf*/ :1,
119: :3;
120: } fp_control_t;
121:
122: #import <architecture/i386/sel.h>
123:
124: /*
125: * Floating point 'environment'
126: * used by FSTENV/FLDENV instructions.
127: */
128:
129: typedef struct fp_env {
130: fp_control_t control;
131: unsigned short :16;
132: fp_status_t status;
133: unsigned short :16;
134: fp_tag_t tag;
135: unsigned short :16;
136: unsigned int ip;
137: sel_t cs;
138: unsigned short opcode;
139: unsigned int dp;
140: sel_t ds;
141: unsigned short :16;
142: } fp_env_t;
143:
144: /*
145: * Floating point state
146: * used by FSAVE/FRSTOR instructions.
147: */
148:
149: typedef struct fp_state {
150: fp_env_t environ;
151: fp_stack_t stack;
152: } fp_state_t;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.