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