|
|
1.1 root 1: #
2: # double modf (value, iptr)
3: # double value;
4: # double *iptr;
5: #
6: # Modf returns the fractional part of "value", and stores the integer
7: # part indirectly through "iptr".
8: #
9: # Entry point
10: #
11: .text
12: .align 1
13: .globl _modf
14: _modf: .word 0x0000 # We use r0-r2, but do not save them
15: #
16: # This instruction does the following:
17: #
18: # Extend the long floating value at 4(ap) with 0, and
19: # multiply it by 1.0. Store the integer part of the result
20: # in r2, and the fractional part of the result in r0-r1.
21: #
22: emodd 4(ap),$0,$0f1.0,r2,r0 # How did you like
23: # THAT, sports fans?
24: jvs iovfl # Jump if integer overflow
25: cvtld r2,*12(ap) # Else store integer result
26: ret # and return
27: #
28: # Integer overflow occurred...develop the integer part by
29: # subtracting the fractional part from the argument.
30: #
31: iovfl: subd3 r0,4(ap),*12(ap) # Develop integer part
32: ret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.