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