|
|
1.1 ! root 1: ////////// ! 2: / libc/crt/i386/ldexp.s ! 3: / i386 C runtime library. ! 4: / IEEE software floating point support. ! 5: / i8086 IEEE software floating point library. ! 6: / ldexp() ! 7: ////////// ! 8: ! 9: ////////// ! 10: / double ! 11: / ldexp(dbl, exp) double dbl; int exp; ! 12: / ! 13: / Returns dbl * 2^^exp. ! 14: ////////// ! 15: ! 16: .globl ldexp ! 17: ! 18: dbl .equ 4 ! 19: exp .equ dbl+8 ! 20: EXPMASK .equ 0x7FF00000 ! 21: SGNMASK .equ 0x80000000 ! 22: MAXEXP .equ 2047 ! 23: ! 24: ldexp: ! 25: movl %ecx, dbl+4(%esp) / high word of dbl to ECX ! 26: movl %edx, $EXPMASK ! 27: andl %edx, %ecx / shifted exponent to EDX ! 28: xorl %ecx, %edx / mask off exponent in ECX ! 29: shrl %edx, $20 / exponent in EDX ! 30: addl %edx, exp(%esp) / bump by exp ! 31: jle ?underflow ! 32: cmpl %edx, $MAXEXP ! 33: jge ?overflow ! 34: shll %edx, $20 ! 35: orl %edx, %ecx / hi mantissa bits to EDX ! 36: movl %eax, dbl(%esp) / lo manitssa dword to EAX ! 37: ret ! 38: ! 39: ?underflow: ! 40: andl %ecx, $SGNMASK / preserve sign ! 41: jmp ?done ! 42: ! 43: ?overflow: ! 44: andl %ecx, $SGNMASK / preserve sign ! 45: orl %ecx, $EXPMASK / max exponent ! 46: ?done: ! 47: movl %edx, %ecx / sign/exp to EDX ! 48: subl %eax, %eax / 0 lo mantissa to EAX ! 49: ret ! 50: ! 51: / end of libc/crt/i386/ldexp.s
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.