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

TOMOYO Linux Cross Reference
Linux/arch/m68k/math-emu/fp_log.c

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_log.c (Architecture ppc) and /arch/i386/math-emu/fp_log.c (Architecture i386)


  1 /*                                                  1 
  2                                                   
  3   fp_log.c: floating-point math routines for t    
  4   floating point emulator.                        
  5                                                   
  6   Copyright (c) 1998-1999 David Huggins-Daines    
  7                                                   
  8   I hereby give permission, free of charge, to    
  9   redistribute this software, in source or bin    
 10   the above copyright notice and the following    
 11   in all such copies.                             
 12                                                   
 13   THIS SOFTWARE IS PROVIDED "AS IS", WITH ABSO    
 14   OR IMPLIED.                                     
 15                                                   
 16 */                                                
 17                                                   
 18 #include "fp_arith.h"                             
 19 #include "fp_emu.h"                               
 20 #include "fp_log.h"                               
 21                                                   
 22 static const struct fp_ext fp_one = {             
 23         .exp = 0x3fff,                            
 24 };                                                
 25                                                   
 26 struct fp_ext *fp_fsqrt(struct fp_ext *dest, s    
 27 {                                                 
 28         struct fp_ext tmp, src2;                  
 29         int i, exp;                               
 30                                                   
 31         dprint(PINSTR, "fsqrt\n");                
 32                                                   
 33         fp_monadic_check(dest, src);              
 34                                                   
 35         if (IS_ZERO(dest))                        
 36                 return dest;                      
 37                                                   
 38         if (dest->sign) {                         
 39                 fp_set_nan(dest);                 
 40                 return dest;                      
 41         }                                         
 42         if (IS_INF(dest))                         
 43                 return dest;                      
 44                                                   
 45         /*                                        
 46          *               sqrt(m) * 2^(p)          
 47          * sqrt(m*2^e) =                          
 48          *               sqrt(2*m) * 2^(p)        
 49          *                                        
 50          * So we use the last bit of the expon    
 51          * use the m or 2*m.                      
 52          *                                        
 53          * Since only the fractional part of t    
 54          * the integer part is assumed to be o    
 55          * the fixed point representation.        
 56          */                                       
 57         exp = dest->exp;                          
 58         dest->exp = 0x3FFF;                       
 59         if (!(exp & 1))         /* lowest bit     
 60                 dest->exp++;                      
 61         fp_copy_ext(&src2, dest);                 
 62                                                   
 63         /*                                        
 64          * The taylor row around a for sqrt(x)    
 65          *      sqrt(x) = sqrt(a) + 1/(2*sqrt(    
 66          * With a=1 this gives:                   
 67          *      sqrt(x) = 1 + 1/2*(x-1)           
 68          *              = 1/2*(1+x)               
 69          */                                       
 70         /* It is safe to cast away the constne    
 71         fp_fadd(dest, (struct fp_ext *)&fp_one    
 72         dest->exp--;            /* * 1/2 */       
 73                                                   
 74         /*                                        
 75          * We now apply the newton rule to the    
 76          *      f(x) := x^2 - r                   
 77          * which has a null point on x = sqrt(    
 78          *                                        
 79          * It gives:                              
 80          *      x' := x - f(x)/f'(x)              
 81          *          = x - (x^2 -r)/(2*x)          
 82          *          = x - (x - r/x)/2             
 83          *          = (2*x - x + r/x)/2           
 84          *          = (x + r/x)/2                 
 85          */                                       
 86         for (i = 0; i < 9; i++) {                 
 87                 fp_copy_ext(&tmp, &src2);         
 88                                                   
 89                 fp_fdiv(&tmp, dest);              
 90                 fp_fadd(dest, &tmp);              
 91                 dest->exp--;                      
 92         }                                         
 93                                                   
 94         dest->exp += (exp - 0x3FFF) / 2;          
 95                                                   
 96         return dest;                              
 97 }                                                 
 98                                                   
 99 struct fp_ext *fp_fetoxm1(struct fp_ext *dest,    
100 {                                                 
101         uprint("fetoxm1\n");                      
102                                                   
103         fp_monadic_check(dest, src);              
104                                                   
105         return dest;                              
106 }                                                 
107                                                   
108 struct fp_ext *fp_fetox(struct fp_ext *dest, s    
109 {                                                 
110         uprint("fetox\n");                        
111                                                   
112         fp_monadic_check(dest, src);              
113                                                   
114         return dest;                              
115 }                                                 
116                                                   
117 struct fp_ext *fp_ftwotox(struct fp_ext *dest,    
118 {                                                 
119         uprint("ftwotox\n");                      
120                                                   
121         fp_monadic_check(dest, src);              
122                                                   
123         return dest;                              
124 }                                                 
125                                                   
126 struct fp_ext *fp_ftentox(struct fp_ext *dest,    
127 {                                                 
128         uprint("ftentox\n");                      
129                                                   
130         fp_monadic_check(dest, src);              
131                                                   
132         return dest;                              
133 }                                                 
134                                                   
135 struct fp_ext *fp_flogn(struct fp_ext *dest, s    
136 {                                                 
137         uprint("flogn\n");                        
138                                                   
139         fp_monadic_check(dest, src);              
140                                                   
141         return dest;                              
142 }                                                 
143                                                   
144 struct fp_ext *fp_flognp1(struct fp_ext *dest,    
145 {                                                 
146         uprint("flognp1\n");                      
147                                                   
148         fp_monadic_check(dest, src);              
149                                                   
150         return dest;                              
151 }                                                 
152                                                   
153 struct fp_ext *fp_flog10(struct fp_ext *dest,     
154 {                                                 
155         uprint("flog10\n");                       
156                                                   
157         fp_monadic_check(dest, src);              
158                                                   
159         return dest;                              
160 }                                                 
161                                                   
162 struct fp_ext *fp_flog2(struct fp_ext *dest, s    
163 {                                                 
164         uprint("flog2\n");                        
165                                                   
166         fp_monadic_check(dest, src);              
167                                                   
168         return dest;                              
169 }                                                 
170                                                   
171 struct fp_ext *fp_fgetexp(struct fp_ext *dest,    
172 {                                                 
173         dprint(PINSTR, "fgetexp\n");              
174                                                   
175         fp_monadic_check(dest, src);              
176                                                   
177         if (IS_INF(dest)) {                       
178                 fp_set_nan(dest);                 
179                 return dest;                      
180         }                                         
181         if (IS_ZERO(dest))                        
182                 return dest;                      
183                                                   
184         fp_conv_long2ext(dest, (int)dest->exp     
185                                                   
186         fp_normalize_ext(dest);                   
187                                                   
188         return dest;                              
189 }                                                 
190                                                   
191 struct fp_ext *fp_fgetman(struct fp_ext *dest,    
192 {                                                 
193         dprint(PINSTR, "fgetman\n");              
194                                                   
195         fp_monadic_check(dest, src);              
196                                                   
197         if (IS_ZERO(dest))                        
198                 return dest;                      
199                                                   
200         if (IS_INF(dest))                         
201                 return dest;                      
202                                                   
203         dest->exp = 0x3FFF;                       
204                                                   
205         return dest;                              
206 }                                                 
207                                                   
208                                                   

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