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

1.1       root        1: //////////
                      2: / libc/crt/i386/udcvt.s
                      3: / i386 C runtime library.
                      4: / IEEE software floating point support.
                      5: //////////
                      6: 
                      7: //////////
                      8: / unsigned int _udcvt()
                      9: /
                     10: / Convert double in %edx:%eax to unsigned int, return in %eax.
                     11: //////////
                     12: 
                     13: BIAS   .equ    1023
                     14: EXPMASK        .equ    0x7FF00000
                     15: MANMASK        .equ    0x000FFFFF
                     16: HIDDEN .equ    0x00100000
                     17: MAXUINT        .equ    0xFFFFFFFF
                     18: 
                     19:        .globl  _udcvt
                     20: 
                     21: _udcvt:
                     22:        push    %ecx
                     23:        orl     %edx, %edx
                     24:        js      ?zero                   / negative arg, return 0
                     25:        mov     %ecx, %edx
                     26:        andl    %ecx, $EXPMASK          / shifted biased exponent to ECX
                     27:        shrl    %ecx, $20               / biased exponent
                     28:        subl    %ecx, $BIAS             / unbiased exponent
                     29:        jl      ?zero                   / too small, return 0
                     30:        cmpl    %ecx, $31
                     31:        jg      ?inf                    / too big, return MAXUINT
                     32:        andl    %edx, $MANMASK          / extract hi mantissa in EDX
                     33:        orl     %edx, $HIDDEN           / restore hidden bit
                     34:        shrd    %eax, %edx, $21         / mantissa in EAX
                     35:        negl    %ecx
                     36:        addl    %ecx, $31               / shift count to CL
                     37:        shrl    %eax, %cl               / shift mantissa to correct position
                     38:        pop     %ecx
                     39:        ret
                     40: 
                     41: ?inf:
                     42:        mov     %eax, $MAXUINT          / overflow, return MAXUINT
                     43:        pop     %ecx
                     44:        ret
                     45: 
                     46: ?zero:
                     47:        subl    %eax, %eax
                     48:        pop     %ecx
                     49:        ret
                     50: 
                     51: / end of libc/crt/i386/udcvt.s

unix.superglobalmegacorp.com

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