Annotation of coherent/b/lib/libc/crt/i386/ducvt.s, revision 1.1.1.1

1.1       root        1: //////////
                      2: / libc/crt/i386/ducvt.s
                      3: / i386 C runtime library.
                      4: / IEEE software floating point support.
                      5: //////////
                      6: 
                      7: //////////
                      8: / double _ducvt()
                      9: / Convert unsigned int in %eax to double, return in %edx:%eax.
                     10: /
                     11: / There is no 32-bit shift, so the code below uses an n-1 bit shift
                     12: / followed by a 1 bit shift rather than an n-bit shift;
                     13: / this gets (double)1 right without a special case.
                     14: //////////
                     15: 
                     16: BIAS   .equ    1023
                     17: 
                     18:        .globl  _ducvt
                     19: 
                     20: _ducvt:
                     21:        bsrl    %edx, %eax              / high bit position 0-31 to EDX (DL)
                     22:        jz      ?zero                   / return 0.0
                     23:        push    %ecx
                     24:        movb    %cl, $31
                     25:        subb    %cl, %dl                / shift count - 1 to CL
                     26:        shll    %eax, %cl               / high bit lands at bit 31
                     27:        shll    %eax, $1                / hidden bit into CF
                     28:        movl    %ecx, %edx
                     29:        addl    %ecx, $BIAS             / biased exponent to ECX
                     30:        shll    %ecx, $20               / position biased exponent
                     31:        movl    %edx, %eax
                     32:        shrl    %edx, $12               / hi manissa to EDX
                     33:        shll    %eax, $20               / lo mantissa to EAX
                     34:        orl     %edx, %ecx              / exponent
                     35:        pop     %ecx
                     36:        ret
                     37: 
                     38: ?zero:
                     39:        sub     %edx, %edx
                     40:        ret
                     41: 
                     42: / end of libc/crt/i386/ducvt.s

unix.superglobalmegacorp.com

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