Annotation of previous_trunk/src/softfloat/softfloat_extension.c, revision 1.1

1.1     ! root        1: 
        !             2: /*============================================================================
        !             3: 
        !             4: This C source file is an extension to the SoftFloat IEC/IEEE Floating-point 
        !             5: Arithmetic Package, Release 2a.
        !             6: 
        !             7: =============================================================================*/
        !             8: 
        !             9: #include "softfloat.h"
        !            10: 
        !            11: /*----------------------------------------------------------------------------
        !            12: | Methods for detecting special conditions for mathematical functions
        !            13: | supported by MC68881 and MC68862 mathematical coprocessor.
        !            14: *----------------------------------------------------------------------------*/
        !            15: 
        !            16: #define pi_sig0     LIT64(0xc90fdaa22168c234)
        !            17: #define pi_sig1     LIT64(0xc4c6628b80dc1cd1)
        !            18: 
        !            19: #define pi_exp      0x4000
        !            20: #define piby2_exp   0x3FFF
        !            21: #define piby4_exp   0x3FFE
        !            22: 
        !            23: #define one_exp     0x3FFF
        !            24: #define one_sig     LIT64(0x8000000000000000)
        !            25: 
        !            26: /*----------------------------------------------------------------------------
        !            27:  | Arc cosine
        !            28:  *----------------------------------------------------------------------------*/
        !            29: 
        !            30: floatx80 floatx80_acos_check(floatx80 a, flag *e)
        !            31: {
        !            32:     flag aSign;
        !            33:     int32 aExp;
        !            34:     bits64 aSig;
        !            35:     
        !            36:     *e = 1;
        !            37:     
        !            38:     aSig = extractFloatx80Frac(a);
        !            39:     aExp = extractFloatx80Exp(a);
        !            40:     aSign = extractFloatx80Sign(a);
        !            41:     
        !            42:     if (aExp == 0x7FFF && (bits64) (aSig<<1)) {
        !            43:         return propagateFloatx80NaNOneArg(a);
        !            44:     }
        !            45:     
        !            46:     if (aExp > one_exp || (aExp == one_exp && aSig > one_sig)) {
        !            47:         float_raise(float_flag_invalid);
        !            48:         a.low = floatx80_default_nan_low;
        !            49:         a.high = floatx80_default_nan_high;
        !            50:         return a;
        !            51:     }
        !            52:     
        !            53:     if (aExp == 0) {
        !            54:         if (aSig == 0) return roundAndPackFloatx80(floatx80_rounding_precision,
        !            55:                                                    0, piby2_exp, pi_sig0, pi_sig1);
        !            56:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !            57:     }
        !            58:     
        !            59:     *e = 0;
        !            60:     return a;
        !            61: }
        !            62: 
        !            63: /*----------------------------------------------------------------------------
        !            64:  | Arc sine
        !            65:  *----------------------------------------------------------------------------*/
        !            66: 
        !            67: floatx80 floatx80_asin_check(floatx80 a, flag *e)
        !            68: {
        !            69:     flag aSign;
        !            70:     int32 aExp;
        !            71:     bits64 aSig;
        !            72:     
        !            73:     *e = 1;
        !            74:     
        !            75:     aSig = extractFloatx80Frac(a);
        !            76:     aExp = extractFloatx80Exp(a);
        !            77:     aSign = extractFloatx80Sign(a);
        !            78:     
        !            79:     if (aExp == 0x7FFF && (bits64) (aSig<<1)) {
        !            80:         return propagateFloatx80NaNOneArg(a);
        !            81:     }
        !            82:     
        !            83:     if (aExp > one_exp || (aExp == one_exp && aSig > one_sig)) {
        !            84:         float_raise(float_flag_invalid);
        !            85:         a.low = floatx80_default_nan_low;
        !            86:         a.high = floatx80_default_nan_high;
        !            87:         return a;
        !            88:     }
        !            89:     
        !            90:     if (aExp == 0) {
        !            91:         if (aSig == 0) return packFloatx80(aSign, 0, 0);
        !            92:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !            93:     }
        !            94:     
        !            95:     *e = 0;
        !            96:     return a;
        !            97: }
        !            98: 
        !            99: /*----------------------------------------------------------------------------
        !           100:  | Arc tangent
        !           101:  *----------------------------------------------------------------------------*/
        !           102: 
        !           103: floatx80 floatx80_atan_check(floatx80 a, flag *e)
        !           104: {
        !           105:     flag aSign;
        !           106:     int32 aExp;
        !           107:     bits64 aSig;
        !           108:     
        !           109:     *e = 1;
        !           110:     
        !           111:     aSig = extractFloatx80Frac(a);
        !           112:     aExp = extractFloatx80Exp(a);
        !           113:     aSign = extractFloatx80Sign(a);
        !           114:     
        !           115:     if (aExp == 0x7FFF) {
        !           116:         if ((bits64) (aSig<<1)) return propagateFloatx80NaNOneArg(a);
        !           117:         return roundAndPackFloatx80(floatx80_rounding_precision,
        !           118:                                     aSign, piby2_exp, pi_sig0, pi_sig1);
        !           119:     }
        !           120:     
        !           121:     if (aExp == 0) {
        !           122:         if (aSig == 0) return packFloatx80(aSign, 0, 0);
        !           123:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           124:     }
        !           125:     
        !           126:     *e = 0;
        !           127:     return a;
        !           128: }
        !           129: 
        !           130: /*----------------------------------------------------------------------------
        !           131:  | Hyperbolic arc tangent
        !           132:  *----------------------------------------------------------------------------*/
        !           133: 
        !           134: floatx80 floatx80_atanh_check(floatx80 a, flag *e)
        !           135: {
        !           136:     flag aSign;
        !           137:     int32 aExp;
        !           138:     bits64 aSig;
        !           139:     
        !           140:     *e = 1;
        !           141:     
        !           142:     aSig = extractFloatx80Frac(a);
        !           143:     aExp = extractFloatx80Exp(a);
        !           144:     aSign = extractFloatx80Sign(a);
        !           145:     
        !           146:     if (aExp == 0x7FFF && (bits64) (aSig<<1)) {
        !           147:         return propagateFloatx80NaNOneArg(a);
        !           148:     }
        !           149:     
        !           150:     if (aExp >= one_exp) {
        !           151:         if (aExp == one_exp && aSig == one_sig) {
        !           152:             float_raise(float_flag_divbyzero);
        !           153:             packFloatx80(aSign, 0x7FFF, floatx80_default_infinity_low);
        !           154:         }
        !           155:         float_raise(float_flag_invalid);
        !           156:         a.low = floatx80_default_nan_low;
        !           157:         a.high = floatx80_default_nan_high;
        !           158:         return a;
        !           159:     }
        !           160:     
        !           161:     if (aExp == 0) {
        !           162:         if (aSig == 0) return packFloatx80(aSign, 0, 0);
        !           163:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           164:     }
        !           165:     
        !           166:     *e = 0;
        !           167:     return a;
        !           168: }
        !           169: 
        !           170: /*----------------------------------------------------------------------------
        !           171:  | Cosine
        !           172:  *----------------------------------------------------------------------------*/
        !           173: 
        !           174: floatx80 floatx80_cos_check(floatx80 a, flag *e)
        !           175: {
        !           176:     flag aSign;
        !           177:     int32 aExp;
        !           178:     bits64 aSig;
        !           179:     
        !           180:     *e = 1;
        !           181:     
        !           182:     aSig = extractFloatx80Frac(a);
        !           183:     aExp = extractFloatx80Exp(a);
        !           184:     aSign = extractFloatx80Sign(a);
        !           185:     
        !           186:     if (aExp == 0x7FFF) {
        !           187:         if ((bits64) (aSig<<1)) return propagateFloatx80NaNOneArg(a);
        !           188:         float_raise(float_flag_invalid);
        !           189:         a.low = floatx80_default_nan_low;
        !           190:         a.high = floatx80_default_nan_high;
        !           191:         return a;
        !           192:     }
        !           193:     
        !           194:     if (aExp == 0) {
        !           195:         if (aSig == 0) return packFloatx80(0, one_exp, one_sig);
        !           196:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           197:     }
        !           198:     
        !           199:     *e = 0;
        !           200:     return a;
        !           201: }
        !           202: 
        !           203: /*----------------------------------------------------------------------------
        !           204:  | Hyperbolic cosine
        !           205:  *----------------------------------------------------------------------------*/
        !           206: 
        !           207: floatx80 floatx80_cosh_check(floatx80 a, flag *e)
        !           208: {
        !           209:     flag aSign;
        !           210:     int32 aExp;
        !           211:     bits64 aSig;
        !           212:     
        !           213:     *e = 1;
        !           214:     
        !           215:     aSig = extractFloatx80Frac(a);
        !           216:     aExp = extractFloatx80Exp(a);
        !           217:     aSign = extractFloatx80Sign(a);
        !           218:     
        !           219:     if (aExp == 0x7FFF) {
        !           220:         if ((bits64) (aSig<<1)) return propagateFloatx80NaNOneArg(a);
        !           221:         return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low);
        !           222:     }
        !           223:     
        !           224:     if (aExp == 0) {
        !           225:         if (aSig == 0) return packFloatx80(0, one_exp, one_sig);
        !           226:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           227:     }
        !           228:     
        !           229:     *e = 0;
        !           230:     return a;
        !           231: }
        !           232: 
        !           233: /*----------------------------------------------------------------------------
        !           234:  | e to x
        !           235:  *----------------------------------------------------------------------------*/
        !           236: 
        !           237: floatx80 floatx80_etox_check(floatx80 a, flag *e)
        !           238: {
        !           239:     flag aSign;
        !           240:     int32 aExp;
        !           241:     bits64 aSig;
        !           242:     
        !           243:     *e = 1;
        !           244:     
        !           245:     aSig = extractFloatx80Frac(a);
        !           246:     aExp = extractFloatx80Exp(a);
        !           247:     aSign = extractFloatx80Sign(a);
        !           248:     
        !           249:     if (aExp == 0x7FFF) {
        !           250:         if ((bits64) (aSig<<1)) return propagateFloatx80NaNOneArg(a);
        !           251:         if (aSign) return packFloatx80(0, 0, 0);
        !           252:         return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low);
        !           253:     }
        !           254:     
        !           255:     if (aExp == 0) {
        !           256:         if (aSig == 0) return packFloatx80(0, one_exp, one_sig);
        !           257:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           258:     }
        !           259:     
        !           260:     *e = 0;
        !           261:     return a;
        !           262: }
        !           263: 
        !           264: /*----------------------------------------------------------------------------
        !           265:  | e to x minus 1
        !           266:  *----------------------------------------------------------------------------*/
        !           267: 
        !           268: floatx80 floatx80_etoxm1_check(floatx80 a, flag *e)
        !           269: {
        !           270:     flag aSign;
        !           271:     int32 aExp;
        !           272:     bits64 aSig;
        !           273:     
        !           274:     *e = 1;
        !           275:     
        !           276:     aSig = extractFloatx80Frac(a);
        !           277:     aExp = extractFloatx80Exp(a);
        !           278:     aSign = extractFloatx80Sign(a);
        !           279:     
        !           280:     if (aExp == 0x7FFF) {
        !           281:         if ((bits64) (aSig<<1)) return propagateFloatx80NaNOneArg(a);
        !           282:         if (aSign) return packFloatx80(aSign, one_exp, one_sig);
        !           283:         return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low);
        !           284:     }
        !           285:     
        !           286:     if (aExp == 0) {
        !           287:         if (aSig == 0) return packFloatx80(aSign, 0, 0);
        !           288:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           289:     }
        !           290:     
        !           291:     *e = 0;
        !           292:     return a;
        !           293: }
        !           294: 
        !           295: /*----------------------------------------------------------------------------
        !           296:  | Log base 10
        !           297:  *----------------------------------------------------------------------------*/
        !           298: 
        !           299: floatx80 floatx80_log10_check(floatx80 a, flag *e)
        !           300: {
        !           301:     flag aSign;
        !           302:     int32 aExp;
        !           303:     bits64 aSig;
        !           304:     
        !           305:     *e = 1;
        !           306:     
        !           307:     aSig = extractFloatx80Frac(a);
        !           308:     aExp = extractFloatx80Exp(a);
        !           309:     aSign = extractFloatx80Sign(a);
        !           310:     
        !           311:     if (aExp == 0x7FFF) {
        !           312:         if ((bits64) (aSig<<1)) propagateFloatx80NaNOneArg(a);
        !           313:         if (aSign == 0)
        !           314:             return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low);
        !           315:     }
        !           316:     
        !           317:     if (aExp == 0) {
        !           318:         if (aSig == 0) {
        !           319:             float_raise(float_flag_divbyzero);
        !           320:             return packFloatx80(1, 0x7FFF, floatx80_default_infinity_low);
        !           321:         }
        !           322:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           323:     }
        !           324:     
        !           325:     if (aSign) {
        !           326:         float_raise(float_flag_invalid);
        !           327:         a.low = floatx80_default_nan_low;
        !           328:         a.high = floatx80_default_nan_high;
        !           329:         return a;
        !           330:     }
        !           331:     
        !           332:     *e = 0;
        !           333:     return a;
        !           334: }
        !           335: 
        !           336: /*----------------------------------------------------------------------------
        !           337:  | Log base 2
        !           338:  *----------------------------------------------------------------------------*/
        !           339: 
        !           340: floatx80 floatx80_log2_check(floatx80 a, flag *e)
        !           341: {
        !           342:     flag aSign;
        !           343:     int32 aExp;
        !           344:     bits64 aSig;
        !           345:     
        !           346:     *e = 1;
        !           347:     
        !           348:     aSig = extractFloatx80Frac(a);
        !           349:     aExp = extractFloatx80Exp(a);
        !           350:     aSign = extractFloatx80Sign(a);
        !           351:     
        !           352:     if (aExp == 0x7FFF) {
        !           353:         if ((bits64) (aSig<<1)) propagateFloatx80NaNOneArg(a);
        !           354:         if (aSign == 0)
        !           355:             return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low);
        !           356:     }
        !           357:     
        !           358:     if (aExp == 0) {
        !           359:         if (aSig == 0) {
        !           360:             float_raise(float_flag_divbyzero);
        !           361:             return packFloatx80(1, 0x7FFF, floatx80_default_infinity_low);
        !           362:         }
        !           363:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           364:     }
        !           365:     
        !           366:     if (aSign) {
        !           367:         float_raise(float_flag_invalid);
        !           368:         a.low = floatx80_default_nan_low;
        !           369:         a.high = floatx80_default_nan_high;
        !           370:         return a;
        !           371:     }
        !           372:     
        !           373:     *e = 0;
        !           374:     return a;
        !           375: }
        !           376: 
        !           377: /*----------------------------------------------------------------------------
        !           378:  | Log base e
        !           379:  *----------------------------------------------------------------------------*/
        !           380: 
        !           381: floatx80 floatx80_logn_check(floatx80 a, flag *e)
        !           382: {
        !           383:     flag aSign;
        !           384:     int32 aExp;
        !           385:     bits64 aSig;
        !           386:     
        !           387:     *e = 1;
        !           388:     
        !           389:     aSig = extractFloatx80Frac(a);
        !           390:     aExp = extractFloatx80Exp(a);
        !           391:     aSign = extractFloatx80Sign(a);
        !           392:     
        !           393:     if (aExp == 0x7FFF) {
        !           394:         if ((bits64) (aSig<<1)) propagateFloatx80NaNOneArg(a);
        !           395:         if (aSign == 0)
        !           396:             return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low);
        !           397:     }
        !           398:     
        !           399:     if (aExp == 0) {
        !           400:         if (aSig == 0) {
        !           401:             float_raise(float_flag_divbyzero);
        !           402:             return packFloatx80(1, 0x7FFF, floatx80_default_infinity_low);
        !           403:         }
        !           404:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           405:     }
        !           406:     
        !           407:     if (aSign) {
        !           408:         float_raise(float_flag_invalid);
        !           409:         a.low = floatx80_default_nan_low;
        !           410:         a.high = floatx80_default_nan_high;
        !           411:         return a;
        !           412:     }
        !           413:     
        !           414:     *e = 0;
        !           415:     return a;
        !           416: }
        !           417: 
        !           418: /*----------------------------------------------------------------------------
        !           419:  | Log base e of x plus 1
        !           420:  *----------------------------------------------------------------------------*/
        !           421: 
        !           422: floatx80 floatx80_lognp1_check(floatx80 a, flag *e)
        !           423: {
        !           424:     flag aSign;
        !           425:     int32 aExp;
        !           426:     bits64 aSig;
        !           427:     
        !           428:     *e = 1;
        !           429:     
        !           430:     aSig = extractFloatx80Frac(a);
        !           431:     aExp = extractFloatx80Exp(a);
        !           432:     aSign = extractFloatx80Sign(a);
        !           433:     
        !           434:     if (aExp == 0x7FFF) {
        !           435:         if ((bits64) (aSig<<1)) propagateFloatx80NaNOneArg(a);
        !           436:         if (aSign) {
        !           437:             float_raise(float_flag_invalid);
        !           438:             a.low = floatx80_default_nan_low;
        !           439:             a.high = floatx80_default_nan_high;
        !           440:             return a;
        !           441:         }
        !           442:         return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low);
        !           443:     }
        !           444:     
        !           445:     if (aExp == 0) {
        !           446:         if (aSig == 0) return packFloatx80(aSign, 0, 0);
        !           447:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           448:     }
        !           449:     
        !           450:     if (aSign && aExp >= one_exp) {
        !           451:         if (aExp == one_exp && aSig == one_sig) {
        !           452:             float_raise(float_flag_divbyzero);
        !           453:             packFloatx80(aSign, 0x7FFF, floatx80_default_infinity_low); /* NaN? */
        !           454:         }
        !           455:         float_raise(float_flag_invalid);
        !           456:         a.low = floatx80_default_nan_low;
        !           457:         a.high = floatx80_default_nan_high;
        !           458:         return a;
        !           459:     }
        !           460:     
        !           461:     *e = 0;
        !           462:     return a;
        !           463: }
        !           464: 
        !           465: /*----------------------------------------------------------------------------
        !           466:  | Sine
        !           467:  *----------------------------------------------------------------------------*/
        !           468: 
        !           469: floatx80 floatx80_sin_check(floatx80 a, flag *e)
        !           470: {
        !           471:     flag aSign;
        !           472:     int32 aExp;
        !           473:     bits64 aSig;
        !           474:     
        !           475:     *e = 1;
        !           476:     
        !           477:     aSig = extractFloatx80Frac(a);
        !           478:     aExp = extractFloatx80Exp(a);
        !           479:     aSign = extractFloatx80Sign(a);
        !           480:     
        !           481:     if (aExp == 0x7FFF) {
        !           482:         if ((bits64) (aSig<<1)) return propagateFloatx80NaNOneArg(a);
        !           483:         float_raise(float_flag_invalid);
        !           484:         a.low = floatx80_default_nan_low;
        !           485:         a.high = floatx80_default_nan_high;
        !           486:         return a;
        !           487:     }
        !           488:     
        !           489:     if (aExp == 0) {
        !           490:         if (aSig == 0) return packFloatx80(aSign, 0, 0);
        !           491:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           492:     }
        !           493:     
        !           494:     *e = 0;
        !           495:     return a;
        !           496: }
        !           497: 
        !           498: /*----------------------------------------------------------------------------
        !           499:  | Hyperbolic sine
        !           500:  *----------------------------------------------------------------------------*/
        !           501: 
        !           502: floatx80 floatx80_sinh_check(floatx80 a, flag *e)
        !           503: {
        !           504:     flag aSign;
        !           505:     int32 aExp;
        !           506:     bits64 aSig;
        !           507:     
        !           508:     *e = 1;
        !           509:     
        !           510:     aSig = extractFloatx80Frac(a);
        !           511:     aExp = extractFloatx80Exp(a);
        !           512:     aSign = extractFloatx80Sign(a);
        !           513:     
        !           514:     if (aExp == 0x7FFF) {
        !           515:         if ((bits64) (aSig<<1)) return propagateFloatx80NaNOneArg(a);
        !           516:         return packFloatx80(aSign, 0x7FFF, floatx80_default_infinity_low);
        !           517:     }
        !           518:     
        !           519:     if (aExp == 0) {
        !           520:         if (aSig == 0) return packFloatx80(aSign, 0, 0);
        !           521:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           522:     }
        !           523:     
        !           524:     *e = 0;
        !           525:     return a;
        !           526: }
        !           527: 
        !           528: /*----------------------------------------------------------------------------
        !           529:  | Tangent
        !           530:  *----------------------------------------------------------------------------*/
        !           531: 
        !           532: floatx80 floatx80_tan_check(floatx80 a, flag *e)
        !           533: {
        !           534:     flag aSign;
        !           535:     int32 aExp;
        !           536:     bits64 aSig;
        !           537:     
        !           538:     *e = 1;
        !           539:     
        !           540:     aSig = extractFloatx80Frac(a);
        !           541:     aExp = extractFloatx80Exp(a);
        !           542:     aSign = extractFloatx80Sign(a);
        !           543:     
        !           544:     if (aExp == 0x7FFF) {
        !           545:         if ((bits64) (aSig<<1)) return propagateFloatx80NaNOneArg(a);
        !           546:         float_raise(float_flag_invalid);
        !           547:         a.low = floatx80_default_nan_low;
        !           548:         a.high = floatx80_default_nan_high;
        !           549:         return a;
        !           550:     }
        !           551:     
        !           552:     if (aExp == 0) {
        !           553:         if (aSig == 0) return packFloatx80(aSign, 0, 0);
        !           554:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           555:     }
        !           556:     
        !           557:     *e = 0;
        !           558:     return a;
        !           559: }
        !           560: 
        !           561: /*----------------------------------------------------------------------------
        !           562:  | Hyperbolic tangent
        !           563:  *----------------------------------------------------------------------------*/
        !           564: 
        !           565: floatx80 floatx80_tanh_check(floatx80 a, flag *e)
        !           566: {
        !           567:     flag aSign;
        !           568:     int32 aExp;
        !           569:     bits64 aSig;
        !           570:     
        !           571:     *e = 1;
        !           572:     
        !           573:     aSig = extractFloatx80Frac(a);
        !           574:     aExp = extractFloatx80Exp(a);
        !           575:     aSign = extractFloatx80Sign(a);
        !           576:     
        !           577:     if (aExp == 0x7FFF) {
        !           578:         if ((bits64) (aSig<<1)) return propagateFloatx80NaNOneArg(a);
        !           579:         return packFloatx80(aSign, one_exp, one_sig);
        !           580:     }
        !           581:     
        !           582:     if (aExp == 0) {
        !           583:         if (aSig == 0) return packFloatx80(aSign, 0, 0);
        !           584:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           585:     }
        !           586:     
        !           587:     *e = 0;
        !           588:     return a;
        !           589: }
        !           590: 
        !           591: /*----------------------------------------------------------------------------
        !           592:  | 10 to x
        !           593:  *----------------------------------------------------------------------------*/
        !           594: 
        !           595: floatx80 floatx80_tentox_check(floatx80 a, flag *e)
        !           596: {
        !           597:     flag aSign;
        !           598:     int32 aExp;
        !           599:     bits64 aSig;
        !           600:     
        !           601:     *e = 1;
        !           602:     
        !           603:     aSig = extractFloatx80Frac(a);
        !           604:     aExp = extractFloatx80Exp(a);
        !           605:     aSign = extractFloatx80Sign(a);
        !           606:     
        !           607:     if (aExp == 0x7FFF) {
        !           608:         if ((bits64) (aSig<<1)) return propagateFloatx80NaNOneArg(a);
        !           609:         if (aSign) return packFloatx80(0, 0, 0);
        !           610:         return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low);
        !           611:     }
        !           612:     
        !           613:     if (aExp == 0) {
        !           614:         if (aSig == 0) return packFloatx80(0, one_exp, one_sig);
        !           615:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           616:     }
        !           617:     
        !           618:     *e = 0;
        !           619:     return a;
        !           620: }
        !           621: 
        !           622: /*----------------------------------------------------------------------------
        !           623:  | 2 to x
        !           624:  *----------------------------------------------------------------------------*/
        !           625: 
        !           626: floatx80 floatx80_twotox_check(floatx80 a, flag *e)
        !           627: {
        !           628:     flag aSign;
        !           629:     int32 aExp;
        !           630:     bits64 aSig;
        !           631:     
        !           632:     *e = 1;
        !           633:     
        !           634:     aSig = extractFloatx80Frac(a);
        !           635:     aExp = extractFloatx80Exp(a);
        !           636:     aSign = extractFloatx80Sign(a);
        !           637:     
        !           638:     if (aExp == 0x7FFF) {
        !           639:         if ((bits64) (aSig<<1)) return propagateFloatx80NaNOneArg(a);
        !           640:         if (aSign) return packFloatx80(0, 0, 0);
        !           641:         return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low);
        !           642:     }
        !           643:     
        !           644:     if (aExp == 0) {
        !           645:         if (aSig == 0) return packFloatx80(0, one_exp, one_sig);
        !           646:         normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
        !           647:     }
        !           648:     
        !           649:     *e = 0;
        !           650:     return a;
        !           651: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.