5728 public: 5729 int32_t _value; 5730 5731 int rounding_control() const { return (_value >> 10) & 3 ; } 5732 int precision_control() const { return (_value >> 8) & 3 ; } 5733 bool precision() const { return ((_value >> 5) & 1) != 0; } 5734 bool underflow() const { return ((_value >> 4) & 1) != 0; } 5735 bool overflow() const { return ((_value >> 3) & 1) != 0; } 5736 bool zero_divide() const { return ((_value >> 2) & 1) != 0; } 5737 bool denormalized() const { return ((_value >> 1) & 1) != 0; } 5738 bool invalid() const { return ((_value >> 0) & 1) != 0; } 5739 5740 void print() const { 5741 // rounding control 5742 const char* rc; 5743 switch (rounding_control()) { 5744 case 0: rc = "round near"; break; 5745 case 1: rc = "round down"; break; 5746 case 2: rc = "round up "; break; 5747 case 3: rc = "chop "; break; 5748 }; 5749 // precision control 5750 const char* pc; 5751 switch (precision_control()) { 5752 case 0: pc = "24 bits "; break; 5753 case 1: pc = "reserved"; break; 5754 case 2: pc = "53 bits "; break; 5755 case 3: pc = "64 bits "; break; 5756 }; 5757 // flags 5758 char f[9]; 5759 f[0] = ' '; 5760 f[1] = ' '; 5761 f[2] = (precision ()) ? 'P' : 'p'; 5762 f[3] = (underflow ()) ? 'U' : 'u'; 5763 f[4] = (overflow ()) ? 'O' : 'o'; 5764 f[5] = (zero_divide ()) ? 'Z' : 'z'; 5765 f[6] = (denormalized()) ? 'D' : 'd'; 5766 f[7] = (invalid ()) ? 'I' : 'i'; 5767 f[8] = '\x0'; 5768 // output 5769 printf("%04x masks = %s, %s, %s", _value & 0xFFFF, f, rc, pc); 5770 } 5771 5772 }; 5773 5774 class StatusWord { 5775 public: | 5728 public: 5729 int32_t _value; 5730 5731 int rounding_control() const { return (_value >> 10) & 3 ; } 5732 int precision_control() const { return (_value >> 8) & 3 ; } 5733 bool precision() const { return ((_value >> 5) & 1) != 0; } 5734 bool underflow() const { return ((_value >> 4) & 1) != 0; } 5735 bool overflow() const { return ((_value >> 3) & 1) != 0; } 5736 bool zero_divide() const { return ((_value >> 2) & 1) != 0; } 5737 bool denormalized() const { return ((_value >> 1) & 1) != 0; } 5738 bool invalid() const { return ((_value >> 0) & 1) != 0; } 5739 5740 void print() const { 5741 // rounding control 5742 const char* rc; 5743 switch (rounding_control()) { 5744 case 0: rc = "round near"; break; 5745 case 1: rc = "round down"; break; 5746 case 2: rc = "round up "; break; 5747 case 3: rc = "chop "; break; 5748 default: ShouldNotReachHere(); return; 5749 }; 5750 // precision control 5751 const char* pc; 5752 switch (precision_control()) { 5753 case 0: pc = "24 bits "; break; 5754 case 1: pc = "reserved"; break; 5755 case 2: pc = "53 bits "; break; 5756 case 3: pc = "64 bits "; break; 5757 default: ShouldNotReachHere(); return; 5758 }; 5759 // flags 5760 char f[9]; 5761 f[0] = ' '; 5762 f[1] = ' '; 5763 f[2] = (precision ()) ? 'P' : 'p'; 5764 f[3] = (underflow ()) ? 'U' : 'u'; 5765 f[4] = (overflow ()) ? 'O' : 'o'; 5766 f[5] = (zero_divide ()) ? 'Z' : 'z'; 5767 f[6] = (denormalized()) ? 'D' : 'd'; 5768 f[7] = (invalid ()) ? 'I' : 'i'; 5769 f[8] = '\x0'; 5770 // output 5771 printf("%04x masks = %s, %s, %s", _value & 0xFFFF, f, rc, pc); 5772 } 5773 5774 }; 5775 5776 class StatusWord { 5777 public: |