1207151Smarius/*-
2207151Smarius * Copyright (c) 2010 by Peter Jeremy <peterjeremy@acm.org>
3207151Smarius * All rights reserved.
4207151Smarius *
5207151Smarius * Redistribution and use in source and binary forms, with or without
6207151Smarius * modification, are permitted provided that the following conditions
7207151Smarius * are met:
8207151Smarius * 1. Redistributions of source code must retain the above copyright
9207151Smarius *    notice, this list of conditions and the following disclaimer.
10207151Smarius * 2. Redistributions in binary form must reproduce the above copyright
11207151Smarius *    notice, this list of conditions and the following disclaimer in the
12207151Smarius *    documentation and/or other materials provided with the distribution.
13207151Smarius *
14207151Smarius * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15207151Smarius * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16207151Smarius * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17207151Smarius * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
18207151Smarius * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19207151Smarius * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20207151Smarius * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
21207151Smarius * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
22207151Smarius * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
23207151Smarius * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24207151Smarius */
25207151Smarius
26207151Smarius#include <machine/asm.h>
27207151Smarius__FBSDID("$FreeBSD$");
28207151Smarius
29207151Smarius	.section	"rodata1",#alloc
30207151Smarius	.align	8
31207151Smarius
32207151Smarius	.global	insn_int32_to_float32
33207151Smariusinsn_int32_to_float32:
34207151Smarius	fitos	%f0,%f0
35207151Smarius
36207151Smarius	.global	insn_int32_to_float64
37207151Smariusinsn_int32_to_float64:
38207151Smarius	fitod	%f0,%f0
39207151Smarius
40207151Smarius	.global	insn_int32_to_float128
41207151Smariusinsn_int32_to_float128:
42207151Smarius	fitoq	%f0,%f0
43207151Smarius
44207151Smarius	.global	insn_int64_to_float32
45207151Smariusinsn_int64_to_float32:
46207151Smarius	fxtos	%f0,%f0
47207151Smarius
48207151Smarius	.global	insn_int64_to_float64
49207151Smariusinsn_int64_to_float64:
50207151Smarius	fxtod	%f0,%f0
51207151Smarius
52207151Smarius	.global	insn_int64_to_float128
53207151Smariusinsn_int64_to_float128:
54207151Smarius	fxtoq	%f0,%f0
55207151Smarius
56207151Smarius	.global	insn_float32_to_int32_round_to_zero
57207151Smariusinsn_float32_to_int32_round_to_zero:
58207151Smarius	fstoi	%f0,%f0
59207151Smarius
60207151Smarius	.global	insn_float32_to_int64_round_to_zero
61207151Smariusinsn_float32_to_int64_round_to_zero:
62207151Smarius	fstox	%f0,%f0
63207151Smarius
64207151Smarius	.global	insn_float32_to_float64
65207151Smariusinsn_float32_to_float64:
66207151Smarius	fstod	%f0,%f0
67207151Smarius
68207151Smarius	.global	insn_float32_to_float128
69207151Smariusinsn_float32_to_float128:
70207151Smarius	fstoq	%f0,%f0
71207151Smarius
72207151Smarius	.global	insn_float32_add
73207151Smariusinsn_float32_add:
74207151Smarius	fadds	%f0,%f1,%f0
75207151Smarius
76207151Smarius	.global	insn_float32_sub
77207151Smariusinsn_float32_sub:
78207151Smarius	fsubs	%f0,%f1,%f0
79207151Smarius
80207151Smarius	.global	insn_float32_mul
81207151Smariusinsn_float32_mul:
82207151Smarius	fmuls	%f0,%f1,%f0
83207151Smarius
84207151Smarius	.global	insn_float32_div
85207151Smariusinsn_float32_div:
86207151Smarius	fdivs	%f0,%f1,%f0
87207151Smarius
88207151Smarius	.global	insn_float32_sqrt
89207151Smariusinsn_float32_sqrt:
90207151Smarius	fsqrts	%f0,%f0
91207151Smarius
92207151Smarius	.global	insn_float32_cmp
93207151Smariusinsn_float32_cmp:
94207151Smarius	fcmps	%fcc0,%f0,%f1
95207151Smarius
96207151Smarius	.global	insn_float32_cmpe
97207151Smariusinsn_float32_cmpe:
98207151Smarius	fcmpes	%fcc0,%f0,%f1
99207151Smarius
100207151Smarius	.global	insn_float64_to_int32_round_to_zero
101207151Smariusinsn_float64_to_int32_round_to_zero:
102207151Smarius	fdtoi	%f0,%f0
103207151Smarius
104207151Smarius	.global	insn_float64_to_int64_round_to_zero
105207151Smariusinsn_float64_to_int64_round_to_zero:
106207151Smarius	fdtox	%f0,%f0
107207151Smarius
108207151Smarius	.global	insn_float64_to_float32
109207151Smariusinsn_float64_to_float32:
110207151Smarius	fdtos	%f0,%f0
111207151Smarius
112207151Smarius	.global	insn_float64_to_float128
113207151Smariusinsn_float64_to_float128:
114207151Smarius	fdtoq	%f0,%f0
115207151Smarius
116207151Smarius	.global	insn_float64_add
117207151Smariusinsn_float64_add:
118207151Smarius	faddd	%f0,%f2,%f0
119207151Smarius
120207151Smarius	.global	insn_float64_sub
121207151Smariusinsn_float64_sub:
122207151Smarius	fsubd	%f0,%f2,%f0
123207151Smarius
124207151Smarius	.global	insn_float64_mul
125207151Smariusinsn_float64_mul:
126207151Smarius	fmuld	%f0,%f2,%f0
127207151Smarius
128207151Smarius	.global	insn_float64_div
129207151Smariusinsn_float64_div:
130207151Smarius	fdivd	%f0,%f2,%f0
131207151Smarius
132207151Smarius	.global	insn_float64_sqrt
133207151Smariusinsn_float64_sqrt:
134207151Smarius	fsqrtd	%f0,%f0
135207151Smarius
136207151Smarius	.global	insn_float64_cmp
137207151Smariusinsn_float64_cmp:
138207151Smarius	fcmpd	%fcc0,%f0,%f2
139207151Smarius
140207151Smarius	.global	insn_float64_cmpe
141207151Smariusinsn_float64_cmpe:
142207151Smarius	fcmped	%fcc0,%f0,%f2
143207151Smarius
144207151Smarius	.global	insn_float128_to_int32_round_to_zero
145207151Smariusinsn_float128_to_int32_round_to_zero:
146207151Smarius	fqtoi	%f0,%f0
147207151Smarius
148207151Smarius	.global	insn_float128_to_int64_round_to_zero
149207151Smariusinsn_float128_to_int64_round_to_zero:
150207151Smarius	fqtox	%f0,%f0
151207151Smarius
152207151Smarius	.global	insn_float128_to_float32
153207151Smariusinsn_float128_to_float32:
154207151Smarius	fqtos	%f0,%f0
155207151Smarius
156207151Smarius	.global	insn_float128_to_float64
157207151Smariusinsn_float128_to_float64:
158207151Smarius	fqtod	%f0,%f0
159207151Smarius
160207151Smarius	.global	insn_float128_add
161207151Smariusinsn_float128_add:
162207151Smarius	faddq	%f0,%f4,%f0
163207151Smarius
164207151Smarius	.global	insn_float128_sub
165207151Smariusinsn_float128_sub:
166207151Smarius	fsubq	%f0,%f4,%f0
167207151Smarius
168207151Smarius	.global	insn_float128_mul
169207151Smariusinsn_float128_mul:
170207151Smarius	fmulq	%f0,%f4,%f0
171207151Smarius
172207151Smarius	.global	insn_float128_div
173207151Smariusinsn_float128_div:
174207151Smarius	fdivq	%f0,%f4,%f0
175207151Smarius
176207151Smarius	.global	insn_float128_sqrt
177207151Smariusinsn_float128_sqrt:
178207151Smarius	fsqrtq	%f0,%f0
179207151Smarius
180207151Smarius	.global	insn_float128_cmp
181207151Smariusinsn_float128_cmp:
182207151Smarius	fcmpq	%fcc0,%f0,%f4
183207151Smarius
184207151Smarius	.global	insn_float128_cmpe
185207151Smariusinsn_float128_cmpe:
186207151Smarius	fcmpeq	%fcc0,%f0,%f4
187