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