xref: /netbsd/lib/libm/arch/i387/s_ceilf.S (revision bf9ec67e)
1/*
2 * Written by J.T. Conklin <jtc@netbsd.org>.
3 * Public domain.
4 */
5
6#include <machine/asm.h>
7
8RCSID("$NetBSD: s_ceilf.S,v 1.6 2002/03/30 10:03:44 fvdl Exp $")
9
10ENTRY(ceilf)
11#ifdef __i386__
12	pushl	%ebp
13	movl	%esp,%ebp
14	subl	$8,%esp
15
16	fstcw	-4(%ebp)		/* store fpu control word */
17	movw	-4(%ebp),%dx
18	orw	$0x0800,%dx		/* round towards +oo */
19	andw	$0xfbff,%dx
20	movw	%dx,-8(%ebp)
21	fldcw	-8(%ebp)		/* load modfied control word */
22
23	flds	8(%ebp);		/* round */
24	frndint
25
26	fldcw	-4(%ebp)		/* restore original control word */
27
28	leave
29#else
30	fstcw	-8(%rsp)
31	movw	-8(%rsp),%dx
32	orw	$0x0800,%dx
33	andw	$0xfbff,%dx
34	movw	%dx,-12(%rsp)
35	fldcw	-12(%rsp)
36	movss	%xmm0,-4(%rsp)
37	fldl	-4(%rsp)
38	frndint
39	fldcw	-8(%rsp)
40	fstps	-4(%rsp)
41	movss	-4(%rsp),%xmm0
42#endif
43	ret
44