home *** CD-ROM | disk | FTP | other *** search
/ PC Extra Super CD 1998 January / PCPLUS131.iso / DJGPP / V2MISC / WMEMU2S.ZIP / LINUX / DRIVERS / FPU-EMU / STATUS_W.H < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-01  |  2.4 KB  |  66 lines

  1. /*---------------------------------------------------------------------------+
  2.  |  status_w.h                                                               |
  3.  |                                                                           |
  4.  | Copyright (C) 1992,1993                                                   |
  5.  |                       W. Metzenthen, 22 Parker St, Ormond, Vic 3163,      |
  6.  |                       Australia.  E-mail   billm@vaxc.cc.monash.edu.au    |
  7.  |                                                                           |
  8.  +---------------------------------------------------------------------------*/
  9.  
  10. #ifndef _STATUS_H_
  11. #define _STATUS_H_
  12.  
  13. #include "fpu_emu.h"    /* for definition of PECULIAR_486 */
  14.  
  15. #ifdef __ASSEMBLER__
  16. #define    Const__(x)    $##x
  17. #else
  18. #define    Const__(x)    x
  19. #endif
  20.  
  21. #define SW_Backward        Const__(0x8000)    /* backward compatibility */
  22. #define SW_C3        Const__(0x4000)    /* condition bit 3 */
  23. #define SW_Top        Const__(0x3800)    /* top of stack */
  24. #define SW_Top_Shift     Const__(11)    /* shift for top of stack bits */
  25. #define SW_C2        Const__(0x0400)    /* condition bit 2 */
  26. #define SW_C1        Const__(0x0200)    /* condition bit 1 */
  27. #define SW_C0        Const__(0x0100)    /* condition bit 0 */
  28. #define SW_Summary         Const__(0x0080)    /* exception summary */
  29. #define SW_Stack_Fault    Const__(0x0040)    /* stack fault */
  30. #define SW_Precision       Const__(0x0020)    /* loss of precision */
  31. #define SW_Underflow       Const__(0x0010)    /* underflow */
  32. #define SW_Overflow        Const__(0x0008)    /* overflow */
  33. #define SW_Zero_Div        Const__(0x0004)    /* divide by zero */
  34. #define SW_Denorm_Op       Const__(0x0002)    /* denormalized operand */
  35. #define SW_Invalid         Const__(0x0001)    /* invalid operation */
  36.  
  37. #define SW_Exc_Mask     Const__(0x27f)  /* Status word exception bit mask */
  38.  
  39. #ifndef __ASSEMBLER__
  40.  
  41. #define COMP_A_gt_B    1
  42. #define COMP_A_eq_B    2
  43. #define COMP_A_lt_B    3
  44. #define COMP_No_Comp    4
  45. #define COMP_Denormal   0x20
  46. #define COMP_NaN    0x40
  47. #define COMP_SNaN    0x80
  48.  
  49. #define status_word() \
  50.   ((partial_status & ~SW_Top & 0xffff) | ((top << SW_Top_Shift) & SW_Top))
  51. #define setcc(cc) ({ \
  52.   partial_status &= ~(SW_C0|SW_C1|SW_C2|SW_C3); \
  53.   partial_status |= (cc) & (SW_C0|SW_C1|SW_C2|SW_C3); })
  54.  
  55. #ifdef PECULIAR_486
  56.    /* Default, this conveys no information, but an 80486 does it. */
  57.    /* Clear the SW_C1 bit, "other bits undefined". */
  58. #  define clear_C1()  { partial_status &= ~SW_C1; }
  59. # else
  60. #  define clear_C1()
  61. #endif PECULIAR_486
  62.  
  63. #endif __ASSEMBLER__
  64.  
  65. #endif _STATUS_H_
  66.