1 /******************************** -*- C -*- ****************************
2  *
3  *	Run-time assembler & support macros for the i386 math coprocessor
4  *
5  ***********************************************************************/
6 
7 
8 /***********************************************************************
9  *
10  * Copyright 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
11  * Written by Paolo Bonzini.
12  *
13  * This file is part of GNU lightning.
14  *
15  * GNU lightning is free software; you can redistribute it and/or modify it
16  * under the terms of the GNU Lesser General Public License as published
17  * by the Free Software Foundation; either version 2.1, or (at your option)
18  * any later version.
19  *
20  * GNU lightning is distributed in the hope that it will be useful, but
21  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
22  * or  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
23  * License for more details.
24  *
25  * You should have received a copy of the GNU Lesser General Public License
26  * along with GNU lightning; see the file COPYING.LESSER; if not, write to the
27  * Free Software Foundation, 59 Temple Place - Suite 330, Boston,
28  * MA 02111-1307, USA.
29  *
30  ***********************************************************************/
31 
32 
33 #ifndef __lightning_asm_fp_h
34 #define __lightning_asm_fp_h
35 
36 #ifdef JIT_X86_SSE
37 
38 # include "fp-sse.h"
39 
40 # ifdef MZ_LONG_DOUBLE
41 #  include "fp-extfpu.h"
42 # endif
43 
44 #else
45 
46 # include "fp-extfpu.h"
47 
48 # define JIT_FPR_NUM JIT_FPU_FPR_NUM
49 # define JIT_FPR(i)  JIT_FPU_FPR(i)
50 
51 # define jit_fxch(rs, op) jit_fpu_fxch(rs, op)
52 # define jit_addr_d(rd,s1,s2) jit_fpu_addr_d(rd,s1,s2)
53 # define jit_subr_d(rd,s1,s2) jit_fpu_subr_d(rd,s1,s2)
54 # define jit_subrr_d(rd,s1,s2) jit_fpu_subrr_d(rd,s1,s2)
55 # define jit_mulr_d(rd,s1,s2) jit_fpu_mulr_d(rd,s1,s2)
56 # define jit_divr_d(rd,s1,s2) jit_fpu_divr_d(rd,s1,s2)
57 # define jit_divrr_d(rd,s1,s2) jit_fpu_divrr_d(rd,s1,s2)
58 # define jit_abs_d(rd,rs) jit_fpu_abs_d(rd,rs)
59 # define jit_negr_d(rd,rs) jit_fpu_negr_d(rd,rs)
60 # define jit_sqrt_d(rd,rs) jit_fpu_sqrt_d(rd,rs)
61 # define jit_addr_d_fppop(rd,s1,s2) jit_fpu_addr_d_fppop(rd,s1,s2)
62 # define jit_subr_d_fppop(rd,s1,s2) jit_fpu_subr_d_fppop(rd,s1,s2)
63 # define jit_subrr_d_fppop(rd,s1,s2) jit_fpu_subrr_d_fppop(rd,s1,s2)
64 # define jit_mulr_d_fppop(rd,s1,s2) jit_fpu_mulr_d_fppop(rd,s1,s2)
65 # define jit_divr_d_fppop(rd,s1,s2) jit_fpu_divr_d_fppop(rd,s1,s2)
66 # define jit_divrr_d_fppop(rd,s1,s2) jit_fpu_divrr_d_fppop(rd,s1,s2)
67 # define jit_negr_d_fppop(rd,rs) jit_fpu_negr_d_fppop(rd,rs)
68 # define jit_abs_d_fppop(rd,rs) jit_fpu_abs_d_fppop(rd,rs)
69 # define jit_sqrt_d_fppop(rd,rs) jit_fpu_sqrt_d_fppop(rd,rs)
70 # define jit_addr_ld(rd,s1,s2) jit_fpu_addr_ld(rd,s1,s2)
71 # define jit_subr_ld(rd,s1,s2) jit_fpu_subr_ld(rd,s1,s2)
72 # define jit_subrr_ld(rd,s1,s2) jit_fpu_subrr_ld(rd,s1,s2)
73 # define jit_mulr_ld(rd,s1,s2) jit_fpu_mulr_ld(rd,s1,s2)
74 # define jit_ldivr_ld(rd,s1,s2) jit_fpu_ldivr_ld(rd,s1,s2)
75 # define jit_ldivrr_ld(rd,s1,s2) jit_fpu_ldivrr_ld(rd,s1,s2)
76 # define jit_abs_ld(rd,rs) jit_fpu_abs_ld(rd,rs)
77 # define jit_negr_ld(rd,rs) jit_fpu_negr_ld(rd,rs)
78 # define jit_sqrt_ld(rd,rs) jit_fpu_sqrt_ld(rd,rs)
79 # define jit_addr_ld_fppop(rd,s1,s2) jit_fpu_addr_ld_fppop(rd,s1,s2)
80 # define jit_subr_ld_fppop(rd,s1,s2) jit_fpu_subr_ld_fppop(rd,s1,s2)
81 # define jit_subrr_ld_fppop(rd,s1,s2) jit_fpu_subrr_ld_fppop(rd,s1,s2)
82 # define jit_mulr_ld_fppop(rd,s1,s2) jit_fpu_mulr_ld_fppop(rd,s1,s2)
83 # define jit_divr_ld_fppop(rd,s1,s2) jit_fpu_divr_ld_fppop(rd,s1,s2)
84 # define jit_divrr_ld_fppop(rd,s1,s2) jit_fpu_divrr_ld_fppop(rd,s1,s2)
85 # define jit_negr_ld_fppop(rd,rs) jit_fpu_negr_ld_fppop(rd,rs)
86 # define jit_abs_ld_fppop(rd,rs) jit_fpu_abs_ld_fppop(rd,rs)
87 # define jit_sqrt_ld_fppop(rd,rs) jit_fpu_sqrt_ld_fppop(rd,rs)
88 # define jit_movr_d(rd,s1) jit_fpu_movr_d(rd,s1)
89 # define jit_movr_d_rel(rd,s1) jit_fpu_movr_d_rel(rd,s1)
90 # define jit_movr_d_fppush(rd,s1) jit_fpu_movr_d_fppush(rd,s1)
91 # define jit_movr_ld(rd,s1) jit_fpu_movr_ld(rd,s1)
92 # define jit_movr_ld_rel(rd,s1) jit_fpu_movr_ld_rel(rd,s1)
93 # define jit_movr_ld_fppush(rd,s1) jit_fpu_movr_ld_fppush(rd,s1)
94 # define jit_movi_d(rd,immd) jit_fpu_movi_d(rd,immd)
95 # define jit_ldi_d(rd, is) jit_fpu_ldi_d(rd, is)
96 # define jit_ldi_d_fppush(rd, is) jit_fpu_ldi_d_fppush(rd, is)
97 # define jit_ldi_ld(rd, is) jit_fpu_ldi_ld(rd, is)
98 # define jit_ldi_ld_fppush(rd, is) jit_fpu_ldi_ld_fppush(rd, is)
99 # define jit_ldr_d(rd, rs) jit_fpu_ldr_d(rd, rs)
100 # define jit_ldr_d_fppush(rd, rs) jit_fpu_ldr_d_fppush(rd, rs)
101 # define jit_ldr_f_fppush(rd, rs) jit_fpu_ldr_f_fppush(rd, rs)
102 # define jit_ldr_ld(rd, rs) jit_fpu_ldr_ld(rd, rs)
103 # define jit_ldr_ld_fppush(rd, rs) jit_fpu_ldr_ld_fppush(rd, rs)
104 # define jit_ldxi_d(rd, rs, is) jit_fpu_ldxi_d(rd, rs, is)
105 # define jit_ldxi_d_fppush(rd, rs, is) jit_fpu_ldxi_d_fppush(rd, rs, is)
106 # define jit_ldxi_ld(rd, rs, is) jit_fpu_ldxi_ld(rd, rs, is)
107 # define jit_ldxi_ld_fppush(rd, rs, is) jit_fpu_ldxi_ld_fppush(rd, rs, is)
108 # define jit_ldxr_d(rd, s1, s2) jit_fpu_ldxr_d(rd, s1, s2)
109 # define jit_ldxr_d_fppush(rd, s1, s2) jit_fpu_ldxr_d_fppush(rd, s1, s2)
110 # define jit_ldxr_ld(rd, s1, s2) jit_fpu_ldxr_ld(rd, s1, s2)
111 # define jit_ldxr_ld_fppush(rd, s1, s2) jit_fpu_ldxr_ld_fppush(rd, s1, s2)
112 # define jit_extr_i_d(rd, rs) jit_fpu_extr_i_d(rd, rs)
113 # define jit_extr_i_d_fppush(rd, rs) jit_fpu_extr_i_d_fppush(rd, rs)
114 # define jit_extr_i_ld_fppush(rd, rs) jit_fpu_extr_i_ld_fppush(rd, rs)
115 # define jit_extr_l_d_fppush(rd, rs) jit_fpu_extr_l_d_fppush(rd, rs)
116 # define jit_extr_l_ld_fppush(rd, rs) jit_fpu_extr_l_ld_fppush(rd, rs)
117 # define jit_extr_d_f(rd, rs) jit_fpu_extr_d_f(rd, rs)
118 # define jit_extr_f_d(rd, rs) jit_fpu_extr_f_d(rd, rs)
119 # define jit_stxi_f(id, rd, rs) jit_fpu_stxi_f(id, rd, rs)
120 # define jit_stxr_f(d1, d2, rs) jit_fpu_stxr_f(d1, d2, rs)
121 # define jit_stxi_d(id, rd, rs) jit_fpu_stxi_d(id, rd, rs)
122 # define jit_stxr_d(d1, d2, rs) jit_fpu_stxr_d(d1, d2, rs)
123 # define jit_sti_d(id, rs) jit_fpu_sti_d(id, rs)
124 # define jit_str_d(rd, rs) jit_fpu_str_d(rd, rs)
125 # define jit_str_f(rd, rs) jit_fpu_str_f(rd, rs)
126 # define jit_sti_d_fppop(id, rs) jit_fpu_sti_d_fppop(id, rs)
127 # define jit_sti_ld_fppop(id, rs) jit_fpu_sti_ld_fppop(id, rs)
128 # define jit_stxi_d_fppop(id, rd, rs) jit_fpu_stxi_d_fppop(id, rd, rs)
129 # define jit_str_d_fppop(rd, rs) jit_fpu_str_d_fppop(rd, rs)
130 # define jit_str_f_fppop(rd, rs) jit_fpu_str_f_fppop(rd, rs)
131 # define jit_stxr_d_fppop(d1, d2, rs) jit_fpu_stxr_d_fppop(d1, d2, rs)
132 # define jit_stxi_ld_fppop(id, rd, rs) jit_fpu_stxi_ld_fppop(id, rd, rs)
133 # define jit_str_ld_fppop(rd, rs) jit_fpu_str_ld_fppop(rd, rs)
134 # define jit_stxr_ld_fppop(d1, d2, rs) jit_fpu_stxr_ld_fppop(d1, d2, rs)
135 # define jit_floorr_d_i(rd, rs) jit_fpu_floorr_d_i(rd, rs)
136 # define jit_ceilr_d_i(rd, rs) jit_fpu_ceilr_d_i(rd, rs)
137 # define jit_roundr_d_i(rd, rs) jit_fpu_roundr_d_i(rd, rs)
138 # define jit_roundr_ld_i(rd, rs) jit_fpu_roundr_ld_i(rd, rs)
139 # define jit_roundr_d_l(rd, rs) jit_fpu_roundr_d_l(rd, rs)
140 # define jit_roundr_ld_l(rd, rs) jit_fpu_roundr_ld_l(rd, rs)
141 # define jit_roundr_d_l_fppop(rd, rs) jit_fpu_roundr_d_l_fppop(rd, rs)
142 # define jit_roundr_ld_l_fppop(rd, rs) jit_fpu_roundr_ld_l_fppop(rd, rs)
143 # define jit_truncr_d_i(rd, rs) jit_fpu_truncr_d_i(rd, rs)
144 # define jit_truncr_ld_i(rd, rs) jit_fpu_truncr_ld_i(rd, rs)
145 # define jit_truncr_d_l(rd, rs) jit_fpu_truncr_d_l(rd, rs)
146 # define jit_truncr_ld_l(rd, rs) jit_fpu_truncr_ld_l(rd, rs)
147 # define jit_truncr_d_l_fppop(rd, rs) jit_fpu_truncr_d_l_fppop(rd, rs)
148 # define jit_truncr_ld_l_fppop(rd, rs) jit_fpu_truncr_ld_l_fppop(rd, rs)
149 # define jit_gtr_d(d, s1, s2) jit_fpu_gtr_d(d, s1, s2)
150 # define jit_ger_d(d, s1, s2) jit_fpu_ger_d(d, s1, s2)
151 # define jit_unler_d(d, s1, s2) jit_fpu_unler_d(d, s1, s2)
152 # define jit_unltr_d(d, s1, s2) jit_fpu_unltr_d(d, s1, s2)
153 # define jit_ltr_d(d, s1, s2) jit_fpu_ltr_d(d, s1, s2)
154 # define jit_ler_d(d, s1, s2) jit_fpu_ler_d(d, s1, s2)
155 # define jit_unger_d(d, s1, s2) jit_fpu_unger_d(d, s1, s2)
156 # define jit_ungtr_d(d, s1, s2) jit_fpu_ungtr_d(d, s1, s2)
157 # define jit_eqr_d(d, s1, s2) jit_fpu_eqr_d(d, s1, s2)
158 # define jit_ner_d(d, s1, s2) jit_fpu_ner_d(d, s1, s2)
159 # define jit_ltgtr_d(d, s1, s2) jit_fpu_ltgtr_d(d, s1, s2)
160 # define jit_uneqr_d(d, s1, s2) jit_fpu_uneqr_d(d, s1, s2)
161 # define jit_ordr_d(d, s1, s2) jit_fpu_ordr_d(d, s1, s2)
162 # define jit_unordr_d(d, s1, s2) jit_fpu_unordr_d(d, s1, s2)
163 # define jit_bgtr_d(d, s1, s2) jit_fpu_bgtr_d(d, s1, s2)
164 # define jit_bger_d(d, s1, s2) jit_fpu_bger_d(d, s1, s2)
165 # define jit_bger_ld(d, s1, s2) jit_fpu_bger_ld(d, s1, s2)
166 # define jit_bantigtr_d(d, s1, s2) jit_fpu_bantigtr_d(d, s1, s2)
167 # define jit_bantiger_d(d, s1, s2) jit_fpu_bantiger_d(d, s1, s2)
168 # define jit_bunler_d(d, s1, s2) jit_fpu_bunler_d(d, s1, s2)
169 # define jit_bunltr_d(d, s1, s2) jit_fpu_bunltr_d(d, s1, s2)
170 # define jit_bltr_d(d, s1, s2) jit_fpu_bltr_d(d, s1, s2)
171 # define jit_bltr_ld(d, s1, s2) jit_fpu_bltr_ld(d, s1, s2)
172 # define jit_bler_d(d, s1, s2) jit_fpu_bler_d(d, s1, s2)
173 # define jit_bantiltr_d(d, s1, s2) jit_fpu_bantiltr_d(d, s1, s2)
174 # define jit_bantiler_d(d, s1, s2) jit_fpu_bantiler_d(d, s1, s2)
175 # define jit_bunger_d(d, s1, s2) jit_fpu_bunger_d(d, s1, s2)
176 # define jit_bungtr_d(d, s1, s2) jit_fpu_bungtr_d(d, s1, s2)
177 # define jit_beqr_d(d, s1, s2) jit_fpu_beqr_d(d, s1, s2)
178 # define jit_beqr_ld(d, s1, s2) jit_fpu_beqr_ld(d, s1, s2)
179 # define jit_bantieqr_d(d, s1, s2) jit_fpu_bantieqr_d(d, s1, s2)
180 # define jit_bantieqr_ld(d, s1, s2) jit_fpu_bantieqr_ld(d, s1, s2)
181 # define jit_bner_d(d, s1, s2) jit_fpu_bner_d(d, s1, s2)
182 # define jit_bltgtr_d(d, s1, s2) jit_fpu_bltgtr_d(d, s1, s2)
183 # define jit_buneqr_d(d, s1, s2) jit_fpu_buneqr_d(d, s1, s2)
184 # define jit_bordr_d(d, s1, s2) jit_fpu_bordr_d(d, s1, s2)
185 # define jit_bunordr_d(d, s1, s2) jit_fpu_bunordr_d(d, s1, s2)
186 # define jit_bger_d_fppop(d, s1, s2) jit_fpu_bger_d_fppop(d, s1, s2)
187 # define jit_bger_ld_fppop(d, s1, s2) jit_fpu_bger_ld_fppop(d, s1, s2)
188 # define jit_bantiger_d_fppop(d, s1, s2) jit_fpu_bantiger_d_fppop(d, s1, s2)
189 # define jit_bantiger_ld_fppop(d, s1, s2) jit_fpu_bantiger_ld_fppop(d, s1, s2)
190 # define jit_bler_d_fppop(d, s1, s2) jit_fpu_bler_d_fppop(d, s1, s2)
191 # define jit_bler_ld_fppop(d, s1, s2) jit_fpu_bler_ld_fppop(d, s1, s2)
192 # define jit_bantiler_d_fppop(d, s1, s2) jit_fpu_bantiler_d_fppop(d, s1, s2)
193 # define jit_bantiler_ld_fppop(d, s1, s2) jit_fpu_bantiler_ld_fppop(d, s1, s2)
194 # define jit_bgtr_d_fppop(d, s1, s2) jit_fpu_bgtr_d_fppop(d, s1, s2)
195 # define jit_bgtr_ld_fppop(d, s1, s2) jit_fpu_bgtr_ld_fppop(d, s1, s2)
196 # define jit_bantigtr_d_fppop(d, s1, s2) jit_fpu_bantigtr_d_fppop(d, s1, s2)
197 # define jit_bantigtr_ld_fppop(d, s1, s2) jit_fpu_bantigtr_ld_fppop(d, s1, s2)
198 # define jit_bltr_d_fppop(d, s1, s2) jit_fpu_bltr_d_fppop(d, s1, s2)
199 # define jit_bltr_ld_fppop(d, s1, s2) jit_fpu_bltr_ld_fppop(d, s1, s2)
200 # define jit_bantiltr_d_fppop(d, s1, s2) jit_fpu_bantiltr_d_fppop(d, s1, s2)
201 # define jit_bantiltr_ld_fppop(d, s1, s2) jit_fpu_bantiltr_ld_fppop(d, s1, s2)
202 # define jit_beqr_d_fppop(d, s1, s2) jit_fpu_beqr_d_fppop(d, s1, s2)
203 # define jit_beqr_ld_fppop(d, s1, s2) jit_fpu_beqr_ld_fppop(d, s1, s2)
204 # define jit_bantieqr_d_fppop(d, s1, s2) jit_fpu_bantieqr_d_fppop(d, s1, s2)
205 # define jit_bantieqr_ld_fppop(d, s1, s2) jit_fpu_bantieqr_ld_fppop(d, s1, s2)
206 
207 #endif
208 
209 #endif /* __lightning_asm_h */
210