xref: /original-bsd/lib/libm/mc68881/floor.s (revision ce46c3ff)
1/*-
2 * Copyright (c) 1990, 1993
3 *	The Regents of the University of California.  All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * the Systems Programming Group of the University of Utah Computer
7 * Science Department.
8 *
9 * %sccs.include.redist.c%
10 *
11 *	@(#)floor.s	8.1 (Berkeley) 06/04/93
12 */
13
14	.text
15	.globl	_floor,_ceil,_rint
16
17| floor(x)
18| the largest integer no larger than x
19_floor:
20	fmovel	fpcr,d0		| save old FPCR
21	fmoved	sp@(4),fp0	| get argument
22	fbun	Lret		| if NaN, return NaN
23	fboge	Lrtz		| >=0, round to zero
24	fmovel	#0x20,fpcr	| <0, round to -inf
25	jra	Ldoit
26
27| ceil(x)
28| -floor(-x), for all real x
29_ceil:
30	fmovel	fpcr,d0		| save old FPCR
31	fmoved	sp@(4),fp0	| get argument
32	fbun	Lret		| if NaN, return NaN
33	fbolt	Lrtz		| <0, round to zero
34	fmovel	#0x30,fpcr	| >=0, round to inf
35	jra	Ldoit
36
37Lrtz:
38	fmovel	#0x10,fpcr
39Ldoit:
40	fintd	sp@(4),fp0	| truncate
41	fmovel	d0,fpcr		| restore old FPCR
42Lret:
43	fmoved	fp0,sp@-
44	movel	sp@+,d0
45	movel	sp@+,d1
46	rts
47
48| rint(x)
49| delivers integer nearest x in direction of prevailing rounding mode
50_rint:
51	fintd	sp@(4),fp0	| use prevailing rounding mode
52	jra	Lret
53