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

TOMOYO Linux Cross Reference
Linux/arch/sparc/lib/udivdi3.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 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-or-later */
  2 /* Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
  3 
  4 This file is part of GNU CC.
  5 
  6  */
  7 
  8         .text
  9         .align 4
 10         .globl __udivdi3
 11 __udivdi3:
 12         save %sp,-104,%sp
 13         mov %i3,%o3
 14         cmp %i2,0
 15         bne .LL40
 16         mov %i1,%i3
 17         cmp %o3,%i0
 18         bleu .LL41
 19         mov %i3,%o1
 20         ! Inlined udiv_qrnnd
 21         mov     32,%g1
 22         subcc   %i0,%o3,%g0
 23 1:      bcs     5f
 24          addxcc %o1,%o1,%o1     ! shift n1n0 and a q-bit in lsb
 25         sub     %i0,%o3,%i0     ! this kills msb of n
 26         addx    %i0,%i0,%i0     ! so this cannot give carry
 27         subcc   %g1,1,%g1
 28 2:      bne     1b
 29          subcc  %i0,%o3,%g0
 30         bcs     3f
 31          addxcc %o1,%o1,%o1     ! shift n1n0 and a q-bit in lsb
 32         b       3f
 33          sub    %i0,%o3,%i0     ! this kills msb of n
 34 4:      sub     %i0,%o3,%i0
 35 5:      addxcc  %i0,%i0,%i0
 36         bcc     2b
 37          subcc  %g1,1,%g1
 38 ! Got carry from n.  Subtract next step to cancel this carry.
 39         bne     4b
 40          addcc  %o1,%o1,%o1     ! shift n1n0 and a 0-bit in lsb
 41         sub     %i0,%o3,%i0
 42 3:      xnor    %o1,0,%o1
 43         ! End of inline udiv_qrnnd
 44         b .LL45
 45         mov 0,%o2
 46 .LL41:
 47         cmp %o3,0
 48         bne .LL77
 49         mov %i0,%o2
 50         mov 1,%o0
 51         mov 0,%o1
 52         wr %g0, 0, %y
 53         udiv %o0, %o1, %o0
 54         mov %o0,%o3
 55         mov %i0,%o2
 56 .LL77:
 57         mov 0,%o4
 58         ! Inlined udiv_qrnnd
 59         mov     32,%g1
 60         subcc   %o4,%o3,%g0
 61 1:      bcs     5f
 62          addxcc %o2,%o2,%o2     ! shift n1n0 and a q-bit in lsb
 63         sub     %o4,%o3,%o4     ! this kills msb of n
 64         addx    %o4,%o4,%o4     ! so this cannot give carry
 65         subcc   %g1,1,%g1
 66 2:      bne     1b
 67          subcc  %o4,%o3,%g0
 68         bcs     3f
 69          addxcc %o2,%o2,%o2     ! shift n1n0 and a q-bit in lsb
 70         b       3f
 71          sub    %o4,%o3,%o4     ! this kills msb of n
 72 4:      sub     %o4,%o3,%o4
 73 5:      addxcc  %o4,%o4,%o4
 74         bcc     2b
 75          subcc  %g1,1,%g1
 76 ! Got carry from n.  Subtract next step to cancel this carry.
 77         bne     4b
 78          addcc  %o2,%o2,%o2     ! shift n1n0 and a 0-bit in lsb
 79         sub     %o4,%o3,%o4
 80 3:      xnor    %o2,0,%o2
 81         ! End of inline udiv_qrnnd
 82         mov %o4,%i0
 83         mov %i3,%o1
 84         ! Inlined udiv_qrnnd
 85         mov     32,%g1
 86         subcc   %i0,%o3,%g0
 87 1:      bcs     5f
 88          addxcc %o1,%o1,%o1     ! shift n1n0 and a q-bit in lsb
 89         sub     %i0,%o3,%i0     ! this kills msb of n
 90         addx    %i0,%i0,%i0     ! so this cannot give carry
 91         subcc   %g1,1,%g1
 92 2:      bne     1b
 93          subcc  %i0,%o3,%g0
 94         bcs     3f
 95          addxcc %o1,%o1,%o1     ! shift n1n0 and a q-bit in lsb
 96         b       3f
 97          sub    %i0,%o3,%i0     ! this kills msb of n
 98 4:      sub     %i0,%o3,%i0
 99 5:      addxcc  %i0,%i0,%i0
100         bcc     2b
101          subcc  %g1,1,%g1
102 ! Got carry from n.  Subtract next step to cancel this carry.
103         bne     4b
104          addcc  %o1,%o1,%o1     ! shift n1n0 and a 0-bit in lsb
105         sub     %i0,%o3,%i0
106 3:      xnor    %o1,0,%o1
107         ! End of inline udiv_qrnnd
108         b .LL78
109         mov %o1,%l1
110 .LL40:
111         cmp %i2,%i0
112         bleu .LL46
113         sethi %hi(65535),%o0
114         b .LL73
115         mov 0,%o1
116 .LL46:
117         or %o0,%lo(65535),%o0
118         cmp %i2,%o0
119         bgu .LL53
120         mov %i2,%o1
121         cmp %i2,256
122         addx %g0,-1,%o0
123         b .LL59
124         and %o0,8,%o2
125 .LL53:
126         sethi %hi(16777215),%o0
127         or %o0,%lo(16777215),%o0
128         cmp %o1,%o0
129         bgu .LL59
130         mov 24,%o2
131         mov 16,%o2
132 .LL59:
133         srl %o1,%o2,%o1
134         sethi %hi(__clz_tab),%o0
135         or %o0,%lo(__clz_tab),%o0
136         ldub [%o1+%o0],%o0
137         add %o0,%o2,%o0
138         mov 32,%o1
139         subcc %o1,%o0,%o2
140         bne,a .LL67
141         mov 32,%o0
142         cmp %i0,%i2
143         bgu .LL69
144         cmp %i3,%o3
145         blu .LL73
146         mov 0,%o1
147 .LL69:
148         b .LL73
149         mov 1,%o1
150 .LL67:
151         sub %o0,%o2,%o0
152         sll %i2,%o2,%i2
153         srl %o3,%o0,%o1
154         or %i2,%o1,%i2
155         sll %o3,%o2,%o3
156         srl %i0,%o0,%o1
157         sll %i0,%o2,%i0
158         srl %i3,%o0,%o0
159         or %i0,%o0,%i0
160         sll %i3,%o2,%i3
161         mov %i0,%o5
162         mov %o1,%o4
163         ! Inlined udiv_qrnnd
164         mov     32,%g1
165         subcc   %o4,%i2,%g0
166 1:      bcs     5f
167          addxcc %o5,%o5,%o5     ! shift n1n0 and a q-bit in lsb
168         sub     %o4,%i2,%o4     ! this kills msb of n
169         addx    %o4,%o4,%o4     ! so this cannot give carry
170         subcc   %g1,1,%g1
171 2:      bne     1b
172          subcc  %o4,%i2,%g0
173         bcs     3f
174          addxcc %o5,%o5,%o5     ! shift n1n0 and a q-bit in lsb
175         b       3f
176          sub    %o4,%i2,%o4     ! this kills msb of n
177 4:      sub     %o4,%i2,%o4
178 5:      addxcc  %o4,%o4,%o4
179         bcc     2b
180          subcc  %g1,1,%g1
181 ! Got carry from n.  Subtract next step to cancel this carry.
182         bne     4b
183          addcc  %o5,%o5,%o5     ! shift n1n0 and a 0-bit in lsb
184         sub     %o4,%i2,%o4
185 3:      xnor    %o5,0,%o5
186         ! End of inline udiv_qrnnd
187         mov %o4,%i0
188         mov %o5,%o1
189         ! Inlined umul_ppmm
190         wr      %g0,%o1,%y      ! SPARC has 0-3 delay insn after a wr
191         sra     %o3,31,%g2      ! Do not move this insn
192         and     %o1,%g2,%g2     ! Do not move this insn
193         andcc   %g0,0,%g1       ! Do not move this insn
194         mulscc  %g1,%o3,%g1
195         mulscc  %g1,%o3,%g1
196         mulscc  %g1,%o3,%g1
197         mulscc  %g1,%o3,%g1
198         mulscc  %g1,%o3,%g1
199         mulscc  %g1,%o3,%g1
200         mulscc  %g1,%o3,%g1
201         mulscc  %g1,%o3,%g1
202         mulscc  %g1,%o3,%g1
203         mulscc  %g1,%o3,%g1
204         mulscc  %g1,%o3,%g1
205         mulscc  %g1,%o3,%g1
206         mulscc  %g1,%o3,%g1
207         mulscc  %g1,%o3,%g1
208         mulscc  %g1,%o3,%g1
209         mulscc  %g1,%o3,%g1
210         mulscc  %g1,%o3,%g1
211         mulscc  %g1,%o3,%g1
212         mulscc  %g1,%o3,%g1
213         mulscc  %g1,%o3,%g1
214         mulscc  %g1,%o3,%g1
215         mulscc  %g1,%o3,%g1
216         mulscc  %g1,%o3,%g1
217         mulscc  %g1,%o3,%g1
218         mulscc  %g1,%o3,%g1
219         mulscc  %g1,%o3,%g1
220         mulscc  %g1,%o3,%g1
221         mulscc  %g1,%o3,%g1
222         mulscc  %g1,%o3,%g1
223         mulscc  %g1,%o3,%g1
224         mulscc  %g1,%o3,%g1
225         mulscc  %g1,%o3,%g1
226         mulscc  %g1,0,%g1
227         add     %g1,%g2,%o0
228         rd      %y,%o2
229         cmp %o0,%i0
230         bgu,a .LL73
231         add %o1,-1,%o1
232         bne,a .LL45
233         mov 0,%o2
234         cmp %o2,%i3
235         bleu .LL45
236         mov 0,%o2
237         add %o1,-1,%o1
238 .LL73:
239         mov 0,%o2
240 .LL45:
241         mov %o1,%l1
242 .LL78:
243         mov %o2,%l0
244         mov %l0,%i0
245         mov %l1,%i1
246         ret
247         restore

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