Blame sysdeps/i386/fpu/s_floorf.S

Packit Service 82fcde
/*
Packit Service 82fcde
 * Written by J.T. Conklin <jtc@netbsd.org>.
Packit Service 82fcde
 * Public domain.
Packit Service 82fcde
 */
Packit Service 82fcde
Packit Service 82fcde
#include <machine/asm.h>
Packit Service 82fcde
#include <libm-alias-float.h>
Packit Service 82fcde
Packit Service 82fcde
RCSID("$NetBSD: s_floorf.S,v 1.3 1995/05/09 00:04:32 jtc Exp $")
Packit Service 82fcde
Packit Service 82fcde
ENTRY(__floorf)
Packit Service 82fcde
	flds	4(%esp)
Packit Service 82fcde
	subl	$32,%esp
Packit Service 82fcde
	cfi_adjust_cfa_offset (32)
Packit Service 82fcde
Packit Service 82fcde
	fnstenv	4(%esp)			/* store fpu environment */
Packit Service 82fcde
Packit Service 82fcde
	/* We use here %edx although only the low 1 bits are defined.
Packit Service 82fcde
	   But none of the operations should care and they are faster
Packit Service 82fcde
	   than the 16 bit operations.  */
Packit Service 82fcde
	movl	$0x400,%edx		/* round towards -oo */
Packit Service 82fcde
	orl	4(%esp),%edx
Packit Service 82fcde
	andl	$0xf7ff,%edx
Packit Service 82fcde
	movl	%edx,(%esp)
Packit Service 82fcde
	fldcw	(%esp)			/* load modified control word */
Packit Service 82fcde
Packit Service 82fcde
	frndint				/* round */
Packit Service 82fcde
Packit Service 82fcde
	fldenv	4(%esp)			/* restore original environment */
Packit Service 82fcde
Packit Service 82fcde
	addl	$32,%esp
Packit Service 82fcde
	cfi_adjust_cfa_offset (-32)
Packit Service 82fcde
	ret
Packit Service 82fcde
END (__floorf)
Packit Service 82fcde
libm_alias_float (__floor, floor)