|
|
1.1 root 1: /*
2: * Copyright (c) 1992 NeXT Computer, Inc.
3: *
4: * Intel386 Family: Floating Point unit.
5: *
6: * HISTORY
7: *
8: * 5 October 1992 David E. Bohman at NeXT
9: * Added names to previously unamed fields in the mantissa.
10: *
11: * 5 April 1992 David E. Bohman at NeXT
12: * Created.
13: */
14:
15: /*
16: * Data register.
17: */
18:
19: typedef struct fp_data_reg {
20: unsigned short mant;
21: unsigned short mant1 :16,
22: mant2 :16,
23: mant3 :16;
24: unsigned short exp :15,
25: sign :1;
26: } fp_data_reg_t;
27:
28: /*
29: * Data register stack.
30: */
31:
32: typedef struct fp_stack {
33: fp_data_reg_t ST[8];
34: } fp_stack_t;
35:
36: /*
37: * Register stack tag word.
38: */
39:
40: typedef struct fp_tag {
41: unsigned short tag0 :2,
42: tag1 :2,
43: tag2 :2,
44: tag3 :2,
45: tag4 :2,
46: tag5 :2,
47: tag6 :2,
48: tag7 :2;
49: #define FP_TAG_VALID 0
50: #define FP_TAG_ZERO 1
51: #define FP_TAG_SPEC 2
52: #define FP_TAG_EMPTY 3
53: } fp_tag_t;
54:
55: /*
56: * Status word.
57: */
58:
59: typedef struct fp_status {
60: unsigned short invalid :1,
61: denorm :1,
62: zdiv :1,
63: ovrfl :1,
64: undfl :1,
65: precis :1,
66: stkflt :1,
67: errsumm :1,
68: c0 :1,
69: c1 :1,
70: c2 :1,
71: tos :3,
72: c3 :1,
73: busy :1;
74: } fp_status_t;
75:
76: /*
77: * Control word.
78: */
79:
80: typedef struct fp_control {
81: unsigned short invalid :1,
82: denorm :1,
83: zdiv :1,
84: ovrfl :1,
85: undfl :1,
86: precis :1,
87: :2,
88: pc :2,
89: #define FP_PREC_24B 0
90: #define FP_PREC_53B 2
91: #define FP_PREC_64B 3
92: rc :2,
93: #define FP_RND_NEAR 0
94: #define FP_RND_DOWN 1
95: #define FP_RND_UP 2
96: #define FP_CHOP 3
97: /*inf*/ :1,
98: :3;
99: } fp_control_t;
100:
101: #import <architecture/i386/sel.h>
102:
103: /*
104: * Floating point 'environment'
105: * used by FSTENV/FLDENV instructions.
106: */
107:
108: typedef struct fp_env {
109: fp_control_t control;
110: unsigned short :16;
111: fp_status_t status;
112: unsigned short :16;
113: fp_tag_t tag;
114: unsigned short :16;
115: unsigned int ip;
116: sel_t cs;
117: unsigned short opcode;
118: unsigned int dp;
119: sel_t ds;
120: unsigned short :16;
121: } fp_env_t;
122:
123: /*
124: * Floating point state
125: * used by FSAVE/FRSTOR instructions.
126: */
127:
128: typedef struct fp_state {
129: fp_env_t environ;
130: fp_stack_t stack;
131: } fp_state_t;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.