|
|
1.1 ! root 1: .data ! 2: /* .asciz "@(#)modf.s 1.1 86/02/03 SMI" */ ! 3: .text ! 4: ! 5: /* ! 6: * double-precision operations: frexp, ldexp, modf ! 7: * frexp.s 1.1 83/04/12 ! 8: * ! 9: */ ! 10: #include "fpcrtdefs.h" ! 11: ! 12: /* ! 13: * double ! 14: * modf( value, iptr) ! 15: * double value, *iptr; ! 16: * ! 17: * return a value v and stores through iptr a value i s.t.: ! 18: * v + i == value, and ! 19: *4.2 BSD: ! 20: * 1 > v >= 0 ! 21: * Note that for -0.5 < value < 0, v may not be representable. ! 22: *System V: ! 23: v has sign of value and |v| < 1. ! 24: v is always exact. ! 25: */ ! 26: ! 27: .globl _modf ! 28: _modf: link a6,#0 ! 29: MCOUNT ! 30: moveml a6@(8),d0/d1 | d0/d1 gets x. ! 31: jsr Ffloord | d0/d1 gets floor(x). 4.2 BSD definition. ! 32: | jsr Faintd | d0/d1 gets aint(x). System V definition. ! 33: movl a6@(16),a0 | a0 gets address of *iptr. ! 34: moveml d0/d1,a0@ | *iptr gets floor(x). ! 35: lea a6@(8),a0 | a0 points to x. ! 36: jsr Fsubd | d0/d1 gets floor(x)-x. ! 37: bchg #31,d0 | d0/d1 gets x-floor(x) >= 0 unless x is inf or nan. ! 38: unlk a6 ! 39: rts
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.