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

TOMOYO Linux Cross Reference
Linux/arch/powerpc/kvm/fpu.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/powerpc/kvm/fpu.S (Architecture ppc) and /arch/sparc64/kvm/fpu.S (Architecture sparc64)


  1 /* SPDX-License-Identifier: GPL-2.0-or-later *    
  2 /*                                                
  3  *  FPU helper code to use FPU operations from    
  4  *                                                
  5  *    Copyright (C) 2010 Alexander Graf (agraf    
  6  */                                               
  7                                                   
  8 #include <linux/pgtable.h>                        
  9 #include <linux/linkage.h>                        
 10                                                   
 11 #include <asm/reg.h>                              
 12 #include <asm/page.h>                             
 13 #include <asm/mmu.h>                              
 14 #include <asm/cputable.h>                         
 15 #include <asm/cache.h>                            
 16 #include <asm/thread_info.h>                      
 17 #include <asm/ppc_asm.h>                          
 18 #include <asm/asm-offsets.h>                      
 19                                                   
 20 /* Instructions operating on single parameters    
 21                                                   
 22 /*                                                
 23  * Single operation with one input operand        
 24  *                                                
 25  * R3 = (double*)&fpscr                           
 26  * R4 = (short*)&result                           
 27  * R5 = (short*)&param1                           
 28  */                                               
 29 #define FPS_ONE_IN(name)                          
 30 _GLOBAL(fps_ ## name);                            
 31         lfd     0,0(r3);                /* loa    
 32         MTFSF_L(0);                               
 33         lfs     0,0(r5);                          
 34                                                   
 35         name    0,0;                              
 36                                                   
 37         stfs    0,0(r4);                          
 38         mffs    0;                                
 39         stfd    0,0(r3);        /* save new fp    
 40         blr                                       
 41                                                   
 42 /*                                                
 43  * Single operation with two input operands       
 44  *                                                
 45  * R3 = (double*)&fpscr                           
 46  * R4 = (short*)&result                           
 47  * R5 = (short*)&param1                           
 48  * R6 = (short*)&param2                           
 49  */                                               
 50 #define FPS_TWO_IN(name)                          
 51 _GLOBAL(fps_ ## name);                            
 52         lfd     0,0(r3);                /* loa    
 53         MTFSF_L(0);                               
 54         lfs     0,0(r5);                          
 55         lfs     1,0(r6);                          
 56                                                   
 57         name    0,0,1;                            
 58                                                   
 59         stfs    0,0(r4);                          
 60         mffs    0;                                
 61         stfd    0,0(r3);                /* sav    
 62         blr                                       
 63                                                   
 64 /*                                                
 65  * Single operation with three input operands     
 66  *                                                
 67  * R3 = (double*)&fpscr                           
 68  * R4 = (short*)&result                           
 69  * R5 = (short*)&param1                           
 70  * R6 = (short*)&param2                           
 71  * R7 = (short*)&param3                           
 72  */                                               
 73 #define FPS_THREE_IN(name)                        
 74 _GLOBAL(fps_ ## name);                            
 75         lfd     0,0(r3);                /* loa    
 76         MTFSF_L(0);                               
 77         lfs     0,0(r5);                          
 78         lfs     1,0(r6);                          
 79         lfs     2,0(r7);                          
 80                                                   
 81         name    0,0,1,2;                          
 82                                                   
 83         stfs    0,0(r4);                          
 84         mffs    0;                                
 85         stfd    0,0(r3);                /* sav    
 86         blr                                       
 87                                                   
 88 FPS_ONE_IN(fres)                                  
 89 FPS_ONE_IN(frsqrte)                               
 90 FPS_ONE_IN(fsqrts)                                
 91 FPS_TWO_IN(fadds)                                 
 92 FPS_TWO_IN(fdivs)                                 
 93 FPS_TWO_IN(fmuls)                                 
 94 FPS_TWO_IN(fsubs)                                 
 95 FPS_THREE_IN(fmadds)                              
 96 FPS_THREE_IN(fmsubs)                              
 97 FPS_THREE_IN(fnmadds)                             
 98 FPS_THREE_IN(fnmsubs)                             
 99 FPS_THREE_IN(fsel)                                
100                                                   
101                                                   
102 /* Instructions operating on double parameters    
103                                                   
104 /*                                                
105  * Beginning of double instruction processing     
106  *                                                
107  * R3 = (double*)&fpscr                           
108  * R4 = (u32*)&cr                                 
109  * R5 = (double*)&result                          
110  * R6 = (double*)&param1                          
111  * R7 = (double*)&param2 [load_two]               
112  * R8 = (double*)&param3 [load_three]             
113  * LR = instruction call function                 
114  */                                               
115 SYM_FUNC_START_LOCAL(fpd_load_three)              
116         lfd     2,0(r8)                 /* loa    
117 SYM_FUNC_START_LOCAL(fpd_load_two)                
118         lfd     1,0(r7)                 /* loa    
119 SYM_FUNC_START_LOCAL(fpd_load_one)                
120         lfd     0,0(r6)                 /* loa    
121 SYM_FUNC_START_LOCAL(fpd_load_none)               
122         lfd     3,0(r3)                 /* loa    
123         MTFSF_L(3)                                
124         lwz     r6, 0(r4)               /* loa    
125         mtcr    r6                                
126         blr                                       
127 SYM_FUNC_END(fpd_load_none)                       
128 SYM_FUNC_END(fpd_load_one)                        
129 SYM_FUNC_END(fpd_load_two)                        
130 SYM_FUNC_END(fpd_load_three)                      
131                                                   
132 /*                                                
133  * End of double instruction processing           
134  *                                                
135  * R3 = (double*)&fpscr                           
136  * R4 = (u32*)&cr                                 
137  * R5 = (double*)&result                          
138  * LR = caller of instruction call function       
139  */                                               
140 SYM_FUNC_START_LOCAL(fpd_return)                  
141         mfcr    r6                                
142         stfd    0,0(r5)                 /* sav    
143         mffs    0                                 
144         stfd    0,0(r3)                 /* sav    
145         stw     r6,0(r4)                /* sav    
146         blr                                       
147 SYM_FUNC_END(fpd_return)                          
148                                                   
149 /*                                                
150  * Double operation with no input operand         
151  *                                                
152  * R3 = (double*)&fpscr                           
153  * R4 = (u32*)&cr                                 
154  * R5 = (double*)&result                          
155  */                                               
156 #define FPD_NONE_IN(name)                         
157 _GLOBAL(fpd_ ## name);                            
158         mflr    r12;                              
159         bl      fpd_load_none;                    
160         mtlr    r12;                              
161                                                   
162         name.   0;                      /* cal    
163         b       fpd_return                        
164                                                   
165 /*                                                
166  * Double operation with one input operand        
167  *                                                
168  * R3 = (double*)&fpscr                           
169  * R4 = (u32*)&cr                                 
170  * R5 = (double*)&result                          
171  * R6 = (double*)&param1                          
172  */                                               
173 #define FPD_ONE_IN(name)                          
174 _GLOBAL(fpd_ ## name);                            
175         mflr    r12;                              
176         bl      fpd_load_one;                     
177         mtlr    r12;                              
178                                                   
179         name.   0,0;                    /* cal    
180         b       fpd_return                        
181                                                   
182 /*                                                
183  * Double operation with two input operands       
184  *                                                
185  * R3 = (double*)&fpscr                           
186  * R4 = (u32*)&cr                                 
187  * R5 = (double*)&result                          
188  * R6 = (double*)&param1                          
189  * R7 = (double*)&param2                          
190  * R8 = (double*)&param3                          
191  */                                               
192 #define FPD_TWO_IN(name)                          
193 _GLOBAL(fpd_ ## name);                            
194         mflr    r12;                              
195         bl      fpd_load_two;                     
196         mtlr    r12;                              
197                                                   
198         name.   0,0,1;                  /* cal    
199         b       fpd_return                        
200                                                   
201 /*                                                
202  * CR Double operation with two input operands    
203  *                                                
204  * R3 = (double*)&fpscr                           
205  * R4 = (u32*)&cr                                 
206  * R5 = (double*)&param1                          
207  * R6 = (double*)&param2                          
208  * R7 = (double*)&param3                          
209  */                                               
210 #define FPD_TWO_IN_CR(name)                       
211 _GLOBAL(fpd_ ## name);                            
212         lfd     1,0(r6);                /* loa    
213         lfd     0,0(r5);                /* loa    
214         lfd     3,0(r3);                /* loa    
215         MTFSF_L(3);                               
216         lwz     r6, 0(r4);              /* loa    
217         mtcr    r6;                               
218                                                   
219         name    0,0,1;                  /* cal    
220         mfcr    r6;                               
221         mffs    0;                                
222         stfd    0,0(r3);                /* sav    
223         stw     r6,0(r4);               /* sav    
224         blr                                       
225                                                   
226 /*                                                
227  * Double operation with three input operands     
228  *                                                
229  * R3 = (double*)&fpscr                           
230  * R4 = (u32*)&cr                                 
231  * R5 = (double*)&result                          
232  * R6 = (double*)&param1                          
233  * R7 = (double*)&param2                          
234  * R8 = (double*)&param3                          
235  */                                               
236 #define FPD_THREE_IN(name)                        
237 _GLOBAL(fpd_ ## name);                            
238         mflr    r12;                              
239         bl      fpd_load_three;                   
240         mtlr    r12;                              
241                                                   
242         name.   0,0,1,2;                /* cal    
243         b       fpd_return                        
244                                                   
245 FPD_ONE_IN(fsqrts)                                
246 FPD_ONE_IN(frsqrtes)                              
247 FPD_ONE_IN(fres)                                  
248 FPD_ONE_IN(frsp)                                  
249 FPD_ONE_IN(fctiw)                                 
250 FPD_ONE_IN(fctiwz)                                
251 FPD_ONE_IN(fsqrt)                                 
252 FPD_ONE_IN(fre)                                   
253 FPD_ONE_IN(frsqrte)                               
254 FPD_ONE_IN(fneg)                                  
255 FPD_ONE_IN(fabs)                                  
256 FPD_TWO_IN(fadds)                                 
257 FPD_TWO_IN(fsubs)                                 
258 FPD_TWO_IN(fdivs)                                 
259 FPD_TWO_IN(fmuls)                                 
260 FPD_TWO_IN_CR(fcmpu)                              
261 FPD_TWO_IN(fcpsgn)                                
262 FPD_TWO_IN(fdiv)                                  
263 FPD_TWO_IN(fadd)                                  
264 FPD_TWO_IN(fmul)                                  
265 FPD_TWO_IN_CR(fcmpo)                              
266 FPD_TWO_IN(fsub)                                  
267 FPD_THREE_IN(fmsubs)                              
268 FPD_THREE_IN(fmadds)                              
269 FPD_THREE_IN(fnmsubs)                             
270 FPD_THREE_IN(fnmadds)                             
271 FPD_THREE_IN(fsel)                                
272 FPD_THREE_IN(fmsub)                               
273 FPD_THREE_IN(fmadd)                               
274 FPD_THREE_IN(fnmsub)                              
275 FPD_THREE_IN(fnmadd)                              
276                                                   
277 _GLOBAL(kvm_cvt_fd)                               
278         lfs     0,0(r3)                           
279         stfd    0,0(r4)                           
280         blr                                       
281                                                   
282 _GLOBAL(kvm_cvt_df)                               
283         lfd     0,0(r3)                           
284         stfs    0,0(r4)                           
285         blr                                       
                                                      

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