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

TOMOYO Linux Cross Reference
Linux/arch/mips/math-emu/sp_sub.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ 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.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/mips/math-emu/sp_sub.c (Architecture sparc64) and /arch/ppc/math-emu/sp_sub.c (Architecture ppc)


  1 // SPDX-License-Identifier: GPL-2.0-only            1 
  2 /* IEEE754 floating point arithmetic              
  3  * single precision                               
  4  */                                               
  5 /*                                                
  6  * MIPS floating point support                    
  7  * Copyright (C) 1994-2000 Algorithmics Ltd.      
  8  */                                               
  9                                                   
 10 #include "ieee754sp.h"                            
 11                                                   
 12 union ieee754sp ieee754sp_sub(union ieee754sp     
 13 {                                                 
 14         int s;                                    
 15                                                   
 16         COMPXSP;                                  
 17         COMPYSP;                                  
 18                                                   
 19         EXPLODEXSP;                               
 20         EXPLODEYSP;                               
 21                                                   
 22         ieee754_clearcx();                        
 23                                                   
 24         FLUSHXSP;                                 
 25         FLUSHYSP;                                 
 26                                                   
 27         switch (CLPAIR(xc, yc)) {                 
 28         case CLPAIR(IEEE754_CLASS_QNAN, IEEE75    
 29         case CLPAIR(IEEE754_CLASS_ZERO, IEEE75    
 30         case CLPAIR(IEEE754_CLASS_NORM, IEEE75    
 31         case CLPAIR(IEEE754_CLASS_DNORM, IEEE7    
 32         case CLPAIR(IEEE754_CLASS_INF, IEEE754    
 33                 return ieee754sp_nanxcpt(y);      
 34                                                   
 35         case CLPAIR(IEEE754_CLASS_SNAN, IEEE75    
 36         case CLPAIR(IEEE754_CLASS_SNAN, IEEE75    
 37         case CLPAIR(IEEE754_CLASS_SNAN, IEEE75    
 38         case CLPAIR(IEEE754_CLASS_SNAN, IEEE75    
 39         case CLPAIR(IEEE754_CLASS_SNAN, IEEE75    
 40         case CLPAIR(IEEE754_CLASS_SNAN, IEEE75    
 41                 return ieee754sp_nanxcpt(x);      
 42                                                   
 43         case CLPAIR(IEEE754_CLASS_ZERO, IEEE75    
 44         case CLPAIR(IEEE754_CLASS_NORM, IEEE75    
 45         case CLPAIR(IEEE754_CLASS_DNORM, IEEE7    
 46         case CLPAIR(IEEE754_CLASS_INF, IEEE754    
 47                 return y;                         
 48                                                   
 49         case CLPAIR(IEEE754_CLASS_QNAN, IEEE75    
 50         case CLPAIR(IEEE754_CLASS_QNAN, IEEE75    
 51         case CLPAIR(IEEE754_CLASS_QNAN, IEEE75    
 52         case CLPAIR(IEEE754_CLASS_QNAN, IEEE75    
 53         case CLPAIR(IEEE754_CLASS_QNAN, IEEE75    
 54                 return x;                         
 55                                                   
 56                                                   
 57         /*                                        
 58          * Infinity handling                      
 59          */                                       
 60         case CLPAIR(IEEE754_CLASS_INF, IEEE754    
 61                 if (xs != ys)                     
 62                         return x;                 
 63                 ieee754_setcx(IEEE754_INVALID_    
 64                 return ieee754sp_indef();         
 65                                                   
 66         case CLPAIR(IEEE754_CLASS_ZERO, IEEE75    
 67         case CLPAIR(IEEE754_CLASS_DNORM, IEEE7    
 68         case CLPAIR(IEEE754_CLASS_NORM, IEEE75    
 69                 return ieee754sp_inf(ys ^ 1);     
 70                                                   
 71         case CLPAIR(IEEE754_CLASS_INF, IEEE754    
 72         case CLPAIR(IEEE754_CLASS_INF, IEEE754    
 73         case CLPAIR(IEEE754_CLASS_INF, IEEE754    
 74                 return x;                         
 75                                                   
 76         /*                                        
 77          * Zero handling                          
 78          */                                       
 79         case CLPAIR(IEEE754_CLASS_ZERO, IEEE75    
 80                 if (xs != ys)                     
 81                         return x;                 
 82                 else                              
 83                         return ieee754sp_zero(    
 84                                                   
 85         case CLPAIR(IEEE754_CLASS_NORM, IEEE75    
 86         case CLPAIR(IEEE754_CLASS_DNORM, IEEE7    
 87                 return x;                         
 88                                                   
 89         case CLPAIR(IEEE754_CLASS_ZERO, IEEE75    
 90         case CLPAIR(IEEE754_CLASS_ZERO, IEEE75    
 91                 /* quick fix up */                
 92                 SPSIGN(y) ^= 1;                   
 93                 return y;                         
 94                                                   
 95         case CLPAIR(IEEE754_CLASS_DNORM, IEEE7    
 96                 SPDNORMX;                         
 97                 fallthrough;                      
 98         case CLPAIR(IEEE754_CLASS_NORM, IEEE75    
 99                 SPDNORMY;                         
100                 break;                            
101                                                   
102         case CLPAIR(IEEE754_CLASS_DNORM, IEEE7    
103                 SPDNORMX;                         
104                 break;                            
105                                                   
106         case CLPAIR(IEEE754_CLASS_NORM, IEEE75    
107                 break;                            
108         }                                         
109         /* flip sign of y and handle as add */    
110         ys ^= 1;                                  
111                                                   
112         assert(xm & SP_HIDDEN_BIT);               
113         assert(ym & SP_HIDDEN_BIT);               
114                                                   
115                                                   
116         /* provide guard,round and stick bit s    
117         xm <<= 3;                                 
118         ym <<= 3;                                 
119                                                   
120         if (xe > ye) {                            
121                 /*                                
122                  * have to shift y fraction ri    
123                  */                               
124                 s = xe - ye;                      
125                 ym = XSPSRS(ym, s);               
126                 ye += s;                          
127         } else if (ye > xe) {                     
128                 /*                                
129                  * have to shift x fraction ri    
130                  */                               
131                 s = ye - xe;                      
132                 xm = XSPSRS(xm, s);               
133                 xe += s;                          
134         }                                         
135         assert(xe == ye);                         
136         assert(xe <= SP_EMAX);                    
137                                                   
138         if (xs == ys) {                           
139                 /* generate 28 bit result of a    
140                  */                               
141                 xm = xm + ym;                     
142                                                   
143                 if (xm >> (SP_FBITS + 1 + 3))     
144                         SPXSRSX1();     /* shi    
145                 }                                 
146         } else {                                  
147                 if (xm >= ym) {                   
148                         xm = xm - ym;             
149                 } else {                          
150                         xm = ym - xm;             
151                         xs = ys;                  
152                 }                                 
153                 if (xm == 0) {                    
154                         if (ieee754_csr.rm ==     
155                                 return ieee754    
156                         else                      
157                                 return ieee754    
158                 }                                 
159                 /* normalize to rounding preci    
160                  */                               
161                 while ((xm >> (SP_FBITS + 3))     
162                         xm <<= 1;                 
163                         xe--;                     
164                 }                                 
165         }                                         
166                                                   
167         return ieee754sp_format(xs, xe, xm);      
168 }                                                 
169                                                   

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