1 /* SPDX-License-Identifier: GPL-2.0-or-later * << 2 /* Copyright (C) 1989, 1992, 1993, 1994, 1995 1 /* Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. 3 2 4 This file is part of GNU CC. 3 This file is part of GNU CC. 5 4 6 */ !! 5 GNU CC is free software; you can redistribute it and/or modify >> 6 it under the terms of the GNU General Public License as published by >> 7 the Free Software Foundation; either version 2, or (at your option) >> 8 any later version. 7 9 8 #include <linux/export.h> !! 10 GNU CC is distributed in the hope that it will be useful, >> 11 but WITHOUT ANY WARRANTY; without even the implied warranty of >> 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> 13 GNU General Public License for more details. >> 14 >> 15 You should have received a copy of the GNU General Public License >> 16 along with GNU CC; see the file COPYING. If not, write to >> 17 the Free Software Foundation, 59 Temple Place - Suite 330, >> 18 Boston, MA 02111-1307, USA. */ >> 19 >> 20 #include <asm/export.h> 9 .text 21 .text 10 .align 4 22 .align 4 11 .globl __divdi3 23 .globl __divdi3 12 __divdi3: 24 __divdi3: 13 save %sp,-104,%sp 25 save %sp,-104,%sp 14 cmp %i0,0 26 cmp %i0,0 15 bge .LL40 27 bge .LL40 16 mov 0,%l4 28 mov 0,%l4 17 mov -1,%l4 29 mov -1,%l4 18 sub %g0,%i1,%o0 30 sub %g0,%i1,%o0 19 mov %o0,%o5 31 mov %o0,%o5 20 subcc %g0,%o0,%g0 32 subcc %g0,%o0,%g0 21 sub %g0,%i0,%o0 33 sub %g0,%i0,%o0 22 subx %o0,0,%o4 34 subx %o0,0,%o4 23 mov %o4,%i0 35 mov %o4,%i0 24 mov %o5,%i1 36 mov %o5,%i1 25 .LL40: 37 .LL40: 26 cmp %i2,0 38 cmp %i2,0 27 bge .LL84 39 bge .LL84 28 mov %i3,%o4 40 mov %i3,%o4 29 xnor %g0,%l4,%l4 41 xnor %g0,%l4,%l4 30 sub %g0,%i3,%o0 42 sub %g0,%i3,%o0 31 mov %o0,%o3 43 mov %o0,%o3 32 subcc %g0,%o0,%g0 44 subcc %g0,%o0,%g0 33 sub %g0,%i2,%o0 45 sub %g0,%i2,%o0 34 subx %o0,0,%o2 46 subx %o0,0,%o2 35 mov %o2,%i2 47 mov %o2,%i2 36 mov %o3,%i3 48 mov %o3,%i3 37 mov %i3,%o4 49 mov %i3,%o4 38 .LL84: 50 .LL84: 39 cmp %i2,0 51 cmp %i2,0 40 bne .LL45 52 bne .LL45 41 mov %i1,%i3 53 mov %i1,%i3 42 cmp %o4,%i0 54 cmp %o4,%i0 43 bleu .LL46 55 bleu .LL46 44 mov %i3,%o1 56 mov %i3,%o1 45 mov 32,%g1 57 mov 32,%g1 46 subcc %i0,%o4,%g0 58 subcc %i0,%o4,%g0 47 1: bcs 5f 59 1: bcs 5f 48 addxcc %o1,%o1,%o1 ! shift n1n0 a 60 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb 49 sub %i0,%o4,%i0 ! this kills m 61 sub %i0,%o4,%i0 ! this kills msb of n 50 addx %i0,%i0,%i0 ! so this cann 62 addx %i0,%i0,%i0 ! so this cannot give carry 51 subcc %g1,1,%g1 63 subcc %g1,1,%g1 52 2: bne 1b 64 2: bne 1b 53 subcc %i0,%o4,%g0 65 subcc %i0,%o4,%g0 54 bcs 3f 66 bcs 3f 55 addxcc %o1,%o1,%o1 ! shift n1n0 a 67 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb 56 b 3f 68 b 3f 57 sub %i0,%o4,%i0 ! this kills m 69 sub %i0,%o4,%i0 ! this kills msb of n 58 4: sub %i0,%o4,%i0 70 4: sub %i0,%o4,%i0 59 5: addxcc %i0,%i0,%i0 71 5: addxcc %i0,%i0,%i0 60 bcc 2b 72 bcc 2b 61 subcc %g1,1,%g1 73 subcc %g1,1,%g1 62 ! Got carry from n. Subtract next step to can 74 ! Got carry from n. Subtract next step to cancel this carry. 63 bne 4b 75 bne 4b 64 addcc %o1,%o1,%o1 ! shift n1n0 a 76 addcc %o1,%o1,%o1 ! shift n1n0 and a 0-bit in lsb 65 sub %i0,%o4,%i0 77 sub %i0,%o4,%i0 66 3: xnor %o1,0,%o1 78 3: xnor %o1,0,%o1 67 b .LL50 79 b .LL50 68 mov 0,%o2 80 mov 0,%o2 69 .LL46: 81 .LL46: 70 cmp %o4,0 82 cmp %o4,0 71 bne .LL85 83 bne .LL85 72 mov %i0,%o2 84 mov %i0,%o2 73 mov 1,%o0 85 mov 1,%o0 74 mov 0,%o1 86 mov 0,%o1 75 wr %g0, 0, %y 87 wr %g0, 0, %y 76 udiv %o0, %o1, %o0 88 udiv %o0, %o1, %o0 77 mov %o0,%o4 89 mov %o0,%o4 78 mov %i0,%o2 90 mov %i0,%o2 79 .LL85: 91 .LL85: 80 mov 0,%g3 92 mov 0,%g3 81 mov 32,%g1 93 mov 32,%g1 82 subcc %g3,%o4,%g0 94 subcc %g3,%o4,%g0 83 1: bcs 5f 95 1: bcs 5f 84 addxcc %o2,%o2,%o2 ! shift n1n0 a 96 addxcc %o2,%o2,%o2 ! shift n1n0 and a q-bit in lsb 85 sub %g3,%o4,%g3 ! this kills m 97 sub %g3,%o4,%g3 ! this kills msb of n 86 addx %g3,%g3,%g3 ! so this cann 98 addx %g3,%g3,%g3 ! so this cannot give carry 87 subcc %g1,1,%g1 99 subcc %g1,1,%g1 88 2: bne 1b 100 2: bne 1b 89 subcc %g3,%o4,%g0 101 subcc %g3,%o4,%g0 90 bcs 3f 102 bcs 3f 91 addxcc %o2,%o2,%o2 ! shift n1n0 a 103 addxcc %o2,%o2,%o2 ! shift n1n0 and a q-bit in lsb 92 b 3f 104 b 3f 93 sub %g3,%o4,%g3 ! this kills m 105 sub %g3,%o4,%g3 ! this kills msb of n 94 4: sub %g3,%o4,%g3 106 4: sub %g3,%o4,%g3 95 5: addxcc %g3,%g3,%g3 107 5: addxcc %g3,%g3,%g3 96 bcc 2b 108 bcc 2b 97 subcc %g1,1,%g1 109 subcc %g1,1,%g1 98 ! Got carry from n. Subtract next step to can 110 ! Got carry from n. Subtract next step to cancel this carry. 99 bne 4b 111 bne 4b 100 addcc %o2,%o2,%o2 ! shift n1n0 a 112 addcc %o2,%o2,%o2 ! shift n1n0 and a 0-bit in lsb 101 sub %g3,%o4,%g3 113 sub %g3,%o4,%g3 102 3: xnor %o2,0,%o2 114 3: xnor %o2,0,%o2 103 mov %g3,%i0 115 mov %g3,%i0 104 mov %i3,%o1 116 mov %i3,%o1 105 mov 32,%g1 117 mov 32,%g1 106 subcc %i0,%o4,%g0 118 subcc %i0,%o4,%g0 107 1: bcs 5f 119 1: bcs 5f 108 addxcc %o1,%o1,%o1 ! shift n1n0 a 120 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb 109 sub %i0,%o4,%i0 ! this kills m 121 sub %i0,%o4,%i0 ! this kills msb of n 110 addx %i0,%i0,%i0 ! so this cann 122 addx %i0,%i0,%i0 ! so this cannot give carry 111 subcc %g1,1,%g1 123 subcc %g1,1,%g1 112 2: bne 1b 124 2: bne 1b 113 subcc %i0,%o4,%g0 125 subcc %i0,%o4,%g0 114 bcs 3f 126 bcs 3f 115 addxcc %o1,%o1,%o1 ! shift n1n0 a 127 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb 116 b 3f 128 b 3f 117 sub %i0,%o4,%i0 ! this kills m 129 sub %i0,%o4,%i0 ! this kills msb of n 118 4: sub %i0,%o4,%i0 130 4: sub %i0,%o4,%i0 119 5: addxcc %i0,%i0,%i0 131 5: addxcc %i0,%i0,%i0 120 bcc 2b 132 bcc 2b 121 subcc %g1,1,%g1 133 subcc %g1,1,%g1 122 ! Got carry from n. Subtract next step to can 134 ! Got carry from n. Subtract next step to cancel this carry. 123 bne 4b 135 bne 4b 124 addcc %o1,%o1,%o1 ! shift n1n0 a 136 addcc %o1,%o1,%o1 ! shift n1n0 and a 0-bit in lsb 125 sub %i0,%o4,%i0 137 sub %i0,%o4,%i0 126 3: xnor %o1,0,%o1 138 3: xnor %o1,0,%o1 127 b .LL86 139 b .LL86 128 mov %o1,%l1 140 mov %o1,%l1 129 .LL45: 141 .LL45: 130 cmp %i2,%i0 142 cmp %i2,%i0 131 bleu .LL51 143 bleu .LL51 132 sethi %hi(65535),%o0 144 sethi %hi(65535),%o0 133 b .LL78 145 b .LL78 134 mov 0,%o1 146 mov 0,%o1 135 .LL51: 147 .LL51: 136 or %o0,%lo(65535),%o0 148 or %o0,%lo(65535),%o0 137 cmp %i2,%o0 149 cmp %i2,%o0 138 bgu .LL58 150 bgu .LL58 139 mov %i2,%o1 151 mov %i2,%o1 140 cmp %i2,256 152 cmp %i2,256 141 addx %g0,-1,%o0 153 addx %g0,-1,%o0 142 b .LL64 154 b .LL64 143 and %o0,8,%o2 155 and %o0,8,%o2 144 .LL58: 156 .LL58: 145 sethi %hi(16777215),%o0 157 sethi %hi(16777215),%o0 146 or %o0,%lo(16777215),%o0 158 or %o0,%lo(16777215),%o0 147 cmp %i2,%o0 159 cmp %i2,%o0 148 bgu .LL64 160 bgu .LL64 149 mov 24,%o2 161 mov 24,%o2 150 mov 16,%o2 162 mov 16,%o2 151 .LL64: 163 .LL64: 152 srl %o1,%o2,%o0 164 srl %o1,%o2,%o0 153 sethi %hi(__clz_tab),%o1 165 sethi %hi(__clz_tab),%o1 154 or %o1,%lo(__clz_tab),%o1 166 or %o1,%lo(__clz_tab),%o1 155 ldub [%o0+%o1],%o0 167 ldub [%o0+%o1],%o0 156 add %o0,%o2,%o0 168 add %o0,%o2,%o0 157 mov 32,%o1 169 mov 32,%o1 158 subcc %o1,%o0,%o3 170 subcc %o1,%o0,%o3 159 bne,a .LL72 171 bne,a .LL72 160 sub %o1,%o3,%o1 172 sub %o1,%o3,%o1 161 cmp %i0,%i2 173 cmp %i0,%i2 162 bgu .LL74 174 bgu .LL74 163 cmp %i3,%o4 175 cmp %i3,%o4 164 blu .LL78 176 blu .LL78 165 mov 0,%o1 177 mov 0,%o1 166 .LL74: 178 .LL74: 167 b .LL78 179 b .LL78 168 mov 1,%o1 180 mov 1,%o1 169 .LL72: 181 .LL72: 170 sll %i2,%o3,%o2 182 sll %i2,%o3,%o2 171 srl %o4,%o1,%o0 183 srl %o4,%o1,%o0 172 or %o2,%o0,%i2 184 or %o2,%o0,%i2 173 sll %o4,%o3,%o4 185 sll %o4,%o3,%o4 174 srl %i0,%o1,%o2 186 srl %i0,%o1,%o2 175 sll %i0,%o3,%o0 187 sll %i0,%o3,%o0 176 srl %i3,%o1,%o1 188 srl %i3,%o1,%o1 177 or %o0,%o1,%i0 189 or %o0,%o1,%i0 178 sll %i3,%o3,%i3 190 sll %i3,%o3,%i3 179 mov %i0,%o1 191 mov %i0,%o1 180 mov 32,%g1 192 mov 32,%g1 181 subcc %o2,%i2,%g0 193 subcc %o2,%i2,%g0 182 1: bcs 5f 194 1: bcs 5f 183 addxcc %o1,%o1,%o1 ! shift n1n0 a 195 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb 184 sub %o2,%i2,%o2 ! this kills m 196 sub %o2,%i2,%o2 ! this kills msb of n 185 addx %o2,%o2,%o2 ! so this cann 197 addx %o2,%o2,%o2 ! so this cannot give carry 186 subcc %g1,1,%g1 198 subcc %g1,1,%g1 187 2: bne 1b 199 2: bne 1b 188 subcc %o2,%i2,%g0 200 subcc %o2,%i2,%g0 189 bcs 3f 201 bcs 3f 190 addxcc %o1,%o1,%o1 ! shift n1n0 a 202 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb 191 b 3f 203 b 3f 192 sub %o2,%i2,%o2 ! this kills m 204 sub %o2,%i2,%o2 ! this kills msb of n 193 4: sub %o2,%i2,%o2 205 4: sub %o2,%i2,%o2 194 5: addxcc %o2,%o2,%o2 206 5: addxcc %o2,%o2,%o2 195 bcc 2b 207 bcc 2b 196 subcc %g1,1,%g1 208 subcc %g1,1,%g1 197 ! Got carry from n. Subtract next step to can 209 ! Got carry from n. Subtract next step to cancel this carry. 198 bne 4b 210 bne 4b 199 addcc %o1,%o1,%o1 ! shift n1n0 a 211 addcc %o1,%o1,%o1 ! shift n1n0 and a 0-bit in lsb 200 sub %o2,%i2,%o2 212 sub %o2,%i2,%o2 201 3: xnor %o1,0,%o1 213 3: xnor %o1,0,%o1 202 mov %o2,%i0 214 mov %o2,%i0 203 wr %g0,%o1,%y ! SPARC has 0- 215 wr %g0,%o1,%y ! SPARC has 0-3 delay insn after a wr 204 sra %o4,31,%g2 ! Do not move 216 sra %o4,31,%g2 ! Do not move this insn 205 and %o1,%g2,%g2 ! Do not move 217 and %o1,%g2,%g2 ! Do not move this insn 206 andcc %g0,0,%g1 ! Do not move 218 andcc %g0,0,%g1 ! Do not move this insn 207 mulscc %g1,%o4,%g1 219 mulscc %g1,%o4,%g1 208 mulscc %g1,%o4,%g1 220 mulscc %g1,%o4,%g1 209 mulscc %g1,%o4,%g1 221 mulscc %g1,%o4,%g1 210 mulscc %g1,%o4,%g1 222 mulscc %g1,%o4,%g1 211 mulscc %g1,%o4,%g1 223 mulscc %g1,%o4,%g1 212 mulscc %g1,%o4,%g1 224 mulscc %g1,%o4,%g1 213 mulscc %g1,%o4,%g1 225 mulscc %g1,%o4,%g1 214 mulscc %g1,%o4,%g1 226 mulscc %g1,%o4,%g1 215 mulscc %g1,%o4,%g1 227 mulscc %g1,%o4,%g1 216 mulscc %g1,%o4,%g1 228 mulscc %g1,%o4,%g1 217 mulscc %g1,%o4,%g1 229 mulscc %g1,%o4,%g1 218 mulscc %g1,%o4,%g1 230 mulscc %g1,%o4,%g1 219 mulscc %g1,%o4,%g1 231 mulscc %g1,%o4,%g1 220 mulscc %g1,%o4,%g1 232 mulscc %g1,%o4,%g1 221 mulscc %g1,%o4,%g1 233 mulscc %g1,%o4,%g1 222 mulscc %g1,%o4,%g1 234 mulscc %g1,%o4,%g1 223 mulscc %g1,%o4,%g1 235 mulscc %g1,%o4,%g1 224 mulscc %g1,%o4,%g1 236 mulscc %g1,%o4,%g1 225 mulscc %g1,%o4,%g1 237 mulscc %g1,%o4,%g1 226 mulscc %g1,%o4,%g1 238 mulscc %g1,%o4,%g1 227 mulscc %g1,%o4,%g1 239 mulscc %g1,%o4,%g1 228 mulscc %g1,%o4,%g1 240 mulscc %g1,%o4,%g1 229 mulscc %g1,%o4,%g1 241 mulscc %g1,%o4,%g1 230 mulscc %g1,%o4,%g1 242 mulscc %g1,%o4,%g1 231 mulscc %g1,%o4,%g1 243 mulscc %g1,%o4,%g1 232 mulscc %g1,%o4,%g1 244 mulscc %g1,%o4,%g1 233 mulscc %g1,%o4,%g1 245 mulscc %g1,%o4,%g1 234 mulscc %g1,%o4,%g1 246 mulscc %g1,%o4,%g1 235 mulscc %g1,%o4,%g1 247 mulscc %g1,%o4,%g1 236 mulscc %g1,%o4,%g1 248 mulscc %g1,%o4,%g1 237 mulscc %g1,%o4,%g1 249 mulscc %g1,%o4,%g1 238 mulscc %g1,%o4,%g1 250 mulscc %g1,%o4,%g1 239 mulscc %g1,0,%g1 251 mulscc %g1,0,%g1 240 add %g1,%g2,%o0 252 add %g1,%g2,%o0 241 rd %y,%o2 253 rd %y,%o2 242 cmp %o0,%i0 254 cmp %o0,%i0 243 bgu,a .LL78 255 bgu,a .LL78 244 add %o1,-1,%o1 256 add %o1,-1,%o1 245 bne,a .LL50 257 bne,a .LL50 246 mov 0,%o2 258 mov 0,%o2 247 cmp %o2,%i3 259 cmp %o2,%i3 248 bleu .LL50 260 bleu .LL50 249 mov 0,%o2 261 mov 0,%o2 250 add %o1,-1,%o1 262 add %o1,-1,%o1 251 .LL78: 263 .LL78: 252 mov 0,%o2 264 mov 0,%o2 253 .LL50: 265 .LL50: 254 mov %o1,%l1 266 mov %o1,%l1 255 .LL86: 267 .LL86: 256 mov %o2,%l0 268 mov %o2,%l0 257 mov %l0,%i0 269 mov %l0,%i0 258 mov %l1,%i1 270 mov %l1,%i1 259 cmp %l4,0 271 cmp %l4,0 260 be .LL81 272 be .LL81 261 sub %g0,%i1,%o0 273 sub %g0,%i1,%o0 262 mov %o0,%l3 274 mov %o0,%l3 263 subcc %g0,%o0,%g0 275 subcc %g0,%o0,%g0 264 sub %g0,%i0,%o0 276 sub %g0,%i0,%o0 265 subx %o0,0,%l2 277 subx %o0,0,%l2 266 mov %l2,%i0 278 mov %l2,%i0 267 mov %l3,%i1 279 mov %l3,%i1 268 .LL81: 280 .LL81: 269 ret 281 ret 270 restore 282 restore 271 EXPORT_SYMBOL(__divdi3) 283 EXPORT_SYMBOL(__divdi3)
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.