|
|
1.1 ! root 1: ////////// ! 2: / libc/crt/i386/fdcvt.s ! 3: / i386 C runtime library. ! 4: / IEEE software floating point support. ! 5: ////////// ! 6: ! 7: ////////// ! 8: / "float" _fdcvt() ! 9: / Convert double in %edx:%eax to float, return in %eax. ! 10: ////////// ! 11: ! 12: BIAS .equ 1023 ! 13: FBIAS .equ 127 ! 14: SGNMASK .equ 0x80000000 ! 15: EXPMASK .equ 0x7FF00000 ! 16: MANMASK .equ 0x000FFFFF ! 17: FEXPMASK .equ 0x7F800000 ! 18: FMANMASK .equ 0x007FFFFF ! 19: FHIDDEN .equ 0x00800000 ! 20: FMAXEXP .equ 255 ! 21: ! 22: .globl _fdcvt ! 23: ! 24: _fdcvt: ! 25: push %ecx ! 26: mov %ecx, %edx ! 27: andl %ecx, $EXPMASK / extract exponent in ECX ! 28: jz ?zero / return 0.0, ignoring denormals ! 29: orl %edx, %edx ! 30: pushfl / save arg sign ! 31: shrl %ecx, $20 / biased double exponent in ECX ! 32: subl %ecx, $BIAS-FBIAS / adjust to float exponent bias ! 33: jle ?zerof / underflow, return 0.0 ! 34: cmpl %ecx, $FMAXEXP ! 35: jge ?inf / overflow, return +-infinity ! 36: andl %edx, $MANMASK / high mantissa bits in EDX, hidden bit implicit ! 37: shrd %eax, %edx, $29 / float mantissa in EAX, hidden bit implicit ! 38: jnc ?pack / no rounding required ! 39: incl %eax / round up float mantissa ! 40: testl %eax, $FHIDDEN / check for carry past hidden bit ! 41: jz ?pack / ok as is ! 42: xorl %eax, %eax / clear hidden bit in mantissa, now 0 ! 43: incl %ecx / adjust the exponent ! 44: cmpl %ecx, $FMAXEXP ! 45: jge ?inf / overflow, return +-infinity ! 46: ?pack: ! 47: shll %ecx, $23 / position float exponent ! 48: orl %eax, %ecx / combine exponent and mantissa ! 49: ?setsign: ! 50: popfl / restore arg sign ! 51: jns ?done ! 52: orl %eax, $SGNMASK / set result sign ! 53: ?done: ! 54: pop %ecx ! 55: ret ! 56: ! 57: ?inf: ! 58: movl %eax, $FEXPMASK ! 59: jmp ?setsign / return +-infinity ! 60: ! 61: ?zerof: ! 62: popfl ! 63: ?zero: ! 64: subl %eax, %eax / return 0.0 ! 65: pop %ecx ! 66: ret ! 67: ! 68: / end of libc/crt/i386/fdcvt.s
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.