github.com/aergoio/aergo@v1.3.1/libtool/src/gmp-6.1.2/mpn/pa32/udiv.asm (about) 1 dnl HP-PA __udiv_qrnnd division support, used from longlong.h. 2 dnl This version runs fast on pre-PA7000 CPUs. 3 4 dnl Copyright 1993, 1994, 2000-2002 Free Software Foundation, Inc. 5 6 dnl This file is part of the GNU MP Library. 7 dnl 8 dnl The GNU MP Library is free software; you can redistribute it and/or modify 9 dnl it under the terms of either: 10 dnl 11 dnl * the GNU Lesser General Public License as published by the Free 12 dnl Software Foundation; either version 3 of the License, or (at your 13 dnl option) any later version. 14 dnl 15 dnl or 16 dnl 17 dnl * the GNU General Public License as published by the Free Software 18 dnl Foundation; either version 2 of the License, or (at your option) any 19 dnl later version. 20 dnl 21 dnl or both in parallel, as here. 22 dnl 23 dnl The GNU MP Library is distributed in the hope that it will be useful, but 24 dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 25 dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 26 dnl for more details. 27 dnl 28 dnl You should have received copies of the GNU General Public License and the 29 dnl GNU Lesser General Public License along with the GNU MP Library. If not, 30 dnl see https://www.gnu.org/licenses/. 31 32 include(`../config.m4') 33 34 C INPUT PARAMETERS 35 C rem_ptr gr26 36 C n1 gr25 37 C n0 gr24 38 C d gr23 39 40 C The code size is a bit excessive. We could merge the last two ds;addc 41 C sequences by simply moving the "bb,< Odd" instruction down. The only 42 C trouble is the FFFFFFFF code that would need some hacking. 43 44 ASM_START() 45 PROLOGUE(mpn_udiv_qrnnd) 46 comb,< %r23,0,L(largedivisor) 47 sub %r0,%r23,%r1 C clear cy as side-effect 48 ds %r0,%r1,%r0 49 addc %r24,%r24,%r24 50 ds %r25,%r23,%r25 51 addc %r24,%r24,%r24 52 ds %r25,%r23,%r25 53 addc %r24,%r24,%r24 54 ds %r25,%r23,%r25 55 addc %r24,%r24,%r24 56 ds %r25,%r23,%r25 57 addc %r24,%r24,%r24 58 ds %r25,%r23,%r25 59 addc %r24,%r24,%r24 60 ds %r25,%r23,%r25 61 addc %r24,%r24,%r24 62 ds %r25,%r23,%r25 63 addc %r24,%r24,%r24 64 ds %r25,%r23,%r25 65 addc %r24,%r24,%r24 66 ds %r25,%r23,%r25 67 addc %r24,%r24,%r24 68 ds %r25,%r23,%r25 69 addc %r24,%r24,%r24 70 ds %r25,%r23,%r25 71 addc %r24,%r24,%r24 72 ds %r25,%r23,%r25 73 addc %r24,%r24,%r24 74 ds %r25,%r23,%r25 75 addc %r24,%r24,%r24 76 ds %r25,%r23,%r25 77 addc %r24,%r24,%r24 78 ds %r25,%r23,%r25 79 addc %r24,%r24,%r24 80 ds %r25,%r23,%r25 81 addc %r24,%r24,%r24 82 ds %r25,%r23,%r25 83 addc %r24,%r24,%r24 84 ds %r25,%r23,%r25 85 addc %r24,%r24,%r24 86 ds %r25,%r23,%r25 87 addc %r24,%r24,%r24 88 ds %r25,%r23,%r25 89 addc %r24,%r24,%r24 90 ds %r25,%r23,%r25 91 addc %r24,%r24,%r24 92 ds %r25,%r23,%r25 93 addc %r24,%r24,%r24 94 ds %r25,%r23,%r25 95 addc %r24,%r24,%r24 96 ds %r25,%r23,%r25 97 addc %r24,%r24,%r24 98 ds %r25,%r23,%r25 99 addc %r24,%r24,%r24 100 ds %r25,%r23,%r25 101 addc %r24,%r24,%r24 102 ds %r25,%r23,%r25 103 addc %r24,%r24,%r24 104 ds %r25,%r23,%r25 105 addc %r24,%r24,%r24 106 ds %r25,%r23,%r25 107 addc %r24,%r24,%r24 108 ds %r25,%r23,%r25 109 addc %r24,%r24,%r24 110 ds %r25,%r23,%r25 111 addc %r24,%r24,%r28 112 ds %r25,%r23,%r25 113 comclr,>= %r25,%r0,%r0 114 addl %r25,%r23,%r25 115 stws %r25,0(0,%r26) 116 bv 0(%r2) 117 addc %r28,%r28,%r28 118 119 LDEF(largedivisor) 120 extru %r24,31,1,%r19 C r19 = n0 & 1 121 bb,< %r23,31,L(odd) 122 extru %r23,30,31,%r22 C r22 = d >> 1 123 shd %r25,%r24,1,%r24 C r24 = new n0 124 extru %r25,30,31,%r25 C r25 = new n1 125 sub %r0,%r22,%r21 126 ds %r0,%r21,%r0 127 addc %r24,%r24,%r24 128 ds %r25,%r22,%r25 129 addc %r24,%r24,%r24 130 ds %r25,%r22,%r25 131 addc %r24,%r24,%r24 132 ds %r25,%r22,%r25 133 addc %r24,%r24,%r24 134 ds %r25,%r22,%r25 135 addc %r24,%r24,%r24 136 ds %r25,%r22,%r25 137 addc %r24,%r24,%r24 138 ds %r25,%r22,%r25 139 addc %r24,%r24,%r24 140 ds %r25,%r22,%r25 141 addc %r24,%r24,%r24 142 ds %r25,%r22,%r25 143 addc %r24,%r24,%r24 144 ds %r25,%r22,%r25 145 addc %r24,%r24,%r24 146 ds %r25,%r22,%r25 147 addc %r24,%r24,%r24 148 ds %r25,%r22,%r25 149 addc %r24,%r24,%r24 150 ds %r25,%r22,%r25 151 addc %r24,%r24,%r24 152 ds %r25,%r22,%r25 153 addc %r24,%r24,%r24 154 ds %r25,%r22,%r25 155 addc %r24,%r24,%r24 156 ds %r25,%r22,%r25 157 addc %r24,%r24,%r24 158 ds %r25,%r22,%r25 159 addc %r24,%r24,%r24 160 ds %r25,%r22,%r25 161 addc %r24,%r24,%r24 162 ds %r25,%r22,%r25 163 addc %r24,%r24,%r24 164 ds %r25,%r22,%r25 165 addc %r24,%r24,%r24 166 ds %r25,%r22,%r25 167 addc %r24,%r24,%r24 168 ds %r25,%r22,%r25 169 addc %r24,%r24,%r24 170 ds %r25,%r22,%r25 171 addc %r24,%r24,%r24 172 ds %r25,%r22,%r25 173 addc %r24,%r24,%r24 174 ds %r25,%r22,%r25 175 addc %r24,%r24,%r24 176 ds %r25,%r22,%r25 177 addc %r24,%r24,%r24 178 ds %r25,%r22,%r25 179 addc %r24,%r24,%r24 180 ds %r25,%r22,%r25 181 addc %r24,%r24,%r24 182 ds %r25,%r22,%r25 183 addc %r24,%r24,%r24 184 ds %r25,%r22,%r25 185 addc %r24,%r24,%r24 186 ds %r25,%r22,%r25 187 addc %r24,%r24,%r24 188 ds %r25,%r22,%r25 189 addc %r24,%r24,%r24 190 ds %r25,%r22,%r25 191 comclr,>= %r25,%r0,%r0 192 addl %r25,%r22,%r25 193 sh1addl %r25,%r19,%r25 194 stws %r25,0(0,%r26) 195 bv 0(%r2) 196 addc %r24,%r24,%r28 197 198 LDEF(odd) 199 addib,sv,n 1,%r22,L(FFFFFFFF) C r22 = (d / 2 + 1) 200 shd %r25,%r24,1,%r24 C r24 = new n0 201 extru %r25,30,31,%r25 C r25 = new n1 202 sub %r0,%r22,%r21 203 ds %r0,%r21,%r0 204 addc %r24,%r24,%r24 205 ds %r25,%r22,%r25 206 addc %r24,%r24,%r24 207 ds %r25,%r22,%r25 208 addc %r24,%r24,%r24 209 ds %r25,%r22,%r25 210 addc %r24,%r24,%r24 211 ds %r25,%r22,%r25 212 addc %r24,%r24,%r24 213 ds %r25,%r22,%r25 214 addc %r24,%r24,%r24 215 ds %r25,%r22,%r25 216 addc %r24,%r24,%r24 217 ds %r25,%r22,%r25 218 addc %r24,%r24,%r24 219 ds %r25,%r22,%r25 220 addc %r24,%r24,%r24 221 ds %r25,%r22,%r25 222 addc %r24,%r24,%r24 223 ds %r25,%r22,%r25 224 addc %r24,%r24,%r24 225 ds %r25,%r22,%r25 226 addc %r24,%r24,%r24 227 ds %r25,%r22,%r25 228 addc %r24,%r24,%r24 229 ds %r25,%r22,%r25 230 addc %r24,%r24,%r24 231 ds %r25,%r22,%r25 232 addc %r24,%r24,%r24 233 ds %r25,%r22,%r25 234 addc %r24,%r24,%r24 235 ds %r25,%r22,%r25 236 addc %r24,%r24,%r24 237 ds %r25,%r22,%r25 238 addc %r24,%r24,%r24 239 ds %r25,%r22,%r25 240 addc %r24,%r24,%r24 241 ds %r25,%r22,%r25 242 addc %r24,%r24,%r24 243 ds %r25,%r22,%r25 244 addc %r24,%r24,%r24 245 ds %r25,%r22,%r25 246 addc %r24,%r24,%r24 247 ds %r25,%r22,%r25 248 addc %r24,%r24,%r24 249 ds %r25,%r22,%r25 250 addc %r24,%r24,%r24 251 ds %r25,%r22,%r25 252 addc %r24,%r24,%r24 253 ds %r25,%r22,%r25 254 addc %r24,%r24,%r24 255 ds %r25,%r22,%r25 256 addc %r24,%r24,%r24 257 ds %r25,%r22,%r25 258 addc %r24,%r24,%r24 259 ds %r25,%r22,%r25 260 addc %r24,%r24,%r24 261 ds %r25,%r22,%r25 262 addc %r24,%r24,%r24 263 ds %r25,%r22,%r25 264 addc %r24,%r24,%r24 265 ds %r25,%r22,%r25 266 addc %r24,%r24,%r24 267 ds %r25,%r22,%r25 268 addc %r24,%r24,%r28 269 comclr,>= %r25,%r0,%r0 270 addl %r25,%r22,%r25 271 sh1addl %r25,%r19,%r25 272 C We have computed (n1,,n0) / (d + 1), q' = r28, r' = r25 273 add,nuv %r28,%r25,%r25 274 addl %r25,%r1,%r25 275 addc %r0,%r28,%r28 276 sub,<< %r25,%r23,%r0 277 addl %r25,%r1,%r25 278 stws %r25,0(0,%r26) 279 bv 0(%r2) 280 addc %r0,%r28,%r28 281 282 C This is just a special case of the code above. 283 C We come here when d == 0xFFFFFFFF 284 LDEF(FFFFFFFF) 285 add,uv %r25,%r24,%r24 286 sub,<< %r24,%r23,%r0 287 ldo 1(%r24),%r24 288 stws %r24,0(0,%r26) 289 bv 0(%r2) 290 addc %r0,%r25,%r28 291 EPILOGUE()