141044Swilliam/*- 2*61128Sbostic * Copyright (c) 1990, 1993 3*61128Sbostic * The Regents of the University of California. All rights reserved. 441044Swilliam * 541044Swilliam * This code is derived from software contributed to Berkeley by 647564Sbostic * Sean Eric Fagan. 741044Swilliam * 841044Swilliam * %sccs.include.redist.c% 941044Swilliam */ 1041044Swilliam 1141044Swilliam#if defined(LIBC_SCCS) && !defined(lint) 12*61128Sbostic .asciz "@(#)modf.s 8.1 (Berkeley) 06/04/93" 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. */ 2445821Swilliam.text 2545821Swilliam.globl _modf 2645821Swilliam_modf: 2745821Swilliam pushl %ebp 2845821Swilliam movl %esp,%ebp 2945821Swilliam subl $16,%esp 3045821Swilliam fnstcw -12(%ebp) 3145821Swilliam movw -12(%ebp),%dx 3245821Swilliam orw $3072,%dx 3345821Swilliam movw %dx,-16(%ebp) 3445821Swilliam fldcw -16(%ebp) 3545821Swilliam fldl 8(%ebp) 3645821Swilliam frndint 3745821Swilliam fstpl -8(%ebp) 3845821Swilliam fldcw -12(%ebp) 3945821Swilliam movl 16(%ebp),%eax 4045821Swilliam movl -8(%ebp),%edx 4145821Swilliam movl -4(%ebp),%ecx 4245821Swilliam movl %edx,(%eax) 4345821Swilliam movl %ecx,4(%eax) 4445821Swilliam fldl 8(%ebp) 4545821Swilliam fsubl -8(%ebp) 4645821Swilliam jmp L1 4745821SwilliamL1: 4845821Swilliam leave 4945821Swilliam ret 50