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

TOMOYO Linux Cross Reference
Linux/arch/m68k/math-emu/fp_movem.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 ] ~

Diff markup

Differences between /arch/m68k/math-emu/fp_movem.S (Version linux-6.12-rc7) and /arch/i386/math-emu/fp_movem.S (Version linux-4.4.302)


  1 /*                                                
  2  * fp_movem.S                                     
  3  *                                                
  4  * Copyright Roman Zippel, 1997.  All rights r    
  5  *                                                
  6  * Redistribution and use in source and binary    
  7  * modification, are permitted provided that t    
  8  * are met:                                       
  9  * 1. Redistributions of source code must reta    
 10  *    notice, and the entire permission notice    
 11  *    including the disclaimer of warranties.     
 12  * 2. Redistributions in binary form must repr    
 13  *    notice, this list of conditions and the     
 14  *    documentation and/or other materials pro    
 15  * 3. The name of the author may not be used t    
 16  *    products derived from this software with    
 17  *    written permission.                         
 18  *                                                
 19  * ALTERNATIVELY, this product may be distribu    
 20  * the GNU General Public License, in which ca    
 21  * required INSTEAD OF the above restrictions.    
 22  * necessary due to a potential bad interactio    
 23  * the restrictions contained in a BSD-style c    
 24  *                                                
 25  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY    
 26  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO,     
 27  * OF MERCHANTABILITY AND FITNESS FOR A PARTIC    
 28  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR B    
 29  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, O    
 30  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT    
 31  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR    
 32  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILI    
 33  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIG    
 34  * ARISING IN ANY WAY OUT OF THE USE OF THIS S    
 35  * OF THE POSSIBILITY OF SUCH DAMAGE.             
 36  */                                               
 37                                                   
 38 #include "fp_emu.h"                               
 39 #include "fp_decode.h"                            
 40                                                   
 41 | set flags for decode macros for fmovem          
 42 do_fmovem=1                                       
 43                                                   
 44         .globl  fp_fmovem_fp, fp_fmovem_cr        
 45                                                   
 46 | %d1 contains the mask and count of the regis    
 47 | for other register usage see fp_decode.h        
 48                                                   
 49 fp_fmovem_fp:                                     
 50         printf  PDECODE,"fmovem.x "               
 51         | get register list and count them        
 52         btst    #11,%d2                           
 53         jne     1f                                
 54         bfextu  %d2{#24,#8},%d0         | stat    
 55         jra     2f                                
 56 1:      bfextu  %d2{#25,#3},%d0         | dyna    
 57         jsr     fp_get_data_reg                   
 58 2:      move.l  %d0,%d1                           
 59         swap    %d1                               
 60         jra     2f                                
 61 1:      addq.w  #1,%d1                  | coun    
 62 2:      lsr.b   #1,%d0                  | regi    
 63         jcs     1b                                
 64         jne     2b                                
 65         printf  PDECODE,"#%08x",1,%d1             
 66 #ifdef FPU_EMU_DEBUG                              
 67         btst    #12,%d2                           
 68         jne     1f                                
 69         printf  PDECODE,"-"             | decr    
 70         jra     2f                                
 71 1:      printf  PDECODE,"+"             | incr    
 72 2:      btst    #13,%d2                           
 73         jeq     1f                                
 74         printf  PDECODE,"->"            | fpu     
 75         jra     2f                                
 76 1:      printf  PDECODE,"<-"            | fpu     
 77 2:                                                
 78 #endif                                            
 79                                                   
 80         | decode address mode                     
 81         fp_decode_addr_mode                       
 82                                                   
 83         .long   fp_ill, fp_ill                    
 84         .long   fpr_indirect, fpr_postinc         
 85         .long   fpr_predecr, fpr_disp16           
 86         .long   fpr_extmode0, fpr_extmode1        
 87                                                   
 88         | addressing mode: address register in    
 89 fpr_indirect:                                     
 90         fp_mode_addr_indirect                     
 91         jra     fpr_do_movem                      
 92                                                   
 93         | addressing mode: address register in    
 94 fpr_postinc:                                      
 95         fp_mode_addr_indirect_postinc             
 96         jra     fpr_do_movem                      
 97                                                   
 98 fpr_predecr:                                      
 99         fp_mode_addr_indirect_predec              
100         jra     fpr_do_movem                      
101                                                   
102         | addressing mode: address register/pr    
103         |                  with 16bit displace    
104 fpr_disp16:                                       
105         fp_mode_addr_indirect_disp16              
106         jra     fpr_do_movem                      
107                                                   
108 fpr_extmode0:                                     
109         fp_mode_addr_indirect_extmode0            
110         jra     fpr_do_movem                      
111                                                   
112 fpr_extmode1:                                     
113         fp_decode_addr_reg                        
114         jmp     ([0f:w,%pc,%d0*4])                
115                                                   
116         .align  4                                 
117 0:                                                
118         .long   fpr_absolute_short, fpr_absolu    
119         .long   fpr_disp16, fpr_extmode0          
120         .long   fp_ill, fp_ill                    
121         .long   fp_ill, fp_ill                    
122                                                   
123 fpr_absolute_short:                               
124         fp_mode_abs_short                         
125         jra     fpr_do_movem                      
126                                                   
127 fpr_absolute_long:                                
128         fp_mode_abs_long                          
129 |       jra     fpr_do_movem                      
130                                                   
131 fpr_do_movem:                                     
132         swap    %d1                     | get     
133         lea     (FPD_FPREG,FPDATA),%a1            
134         moveq   #12,%d0                           
135         btst    #12,%d2                           
136         jne     1f                                
137         lea     (-12,%a1,%d0*8),%a1               
138         neg.l   %d0                               
139 1:      btst    #13,%d2                           
140         jne     4f                                
141         | move register from memory into fpu      
142         jra     3f                                
143 1:      printf  PMOVEM,"(%p>%p)",2,%a0,%a1        
144         getuser.l (%a0)+,%d2,fp_err_ua1,%a0       
145         lsr.l   #8,%d2                            
146         lsr.l   #7,%d2                            
147         lsr.w   #1,%d2                            
148         move.l  %d2,(%a1)+                        
149         getuser.l (%a0)+,%d2,fp_err_ua1,%a0       
150         move.l  %d2,(%a1)+                        
151         getuser.l (%a0),%d2,fp_err_ua1,%a0        
152         move.l  %d2,(%a1)                         
153         subq.l  #8,%a0                            
154         subq.l  #8,%a1                            
155         add.l   %d0,%a0                           
156 2:      add.l   %d0,%a1                           
157 3:      lsl.b   #1,%d1                            
158         jcs     1b                                
159         jne     2b                                
160         jra     5f                                
161         | move register from fpu into memory      
162 1:      printf  PMOVEM,"(%p>%p)",2,%a1,%a0        
163         move.l  (%a1)+,%d2                        
164         lsl.w   #1,%d2                            
165         lsl.l   #7,%d2                            
166         lsl.l   #8,%d2                            
167         putuser.l %d2,(%a0)+,fp_err_ua1,%a0       
168         move.l  (%a1)+,%d2                        
169         putuser.l %d2,(%a0)+,fp_err_ua1,%a0       
170         move.l  (%a1),%d2                         
171         putuser.l %d2,(%a0),fp_err_ua1,%a0        
172         subq.l  #8,%a1                            
173         subq.l  #8,%a0                            
174         add.l   %d0,%a0                           
175 2:      add.l   %d0,%a1                           
176 4:      lsl.b   #1,%d1                            
177         jcs     1b                                
178         jne     2b                                
179 5:                                                
180         printf  PDECODE,"\n"                      
181 #if 0                                             
182         lea     (FPD_FPREG,FPDATA),%a0            
183         printf  PMOVEM,"fp:"                      
184         printx  PMOVEM,%a0@(0)                    
185         printx  PMOVEM,%a0@(12)                   
186         printf  PMOVEM,"\n   "                    
187         printx  PMOVEM,%a0@(24)                   
188         printx  PMOVEM,%a0@(36)                   
189         printf  PMOVEM,"\n   "                    
190         printx  PMOVEM,%a0@(48)                   
191         printx  PMOVEM,%a0@(60)                   
192         printf  PMOVEM,"\n   "                    
193         printx  PMOVEM,%a0@(72)                   
194         printx  PMOVEM,%a0@(84)                   
195         printf  PMOVEM,"\n"                       
196 #endif                                            
197         jra     fp_end                            
198                                                   
199 | set flags for decode macros for fmovem contr    
200 do_fmovem=1                                       
201 do_fmovem_cr=1                                    
202                                                   
203 fp_fmovem_cr:                                     
204         printf  PDECODE,"fmovem.cr "              
205         | get register list and count them        
206         bfextu  %d2{#19,#3},%d0                   
207         move.l  %d0,%d1                           
208         swap    %d1                               
209         jra     2f                                
210 1:      addq.w  #1,%d1                            
211 2:      lsr.l   #1,%d0                            
212         jcs     1b                                
213         jne     2b                                
214         printf  PDECODE,"#%08x",1,%d1             
215 #ifdef FPU_EMU_DEBUG                              
216         btst    #13,%d2                           
217         jeq     1f                                
218         printf  PDECODE,"->"            | fpu     
219         jra     2f                                
220 1:      printf  PDECODE,"<-"            | fpu     
221 2:                                                
222 #endif                                            
223                                                   
224         | decode address mode                     
225         fp_decode_addr_mode                       
226                                                   
227         .long   fpc_data, fpc_addr                
228         .long   fpc_indirect, fpc_postinc         
229         .long   fpc_predecr, fpc_disp16           
230         .long   fpc_extmode0, fpc_extmode1        
231                                                   
232 fpc_data:                                         
233         fp_mode_data_direct                       
234         move.w  %d0,%d1                           
235         bfffo   %d2{#19,#3},%d0                   
236         sub.w   #19,%d0                           
237         lea     (FPD_FPCR,FPDATA,%d0.w*4),%a1     
238         btst    #13,%d2                           
239         jne     1f                                
240         move.w  %d1,%d0                           
241         jsr     fp_get_data_reg                   
242         move.l  %d0,(%a1)                         
243         jra     fpc_movem_fin                     
244 1:      move.l  (%a1),%d0                         
245         jsr     fp_put_data_reg                   
246         jra     fpc_movem_fin                     
247                                                   
248 fpc_addr:                                         
249         fp_decode_addr_reg                        
250         printf  PDECODE,"a%d",1,%d0               
251         btst    #13,%d2                           
252         jne     1f                                
253         jsr     fp_get_addr_reg                   
254         move.l  %a0,(FPD_FPIAR,FPDATA)            
255         jra     fpc_movem_fin                     
256 1:      move.l  (FPD_FPIAR,FPDATA),%a0            
257         jsr     fp_put_addr_reg                   
258         jra     fpc_movem_fin                     
259                                                   
260 fpc_indirect:                                     
261         fp_mode_addr_indirect                     
262         jra     fpc_do_movem                      
263                                                   
264 fpc_postinc:                                      
265         fp_mode_addr_indirect_postinc             
266         jra     fpc_do_movem                      
267                                                   
268 fpc_predecr:                                      
269         fp_mode_addr_indirect_predec              
270         jra     fpc_do_movem                      
271                                                   
272 fpc_disp16:                                       
273         fp_mode_addr_indirect_disp16              
274         jra     fpc_do_movem                      
275                                                   
276 fpc_extmode0:                                     
277         fp_mode_addr_indirect_extmode0            
278         jra     fpc_do_movem                      
279                                                   
280 fpc_extmode1:                                     
281         fp_decode_addr_reg                        
282         jmp     ([0f:w,%pc,%d0*4])                
283                                                   
284         .align  4                                 
285 0:                                                
286         .long   fpc_absolute_short, fpc_absolu    
287         .long   fpc_disp16, fpc_extmode0          
288         .long   fpc_immediate, fp_ill             
289         .long   fp_ill, fp_ill                    
290                                                   
291 fpc_absolute_short:                               
292         fp_mode_abs_short                         
293         jra     fpc_do_movem                      
294                                                   
295 fpc_absolute_long:                                
296         fp_mode_abs_long                          
297         jra     fpc_do_movem                      
298                                                   
299 fpc_immediate:                                    
300         fp_get_pc %a0                             
301         lea     (%a0,%d1.w*4),%a1                 
302         fp_put_pc %a1                             
303         printf  PDECODE,"#imm"                    
304 |       jra     fpc_do_movem                      
305 #if 0                                             
306         swap    %d1                               
307         lsl.l   #5,%d1                            
308         lea     (FPD_FPCR,FPDATA),%a0             
309         jra     3f                                
310 1:      move.l  %d0,(%a0)                         
311 2:      addq.l  #4,%a0                            
312 3:      lsl.b   #1,%d1                            
313         jcs     1b                                
314         jne     2b                                
315         jra     fpc_movem_fin                     
316 #endif                                            
317                                                   
318 fpc_do_movem:                                     
319         swap    %d1                     | get     
320         lsl.l   #5,%d1                            
321         lea     (FPD_FPCR,FPDATA),%a1             
322 1:      btst    #13,%d2                           
323         jne     4f                                
324                                                   
325         | move register from memory into fpu      
326         jra     3f                                
327 1:      printf  PMOVEM,"(%p>%p)",2,%a0,%a1        
328         getuser.l (%a0)+,%d0,fp_err_ua1,%a0       
329         move.l  %d0,(%a1)                         
330 2:      addq.l  #4,%a1                            
331 3:      lsl.b   #1,%d1                            
332         jcs     1b                                
333         jne     2b                                
334         jra     fpc_movem_fin                     
335                                                   
336         | move register from fpu into memory      
337 1:      printf  PMOVEM,"(%p>%p)",2,%a1,%a0        
338         move.l  (%a1),%d0                         
339         putuser.l %d0,(%a0)+,fp_err_ua1,%a0       
340 2:      addq.l  #4,%a1                            
341 4:      lsl.b   #1,%d1                            
342         jcs     1b                                
343         jne     2b                                
344                                                   
345 fpc_movem_fin:                                    
346         and.l   #0x0000fff0,(FPD_FPCR,FPDATA)     
347         and.l   #0x0ffffff8,(FPD_FPSR,FPDATA)     
348         move.l  (FPD_FPCR,FPDATA),%d0             
349         lsr.l   #4,%d0                            
350         moveq   #3,%d1                            
351         and.l   %d0,%d1                           
352         move.w  %d1,(FPD_RND,FPDATA)              
353         lsr.l   #2,%d0                            
354         moveq   #3,%d1                            
355         and.l   %d0,%d1                           
356         move.w  %d1,(FPD_PREC,FPDATA)             
357         printf  PDECODE,"\n"                      
358 #if 0                                             
359         printf  PMOVEM,"fpcr : %08x\n",1,FPDAT    
360         printf  PMOVEM,"fpsr : %08x\n",1,FPDAT    
361         printf  PMOVEM,"fpiar: %08x\n",1,FPDAT    
362         clr.l   %d0                               
363         move.w  (FPD_PREC,FPDATA),%d0             
364         printf  PMOVEM,"prec : %04x\n",1,%d0      
365         move.w  (FPD_RND,FPDATA),%d0              
366         printf  PMOVEM,"rnd  : %04x\n",1,%d0      
367 #endif                                            
368         jra     fp_end                            
                                                      

~ [ 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