home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 161_01 / bfields.c < prev    next >
C/C++ Source or Header  |  1985-08-29  |  2KB  |  111 lines

  1. #include "timer1.h"
  2. #define INT_CHAR (sizeof(int) * 8)
  3. #define HI_BIT_MASK (01 << (INT_CHAR - 1))
  4. #define HI1_BIT_MASK (01 << (INT_CHAR - 2))
  5. #define HI3_BIT_MASK (07 << (INT_CHAR - 5))
  6. #define PAD (INT_CHAR - 10)
  7. struct fields
  8.     {
  9.     unsigned f1 : 1;
  10.     unsigned f2 : 1;
  11.     unsigned f3 : 3;
  12.     unsigned fpad : PAD;
  13.     unsigned f4 : 3;
  14.     unsigned f5 : 1;
  15.     unsigned f6 : 1;
  16.     };
  17. struct fields sf;
  18. register int reg;
  19. unsigned ui, ui2;
  20.  
  21. DO_STMT("turn on sf.f1")
  22. sf.f1 = 1;
  23. OD
  24.  
  25. DO_STMT("turn on sf.f2")
  26. sf.f2 = 1;
  27. OD
  28.  
  29. DO_STMT("turn on sf.f5")
  30. sf.f5 = 1;
  31. OD
  32.  
  33. DO_STMT("turn on sf.f6")
  34. sf.f6 = 1;
  35. OD
  36.  
  37. DO_STMT("turn on ui hi bit")
  38. ui |= HI_BIT_MASK;
  39. OD
  40.  
  41. DO_STMT("turn on ui hi-1 bit")
  42. ui |= HI1_BIT_MASK;
  43. OD
  44.  
  45. DO_STMT("turn on ui lo+1 bit")
  46. ui |= 02;
  47. OD
  48.  
  49. DO_STMT("turn on ui lo bit")
  50. ui |= 01;
  51. OD
  52.  
  53. sf.f1 = sf.f2 = sf.f3 = sf.f4 = sf.f5 = sf.f6 = ui = 0;
  54. DO_STMT("test sf.f1")
  55. if (sf.f1 != 0) ++reg;
  56. OD
  57.  
  58. DO_STMT("test sf.f2")
  59. if (sf.f2 != 0) ++reg;
  60. OD
  61.  
  62. DO_STMT("test sf.f5")
  63. if (sf.f5 != 0) ++reg;
  64. OD
  65.  
  66. DO_STMT("test sf.f6")
  67. if (sf.f6 != 0) ++reg;
  68. OD
  69.  
  70. DO_STMT("test ui hi bit")
  71. if ((ui & HI_BIT_MASK) != 0) ++reg;
  72. OD
  73.  
  74. DO_STMT("test ui hi-1 bit")
  75. if ((ui & HI1_BIT_MASK) != 0) ++reg;
  76. OD
  77.  
  78. DO_STMT("test ui lo+1 bit")
  79. if ((ui & 02) != 0) ++reg;
  80. OD
  81.  
  82. DO_STMT("test ui lo bit")
  83. if ((ui & 01) != 0) ++reg;
  84. OD
  85.  
  86. DO_STMT("extract field f3")
  87. ui2 = sf.f3;
  88. OD
  89.  
  90. DO_STMT("extract field f4")
  91. ui2 = sf.f4;
  92. OD
  93.  
  94. DO_STMT("mask & shift mid1")
  95. ui2 = ui & 034 >> 2;
  96. OD
  97.  
  98. DO_STMT("mask & shift mid2")
  99. ui2 = ui & HI3_BIT_MASK >> (INT_CHAR - 5);
  100. OD
  101.  
  102. DO_STMT("shift mid1 & mask")
  103. ui2 = (ui >> 2) & 07;
  104. OD
  105.  
  106. DO_STMT("shift mid2 & mask")
  107. ui2 = (ui >> (INT_CHAR - 5)) & 07;
  108. OD
  109.  
  110. }
  111.