~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/m68k/math-emu/fp_cond.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * fp_cond.S
  3  *
  4  * Copyright Roman Zippel, 1997.  All rights reserved.
  5  *
  6  * Redistribution and use in source and binary forms, with or without
  7  * modification, are permitted provided that the following conditions
  8  * are met:
  9  * 1. Redistributions of source code must retain the above copyright
 10  *    notice, and the entire permission notice in its entirety,
 11  *    including the disclaimer of warranties.
 12  * 2. Redistributions in binary form must reproduce the above copyright
 13  *    notice, this list of conditions and the following disclaimer in the
 14  *    documentation and/or other materials provided with the distribution.
 15  * 3. The name of the author may not be used to endorse or promote
 16  *    products derived from this software without specific prior
 17  *    written permission.
 18  *
 19  * ALTERNATIVELY, this product may be distributed under the terms of
 20  * the GNU General Public License, in which case the provisions of the GPL are
 21  * required INSTEAD OF the above restrictions.  (This clause is
 22  * necessary due to a potential bad interaction between the GPL and
 23  * the restrictions contained in a BSD-style copyright.)
 24  *
 25  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 26  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 27  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 28  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
 29  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 30  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 31  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 32  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 33  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 34  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 35  * OF THE POSSIBILITY OF SUCH DAMAGE.
 36  */
 37 
 38 #include "fp_emu.h"
 39 #include "fp_decode.h"
 40 
 41         .globl  fp_fscc, fp_fbccw, fp_fbccl
 42 
 43 #ifdef FPU_EMU_DEBUG
 44 fp_fnop:
 45         printf  PDECODE,"fnop\n"
 46         jra     fp_end
 47 #else
 48 #define fp_fnop fp_end
 49 #endif
 50 
 51 fp_fbccw:
 52         tst.w   %d2
 53         jeq     fp_fnop
 54         printf  PDECODE,"fbccw "
 55         fp_get_pc %a0
 56         lea     (-2,%a0,%d2.w),%a0
 57         jra     1f
 58 
 59 fp_fbccl:
 60         printf  PDECODE,"fbccl "
 61         fp_get_pc %a0
 62         move.l  %d2,%d0
 63         swap    %d0
 64         fp_get_instr_word %d0,fp_err_ua1
 65         lea     (-2,%a0,%d0.l),%a0
 66 1:      printf  PDECODE,"%x",1,%a0
 67         move.l  %d2,%d0
 68         swap    %d0
 69         jsr     fp_compute_cond
 70         tst.l   %d0
 71         jeq     1f
 72         fp_put_pc %a0,1
 73 1:      printf  PDECODE,"\n"
 74         jra     fp_end
 75 
 76 fp_fdbcc:
 77         printf  PDECODE,"fdbcc "
 78         fp_get_pc %a1                           | calculate new pc
 79         fp_get_instr_word %d0,fp_err_ua1
 80         add.w   %d0,%a1
 81         fp_decode_addr_reg
 82         printf  PDECODE,"d%d,%x\n",2,%d0,%a1
 83         swap    %d1                             | test condition in %d1
 84         tst.w   %d1
 85         jne     2f
 86         move.l  %d0,%d1
 87         jsr     fp_get_data_reg
 88         subq.w  #1,%d0
 89         jcs     1f
 90         fp_put_pc %a1,1
 91 1:      jsr     fp_put_data_reg
 92 2:      jra     fp_end
 93 
 94 | set flags for decode macros for fs<cc>
 95 do_fscc=1
 96 do_no_pc_mode=1
 97 
 98 fp_fscc:
 99         printf  PDECODE,"fscc "
100         move.l  %d2,%d0
101         jsr     fp_compute_cond
102         move.w  %d0,%d1
103         swap    %d1
104 
105         | decode addressing mode
106         fp_decode_addr_mode
107 
108         .long   fp_data, fp_fdbcc
109         .long   fp_indirect, fp_postinc
110         .long   fp_predecr, fp_disp16
111         .long   fp_extmode0, fp_extmode1
112 
113         | addressing mode: data register direct
114 fp_data:
115         fp_mode_data_direct
116         move.w  %d0,%d1                 | save register nr
117         jsr     fp_get_data_reg
118         swap    %d1
119         move.b  %d1,%d0
120         swap    %d1
121         jsr     fp_put_data_reg
122         printf  PDECODE,"\n"
123         jra     fp_end
124 
125 fp_indirect:
126         fp_mode_addr_indirect
127         jra     fp_do_scc
128 
129 fp_postinc:
130         fp_mode_addr_indirect_postinc
131         jra     fp_do_scc
132 
133 fp_predecr:
134         fp_mode_addr_indirect_predec
135         jra     fp_do_scc
136 
137 fp_disp16:
138         fp_mode_addr_indirect_disp16
139         jra     fp_do_scc
140 
141 fp_extmode0:
142         fp_mode_addr_indirect_extmode0
143         jra     fp_do_scc
144 
145 fp_extmode1:
146         bfextu  %d2{#13,#3},%d0
147         jmp     ([0f:w,%pc,%d0*4])
148 
149         .align  4
150 0:
151         .long   fp_absolute_short, fp_absolute_long
152         .long   fp_ill, fp_ill          | NOTE: jump here to ftrap.x
153         .long   fp_ill, fp_ill
154         .long   fp_ill, fp_ill
155 
156 fp_absolute_short:
157         fp_mode_abs_short
158         jra     fp_do_scc
159 
160 fp_absolute_long:
161         fp_mode_abs_long
162 |       jra     fp_do_scc
163 
164 fp_do_scc:
165         swap    %d1
166         putuser.b %d1,(%a0),fp_err_ua1,%a0
167         printf  PDECODE,"\n"
168         jra     fp_end
169 
170 
171 #define tst_NAN btst #24,%d1
172 #define tst_Z   btst #26,%d1
173 #define tst_N   btst #27,%d1
174 
175 fp_compute_cond:
176         move.l  (FPD_FPSR,FPDATA),%d1
177         btst    #4,%d0
178         jeq     1f
179         tst_NAN
180         jeq     1f
181         bset    #15,%d1
182         bset    #7,%d1
183         move.l  %d1,(FPD_FPSR,FPDATA)
184 1:      and.w   #0xf,%d0
185         jmp     ([0f:w,%pc,%d0.w*4])
186 
187         .align  4
188 0:
189         .long   fp_f  , fp_eq , fp_ogt, fp_oge
190         .long   fp_olt, fp_ole, fp_ogl, fp_or
191         .long   fp_un , fp_ueq, fp_ugt, fp_uge
192         .long   fp_ult, fp_ule, fp_ne , fp_t
193 
194 fp_f:
195         moveq   #0,%d0
196         rts
197 
198 fp_eq:
199         moveq   #0,%d0
200         tst_Z
201         jeq     1f
202         moveq   #-1,%d0
203 1:      rts
204 
205 fp_ogt:
206         moveq   #0,%d0
207         tst_NAN
208         jne     1f
209         tst_Z
210         jne     1f
211         tst_N
212         jne     1f
213         moveq   #-1,%d0
214 1:      rts
215 
216 fp_oge:
217         moveq   #-1,%d0
218         tst_Z
219         jne     2f
220         tst_NAN
221         jne     1f
222         tst_N
223         jeq     2f
224 1:      moveq   #0,%d0
225 2:      rts
226 
227 fp_olt:
228         moveq   #0,%d0
229         tst_NAN
230         jne     1f
231         tst_Z
232         jne     1f
233         tst_N
234         jeq     1f
235         moveq   #-1,%d0
236 1:      rts
237 
238 fp_ole:
239         moveq   #-1,%d0
240         tst_Z
241         jne     2f
242         tst_NAN
243         jne     1f
244         tst_N
245         jne     2f
246 1:      moveq   #0,%d0
247 2:      rts
248 
249 fp_ogl:
250         moveq   #0,%d0
251         tst_NAN
252         jne     1f
253         tst_Z
254         jne     1f
255         moveq   #-1,%d0
256 1:      rts
257 
258 fp_or:
259         moveq   #0,%d0
260         tst_NAN
261         jne     1f
262         moveq   #-1,%d0
263 1:      rts
264 
265 fp_un:
266         moveq   #0,%d0
267         tst_NAN
268         jeq     1f
269         moveq   #-1,%d0
270         rts
271 
272 fp_ueq:
273         moveq   #-1,%d0
274         tst_NAN
275         jne     1f
276         tst_Z
277         jne     1f
278         moveq   #0,%d0
279 1:      rts
280 
281 fp_ugt:
282         moveq   #-1,%d0
283         tst_NAN
284         jne     2f
285         tst_N
286         jne     1f
287         tst_Z
288         jeq     2f
289 1:      moveq   #0,%d0
290 2:      rts
291 
292 fp_uge:
293         moveq   #-1,%d0
294         tst_NAN
295         jne     1f
296         tst_Z
297         jne     1f
298         tst_N
299         jeq     1f
300         moveq   #0,%d0
301 1:      rts
302 
303 fp_ult:
304         moveq   #-1,%d0
305         tst_NAN
306         jne     2f
307         tst_Z
308         jne     1f
309         tst_N
310         jne     2f
311 1:      moveq   #0,%d0
312 2:      rts
313 
314 fp_ule:
315         moveq   #-1,%d0
316         tst_NAN
317         jne     1f
318         tst_Z
319         jne     1f
320         tst_N
321         jne     1f
322         moveq   #0,%d0
323 1:      rts
324 
325 fp_ne:
326         moveq   #0,%d0
327         tst_Z
328         jne     1f
329         moveq   #-1,%d0
330 1:      rts
331 
332 fp_t:
333         moveq   #-1,%d0
334         rts

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php