|
|
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.