1/*
2 * Public domain.
3 */
4
5#include <libm-alias-ldouble.h>
6#include <machine/asm.h>
7
8
9ENTRY(__ceill)
10	fldt	8(%rsp)
11
12	fnstenv	-28(%rsp)		/* store fpu environment */
13
14	/* We use here %edx although only the low 1 bits are defined.
15	   But none of the operations should care and they are faster
16	   than the 16 bit operations.  */
17	movl	$0x0800,%edx		/* round towards +oo */
18	orl	-28(%rsp),%edx
19	andl	$0xfbff,%edx
20	movl	%edx,-32(%rsp)
21	fldcw	-32(%rsp)		/* load modified control word */
22
23	frndint				/* round */
24
25	/* Preserve "invalid" exceptions from sNaN input.  */
26	fnstsw
27	andl	$0x1, %eax
28	orl	%eax, -24(%rsp)
29
30	fldenv	-28(%rsp)		/* restore original environment */
31
32	ret
33END (__ceill)
34libm_alias_ldouble (__ceil, ceil)
35