xref: /illumos-gate/usr/src/lib/libc/sparc/fp/__quad.S (revision 5d9d9091f564c198a760790b0bfa72c44e17912b)
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, Version 1.0 only
6*5d9d9091SRichard Lowe * (the "License").  You may not use this file except in compliance
7*5d9d9091SRichard Lowe * with the License.
8*5d9d9091SRichard Lowe *
9*5d9d9091SRichard Lowe * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*5d9d9091SRichard Lowe * or http://www.opensolaris.org/os/licensing.
11*5d9d9091SRichard Lowe * See the License for the specific language governing permissions
12*5d9d9091SRichard Lowe * and limitations under the License.
13*5d9d9091SRichard Lowe *
14*5d9d9091SRichard Lowe * When distributing Covered Code, include this CDDL HEADER in each
15*5d9d9091SRichard Lowe * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*5d9d9091SRichard Lowe * If applicable, add the following below this CDDL HEADER, with the
17*5d9d9091SRichard Lowe * fields enclosed by brackets "[]" replaced with your own identifying
18*5d9d9091SRichard Lowe * information: Portions Copyright [yyyy] [name of copyright owner]
19*5d9d9091SRichard Lowe *
20*5d9d9091SRichard Lowe * CDDL HEADER END
21*5d9d9091SRichard Lowe */
22*5d9d9091SRichard Lowe
23*5d9d9091SRichard Lowe/*
24*5d9d9091SRichard Lowe * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
25*5d9d9091SRichard Lowe * Use is subject to license terms.
26*5d9d9091SRichard Lowe */
27*5d9d9091SRichard Lowe
28*5d9d9091SRichard Lowe/*
29*5d9d9091SRichard Lowe * These are functions corresponding to some which used to be inline, with Sun
30*5d9d9091SRichard Lowe * Studio.  Someone may want to make them into gcc inline asm.
31*5d9d9091SRichard Lowe */
32*5d9d9091SRichard Lowe
33*5d9d9091SRichard Lowe#include <sys/asm_linkage.h>
34*5d9d9091SRichard Lowe
35*5d9d9091SRichard Lowe	ENTRY_NP(__quad_getfsrp)
36*5d9d9091SRichard Lowe	retl
37*5d9d9091SRichard Lowe	st	%fsr,[%o0]
38*5d9d9091SRichard Lowe	SET_SIZE(__quad_getfsrp)
39*5d9d9091SRichard Lowe
40*5d9d9091SRichard Lowe	ENTRY_NP(__quad_setfsrp)
41*5d9d9091SRichard Lowe	retl
42*5d9d9091SRichard Lowe	ld	[%o0],%fsr
43*5d9d9091SRichard Lowe	SET_SIZE(__quad_setfsrp)
44*5d9d9091SRichard Lowe
45*5d9d9091SRichard Lowe	ENTRY_NP(__quad_dp_sqrt)
46*5d9d9091SRichard Lowe	ldd	[%o0],%f0
47*5d9d9091SRichard Lowe	fsqrtd	%f0,%f0
48*5d9d9091SRichard Lowe	retl
49*5d9d9091SRichard Lowe	nop
50*5d9d9091SRichard Lowe	SET_SIZE(__quad_dp_sqrt)
51*5d9d9091SRichard Lowe
52*5d9d9091SRichard Lowe	ENTRY_NP(__quad_faddq)
53*5d9d9091SRichard Lowe	ldd	[%o0],%f0
54*5d9d9091SRichard Lowe	ldd	[%o0+8],%f2
55*5d9d9091SRichard Lowe	ldd	[%o1],%f4
56*5d9d9091SRichard Lowe	ldd	[%o1+8],%f6
57*5d9d9091SRichard Lowe	faddq	%f0,%f4,%f8
58*5d9d9091SRichard Lowe	std	%f8,[%o2]
59*5d9d9091SRichard Lowe	retl
60*5d9d9091SRichard Lowe	std	%f10,[%o2+8]
61*5d9d9091SRichard Lowe	SET_SIZE(__quad_faddq)
62*5d9d9091SRichard Lowe
63*5d9d9091SRichard Lowe	ENTRY_NP(__quad_fsubq)
64*5d9d9091SRichard Lowe	ldd	[%o0],%f0
65*5d9d9091SRichard Lowe	ldd	[%o0+8],%f2
66*5d9d9091SRichard Lowe	ldd	[%o1],%f4
67*5d9d9091SRichard Lowe	ldd	[%o1+8],%f6
68*5d9d9091SRichard Lowe	fsubq	%f0,%f4,%f8
69*5d9d9091SRichard Lowe	std	%f8,[%o2]
70*5d9d9091SRichard Lowe	retl
71*5d9d9091SRichard Lowe	std	%f10,[%o2+8]
72*5d9d9091SRichard Lowe	SET_SIZE(__quad_fsubq)
73*5d9d9091SRichard Lowe
74*5d9d9091SRichard Lowe	ENTRY_NP(__quad_fmulq)
75*5d9d9091SRichard Lowe	ldd	[%o0],%f0
76*5d9d9091SRichard Lowe	ldd	[%o0+8],%f2
77*5d9d9091SRichard Lowe	ldd	[%o1],%f4
78*5d9d9091SRichard Lowe	ldd	[%o1+8],%f6
79*5d9d9091SRichard Lowe	fmulq	%f0,%f4,%f8
80*5d9d9091SRichard Lowe	std	%f8,[%o2]
81*5d9d9091SRichard Lowe	retl
82*5d9d9091SRichard Lowe	std	%f10,[%o2+8]
83*5d9d9091SRichard Lowe	SET_SIZE(__quad_fmulq)
84*5d9d9091SRichard Lowe
85*5d9d9091SRichard Lowe	ENTRY_NP(__quad_fdivq)
86*5d9d9091SRichard Lowe	ldd	[%o0],%f0
87*5d9d9091SRichard Lowe	ldd	[%o0+8],%f2
88*5d9d9091SRichard Lowe	ldd	[%o1],%f4
89*5d9d9091SRichard Lowe	ldd	[%o1+8],%f6
90*5d9d9091SRichard Lowe	fdivq	%f0,%f4,%f8
91*5d9d9091SRichard Lowe	std	%f8,[%o2]
92*5d9d9091SRichard Lowe	retl
93*5d9d9091SRichard Lowe	std	%f10,[%o2+8]
94*5d9d9091SRichard Lowe	SET_SIZE(__quad_fdivq)
95*5d9d9091SRichard Lowe
96*5d9d9091SRichard Lowe	ENTRY_NP(__quad_fsqrtq)
97*5d9d9091SRichard Lowe	ldd	[%o0],%f0
98*5d9d9091SRichard Lowe	ldd	[%o0+8],%f2
99*5d9d9091SRichard Lowe	fsqrtq	%f0,%f4
100*5d9d9091SRichard Lowe	std	%f4,[%o1]
101*5d9d9091SRichard Lowe	retl
102*5d9d9091SRichard Lowe	std	%f6,[%o1+8]
103*5d9d9091SRichard Lowe	SET_SIZE(__quad_fsqrtq)
104*5d9d9091SRichard Lowe
105*5d9d9091SRichard Lowe	ENTRY_NP(__quad_fcmpq)
106*5d9d9091SRichard Lowe	ldd	[%o0],%f0
107*5d9d9091SRichard Lowe	ldd	[%o0+8],%f2
108*5d9d9091SRichard Lowe	ldd	[%o1],%f4
109*5d9d9091SRichard Lowe	ldd	[%o1+8],%f6
110*5d9d9091SRichard Lowe	fcmpq	%f0,%f4
111*5d9d9091SRichard Lowe	retl
112*5d9d9091SRichard Lowe	st	%fsr,[%o2]
113*5d9d9091SRichard Lowe	SET_SIZE(__quad_fcmpq)
114*5d9d9091SRichard Lowe
115*5d9d9091SRichard Lowe	ENTRY_NP(__quad_fcmpeq)
116*5d9d9091SRichard Lowe	ldd	[%o0],%f0
117*5d9d9091SRichard Lowe	ldd	[%o0+8],%f2
118*5d9d9091SRichard Lowe	ldd	[%o1],%f4
119*5d9d9091SRichard Lowe	ldd	[%o1+8],%f6
120*5d9d9091SRichard Lowe	fcmpeq	%f0,%f4
121*5d9d9091SRichard Lowe	retl
122*5d9d9091SRichard Lowe	st	%fsr,[%o2]
123*5d9d9091SRichard Lowe	SET_SIZE(__quad_fcmpeq)
124*5d9d9091SRichard Lowe
125*5d9d9091SRichard Lowe	ENTRY_NP(__quad_fstoq)
126*5d9d9091SRichard Lowe	ld	[%o0],%f0
127*5d9d9091SRichard Lowe	fstoq	%f0,%f4
128*5d9d9091SRichard Lowe	std	%f4,[%o1]
129*5d9d9091SRichard Lowe	retl
130*5d9d9091SRichard Lowe	std	%f6,[%o1+8]
131*5d9d9091SRichard Lowe	SET_SIZE(__quad_fstoq)
132*5d9d9091SRichard Lowe
133*5d9d9091SRichard Lowe	ENTRY_NP(__quad_fdtoq)
134*5d9d9091SRichard Lowe	ldd	[%o0],%f0
135*5d9d9091SRichard Lowe	fdtoq	%f0,%f4
136*5d9d9091SRichard Lowe	std	%f4,[%o1]
137*5d9d9091SRichard Lowe	retl
138*5d9d9091SRichard Lowe	std	%f6,[%o1+8]
139*5d9d9091SRichard Lowe	SET_SIZE(__quad_fdtoq)
140*5d9d9091SRichard Lowe
141*5d9d9091SRichard Lowe	ENTRY_NP(__quad_fqtoi)
142*5d9d9091SRichard Lowe	ldd	[%o0],%f0
143*5d9d9091SRichard Lowe	ldd	[%o0+8],%f2
144*5d9d9091SRichard Lowe	fqtoi	%f0,%f4
145*5d9d9091SRichard Lowe	retl
146*5d9d9091SRichard Lowe	st	%f4,[%o1]
147*5d9d9091SRichard Lowe	SET_SIZE(__quad_fqtoi)
148*5d9d9091SRichard Lowe
149*5d9d9091SRichard Lowe	ENTRY_NP(__quad_fqtos)
150*5d9d9091SRichard Lowe	ldd	[%o0],%f0
151*5d9d9091SRichard Lowe	ldd	[%o0+8],%f2
152*5d9d9091SRichard Lowe	fqtos	%f0,%f4
153*5d9d9091SRichard Lowe	retl
154*5d9d9091SRichard Lowe	st	%f4,[%o1]
155*5d9d9091SRichard Lowe	SET_SIZE(__quad_fqtos)
156*5d9d9091SRichard Lowe
157*5d9d9091SRichard Lowe	ENTRY_NP(__quad_fqtod)
158*5d9d9091SRichard Lowe	ldd	[%o0],%f0
159*5d9d9091SRichard Lowe	ldd	[%o0+8],%f2
160*5d9d9091SRichard Lowe	fqtod	%f0,%f4
161*5d9d9091SRichard Lowe	retl
162*5d9d9091SRichard Lowe	std	%f4,[%o1]
163*5d9d9091SRichard Lowe	SET_SIZE(__quad_fqtod)
164*5d9d9091SRichard Lowe
165*5d9d9091SRichard Lowe#if defined(__sparcv9)
166*5d9d9091SRichard Lowe	ENTRY_NP(__quad_fqtox)
167*5d9d9091SRichard Lowe	ldd	[%o0],%f0
168*5d9d9091SRichard Lowe	ldd	[%o0+8],%f2
169*5d9d9091SRichard Lowe	fqtox	%f0,%f4
170*5d9d9091SRichard Lowe	retl
171*5d9d9091SRichard Lowe	std	%f4,[%o1]
172*5d9d9091SRichard Lowe	SET_SIZE(__quad_fqtox)
173*5d9d9091SRichard Lowe#endif
174