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