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

1.1       root        1: //////////
                      2: / libc/crt/i386/dfcvt.s
                      3: / i386 C runtime library.
                      4: / IEEE software floating point support.
                      5: //////////
                      6: 
                      7: //////////
                      8: / double _dfcvt()
                      9: / Convert float in %eax to double, return in %edx:%eax.
                     10: / Ignores denormals and NaNs.
                     11: //////////
                     12: 
                     13: BIAS           .equ    1023
                     14: FBIAS          .equ    127
                     15: SGNMASK                .equ    0x80000000
                     16: EXPMASK                .equ    0x7FF00000
                     17: FEXPMASK       .equ    0x7F800000
                     18: FMANMASK       .equ    0x007FFFFF
                     19: FMAXEXP                .equ    255
                     20: 
                     21:        .globl  _dfcvt
                     22: 
                     23: _dfcvt:
                     24:        push    %ecx
                     25:        subl    %edx, %edx              / 0 to EDX
                     26:        movl    %ecx, %eax              / copy float to ECX
                     27:        andl    %ecx, $FEXPMASK         / extract float exponent
                     28:        jz      ?zero                   / return 0.0, ignoring denormals
                     29:        orl     %eax, %eax
                     30:        pushfl                          / save arg flag
                     31:        shrl    %ecx, $23               / unshift float exponent
                     32:        cmpl    %ecx, $FMAXEXP          / check for big exponent
                     33:        jz      ?inf                    / return +-infinity, ignoring NaNs
                     34:        addl    %ecx, $BIAS-FBIAS       / adjust to double exponent bias
                     35:        shll    %ecx, $20               / double exponent to correct position
                     36:        and     %eax, $FMANMASK         / extract float mantissa in EAX
                     37:        movl    %edx, %eax              / and copy to EDX
                     38:        shrl    %edx, $3                / shift hi mantissa
                     39:        shll    %eax, $29               / and lo mantissa
                     40:        orl     %edx, %ecx              / exponent
                     41: 
                     42: ?setsign:
                     43:        popfl                           / restore arg sign flag
                     44:        jns     ?L0
                     45:        orl     %edx, $SGNMASK          / set sign bit
                     46: ?L0:
                     47:        pop     %ecx
                     48:        ret
                     49: 
                     50: ?inf:
                     51:        movl    %edx, $EXPMASK
                     52:        subl    %eax, %eax
                     53:        jmp     ?setsign
                     54: 
                     55: ?zero:
                     56:        subl    %eax, %eax              / EDX is already 0, return 0.0
                     57:        pop     %ecx
                     58:        ret
                     59: 
                     60: / end of libc/crt/i386/dfcvt.s

unix.superglobalmegacorp.com

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