xref: /illumos-gate/usr/src/lib/libm/amd64/src/floorl.S (revision 5d9d9091)
1*5d9d9091SRichard Lowe/*
2*5d9d9091SRichard Lowe * CDDL HEADER START
3*5d9d9091SRichard Lowe *
4*5d9d9091SRichard Lowe * The contents of this file are subject to the terms of the
5*5d9d9091SRichard Lowe * Common Development and Distribution License (the "License").
6*5d9d9091SRichard Lowe * You may not use this file except in compliance with the License.
7*5d9d9091SRichard Lowe *
8*5d9d9091SRichard Lowe * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*5d9d9091SRichard Lowe * or http://www.opensolaris.org/os/licensing.
10*5d9d9091SRichard Lowe * See the License for the specific language governing permissions
11*5d9d9091SRichard Lowe * and limitations under the License.
12*5d9d9091SRichard Lowe *
13*5d9d9091SRichard Lowe * When distributing Covered Code, include this CDDL HEADER in each
14*5d9d9091SRichard Lowe * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*5d9d9091SRichard Lowe * If applicable, add the following below this CDDL HEADER, with the
16*5d9d9091SRichard Lowe * fields enclosed by brackets "[]" replaced with your own identifying
17*5d9d9091SRichard Lowe * information: Portions Copyright [yyyy] [name of copyright owner]
18*5d9d9091SRichard Lowe *
19*5d9d9091SRichard Lowe * CDDL HEADER END
20*5d9d9091SRichard Lowe */
21*5d9d9091SRichard Lowe/*
22*5d9d9091SRichard Lowe * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
23*5d9d9091SRichard Lowe */
24*5d9d9091SRichard Lowe/*
25*5d9d9091SRichard Lowe * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
26*5d9d9091SRichard Lowe * Use is subject to license terms.
27*5d9d9091SRichard Lowe */
28*5d9d9091SRichard Lowe
29*5d9d9091SRichard Lowe	.file	"floorl.s"
30*5d9d9091SRichard Lowe
31*5d9d9091SRichard Lowe#include "libm.h"
32*5d9d9091SRichard LoweLIBM_ANSI_PRAGMA_WEAK(ceill,function)
33*5d9d9091SRichard LoweLIBM_ANSI_PRAGMA_WEAK(floorl,function)
34*5d9d9091SRichard Lowe
35*5d9d9091SRichard Lowe	ENTRY(ceill)
36*5d9d9091SRichard Lowe	subq	$16,%rsp
37*5d9d9091SRichard Lowe	fstcw	(%rsp)
38*5d9d9091SRichard Lowe	fldt	24(%rsp)
39*5d9d9091SRichard Lowe	movw	(%rsp),%cx
40*5d9d9091SRichard Lowe	orw	$0x0c00,%cx
41*5d9d9091SRichard Lowe	xorw	$0x0400,%cx
42*5d9d9091SRichard Lowe	movw	%cx,4(%rsp)
43*5d9d9091SRichard Lowe	fldcw	4(%rsp)			/ set RD = up
44*5d9d9091SRichard Lowe	frndint
45*5d9d9091SRichard Lowe	fstcw	4(%rsp)			/ restore RD
46*5d9d9091SRichard Lowe	movw	4(%rsp),%dx
47*5d9d9091SRichard Lowe	andw	$0xf3ff,%dx
48*5d9d9091SRichard Lowe	movw	(%rsp),%cx
49*5d9d9091SRichard Lowe	andw	$0x0c00,%cx
50*5d9d9091SRichard Lowe	orw	%dx,%cx
51*5d9d9091SRichard Lowe	movw	%cx,(%rsp)
52*5d9d9091SRichard Lowe	fldcw	(%rsp)			/ restore RD
53*5d9d9091SRichard Lowe	addq	$16,%rsp
54*5d9d9091SRichard Lowe	ret
55*5d9d9091SRichard Lowe	.align	16
56*5d9d9091SRichard Lowe	SET_SIZE(ceill)
57*5d9d9091SRichard Lowe
58*5d9d9091SRichard Lowe
59*5d9d9091SRichard Lowe	ENTRY(floorl)
60*5d9d9091SRichard Lowe	subq	$16,%rsp
61*5d9d9091SRichard Lowe	fstcw	(%rsp)
62*5d9d9091SRichard Lowe	fldt	24(%rsp)
63*5d9d9091SRichard Lowe	movw	(%rsp),%cx
64*5d9d9091SRichard Lowe	orw	$0x0c00,%cx
65*5d9d9091SRichard Lowe	xorw	$0x0800,%cx
66*5d9d9091SRichard Lowe	movw	%cx,4(%rsp)
67*5d9d9091SRichard Lowe	fldcw	4(%rsp)			/ set RD = down
68*5d9d9091SRichard Lowe	frndint
69*5d9d9091SRichard Lowe	fstcw	4(%rsp)			/ restore RD
70*5d9d9091SRichard Lowe	movw	4(%rsp),%dx
71*5d9d9091SRichard Lowe	andw	$0xf3ff,%dx
72*5d9d9091SRichard Lowe	movw	(%rsp),%cx
73*5d9d9091SRichard Lowe	andw	$0x0c00,%cx
74*5d9d9091SRichard Lowe	orw	%dx,%cx
75*5d9d9091SRichard Lowe	movw	%cx,(%rsp)
76*5d9d9091SRichard Lowe	fldcw	(%rsp)			/ restore RD
77*5d9d9091SRichard Lowe	addq	$16,%rsp
78*5d9d9091SRichard Lowe	ret
79*5d9d9091SRichard Lowe	.align	16
80*5d9d9091SRichard Lowe	SET_SIZE(floorl)
81