xref: /minix3/lib/libm/arch/i387/s_ceil.S (revision 84d9c625bfea59e274550651111ae9edfdc40fbd)
12fe8fb19SBen Gras/*
22fe8fb19SBen Gras * Written by J.T. Conklin <jtc@NetBSD.org>.
32fe8fb19SBen Gras * Public domain.
42fe8fb19SBen Gras */
52fe8fb19SBen Gras
62fe8fb19SBen Gras#include <machine/asm.h>
72fe8fb19SBen Gras
82fe8fb19SBen Gras#include "abi.h"
92fe8fb19SBen Gras
10*84d9c625SLionel SambucRCSID("$NetBSD: s_ceil.S,v 1.8 2011/06/18 21:24:51 joerg Exp $")
112fe8fb19SBen Gras
122fe8fb19SBen GrasENTRY(ceil)
132fe8fb19SBen Gras#ifdef __i386__
142fe8fb19SBen Gras	pushl	%ebp
152fe8fb19SBen Gras	movl	%esp,%ebp
162fe8fb19SBen Gras	subl	$8,%esp
172fe8fb19SBen Gras
182fe8fb19SBen Gras	fstcw	-4(%ebp)		/* store fpu control word */
192fe8fb19SBen Gras	movw	-4(%ebp),%dx
202fe8fb19SBen Gras	orw	$0x0800,%dx		/* round towards +oo */
212fe8fb19SBen Gras	andw	$0xfbff,%dx
222fe8fb19SBen Gras	movw	%dx,-8(%ebp)
232fe8fb19SBen Gras	fldcw	-8(%ebp)		/* load modfied control word */
242fe8fb19SBen Gras
25*84d9c625SLionel Sambuc	fldl	8(%ebp)			/* round */
262fe8fb19SBen Gras	frndint
272fe8fb19SBen Gras
282fe8fb19SBen Gras	fldcw	-4(%ebp)		/* restore original control word */
292fe8fb19SBen Gras
302fe8fb19SBen Gras	leave
312fe8fb19SBen Gras#else
322fe8fb19SBen Gras	fstcw	-12(%rsp)
332fe8fb19SBen Gras	movw	-12(%rsp),%dx
342fe8fb19SBen Gras	orw	$0x0800,%dx
352fe8fb19SBen Gras	andw	$0xfbff,%dx
362fe8fb19SBen Gras	movw	%dx,-16(%rsp)
372fe8fb19SBen Gras	fldcw	-16(%rsp)
382fe8fb19SBen Gras	movsd	%xmm0,-8(%rsp)
392fe8fb19SBen Gras	fldl	-8(%rsp)
402fe8fb19SBen Gras	frndint
412fe8fb19SBen Gras	fldcw	-12(%rsp)
422fe8fb19SBen Gras	fstpl	-8(%rsp)
432fe8fb19SBen Gras	movsd	-8(%rsp),%xmm0
442fe8fb19SBen Gras#endif
452fe8fb19SBen Gras	ret
46