Annotation of sys/arch/hppa/spmath/float.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: float.h,v 1.7 2004/01/02 14:39:01 mickey Exp $ */
! 2: /*
! 3: (c) Copyright 1986 HEWLETT-PACKARD COMPANY
! 4: To anyone who acknowledges that this file is provided "AS IS"
! 5: without any express or implied warranty:
! 6: permission to use, copy, modify, and distribute this file
! 7: for any purpose is hereby granted without fee, provided that
! 8: the above copyright notice and this notice appears in all
! 9: copies, and that the name of Hewlett-Packard Company not be
! 10: used in advertising or publicity pertaining to distribution
! 11: of the software without specific, written prior permission.
! 12: Hewlett-Packard Company makes no representations about the
! 13: suitability of this software for any purpose.
! 14: */
! 15: /* @(#)float.h: Revision: 2.14.88.2 Date: 93/12/08 13:27:42 */
! 16:
! 17: #include <machine/float.h>
! 18: #include "fpbits.h"
! 19: #include "hppa.h"
! 20:
! 21: /*
! 22: * Declare the basic structures for the 3 different
! 23: * floating-point precisions.
! 24: *
! 25: * Single number
! 26: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 27: * |s| exp | mantissa |
! 28: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 29: */
! 30: #define Sall(object) (object)
! 31: #define Ssign(object) Bitfield_extract( 0, 1,object)
! 32: #define Ssignedsign(object) Bitfield_signed_extract( 0, 1,object)
! 33: #define Sexponent(object) Bitfield_extract( 1, 8,object)
! 34: #define Smantissa(object) Bitfield_mask( 9, 23,object)
! 35: #define Ssignaling(object) Bitfield_extract( 9, 1,object)
! 36: #define Ssignalingnan(object) Bitfield_extract( 1, 9,object)
! 37: #define Shigh2mantissa(object) Bitfield_extract( 9, 2,object)
! 38: #define Sexponentmantissa(object) Bitfield_mask( 1, 31,object)
! 39: #define Ssignexponent(object) Bitfield_extract( 0, 9,object)
! 40: #define Shidden(object) Bitfield_extract( 8, 1,object)
! 41: #define Shiddenoverflow(object) Bitfield_extract( 7, 1,object)
! 42: #define Shiddenhigh7mantissa(object) Bitfield_extract( 8, 8,object)
! 43: #define Shiddenhigh3mantissa(object) Bitfield_extract( 8, 4,object)
! 44: #define Slow(object) Bitfield_mask( 31, 1,object)
! 45: #define Slow4(object) Bitfield_mask( 28, 4,object)
! 46: #define Slow31(object) Bitfield_mask( 1, 31,object)
! 47: #define Shigh31(object) Bitfield_extract( 0, 31,object)
! 48: #define Ssignedhigh31(object) Bitfield_signed_extract( 0, 31,object)
! 49: #define Shigh4(object) Bitfield_extract( 0, 4,object)
! 50: #define Sbit24(object) Bitfield_extract( 24, 1,object)
! 51: #define Sbit28(object) Bitfield_extract( 28, 1,object)
! 52: #define Sbit29(object) Bitfield_extract( 29, 1,object)
! 53: #define Sbit30(object) Bitfield_extract( 30, 1,object)
! 54: #define Sbit31(object) Bitfield_mask( 31, 1,object)
! 55:
! 56: #define Deposit_ssign(object,value) Bitfield_deposit(value,0,1,object)
! 57: #define Deposit_sexponent(object,value) Bitfield_deposit(value,1,8,object)
! 58: #define Deposit_smantissa(object,value) Bitfield_deposit(value,9,23,object)
! 59: #define Deposit_shigh2mantissa(object,value) Bitfield_deposit(value,9,2,object)
! 60: #define Deposit_sexponentmantissa(object,value) \
! 61: Bitfield_deposit(value,1,31,object)
! 62: #define Deposit_ssignexponent(object,value) Bitfield_deposit(value,0,9,object)
! 63: #define Deposit_slow(object,value) Bitfield_deposit(value,31,1,object)
! 64: #define Deposit_shigh4(object,value) Bitfield_deposit(value,0,4,object)
! 65:
! 66: #define Is_ssign(object) Bitfield_mask( 0, 1,object)
! 67: #define Is_ssignaling(object) Bitfield_mask( 9, 1,object)
! 68: #define Is_shidden(object) Bitfield_mask( 8, 1,object)
! 69: #define Is_shiddenoverflow(object) Bitfield_mask( 7, 1,object)
! 70: #define Is_slow(object) Bitfield_mask( 31, 1,object)
! 71: #define Is_sbit24(object) Bitfield_mask( 24, 1,object)
! 72: #define Is_sbit28(object) Bitfield_mask( 28, 1,object)
! 73: #define Is_sbit29(object) Bitfield_mask( 29, 1,object)
! 74: #define Is_sbit30(object) Bitfield_mask( 30, 1,object)
! 75: #define Is_sbit31(object) Bitfield_mask( 31, 1,object)
! 76:
! 77: /*
! 78: * Double number.
! 79: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 80: * |s| exponent | mantissa part 1 |
! 81: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 82: *
! 83: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 84: * | mantissa part 2 |
! 85: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 86: */
! 87: #define Dallp1(object) (object)
! 88: #define Dsign(object) Bitfield_extract( 0, 1,object)
! 89: #define Dsignedsign(object) Bitfield_signed_extract( 0, 1,object)
! 90: #define Dexponent(object) Bitfield_extract( 1, 11,object)
! 91: #define Dmantissap1(object) Bitfield_mask( 12, 20,object)
! 92: #define Dsignaling(object) Bitfield_extract( 12, 1,object)
! 93: #define Dsignalingnan(object) Bitfield_extract( 1, 12,object)
! 94: #define Dhigh2mantissa(object) Bitfield_extract( 12, 2,object)
! 95: #define Dexponentmantissap1(object) Bitfield_mask( 1, 31,object)
! 96: #define Dsignexponent(object) Bitfield_extract( 0, 12,object)
! 97: #define Dhidden(object) Bitfield_extract( 11, 1,object)
! 98: #define Dhiddenoverflow(object) Bitfield_extract( 10, 1,object)
! 99: #define Dhiddenhigh7mantissa(object) Bitfield_extract( 11, 8,object)
! 100: #define Dhiddenhigh3mantissa(object) Bitfield_extract( 11, 4,object)
! 101: #define Dlowp1(object) Bitfield_mask( 31, 1,object)
! 102: #define Dlow31p1(object) Bitfield_mask( 1, 31,object)
! 103: #define Dhighp1(object) Bitfield_extract( 0, 1,object)
! 104: #define Dhigh4p1(object) Bitfield_extract( 0, 4,object)
! 105: #define Dhigh31p1(object) Bitfield_extract( 0, 31,object)
! 106: #define Dsignedhigh31p1(object) Bitfield_signed_extract( 0, 31,object)
! 107: #define Dbit3p1(object) Bitfield_extract( 3, 1,object)
! 108:
! 109: #define Deposit_dsign(object,value) Bitfield_deposit(value,0,1,object)
! 110: #define Deposit_dexponent(object,value) Bitfield_deposit(value,1,11,object)
! 111: #define Deposit_dmantissap1(object,value) Bitfield_deposit(value,12,20,object)
! 112: #define Deposit_dhigh2mantissa(object,value) Bitfield_deposit(value,12,2,object)
! 113: #define Deposit_dexponentmantissap1(object,value) \
! 114: Bitfield_deposit(value,1,31,object)
! 115: #define Deposit_dsignexponent(object,value) Bitfield_deposit(value,0,12,object)
! 116: #define Deposit_dlowp1(object,value) Bitfield_deposit(value,31,1,object)
! 117: #define Deposit_dhigh4p1(object,value) Bitfield_deposit(value,0,4,object)
! 118:
! 119: #define Is_dsign(object) Bitfield_mask( 0, 1,object)
! 120: #define Is_dsignaling(object) Bitfield_mask( 12, 1,object)
! 121: #define Is_dhidden(object) Bitfield_mask( 11, 1,object)
! 122: #define Is_dhiddenoverflow(object) Bitfield_mask( 10, 1,object)
! 123: #define Is_dlowp1(object) Bitfield_mask( 31, 1,object)
! 124: #define Is_dhighp1(object) Bitfield_mask( 0, 1,object)
! 125: #define Is_dbit3p1(object) Bitfield_mask( 3, 1,object)
! 126:
! 127: #define Dallp2(object) (object)
! 128: #define Dmantissap2(object) (object)
! 129: #define Dlowp2(object) Bitfield_mask( 31, 1,object)
! 130: #define Dlow4p2(object) Bitfield_mask( 28, 4,object)
! 131: #define Dlow31p2(object) Bitfield_mask( 1, 31,object)
! 132: #define Dhighp2(object) Bitfield_extract( 0, 1,object)
! 133: #define Dhigh31p2(object) Bitfield_extract( 0, 31,object)
! 134: #define Dbit2p2(object) Bitfield_extract( 2, 1,object)
! 135: #define Dbit3p2(object) Bitfield_extract( 3, 1,object)
! 136: #define Dbit21p2(object) Bitfield_extract( 21, 1,object)
! 137: #define Dbit28p2(object) Bitfield_extract( 28, 1,object)
! 138: #define Dbit29p2(object) Bitfield_extract( 29, 1,object)
! 139: #define Dbit30p2(object) Bitfield_extract( 30, 1,object)
! 140: #define Dbit31p2(object) Bitfield_mask( 31, 1,object)
! 141:
! 142: #define Deposit_dlowp2(object,value) Bitfield_deposit(value,31,1,object)
! 143:
! 144: #define Is_dlowp2(object) Bitfield_mask( 31, 1,object)
! 145: #define Is_dhighp2(object) Bitfield_mask( 0, 1,object)
! 146: #define Is_dbit2p2(object) Bitfield_mask( 2, 1,object)
! 147: #define Is_dbit3p2(object) Bitfield_mask( 3, 1,object)
! 148: #define Is_dbit21p2(object) Bitfield_mask( 21, 1,object)
! 149: #define Is_dbit28p2(object) Bitfield_mask( 28, 1,object)
! 150: #define Is_dbit29p2(object) Bitfield_mask( 29, 1,object)
! 151: #define Is_dbit30p2(object) Bitfield_mask( 30, 1,object)
! 152: #define Is_dbit31p2(object) Bitfield_mask( 31, 1,object)
! 153:
! 154: /*
! 155: * Quad number.
! 156: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 157: * |s| exponent | mantissa part 1 |
! 158: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 159: *
! 160: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 161: * | mantissa part 2 |
! 162: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 163: *
! 164: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 165: * | mantissa part 3 |
! 166: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 167: *
! 168: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 169: * | mantissa part 4 |
! 170: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 171: */
! 172: typedef struct
! 173: {
! 174: union
! 175: {
! 176: struct { unsigned qallp1; } u_qallp1;
! 177: /* Not needed for now...
! 178: Bitfield_extract( 0, 1,u_qsign,qsign)
! 179: Bitfield_signed_extract( 0, 1,u_qsignedsign,qsignedsign)
! 180: Bitfield_extract( 1, 15,u_qexponent,qexponent)
! 181: Bitfield_extract(16, 16,u_qmantissap1,qmantissap1)
! 182: Bitfield_extract(16, 1,u_qsignaling,qsignaling)
! 183: Bitfield_extract(1, 16,u_qsignalingnan,qsignalingnan)
! 184: Bitfield_extract(16, 2,u_qhigh2mantissa,qhigh2mantissa)
! 185: Bitfield_extract( 1, 31,u_qexponentmantissap1,qexponentmantissap1)
! 186: Bitfield_extract( 0, 16,u_qsignexponent,qsignexponent)
! 187: Bitfield_extract(15, 1,u_qhidden,qhidden)
! 188: Bitfield_extract(14, 1,u_qhiddenoverflow,qhiddenoverflow)
! 189: Bitfield_extract(15, 8,u_qhiddenhigh7mantissa,qhiddenhigh7mantissa)
! 190: Bitfield_extract(15, 4,u_qhiddenhigh3mantissa,qhiddenhigh3mantissa)
! 191: Bitfield_extract(31, 1,u_qlowp1,qlowp1)
! 192: Bitfield_extract( 1, 31,u_qlow31p1,qlow31p1)
! 193: Bitfield_extract( 0, 1,u_qhighp1,qhighp1)
! 194: Bitfield_extract( 0, 4,u_qhigh4p1,qhigh4p1)
! 195: Bitfield_extract( 0, 31,u_qhigh31p1,qhigh31p1)
! 196: */
! 197: } quad_u1;
! 198: union
! 199: {
! 200: struct { unsigned qallp2; } u_qallp2;
! 201: /* Not needed for now...
! 202: Bitfield_extract(31, 1,u_qlowp2,qlowp2)
! 203: Bitfield_extract( 1, 31,u_qlow31p2,qlow31p2)
! 204: Bitfield_extract( 0, 1,u_qhighp2,qhighp2)
! 205: Bitfield_extract( 0, 31,u_qhigh31p2,qhigh31p2)
! 206: */
! 207: } quad_u2;
! 208: union
! 209: {
! 210: struct { unsigned qallp3; } u_qallp3;
! 211: /* Not needed for now...
! 212: Bitfield_extract(31, 1,u_qlowp3,qlowp3)
! 213: Bitfield_extract( 1, 31,u_qlow31p3,qlow31p3)
! 214: Bitfield_extract( 0, 1,u_qhighp3,qhighp3)
! 215: Bitfield_extract( 0, 31,u_qhigh31p3,qhigh31p3)
! 216: */
! 217: } quad_u3;
! 218: union
! 219: {
! 220: struct { unsigned qallp4; } u_qallp4;
! 221: /* Not need for now...
! 222: Bitfield_extract(31, 1,u_qlowp4,qlowp4)
! 223: Bitfield_extract( 1, 31,u_qlow31p4,qlow31p4)
! 224: Bitfield_extract( 0, 1,u_qhighp4,qhighp4)
! 225: Bitfield_extract( 0, 31,u_qhigh31p4,qhigh31p4)
! 226: */
! 227: } quad_u4;
! 228: } quad_floating_point;
! 229:
! 230: /* Extension - An additional structure to hold the guard, round and
! 231: * sticky bits during computations.
! 232: */
! 233: #define Extall(object) (object)
! 234: #define Extsign(object) Bitfield_extract( 0, 1,object)
! 235: #define Exthigh31(object) Bitfield_extract( 0, 31,object)
! 236: #define Extlow31(object) Bitfield_extract( 1, 31,object)
! 237: #define Extlow(object) Bitfield_extract( 31, 1,object)
! 238:
! 239: /*
! 240: * Declare the basic structures for the 3 different
! 241: * fixed-point precisions.
! 242: *
! 243: * Single number
! 244: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 245: * |s| integer |
! 246: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 247: */
! 248: typedef int sgl_integer;
! 249:
! 250: /*
! 251: * Double number.
! 252: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 253: * |s| high integer |
! 254: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 255: *
! 256: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 257: * | low integer |
! 258: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 259: */
! 260: struct dint {
! 261: int wd0;
! 262: unsigned int wd1;
! 263: };
! 264:
! 265: struct dblwd {
! 266: unsigned int wd0;
! 267: unsigned int wd1;
! 268: };
! 269:
! 270: /*
! 271: * Quad number.
! 272: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 273: * |s| integer part1 |
! 274: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 275: *
! 276: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 277: * | integer part 2 |
! 278: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 279: *
! 280: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 281: * | integer part 3 |
! 282: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 283: *
! 284: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 285: * | integer part 4 |
! 286: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 287: */
! 288:
! 289: struct quadwd {
! 290: int wd0;
! 291: unsigned int wd1;
! 292: unsigned int wd2;
! 293: unsigned int wd3;
! 294: };
! 295:
! 296: typedef struct quadwd quad_integer;
! 297:
! 298:
! 299: /* useful typedefs */
! 300: typedef int sgl_floating_point;
! 301: typedef struct dblwd dbl_floating_point;
! 302: typedef struct dint dbl_integer;
! 303:
! 304: /*
! 305: * Define the different precisions' parameters.
! 306: */
! 307: #define SGL_BITLENGTH 32
! 308: #define SGL_EMAX 127
! 309: #define SGL_BIAS 127
! 310: #define SGL_WRAP 192
! 311: #define SGL_INFINITY_EXPONENT (SGL_EMAX+SGL_BIAS+1)
! 312: #define SGL_THRESHOLD 32
! 313: #define SGL_EXP_LENGTH 8
! 314: #define SGL_P 24
! 315:
! 316: #define DBL_BITLENGTH 64
! 317: #define DBL_EMAX 1023
! 318: #define DBL_BIAS 1023
! 319: #define DBL_WRAP 1536
! 320: #define DBL_INFINITY_EXPONENT (DBL_EMAX+DBL_BIAS+1)
! 321: #define DBL_THRESHOLD 64
! 322: #define DBL_EXP_LENGTH 11
! 323: #define DBL_P 53
! 324:
! 325: #define QUAD_BITLENGTH 128
! 326: #define QUAD_EMAX 16383
! 327: #define QUAD_BIAS 16383
! 328: #define QUAD_WRAP 24576
! 329: #define QUAD_INFINITY_EXPONENT (QUAD_EMAX+QUAD_BIAS+1)
! 330: #define QUAD_P 113
! 331:
! 332: /* Boolean Values etc. */
! 333: #define FALSE 0
! 334: #define TRUE (!FALSE)
! 335: #define NOT !
! 336: #define XOR ^
! 337:
! 338: /* Declare status register equivalent to FPUs architecture.
! 339: *
! 340: * 0 1 2 3 4 5 6 7 8 910 1 2 3 4 5 6 7 8 920 1 2 3 4 5 6 7 8 930 1
! 341: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 342: * |V|Z|O|U|I|C| rsv | model | version |RM |rsv|T|r|V|Z|O|U|I|
! 343: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 344: */
! 345: #define Cbit(object) Bitfield_extract( 5, 1,object)
! 346: #define Tbit(object) Bitfield_extract( 25, 1,object)
! 347: #define Roundingmode(object) Bitfield_extract( 21, 2,object)
! 348: #define Invalidtrap(object) Bitfield_extract( 27, 1,object)
! 349: #define Divisionbyzerotrap(object) Bitfield_extract( 28, 1,object)
! 350: #define Overflowtrap(object) Bitfield_extract( 29, 1,object)
! 351: #define Underflowtrap(object) Bitfield_extract( 30, 1,object)
! 352: #define Inexacttrap(object) Bitfield_extract( 31, 1,object)
! 353: #define Invalidflag(object) Bitfield_extract( 0, 1,object)
! 354: #define Divisionbyzeroflag(object) Bitfield_extract( 1, 1,object)
! 355: #define Overflowflag(object) Bitfield_extract( 2, 1,object)
! 356: #define Underflowflag(object) Bitfield_extract( 3, 1,object)
! 357: #define Inexactflag(object) Bitfield_extract( 4, 1,object)
! 358: #define Allflags(object) Bitfield_extract( 0, 5,object)
! 359:
! 360: /* Definitions relevant to the status register */
! 361:
! 362: /* Rounding Modes */
! 363: #define ROUNDNEAREST 0
! 364: #define ROUNDZERO 1
! 365: #define ROUNDPLUS 2
! 366: #define ROUNDMINUS 3
! 367:
! 368: /* Exceptions */
! 369: #define NOEXCEPTION 0x0
! 370: #define INVALIDEXCEPTION 0x20
! 371: #define DIVISIONBYZEROEXCEPTION 0x10
! 372: #define OVERFLOWEXCEPTION 0x08
! 373: #define UNDERFLOWEXCEPTION 0x04
! 374: #define INEXACTEXCEPTION 0x02
! 375: #define UNIMPLEMENTEDEXCEPTION 0x01
! 376:
! 377: /* Declare exception registers equivalent to FPUs architecture
! 378: *
! 379: * 0 1 2 3 4 5 6 7 8 910 1 2 3 4 5 6 7 8 920 1 2 3 4 5 6 7 8 930 1
! 380: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 381: * |excepttype | r1 | r2/ext | operation |parm |n| t/cond |
! 382: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 383: */
! 384: #define Allexception(object) (object)
! 385: #define Exceptiontype(object) Bitfield_extract( 0, 6,object)
! 386: #define Instructionfield(object) Bitfield_mask( 6,26,object)
! 387: #define Parmfield(object) Bitfield_extract( 23, 3,object)
! 388: #define Rabit(object) Bitfield_extract( 24, 1,object)
! 389: #define Ibit(object) Bitfield_extract( 25, 1,object)
! 390:
! 391: #define Set_exceptiontype(object,value) Bitfield_deposit(value, 0, 6,object)
! 392: #define Set_parmfield(object,value) Bitfield_deposit(value, 23, 3,object)
! 393: #define Set_exceptiontype_and_instr_field(exception,instruction,object) \
! 394: object = ((exception) << 26) | (instruction)
! 395:
! 396: /* Declare the condition field
! 397: *
! 398: * 0 1 2 3 4 5 6 7 8 910 1 2 3 4 5 6 7 8 920 1 2 3 4 5 6 7 8 930 1
! 399: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 400: * | |G|L|E|U|X|
! 401: * +-------+-------+-------+-------+-------+-------+-------+-------+
! 402: */
! 403: #define Allexception(object) (object)
! 404: #define Greaterthanbit(object) Bitfield_extract( 27, 1,object)
! 405: #define Lessthanbit(object) Bitfield_extract( 28, 1,object)
! 406: #define Equalbit(object) Bitfield_extract( 29, 1,object)
! 407: #define Unorderedbit(object) Bitfield_extract( 30, 1,object)
! 408: #define Exceptionbit(object) Bitfield_extract( 31, 1,object)
! 409:
! 410: /* An alias name for the status register */
! 411: #define Fpustatus_register (*status)
! 412:
! 413: /**************************************************
! 414: * Status register referencing and manipulation. *
! 415: **************************************************/
! 416:
! 417: /* Rounding mode */
! 418: #define Rounding_mode() Roundingmode(Fpustatus_register)
! 419: #define Is_rounding_mode(rmode) \
! 420: (Roundingmode(Fpustatus_register) == rmode)
! 421: #define Set_rounding_mode(value) \
! 422: Bitfield_deposit(value,21,2,Fpustatus_register)
! 423:
! 424: /* Boolean testing of the trap enable bits */
! 425: #define Is_invalidtrap_enabled() Invalidtrap(Fpustatus_register)
! 426: #define Is_divisionbyzerotrap_enabled() Divisionbyzerotrap(Fpustatus_register)
! 427: #define Is_overflowtrap_enabled() Overflowtrap(Fpustatus_register)
! 428: #define Is_underflowtrap_enabled() Underflowtrap(Fpustatus_register)
! 429: #define Is_inexacttrap_enabled() Inexacttrap(Fpustatus_register)
! 430:
! 431: /* Set the indicated flags in the status register */
! 432: #define Set_invalidflag() Bitfield_deposit(1,0,1,Fpustatus_register)
! 433: #define Set_divisionbyzeroflag() Bitfield_deposit(1,1,1,Fpustatus_register)
! 434: #define Set_overflowflag() Bitfield_deposit(1,2,1,Fpustatus_register)
! 435: #define Set_underflowflag() Bitfield_deposit(1,3,1,Fpustatus_register)
! 436: #define Set_inexactflag() Bitfield_deposit(1,4,1,Fpustatus_register)
! 437:
! 438: #define Clear_all_flags() Bitfield_deposit(0,0,5,Fpustatus_register)
! 439:
! 440: /* Manipulate the trap and condition code bits (tbit and cbit) */
! 441: #define Set_tbit() Bitfield_deposit(1,25,1,Fpustatus_register)
! 442: #define Clear_tbit() Bitfield_deposit(0,25,1,Fpustatus_register)
! 443: #define Is_tbit_set() Tbit(Fpustatus_register)
! 444: #define Is_cbit_set() Cbit(Fpustatus_register)
! 445:
! 446: #ifdef TIMEX
! 447: #define Set_status_cbit(value) \
! 448: Bitfield_deposit(Bitfield_extract(10,10,Fpustatus_register),11,10,Fpustatus_register); \
! 449: Bitfield_deposit(Bitfield_extract(5,1,Fpustatus_register),10,1,Fpustatus_register); \
! 450: Bitfield_deposit(value,5,1,Fpustatus_register)
! 451: #else
! 452: #define Set_status_cbit(value) Bitfield_deposit(value,5,1,Fpustatus_register)
! 453: #endif
! 454:
! 455: /*******************************
! 456: * Condition field referencing *
! 457: *******************************/
! 458: #define Unordered(cond) Unorderedbit(cond)
! 459: #define Equal(cond) Equalbit(cond)
! 460: #define Lessthan(cond) Lessthanbit(cond)
! 461: #define Greaterthan(cond) Greaterthanbit(cond)
! 462: #define Exception(cond) Exceptionbit(cond)
! 463:
! 464:
! 465: /* Defines for the extension */
! 466: #define Ext_isone_sign(extent) (Extsign(extent))
! 467: #define Ext_isnotzero(extent) \
! 468: (Extall(extent))
! 469: #define Ext_isnotzero_lower(extent) \
! 470: (Extlow31(extent))
! 471: #define Ext_leftshiftby1(extent) \
! 472: Extall(extent) <<= 1
! 473: #define Ext_negate(extent) \
! 474: (int )Extall(extent) = 0 - (int )Extall(extent)
! 475: #define Ext_setone_low(extent) Bitfield_deposit(1,31,1,extent)
CVSweb