home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s038 / 10.ddi / 017.LIF / I86.H < prev    next >
Encoding:
C/C++ Source or Header  |  1992-07-02  |  5.1 KB  |  182 lines

  1. /* i86.h - 8086 processor specific header file
  2.  * $Version: 1.1 $
  3.  * Copyright 1988, 89, 90 Intel Corporation, ALL RIGHTS RESERVED.
  4.  */
  5.  
  6. #if !defined(_I86_)
  7. #define _I86_
  8.  
  9. #pragma extend
  10. #pragma _selector_("selector")
  11.  
  12. /*** For manipulation of selector ***/
  13. #pragma _builtin_("buildptr"==2)
  14. void far        *buildptr(      selector        sel,
  15.                                 void near       *offset);
  16.  
  17. #pragma _builtin_("lockset"==3)
  18. unsigned char   lockset(unsigned char   *lockptr,
  19.                         unsigned char   newvalue);
  20.  
  21. #pragma _builtin_("enable"==4)
  22. void    enable(void);
  23.  
  24. #pragma _builtin_("disable"==5)
  25. void    disable(void);
  26.  
  27. #pragma _builtin_("causeinterrupt"==6)
  28. void    causeinterrupt(unsigned char number);
  29.  
  30. #pragma _builtin_("halt"==7)
  31. void    halt(void);
  32.  
  33. #pragma _builtin_("getflags"==8)
  34. unsigned int  getflags(void);
  35.  
  36. #pragma _builtin_("setflags"==9)
  37. void    setflags(unsigned int value);
  38.  
  39. #define FLAG_CARRY      0x0001
  40. #define FLAG_PARITY     0x0004
  41. #define FLAG_AUXCARRY   0x0010
  42. #define FLAG_ZERO       0x0040
  43. #define FLAG_SIGN       0x0080
  44. #define FLAG_TRAP       0x0100
  45. #define FLAG_INTERRUPT  0x0200
  46. #define FLAG_DIRECTION  0x0400
  47. #define FLAG_OVERFLOW   0x0800
  48.  
  49. #pragma _builtin_("inbyte"==10)
  50. unsigned char   inbyte(unsigned short port);
  51.  
  52. #pragma _builtin_("inword"==11)
  53. unsigned int    inword(unsigned short port);
  54.  
  55. #pragma _builtin_("outbyte"==12)
  56. void    outbyte(unsigned short  port,
  57.                 unsigned char   value);
  58.  
  59. #pragma _builtin_("outword"==13)
  60. void    outword(unsigned short  port,
  61.                 unsigned int    value);
  62.  
  63. #pragma _builtin_("initrealmathunit"==14)
  64. void    initrealmathunit(void);
  65.  
  66. #pragma _builtin_("setrealmode"==15)
  67. void    setrealmode(unsigned short mode);
  68.  
  69. #pragma _builtin_("getrealstatus"==16)
  70. unsigned short  getrealstatus(void);
  71.  
  72. #pragma _builtin_("getrealerror"==17)
  73. unsigned short  getrealerror(void);
  74.  
  75. #define I87_INVALID_OPERATION   0x0001
  76. #define I87_DENORMALIZED_OPERAND 0x0002
  77. #define I87_ZERO_DIVIDE         0x0004
  78. #define I87_OVERFLOW            0x0008
  79. #define I87_UNDERFLOW           0x0010
  80. #define I87_PRECISION           0x0020
  81.  
  82. #define I87_CONTROL_PRECISION   0x0300
  83. #define I87_PRECISION_24_BIT    0x0000
  84. #define I87_PRECISION_53_BIT    0x0200
  85. #define I87_PRECISION_64_BIT    0x0300
  86.  
  87. #define I87_CONTROL_ROUNDING    0x0C00
  88. #define I87_ROUND_NEAREST       0x0000
  89. #define I87_ROUND_DOWN          0x0400
  90. #define I87_ROUND_UP            0x0800
  91. #define I87_ROUND_CHOP          0x0C00
  92.  
  93. #define I87_CONTROL_INFINITY    0x1000
  94. #define I87_INFINITY_PROJECTIVE 0x0000
  95. #define I87_INFINITY_AFFINE     0x1000
  96.  
  97. #define I87_STATUS_ERROR        0x0080
  98. #define I87_STATUS_STACKTOP_MASK 0x3800
  99. #define I87_STATUS_STACKTOP_SHIFT 11
  100. #define I87_STATUS_STACKTOP(env) (((env).status & I87_STATUS_STACKTOP_MASK) \
  101.                                         >> I87_STATUS_STACKTOP_SHIFT)
  102. #define I87_STACK_TOP(env)      I87_STATUS_STACKTOP(env)
  103. #define I87_STATUS_BUSY         0x8000
  104.  
  105. #define I87_STATUS_CONDITION_CODE 0x4700
  106. #define I87_CONDITION_C0        0x0100
  107. #define I87_CONDITION_C1        0x0200
  108. #define I87_CONDITION_C2        0x0400
  109. #define I87_CONDITION_C3        0x4000
  110.  
  111. #pragma ALIGN("i87_real_address")
  112. struct i87_real_address
  113. {
  114.         unsigned        offset  : 16, : 0;
  115.         unsigned        opcode  : 11, : 1;
  116.         unsigned        selector: 4,  : 0;
  117. };
  118.  
  119. #define I87_REAL_ADDRESS(addr)  buildptr((selector)((addr).selector & 0xF000),\
  120.                                         (void near *)(addr).offset)
  121.  
  122. union i87_address
  123. {
  124.         struct i87_real_address real;
  125.         void far                *protected;
  126. };
  127.  
  128. #pragma ALIGN("i87_environment")
  129. struct i87_environment
  130. {
  131.         unsigned                control: 16, : 0;
  132.         unsigned                status : 16, : 0;
  133.         unsigned                tag    : 16, : 0;
  134.         union i87_address       instruction;
  135.         union i87_address       operand;
  136. };
  137.  
  138. #define I87_TAG_MASK    0x0003
  139. #define I87_TAG_SHIFT   2
  140. #define I87_TAG(x, y)   (((x).tag >> (I87_TAG_SHIFT * (y))) & I87_TAG_MASK)
  141.  
  142. #pragma NOALIGN("i87_tempreal")
  143. struct i87_tempreal
  144. {
  145.         char            significand[8];
  146.         unsigned        exponent: 15;
  147. #if defined(SBITFIELD)
  148.         signed          sign: 1;
  149. #else
  150.         unsigned        sign: 1;
  151. #endif
  152. };
  153.  
  154. typedef struct i87_tempreal     tempreal_t;
  155. struct i87_state
  156. {
  157.         struct i87_environment  environment;
  158.         tempreal_t              stack[8];
  159. };
  160.  
  161. #if _ARCHITECTURE_ < 386
  162. #pragma _builtin_("saverealstatus"==18)
  163. void    saverealstatus(struct i87_state *savearea);
  164.  
  165. #pragma _builtin_("restorerealstatus"==19)
  166. void    restorerealstatus(struct i87_state const *savearea);
  167. #endif
  168.  
  169. #pragma _builtin_("byte_rol"==74)
  170. unsigned char   byte_rol(unsigned char, unsigned int);
  171.  
  172. #pragma _builtin_("byte_ror"==75)
  173. unsigned char   byte_ror(unsigned char, unsigned int);
  174.  
  175. #pragma _builtin_("hword_rol"==76)
  176. unsigned short  hword_rol(unsigned short, unsigned int);
  177.  
  178. #pragma _builtin_("hword_ror"==77)
  179. unsigned short  hword_ror(unsigned short, unsigned int);
  180.  
  181. #endif
  182.