Annotation of coherent/b/lib/libc/gen/ieee_d.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * libc/gen/ieee_d.c
        !             3:  */
        !             4: 
        !             5: /*
        !             6:  * ieee_d(double *idp, double *ddp)
        !             7:  * Convert double from DECVAX format to IEEE format.
        !             8:  * ddp points to a DECVAX format double to convert.
        !             9:  * idp points to a destination for the converted IEEE value;
        !            10:  * idp may be identical to ddp for in-place conversion.
        !            11:  * The DECVAX significand is truncated, not rounded.
        !            12:  * Always returns 0, because the conversion always succeeds.
        !            13:  */
        !            14: 
        !            15: int
        !            16: ieee_d(idp, ddp) double *idp, *ddp;
        !            17: {
        !            18:        unsigned char a[8];
        !            19:        register unsigned char *cp;
        !            20:        register int exp;
        !            21: 
        !            22:        /* Extract biased exponent. */
        !            23:        cp = (char *)ddp;
        !            24:        exp = ((cp[7] & 0x7F) << 1) | ((cp[6] & 0x80) >> 7);
        !            25: 
        !            26:        if (exp == 0) {
        !            27:                memset((char *)idp, 0, 8);      /* set idp to 0.0 */
        !            28:                return 0;
        !            29:        }
        !            30: 
        !            31:        /* Adjust exponent bias and repack. */
        !            32:        exp += 1023 - 129;
        !            33:        a[7] = (cp[7] & 0x80) | (exp >> 4);
        !            34:        a[6] = ((exp & 0x0F) << 4)  | ((cp[6] & 0x78) >> 3);
        !            35:        a[5] = ((cp[6] & 0x7) << 5) | ((cp[5] & 0x7F) >> 3);
        !            36:        a[4] = ((cp[5] & 0x7) << 5) | ((cp[4] & 0x7F) >> 3);
        !            37:        a[3] = ((cp[4] & 0x7) << 5) | ((cp[3] & 0x7F) >> 3);
        !            38:        a[2] = ((cp[3] & 0x7) << 5) | ((cp[2] & 0x7F) >> 3);
        !            39:        a[1] = ((cp[2] & 0x7) << 5) | ((cp[1] & 0x7F) >> 3);
        !            40:        a[0] = ((cp[1] & 0x7) << 5) | ((cp[0] & 0x7F) >> 3);
        !            41: 
        !            42:        /* Done, copy to destination. */
        !            43:        memcpy((char *)idp, a, 8);
        !            44:        return 0;
        !            45: }
        !            46: 
        !            47: /* end of libc/gen/ieee_d.c */

unix.superglobalmegacorp.com

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