/* Copyright (C) 2011 DJ Delorie, see COPYING.DJ for details */
/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
	.text
	.globl	___modfl
___modfl:
	pushl %ebp
	movl %esp,%ebp
	subl $4,%esp
	fldt 8(%ebp)
	movl 20(%ebp),%eax
	fnstcw -2(%ebp)
	movw -2(%ebp),%dx
	orb $0x0c,%dh
	movw %dx,-4(%ebp)
	fldcw -4(%ebp)
	fld %st(0)
	frndint
	fldcw -2(%ebp)
	fld %st(0)
	fstpt (%eax)
	fucom %st(1)
	fnstsw -2(%ebp)
	movw -2(%ebp),%dx
	andb $0x44,%dh
	xorb $0x40,%dh
	jnz 0f
	fxam
	fnstsw -2(%ebp)
	fstp %st(0)
	fstp %st(0)
	fldz
	movw -2(%ebp),%dx
	andb $0x02,%dh
	jz 1f
	fchs
	jmp 1f
0:
	fsubrp %st,%st(1)
1:
	leave
	ret

#include <libc/asmdefs.h>
