1*29696Ssam#ifdef LIBC_SCCS 2*29696Ssam .asciz "@(#)modf.s 1.1 (Berkeley) 08/01/86" 3*29696Ssam#endif LIBC_SCCS 4*29696Ssam 5*29696Ssam/* 6*29696Ssam * double modf (value, iptr) 7*29696Ssam * double value, *iptr; 8*29696Ssam * 9*29696Ssam * Modf returns the fractional part of "value", 10*29696Ssam * and stores the integer part indirectly through "iptr". 11*29696Ssam * 12*29696Ssam * This version uses floating point (look in ../fpe for 13*29696Ssam * a much slower integer version). 14*29696Ssam */ 15*29696Ssam 16*29696Ssam#include "DEFS.h" 17*29696Ssam 18*29696SsamENTRY(modf, 0) 19*29696Ssam movl 12(fp),r3 20*29696Ssam ldd 4(fp) 21*29696Ssam tstd # if (value < 0) 22*29696Ssam jgeq 1f 23*29696Ssam negd 24*29696Ssam cvdl r2 # ul = -value 25*29696Ssam bvs 2f 26*29696Ssam mnegl r2,r0 27*29696Ssam cvld r0 28*29696Ssam std (r3) # *iptr = -ul 29*29696Ssam cvld r2 30*29696Ssam addd 4(fp) 31*29696Ssam std r0 # return (value + ul) 32*29696Ssam ret 33*29696Ssam1: 34*29696Ssam cvdl r2 # ul = value 35*29696Ssam bvs 2f 36*29696Ssam cvld r2 37*29696Ssam std (r3) # *iptr = ul 38*29696Ssam std r0 39*29696Ssam ldd 4(fp) 40*29696Ssam subd r0 41*29696Ssam std r0 42*29696Ssam ret 43*29696Ssam2: # integer overflow 44*29696Ssam movl 4(fp),(r3) 45*29696Ssam movl 8(fp),4(r3) 46*29696Ssam clrl r0 47*29696Ssam clrl r1 48*29696Ssam ret 49