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

TOMOYO Linux Cross Reference
Linux/arch/m68k/lib/udivsi3.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/lib/udivsi3.S (Version linux-6.12-rc7) and /arch/ppc/lib/udivsi3.S (Version linux-2.6.32.71)


  1 /* libgcc1 routines for 68000 w/o floating-poi    
  2    Copyright (C) 1994, 1996, 1997, 1998 Free S    
  3                                                   
  4 This file is part of GNU CC.                      
  5                                                   
  6 GNU CC is free software; you can redistribute     
  7 under the terms of the GNU General Public Lice    
  8 Free Software Foundation; either version 2, or    
  9 later version.                                    
 10                                                   
 11 In addition to the permissions in the GNU Gene    
 12 Free Software Foundation gives you unlimited p    
 13 compiled version of this file with other progr    
 14 those programs without any restriction coming     
 15 file.  (The General Public License restriction    
 16 respects; for example, they cover modification    
 17 distribution when not linked into another prog    
 18                                                   
 19 This file is distributed in the hope that it w    
 20 WITHOUT ANY WARRANTY; without even the implied    
 21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PU    
 22 General Public License for more details. */       
 23                                                   
 24 /* As a special exception, if you link this li    
 25    compiled with GCC to produce an executable,    
 26    the resulting executable to be covered by t    
 27    This exception does not however invalidate     
 28    the executable file might be covered by the    
 29                                                   
 30 /* Use this one for any 680x0; assumes no floa    
 31    The trailing " '" appearing on some lines i    
 32    Some of this code comes from MINIX, via the    
 33    D. V. Henkel-Wallace (gumby@cygnus.com) Fet    
 34 */                                                
 35 #include <linux/export.h>                         
 36 /* These are predefined by new versions of GNU    
 37                                                   
 38 #ifndef __USER_LABEL_PREFIX__                     
 39 #define __USER_LABEL_PREFIX__ _                   
 40 #endif                                            
 41                                                   
 42 #ifndef __REGISTER_PREFIX__                       
 43 #define __REGISTER_PREFIX__                       
 44 #endif                                            
 45                                                   
 46 #ifndef __IMMEDIATE_PREFIX__                      
 47 #define __IMMEDIATE_PREFIX__ #                    
 48 #endif                                            
 49                                                   
 50 /* ANSI concatenation macros.  */                 
 51                                                   
 52 #define CONCAT1(a, b) CONCAT2(a, b)               
 53 #define CONCAT2(a, b) a ## b                      
 54                                                   
 55 /* Use the right prefix for global labels.  */    
 56                                                   
 57 #define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__,    
 58                                                   
 59 /* Use the right prefix for registers.  */        
 60                                                   
 61 #define REG(x) CONCAT1 (__REGISTER_PREFIX__, x    
 62                                                   
 63 /* Use the right prefix for immediate values.     
 64                                                   
 65 #define IMM(x) CONCAT1 (__IMMEDIATE_PREFIX__,     
 66                                                   
 67 #define d0 REG (d0)                               
 68 #define d1 REG (d1)                               
 69 #define d2 REG (d2)                               
 70 #define d3 REG (d3)                               
 71 #define d4 REG (d4)                               
 72 #define d5 REG (d5)                               
 73 #define d6 REG (d6)                               
 74 #define d7 REG (d7)                               
 75 #define a0 REG (a0)                               
 76 #define a1 REG (a1)                               
 77 #define a2 REG (a2)                               
 78 #define a3 REG (a3)                               
 79 #define a4 REG (a4)                               
 80 #define a5 REG (a5)                               
 81 #define a6 REG (a6)                               
 82 #define fp REG (fp)                               
 83 #define sp REG (sp)                               
 84                                                   
 85         .text                                     
 86         .proc                                     
 87         .globl  SYM (__udivsi3)                   
 88 SYM (__udivsi3):                                  
 89 #if !(defined(__mcf5200__) || defined(__mcoldf    
 90         movel   d2, sp@-                          
 91         movel   sp@(12), d1     /* d1 = diviso    
 92         movel   sp@(8), d0      /* d0 = divide    
 93                                                   
 94         cmpl    IMM (0x10000), d1 /* divisor >    
 95         jcc     L3              /* then try ne    
 96         movel   d0, d2                            
 97         clrw    d2                                
 98         swap    d2                                
 99         divu    d1, d2          /* high quotie    
100         movew   d2, d0          /* save high q    
101         swap    d0                                
102         movew   sp@(10), d2     /* get low div    
103         divu    d1, d2          /* low quotien    
104         movew   d2, d0                            
105         jra     L6                                
106                                                   
107 L3:     movel   d1, d2          /* use d2 as d    
108 L4:     lsrl    IMM (1), d1     /* shift divis    
109         lsrl    IMM (1), d0     /* shift divid    
110         cmpl    IMM (0x10000), d1 /* still div    
111         jcc     L4                                
112         divu    d1, d0          /* now we have    
113         andl    IMM (0xffff), d0 /* mask out d    
114                                                   
115 /* Multiply the 16 bit tentative quotient with    
116    the operand ranges, this might give a 33 bi    
117    greater than the dividend, the tentative qu    
118         movel   d2, d1                            
119         mulu    d0, d1          /* low part, 3    
120         swap    d2                                
121         mulu    d0, d2          /* high part,     
122         swap    d2              /* align high     
123         tstw    d2              /* high part 1    
124         jne     L5              /* if 17 bits,    
125         addl    d2, d1          /* add parts *    
126         jcs     L5              /* if sum is 3    
127         cmpl    sp@(8), d1      /* compare the    
128         jls     L6              /* if sum > di    
129 L5:     subql   IMM (1), d0     /* adjust quot    
130                                                   
131 L6:     movel   sp@+, d2                          
132         rts                                       
133                                                   
134 #else /* __mcf5200__ || __mcoldfire__ */          
135                                                   
136 /* Coldfire implementation of non-restoring di    
137    Hennessy & Patterson, Appendix A. */           
138         link    a6,IMM (-12)                      
139         moveml  d2-d4,sp@                         
140         movel   a6@(8),d0                         
141         movel   a6@(12),d1                        
142         clrl    d2              | clear p         
143         moveq   IMM (31),d4                       
144 L1:     addl    d0,d0           | shift reg pa    
145         addxl   d2,d2                             
146         movl    d2,d3           | subtract b f    
147         subl    d1,d3                             
148         jcs     L2              | if no carry,    
149         bset    IMM (0),d0      | set the low     
150         movl    d3,d2           | and store tm    
151 L2:     subql   IMM (1),d4                        
152         jcc     L1                                
153         moveml  sp@,d2-d4       | restore data    
154         unlk    a6              | and return      
155         rts                                       
156 #endif /* __mcf5200__ || __mcoldfire__ */         
157         EXPORT_SYMBOL(__udivsi3)                  
                                                      

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