|
|
1.1 ! root 1: ////////// ! 2: / libc/crt/i386/frexp.s ! 3: / i386 C runtime library. ! 4: / IEEE software floating point support. ! 5: / i386 IEEE software floating point library. ! 6: / frexp() ! 7: ////////// ! 8: ! 9: ////////// ! 10: / double ! 11: / frexp(real, ep) double real; int *ep; ! 12: / ! 13: / Store exponent e through ep and return mantissa m, ! 14: / where real = m * 2^e, 1/2 <= |m| < 1. ! 15: ////////// ! 16: ! 17: .globl frexp ! 18: ! 19: real .equ 4 ! 20: ep .equ real+8 ! 21: EXPMASK .equ 0x7FF00000 ! 22: DEFEXP .equ 1022 ! 23: ! 24: frexp: ! 25: movl %edx, real+4(%esp) / real sign/exp to EDX ! 26: movl %ecx, $EXPMASK ! 27: andl %ecx, %edx / extract exponent bits in ECX ! 28: jnz ?L0 / watch for -0.0 ! 29: movl %edx, %ecx / exponent 0, zap sign bit in case -0.0 ! 30: ! 31: ?L0: ! 32: xorl %edx, %ecx / mask off exponent in EDX ! 33: orl %edx, $DEFEXP<<20 / and replace with new exponent ! 34: shrl %ecx, $20 / unshifted exponent in ECX ! 35: subl %ecx, $DEFEXP / unbiased ! 36: movl %eax, ep(%esp) / ep to EAX ! 37: movl (%eax), %ecx / store exponent ! 38: movl %eax, real(%esp) / fetch low mantissa dword to EAX ! 39: ret ! 40: ! 41: / end of libc/crt/i386/frexp.s
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.