141044Swilliam/*- 241044Swilliam * Copyright (c) 1990 The Regents of the University of California. 341044Swilliam * All rights reserved. 441044Swilliam * 541044Swilliam * This code is derived from software contributed to Berkeley by 641044Swilliam * Sean Eric Fagan 741044Swilliam * 841044Swilliam * %sccs.include.redist.c% 941044Swilliam */ 1041044Swilliam 1141044Swilliam#if defined(LIBC_SCCS) && !defined(lint) 12*45821Swilliam.asciz "@(#)modf.c 5.1 (Berkeley) 4/23/90" 1341044Swilliam#endif /* LIBC_SCCS and not lint */ 1441044Swilliam 1541044Swilliam/* 1641044Swilliam * modf(value, iptr): return fractional part of value, and stores the 1741044Swilliam * integral part into iptr (a pointer to double). 1841044Swilliam * 1941044Swilliam * Written by Sean Eric Fagan (sef@kithrup.COM) 2041044Swilliam * Sun Mar 11 20:27:30 PST 1990 2141044Swilliam */ 2241044Swilliam 2341044Swilliam/* With CHOP mode on, frndint behaves as TRUNC does. Useful. */ 24*45821Swilliam.text 25*45821Swilliam.globl _modf 26*45821Swilliam_modf: 27*45821Swilliam pushl %ebp 28*45821Swilliam movl %esp,%ebp 29*45821Swilliam subl $16,%esp 30*45821Swilliam/APP 31*45821Swilliam fnstcw -12(%ebp) 32*45821Swilliam/NO_APP 33*45821Swilliam movw -12(%ebp),%dx 34*45821Swilliam orw $3072,%dx 35*45821Swilliam movw %dx,-16(%ebp) 36*45821Swilliam/APP 37*45821Swilliam fldcw -16(%ebp) 38*45821Swilliam/NO_APP 39*45821Swilliam fldl 8(%ebp) 40*45821Swilliam/APP 41*45821Swilliam frndint 42*45821Swilliam/NO_APP 43*45821Swilliam fstpl -8(%ebp) 44*45821Swilliam/APP 45*45821Swilliam fldcw -12(%ebp) 46*45821Swilliam/NO_APP 47*45821Swilliam movl 16(%ebp),%eax 48*45821Swilliam movl -8(%ebp),%edx 49*45821Swilliam movl -4(%ebp),%ecx 50*45821Swilliam movl %edx,(%eax) 51*45821Swilliam movl %ecx,4(%eax) 52*45821Swilliam fldl 8(%ebp) 53*45821Swilliam fsubl -8(%ebp) 54*45821Swilliam jmp L1 55*45821SwilliamL1: 56*45821Swilliam leave 57*45821Swilliam ret 58