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

TOMOYO Linux Cross Reference
Linux/arch/m68k/fpsp040/ssin.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/fpsp040/ssin.S (Version linux-6.12-rc7) and /arch/i386/fpsp040/ssin.S (Version linux-6.5.13)


  1 |                                                 
  2 |       ssin.sa 3.3 7/29/91                       
  3 |                                                 
  4 |       The entry point sSIN computes the sine    
  5 |       sCOS computes the cosine, and sSINCOS     
  6 |       corresponding entry points with a "d"     
  7 |       corresponding function values for deno    
  8 |                                                 
  9 |       Input: Double-extended number X in loc    
 10 |               by address register a0.           
 11 |                                                 
 12 |       Output: The function value sin(X) or c    
 13 |               COS is requested. Otherwise, f    
 14 |               in Fp0, and cos(X) is returned    
 15 |                                                 
 16 |       Modifies: Fp0 for SIN or COS; both Fp0    
 17 |                                                 
 18 |       Accuracy and Monotonicity: The returne    
 19 |               64 significant bit, i.e. withi    
 20 |               result is subsequently rounded    
 21 |               result is provably monotonic i    
 22 |                                                 
 23 |       Speed: The programs sSIN and sCOS take    
 24 |               input argument X such that |X|    
 25 |               situation. The speed for sSINC    
 26 |                                                 
 27 |       Algorithm:                                
 28 |                                                 
 29 |       SIN and COS:                              
 30 |       1. If SIN is invoked, set AdjN := 0; o    
 31 |                                                 
 32 |       2. If |X| >= 15Pi or |X| < 2**(-40), g    
 33 |                                                 
 34 |       3. Decompose X as X = N(Pi/2) + r wher    
 35 |               k = N mod 4, so in particular,    
 36 |               k by k := k + AdjN.               
 37 |                                                 
 38 |       4. If k is even, go to 6.                 
 39 |                                                 
 40 |       5. (k is odd) Set j := (k-1)/2, sgn :=    
 41 |               where cos(r) is approximated b    
 42 |               1 + r*r*(B1+s*(B2+ ... + s*B8)    
 43 |               Exit.                             
 44 |                                                 
 45 |       6. (k is even) Set j := k/2, sgn := (-    
 46 |               where sin(r) is approximated b    
 47 |               r + r*s*(A1+s*(A2+ ... + s*A7)    
 48 |               Exit.                             
 49 |                                                 
 50 |       7. If |X| > 1, go to 9.                   
 51 |                                                 
 52 |       8. (|X|<2**(-40)) If SIN is invoked, r    
 53 |                                                 
 54 |       9. Overwrite X by X := X rem 2Pi. Now     
 55 |                                                 
 56 |       SINCOS:                                   
 57 |       1. If |X| >= 15Pi or |X| < 2**(-40), g    
 58 |                                                 
 59 |       2. Decompose X as X = N(Pi/2) + r wher    
 60 |               k = N mod 4, so in particular,    
 61 |                                                 
 62 |       3. If k is even, go to 5.                 
 63 |                                                 
 64 |       4. (k is odd) Set j1 := (k-1)/2, j2 :=    
 65 |               j1 exclusive or with the l.s.b    
 66 |               sgn1 := (-1)**j1, sgn2 := (-1)    
 67 |               SIN(X) = sgn1 * cos(r) and COS    
 68 |               sin(r) and cos(r) are computed    
 69 |               in r, respectively. Exit          
 70 |                                                 
 71 |       5. (k is even) Set j1 := k/2, sgn1 :=     
 72 |               SIN(X) = sgn1 * sin(r) and COS    
 73 |               sin(r) and cos(r) are computed    
 74 |               in r, respectively. Exit          
 75 |                                                 
 76 |       6. If |X| > 1, go to 8.                   
 77 |                                                 
 78 |       7. (|X|<2**(-40)) SIN(X) = X and COS(X    
 79 |                                                 
 80 |       8. Overwrite X by X := X rem 2Pi. Now     
 81 |                                                 
 82                                                   
 83 |               Copyright (C) Motorola, Inc. 1    
 84 |                       All Rights Reserved       
 85 |                                                 
 86 |       For details on the license for this fi    
 87 |       file, README, in this same directory.     
 88                                                   
 89 |SSIN   idnt    2,1 | Motorola 040 Floating Po    
 90                                                   
 91         |section        8                         
 92                                                   
 93 #include "fpsp.h"                                 
 94                                                   
 95 BOUNDS1:        .long 0x3FD78000,0x4004BC7E       
 96 TWOBYPI:        .long 0x3FE45F30,0x6DC9C883       
 97                                                   
 98 SINA7:  .long 0xBD6AAA77,0xCCC994F5               
 99 SINA6:  .long 0x3DE61209,0x7AAE8DA1               
100                                                   
101 SINA5:  .long 0xBE5AE645,0x2A118AE4               
102 SINA4:  .long 0x3EC71DE3,0xA5341531               
103                                                   
104 SINA3:  .long 0xBF2A01A0,0x1A018B59,0x00000000    
105                                                   
106 SINA2:  .long 0x3FF80000,0x88888888,0x888859AF    
107                                                   
108 SINA1:  .long 0xBFFC0000,0xAAAAAAAA,0xAAAAAA99    
109                                                   
110 COSB8:  .long 0x3D2AC4D0,0xD6011EE3               
111 COSB7:  .long 0xBDA9396F,0x9F45AC19               
112                                                   
113 COSB6:  .long 0x3E21EED9,0x0612C972               
114 COSB5:  .long 0xBE927E4F,0xB79D9FCF               
115                                                   
116 COSB4:  .long 0x3EFA01A0,0x1A01D423,0x00000000    
117                                                   
118 COSB3:  .long 0xBFF50000,0xB60B60B6,0x0B61D438    
119                                                   
120 COSB2:  .long 0x3FFA0000,0xAAAAAAAA,0xAAAAAB5E    
121 COSB1:  .long 0xBF000000                          
122                                                   
123 INVTWOPI: .long 0x3FFC0000,0xA2F9836E,0x4E4415    
124                                                   
125 TWOPI1: .long 0x40010000,0xC90FDAA2,0x00000000    
126 TWOPI2: .long 0x3FDF0000,0x85A308D4,0x00000000    
127                                                   
128         |xref   PITBL                             
129                                                   
130         .set    INARG,FP_SCR4                     
131                                                   
132         .set    X,FP_SCR5                         
133         .set    XDCARE,X+2                        
134         .set    XFRAC,X+4                         
135                                                   
136         .set    RPRIME,FP_SCR1                    
137         .set    SPRIME,FP_SCR2                    
138                                                   
139         .set    POSNEG1,L_SCR1                    
140         .set    TWOTO63,L_SCR1                    
141                                                   
142         .set    ENDFLAG,L_SCR2                    
143         .set    N,L_SCR2                          
144                                                   
145         .set    ADJN,L_SCR3                       
146                                                   
147         | xref  t_frcinx                          
148         |xref   t_extdnrm                         
149         |xref   sto_cos                           
150                                                   
151         .global ssind                             
152 ssind:                                            
153 |--SIN(X) = X FOR DENORMALIZED X                  
154         bra             t_extdnrm                 
155                                                   
156         .global scosd                             
157 scosd:                                            
158 |--COS(X) = 1 FOR DENORMALIZED X                  
159                                                   
160         fmoves          #0x3F800000,%fp0          
161 |                                                 
162 |       9D25B Fix: Sometimes the previous fmov    
163 |                                                 
164         fmovel          #0,%fpsr                  
165 |                                                 
166         bra             t_frcinx                  
167                                                   
168         .global ssin                              
169 ssin:                                             
170 |--SET ADJN TO 0                                  
171         movel           #0,ADJN(%a6)              
172         bras            SINBGN                    
173                                                   
174         .global scos                              
175 scos:                                             
176 |--SET ADJN TO 1                                  
177         movel           #1,ADJN(%a6)              
178                                                   
179 SINBGN:                                           
180 |--SAVE FPCR, FP1. CHECK IF |X| IS TOO SMALL O    
181                                                   
182         fmovex          (%a0),%fp0      | ...L    
183                                                   
184         movel           (%a0),%d0                 
185         movew           4(%a0),%d0                
186         fmovex          %fp0,X(%a6)               
187         andil           #0x7FFFFFFF,%d0           
188                                                   
189         cmpil           #0x3FD78000,%d0           
190         bges            SOK1                      
191         bra             SINSM                     
192                                                   
193 SOK1:                                             
194         cmpil           #0x4004BC7E,%d0           
195         blts            SINMAIN                   
196         bra             REDUCEX                   
197                                                   
198 SINMAIN:                                          
199 |--THIS IS THE USUAL CASE, |X| <= 15 PI.          
200 |--THE ARGUMENT REDUCTION IS DONE BY TABLE LOO    
201         fmovex          %fp0,%fp1                 
202         fmuld           TWOBYPI,%fp1    | ...X    
203                                                   
204 |--HIDE THE NEXT THREE INSTRUCTIONS               
205         lea             PITBL+0x200,%a1 | ...T    
206                                                   
207                                                   
208 |--FP1 IS NOW READY                               
209         fmovel          %fp1,N(%a6)               
210                                                   
211         movel           N(%a6),%d0                
212         asll            #4,%d0                    
213         addal           %d0,%a1 | ...A1 IS THE    
214 |                               ...WHICH IS IN    
215                                                   
216         fsubx           (%a1)+,%fp0     | ...X    
217 |--HIDE THE NEXT ONE                              
218         fsubs           (%a1),%fp0      | ...F    
219                                                   
220 SINCONT:                                          
221 |--continuation from REDUCEX                      
222                                                   
223 |--GET N+ADJN AND SEE IF SIN(R) OR COS(R) IS N    
224         movel           N(%a6),%d0                
225         addl            ADJN(%a6),%d0   | ...S    
226         rorl            #1,%d0  | ...D0 WAS OD    
227         cmpil           #0,%d0                    
228         blt             COSPOLY                   
229                                                   
230 SINPOLY:                                          
231 |--LET J BE THE LEAST SIG. BIT OF D0, LET SGN     
232 |--THEN WE RETURN       SGN*SIN(R). SGN*SIN(R)    
233 |--R' + R'*S*(A1 + S(A2 + S(A3 + S(A4 + ... +     
234 |--R' = SGN*R, S=R*R. THIS CAN BE REWRITTEN AS    
235 |--R' + R'*S*( [A1+T(A3+T(A5+TA7))] + [S(A2+T(    
236 |--WHERE T=S*S.                                   
237 |--NOTE THAT A3 THROUGH A7 ARE STORED IN DOUBL    
238 |--WHILE A1 AND A2 ARE IN DOUBLE-EXTENDED FORM    
239         fmovex          %fp0,X(%a6)     | ...X    
240         fmulx           %fp0,%fp0       | ...F    
241 |---HIDE THE NEXT TWO WHILE WAITING FOR FP0       
242         fmoved          SINA7,%fp3                
243         fmoved          SINA6,%fp2                
244 |--FP0 IS NOW READY                               
245         fmovex          %fp0,%fp1                 
246         fmulx           %fp1,%fp1       | ...F    
247 |--HIDE THE NEXT TWO WHILE WAITING FOR FP1        
248                                                   
249         rorl            #1,%d0                    
250         andil           #0x80000000,%d0           
251 |                               ...LEAST SIG.     
252         eorl            %d0,X(%a6)      | ...X    
253                                                   
254         fmulx           %fp1,%fp3       | ...T    
255         fmulx           %fp1,%fp2       | ...T    
256                                                   
257         faddd           SINA5,%fp3 | ...A5+TA7    
258         faddd           SINA4,%fp2 | ...A4+TA6    
259                                                   
260         fmulx           %fp1,%fp3       | ...T    
261         fmulx           %fp1,%fp2       | ...T    
262                                                   
263         faddd           SINA3,%fp3 | ...A3+T(A    
264         faddx           SINA2,%fp2 | ...A2+T(A    
265                                                   
266         fmulx           %fp3,%fp1       | ...T    
267                                                   
268         fmulx           %fp0,%fp2       | ...S    
269         faddx           SINA1,%fp1 | ...A1+T(A    
270         fmulx           X(%a6),%fp0     | ...R    
271                                                   
272         faddx           %fp2,%fp1       | ...[    
273 |--FP3 RELEASED, RESTORE NOW AND TAKE SOME ADV    
274 |--FP2 RELEASED, RESTORE NOW AND TAKE FULL ADV    
275                                                   
276                                                   
277         fmulx           %fp1,%fp0                 
278 |--FP1 RELEASED.                                  
279                                                   
280         fmovel          %d1,%FPCR                 
281         faddx           X(%a6),%fp0               
282         bra             t_frcinx                  
283                                                   
284                                                   
285 COSPOLY:                                          
286 |--LET J BE THE LEAST SIG. BIT OF D0, LET SGN     
287 |--THEN WE RETURN       SGN*COS(R). SGN*COS(R)    
288 |--SGN + S'*(B1 + S(B2 + S(B3 + S(B4 + ... + S    
289 |--S=R*R AND S'=SGN*S. THIS CAN BE REWRITTEN A    
290 |--SGN + S'*([B1+T(B3+T(B5+TB7))] + [S(B2+T(B4    
291 |--WHERE T=S*S.                                   
292 |--NOTE THAT B4 THROUGH B8 ARE STORED IN DOUBL    
293 |--WHILE B2 AND B3 ARE IN DOUBLE-EXTENDED FORM    
294 |--AND IS THEREFORE STORED AS SINGLE PRECISION    
295                                                   
296         fmulx           %fp0,%fp0       | ...F    
297 |---HIDE THE NEXT TWO WHILE WAITING FOR FP0       
298         fmoved          COSB8,%fp2                
299         fmoved          COSB7,%fp3                
300 |--FP0 IS NOW READY                               
301         fmovex          %fp0,%fp1                 
302         fmulx           %fp1,%fp1       | ...F    
303 |--HIDE THE NEXT TWO WHILE WAITING FOR FP1        
304         fmovex          %fp0,X(%a6)     | ...X    
305         rorl            #1,%d0                    
306         andil           #0x80000000,%d0           
307 |                       ...LEAST SIG. BIT OF D    
308                                                   
309         fmulx           %fp1,%fp2       | ...T    
310 |--HIDE THE NEXT TWO WHILE WAITING FOR THE XU     
311         eorl            %d0,X(%a6)      | ...X    
312         andil           #0x80000000,%d0           
313                                                   
314         fmulx           %fp1,%fp3       | ...T    
315 |--HIDE THE NEXT TWO WHILE WAITING FOR THE XU     
316         oril            #0x3F800000,%d0 | ...D    
317         movel           %d0,POSNEG1(%a6)          
318                                                   
319         faddd           COSB6,%fp2 | ...B6+TB8    
320         faddd           COSB5,%fp3 | ...B5+TB7    
321                                                   
322         fmulx           %fp1,%fp2       | ...T    
323         fmulx           %fp1,%fp3       | ...T    
324                                                   
325         faddd           COSB4,%fp2 | ...B4+T(B    
326         faddx           COSB3,%fp3 | ...B3+T(B    
327                                                   
328         fmulx           %fp1,%fp2       | ...T    
329         fmulx           %fp3,%fp1       | ...T    
330                                                   
331         faddx           COSB2,%fp2 | ...B2+T(B    
332         fadds           COSB1,%fp1 | ...B1+T(B    
333                                                   
334         fmulx           %fp2,%fp0       | ...S    
335 |--FP3 RELEASED, RESTORE NOW AND TAKE SOME ADV    
336 |--FP2 RELEASED.                                  
337                                                   
338                                                   
339         faddx           %fp1,%fp0                 
340 |--FP1 RELEASED                                   
341                                                   
342         fmulx           X(%a6),%fp0               
343                                                   
344         fmovel          %d1,%FPCR                 
345         fadds           POSNEG1(%a6),%fp0         
346         bra             t_frcinx                  
347                                                   
348                                                   
349 SINBORS:                                          
350 |--IF |X| > 15PI, WE USE THE GENERAL ARGUMENT     
351 |--IF |X| < 2**(-40), RETURN X OR 1.              
352         cmpil           #0x3FFF8000,%d0           
353         bgts            REDUCEX                   
354                                                   
355                                                   
356 SINSM:                                            
357         movel           ADJN(%a6),%d0             
358         cmpil           #0,%d0                    
359         bgts            COSTINY                   
360                                                   
361 SINTINY:                                          
362         movew           #0x0000,XDCARE(%a6)       
363         fmovel          %d1,%FPCR                 
364         fmovex          X(%a6),%fp0               
365         bra             t_frcinx                  
366                                                   
367                                                   
368 COSTINY:                                          
369         fmoves          #0x3F800000,%fp0          
370                                                   
371         fmovel          %d1,%FPCR                 
372         fsubs           #0x00800000,%fp0          
373         bra             t_frcinx                  
374                                                   
375                                                   
376 REDUCEX:                                          
377 |--WHEN REDUCEX IS USED, THE CODE WILL INEVITA    
378 |--THIS REDUCTION METHOD, HOWEVER, IS MUCH FAS    
379 |--THE REMAINDER INSTRUCTION WHICH IS NOW IN S    
380                                                   
381         fmovemx %fp2-%fp5,-(%a7)        | ...s    
382         movel           %d2,-(%a7)                
383         fmoves         #0x00000000,%fp1           
384 |--If compact form of abs(arg) in d0=$7ffeffff    
385 |--there is a danger of unwanted overflow in f    
386 |--case, reduce argument by one remainder step    
387 |--safe.                                          
388         cmpil   #0x7ffeffff,%d0         |is ar    
389         bnes    LOOP                              
390         movel   #0x7ffe0000,FP_SCR2(%a6)          
391 |                                       ;creat    
392         movel   #0xc90fdaa2,FP_SCR2+4(%a6)        
393         clrl    FP_SCR2+8(%a6)                    
394         ftstx   %fp0                    |test     
395         movel   #0x7fdc0000,FP_SCR3(%a6)          
396 |                                       ;PI/2     
397         movel   #0x85a308d3,FP_SCR3+4(%a6)        
398         clrl   FP_SCR3+8(%a6)                     
399         fblt    red_neg                           
400         orw     #0x8000,FP_SCR2(%a6)    |posit    
401         orw     #0x8000,FP_SCR3(%a6)              
402 red_neg:                                          
403         faddx  FP_SCR2(%a6),%fp0                  
404         fmovex  %fp0,%fp1               |save     
405         faddx  FP_SCR3(%a6),%fp0                  
406         fsubx  %fp0,%fp1                          
407         faddx  FP_SCR3(%a6),%fp1                  
408                                                   
409 |--ON ENTRY, FP0 IS X, ON RETURN, FP0 IS X REM    
410 |--integer quotient will be stored in N           
411 |--Intermediate remainder is 66-bit long; (R,r    
412                                                   
413 LOOP:                                             
414         fmovex          %fp0,INARG(%a6) | ...+    
415         movew           INARG(%a6),%d0            
416         movel          %d0,%a1          | ...s    
417         andil           #0x00007FFF,%d0           
418         subil           #0x00003FFF,%d0 | ...D    
419         cmpil           #28,%d0                   
420         bles            LASTLOOP                  
421 CONTLOOP:                                         
422         subil           #27,%d0  | ...D0 IS L     
423         movel           #0,ENDFLAG(%a6)           
424         bras            WORK                      
425 LASTLOOP:                                         
426         clrl            %d0             | ...D    
427         movel           #1,ENDFLAG(%a6)           
428                                                   
429 WORK:                                             
430 |--FIND THE REMAINDER OF (R,r) W.R.T.   2**L *    
431 |--THAT INT( X * (2/PI) / 2**(L) ) < 2**29.       
432                                                   
433 |--CREATE 2**(-L) * (2/PI), SIGN(INARG)*2**(63    
434 |--2**L * (PIby2_1), 2**L * (PIby2_2)             
435                                                   
436         movel           #0x00003FFE,%d2 | ...B    
437         subl            %d0,%d2         | ...B    
438                                                   
439         movel           #0xA2F9836E,FP_SCR1+4(    
440         movel           #0x4E44152A,FP_SCR1+8(    
441         movew           %d2,FP_SCR1(%a6)          
442                                                   
443         fmovex          %fp0,%fp2                 
444         fmulx           FP_SCR1(%a6),%fp2         
445 |--WE MUST NOW FIND INT(FP2). SINCE WE NEED TH    
446 |--FLOATING POINT FORMAT, THE TWO FMOVE'S         
447 |--WILL BE TOO INEFFICIENT. THE WAY AROUND IT     
448 |--(SIGN(INARG)*2**63   +       FP2) - SIGN(IN    
449 |--US THE DESIRED VALUE IN FLOATING POINT.        
450                                                   
451 |--HIDE SIX CYCLES OF INSTRUCTION                 
452         movel           %a1,%d2                   
453         swap            %d2                       
454         andil           #0x80000000,%d2           
455         oril            #0x5F000000,%d2 | ...D    
456         movel           %d2,TWOTO63(%a6)          
457                                                   
458         movel           %d0,%d2                   
459         addil           #0x00003FFF,%d2 | ...B    
460                                                   
461 |--FP2 IS READY                                   
462         fadds           TWOTO63(%a6),%fp2         
463                                                   
464 |--HIDE 4 CYCLES OF INSTRUCTION; creating 2**(    
465         movew           %d2,FP_SCR2(%a6)          
466         clrw           FP_SCR2+2(%a6)             
467         movel           #0xC90FDAA2,FP_SCR2+4(    
468         clrl            FP_SCR2+8(%a6)            
469                                                   
470 |--FP2 IS READY                                   
471         fsubs           TWOTO63(%a6),%fp2         
472                                                   
473         addil           #0x00003FDD,%d0           
474         movew           %d0,FP_SCR3(%a6)          
475         clrw           FP_SCR3+2(%a6)             
476         movel           #0x85A308D3,FP_SCR3+4(    
477         clrl            FP_SCR3+8(%a6)            
478                                                   
479         movel           ENDFLAG(%a6),%d0          
480                                                   
481 |--We are now ready to perform (R+r) - N*P1 -     
482 |--P2 = 2**(L) * Piby2_2                          
483         fmovex          %fp2,%fp4                 
484         fmulx           FP_SCR2(%a6),%fp4         
485         fmovex          %fp2,%fp5                 
486         fmulx           FP_SCR3(%a6),%fp5         
487         fmovex          %fp4,%fp3                 
488 |--we want P+p = W+w  but  |p| <= half ulp of     
489 |--Then, we need to compute  A := R-P   and  a    
490         faddx           %fp5,%fp3                 
491         fsubx           %fp3,%fp4                 
492                                                   
493         fsubx           %fp3,%fp0                 
494         faddx           %fp5,%fp4                 
495                                                   
496         fmovex          %fp0,%fp3                 
497         fsubx           %fp4,%fp1                 
498                                                   
499 |--Now we need to normalize (A,a) to  "new (R,    
500 |--|r| <= half ulp of R.                          
501         faddx           %fp1,%fp0                 
502 |--No need to calculate r if this is the last     
503         cmpil           #0,%d0                    
504         bgt             RESTORE                   
505                                                   
506 |--Need to calculate r                            
507         fsubx           %fp0,%fp3                 
508         faddx           %fp3,%fp1                 
509         bra             LOOP                      
510                                                   
511 RESTORE:                                          
512         fmovel          %fp2,N(%a6)               
513         movel           (%a7)+,%d2                
514         fmovemx (%a7)+,%fp2-%fp5                  
515                                                   
516                                                   
517         movel           ADJN(%a6),%d0             
518         cmpil           #4,%d0                    
519                                                   
520         blt             SINCONT                   
521         bras            SCCONT                    
522                                                   
523         .global ssincosd                          
524 ssincosd:                                         
525 |--SIN AND COS OF X FOR DENORMALIZED X            
526                                                   
527         fmoves          #0x3F800000,%fp1          
528         bsr             sto_cos         |store    
529         bra             t_extdnrm                 
530                                                   
531         .global ssincos                           
532 ssincos:                                          
533 |--SET ADJN TO 4                                  
534         movel           #4,ADJN(%a6)              
535                                                   
536         fmovex          (%a0),%fp0      | ...L    
537                                                   
538         movel           (%a0),%d0                 
539         movew           4(%a0),%d0                
540         fmovex          %fp0,X(%a6)               
541         andil           #0x7FFFFFFF,%d0           
542                                                   
543         cmpil           #0x3FD78000,%d0           
544         bges            SCOK1                     
545         bra             SCSM                      
546                                                   
547 SCOK1:                                            
548         cmpil           #0x4004BC7E,%d0           
549         blts            SCMAIN                    
550         bra             REDUCEX                   
551                                                   
552                                                   
553 SCMAIN:                                           
554 |--THIS IS THE USUAL CASE, |X| <= 15 PI.          
555 |--THE ARGUMENT REDUCTION IS DONE BY TABLE LOO    
556         fmovex          %fp0,%fp1                 
557         fmuld           TWOBYPI,%fp1    | ...X    
558                                                   
559 |--HIDE THE NEXT THREE INSTRUCTIONS               
560         lea             PITBL+0x200,%a1 | ...T    
561                                                   
562                                                   
563 |--FP1 IS NOW READY                               
564         fmovel          %fp1,N(%a6)               
565                                                   
566         movel           N(%a6),%d0                
567         asll            #4,%d0                    
568         addal           %d0,%a1         | ...A    
569                                                   
570         fsubx           (%a1)+,%fp0     | ...X    
571         fsubs           (%a1),%fp0      | ...F    
572                                                   
573 SCCONT:                                           
574 |--continuation point from REDUCEX                
575                                                   
576 |--HIDE THE NEXT TWO                              
577         movel           N(%a6),%d0                
578         rorl            #1,%d0                    
579                                                   
580         cmpil           #0,%d0          | ...D    
581         bge             NEVEN                     
582                                                   
583 NODD:                                             
584 |--REGISTERS SAVED SO FAR: D0, A0, FP2.           
585                                                   
586         fmovex          %fp0,RPRIME(%a6)          
587         fmulx           %fp0,%fp0        | ...    
588         fmoved          SINA7,%fp1      | ...A    
589         fmoved          COSB8,%fp2      | ...B    
590         fmulx           %fp0,%fp1        | ...    
591         movel           %d2,-(%a7)                
592         movel           %d0,%d2                   
593         fmulx           %fp0,%fp2        | ...    
594         rorl            #1,%d2                    
595         andil           #0x80000000,%d2           
596                                                   
597         faddd           SINA6,%fp1      | ...A    
598         eorl            %d0,%d2                   
599         andil           #0x80000000,%d2           
600         faddd           COSB7,%fp2      | ...B    
601                                                   
602         fmulx           %fp0,%fp1        | ...    
603         eorl            %d2,RPRIME(%a6)           
604         movel           (%a7)+,%d2                
605         fmulx           %fp0,%fp2        | ...    
606         rorl            #1,%d0                    
607         andil           #0x80000000,%d0           
608                                                   
609         faddd           SINA5,%fp1      | ...A    
610         movel           #0x3F800000,POSNEG1(%a    
611         eorl            %d0,POSNEG1(%a6)          
612         faddd           COSB6,%fp2      | ...B    
613                                                   
614         fmulx           %fp0,%fp1        | ...    
615         fmulx           %fp0,%fp2        | ...    
616         fmovex          %fp0,SPRIME(%a6)          
617                                                   
618         faddd           SINA4,%fp1      | ...A    
619         eorl            %d0,SPRIME(%a6)           
620         faddd           COSB5,%fp2      | ...B    
621                                                   
622         fmulx           %fp0,%fp1        | ...    
623         fmulx           %fp0,%fp2        | ...    
624                                                   
625         faddd           SINA3,%fp1      | ...A    
626         faddd           COSB4,%fp2      | ...B    
627                                                   
628         fmulx           %fp0,%fp1        | ...    
629         fmulx           %fp0,%fp2        | ...    
630                                                   
631         faddx           SINA2,%fp1      | ...A    
632         faddx           COSB3,%fp2      | ...B    
633                                                   
634         fmulx           %fp0,%fp1        | ...    
635         fmulx           %fp0,%fp2        | ...    
636                                                   
637         faddx           SINA1,%fp1      | ...A    
638         faddx           COSB2,%fp2      | ...B    
639                                                   
640         fmulx           %fp0,%fp1        | ...    
641         fmulx           %fp2,%fp0        | ...    
642                                                   
643                                                   
644                                                   
645         fmulx           RPRIME(%a6),%fp1          
646         fadds           COSB1,%fp0      | ...B    
647         fmulx           SPRIME(%a6),%fp0          
648                                                   
649         movel           %d1,-(%sp)      |resto    
650         andil           #0xff,%d1                 
651         fmovel          %d1,%FPCR                 
652         faddx           RPRIME(%a6),%fp1          
653         bsr             sto_cos         |store    
654         fmovel          (%sp)+,%FPCR    |resto    
655         fadds           POSNEG1(%a6),%fp0         
656                                                   
657         bra             t_frcinx                  
658                                                   
659                                                   
660 NEVEN:                                            
661 |--REGISTERS SAVED SO FAR: FP2.                   
662                                                   
663         fmovex          %fp0,RPRIME(%a6)          
664         fmulx           %fp0,%fp0        | ...    
665         fmoved          COSB8,%fp1                
666         fmoved          SINA7,%fp2                
667         fmulx           %fp0,%fp1        | ...    
668         fmovex          %fp0,SPRIME(%a6)          
669         fmulx           %fp0,%fp2        | ...    
670         rorl            #1,%d0                    
671         andil           #0x80000000,%d0           
672         faddd           COSB7,%fp1      | ...B    
673         faddd           SINA6,%fp2      | ...A    
674         eorl            %d0,RPRIME(%a6)           
675         eorl            %d0,SPRIME(%a6)           
676         fmulx           %fp0,%fp1        | ...    
677         oril            #0x3F800000,%d0           
678         movel           %d0,POSNEG1(%a6)          
679         fmulx           %fp0,%fp2        | ...    
680                                                   
681         faddd           COSB6,%fp1      | ...B    
682         faddd           SINA5,%fp2      | ...A    
683                                                   
684         fmulx           %fp0,%fp1        | ...    
685         fmulx           %fp0,%fp2        | ...    
686                                                   
687         faddd           COSB5,%fp1      | ...B    
688         faddd           SINA4,%fp2      | ...A    
689                                                   
690         fmulx           %fp0,%fp1        | ...    
691         fmulx           %fp0,%fp2        | ...    
692                                                   
693         faddd           COSB4,%fp1      | ...B    
694         faddd           SINA3,%fp2      | ...A    
695                                                   
696         fmulx           %fp0,%fp1        | ...    
697         fmulx           %fp0,%fp2        | ...    
698                                                   
699         faddx           COSB3,%fp1      | ...B    
700         faddx           SINA2,%fp2      | ...A    
701                                                   
702         fmulx           %fp0,%fp1        | ...    
703         fmulx           %fp0,%fp2        | ...    
704                                                   
705         faddx           COSB2,%fp1      | ...B    
706         faddx           SINA1,%fp2      | ...A    
707                                                   
708         fmulx           %fp0,%fp1        | ...    
709         fmulx           %fp2,%fp0        | ...    
710                                                   
711                                                   
712                                                   
713         fadds           COSB1,%fp1      | ...B    
714         fmulx           RPRIME(%a6),%fp0          
715         fmulx           SPRIME(%a6),%fp1          
716                                                   
717         movel           %d1,-(%sp)      |save     
718         andil           #0xff,%d1                 
719         fmovel          %d1,%FPCR                 
720         fadds           POSNEG1(%a6),%fp1         
721         bsr             sto_cos         |store    
722         fmovel          (%sp)+,%FPCR    |resto    
723         faddx           RPRIME(%a6),%fp0          
724                                                   
725         bra             t_frcinx                  
726                                                   
727 SCBORS:                                           
728         cmpil           #0x3FFF8000,%d0           
729         bgt             REDUCEX                   
730                                                   
731                                                   
732 SCSM:                                             
733         movew           #0x0000,XDCARE(%a6)       
734         fmoves          #0x3F800000,%fp1          
735                                                   
736         movel           %d1,-(%sp)      |save     
737         andil           #0xff,%d1                 
738         fmovel          %d1,%FPCR                 
739         fsubs           #0x00800000,%fp1          
740         bsr             sto_cos         |store    
741         fmovel          (%sp)+,%FPCR    |resto    
742         fmovex          X(%a6),%fp0               
743         bra             t_frcinx                  
744                                                   
745         |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