~ [ 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 (Architecture i386) and /arch/m68k/math-emu/fp_movem.S (Architecture m68k)


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