|
|
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.