1 1.1 mrg dnl SPARC v7 __udiv_qrnnd division support, used from longlong.h. 2 1.1 mrg dnl This is for v7 CPUs without a floating-point unit. 3 1.1 mrg 4 1.1 mrg dnl Copyright 1993, 1994, 1996, 2000 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 33 1.1 mrg include(`../config.m4') 34 1.1 mrg 35 1.1 mrg C INPUT PARAMETERS 36 1.1 mrg C rem_ptr o0 37 1.1 mrg C n1 o1 38 1.1 mrg C n0 o2 39 1.1 mrg C d o3 40 1.1 mrg 41 1.1 mrg ASM_START() 42 1.1 mrg PROLOGUE(mpn_udiv_qrnnd) 43 1.1 mrg tst %o3 44 1.1 mrg bneg L(largedivisor) 45 1.1 mrg mov 8,%g1 46 1.1 mrg 47 1.1 mrg b L(p1) 48 1.1 mrg addxcc %o2,%o2,%o2 49 1.1 mrg 50 1.1 mrg L(plop): 51 1.1 mrg bcc L(n1) 52 1.1 mrg addxcc %o2,%o2,%o2 53 1.1 mrg L(p1): addx %o1,%o1,%o1 54 1.1 mrg subcc %o1,%o3,%o4 55 1.1 mrg bcc L(n2) 56 1.1 mrg addxcc %o2,%o2,%o2 57 1.1 mrg L(p2): addx %o1,%o1,%o1 58 1.1 mrg subcc %o1,%o3,%o4 59 1.1 mrg bcc L(n3) 60 1.1 mrg addxcc %o2,%o2,%o2 61 1.1 mrg L(p3): addx %o1,%o1,%o1 62 1.1 mrg subcc %o1,%o3,%o4 63 1.1 mrg bcc L(n4) 64 1.1 mrg addxcc %o2,%o2,%o2 65 1.1 mrg L(p4): addx %o1,%o1,%o1 66 1.1 mrg addcc %g1,-1,%g1 67 1.1 mrg bne L(plop) 68 1.1 mrg subcc %o1,%o3,%o4 69 1.1 mrg bcc L(n5) 70 1.1 mrg addxcc %o2,%o2,%o2 71 1.1 mrg L(p5): st %o1,[%o0] 72 1.1 mrg retl 73 1.1 mrg xnor %g0,%o2,%o0 74 1.1 mrg 75 1.1 mrg L(nlop): 76 1.1 mrg bcc L(p1) 77 1.1 mrg addxcc %o2,%o2,%o2 78 1.1 mrg L(n1): addx %o4,%o4,%o4 79 1.1 mrg subcc %o4,%o3,%o1 80 1.1 mrg bcc L(p2) 81 1.1 mrg addxcc %o2,%o2,%o2 82 1.1 mrg L(n2): addx %o4,%o4,%o4 83 1.1 mrg subcc %o4,%o3,%o1 84 1.1 mrg bcc L(p3) 85 1.1 mrg addxcc %o2,%o2,%o2 86 1.1 mrg L(n3): addx %o4,%o4,%o4 87 1.1 mrg subcc %o4,%o3,%o1 88 1.1 mrg bcc L(p4) 89 1.1 mrg addxcc %o2,%o2,%o2 90 1.1 mrg L(n4): addx %o4,%o4,%o4 91 1.1 mrg addcc %g1,-1,%g1 92 1.1 mrg bne L(nlop) 93 1.1 mrg subcc %o4,%o3,%o1 94 1.1 mrg bcc L(p5) 95 1.1 mrg addxcc %o2,%o2,%o2 96 1.1 mrg L(n5): st %o4,[%o0] 97 1.1 mrg retl 98 1.1 mrg xnor %g0,%o2,%o0 99 1.1 mrg 100 1.1 mrg L(largedivisor): 101 1.1 mrg and %o2,1,%o5 C %o5 = n0 & 1 102 1.1 mrg 103 1.1 mrg srl %o2,1,%o2 104 1.1 mrg sll %o1,31,%g2 105 1.1 mrg or %g2,%o2,%o2 C %o2 = lo(n1n0 >> 1) 106 1.1 mrg srl %o1,1,%o1 C %o1 = hi(n1n0 >> 1) 107 1.1 mrg 108 1.1 mrg and %o3,1,%g2 109 1.1 mrg srl %o3,1,%g3 C %g3 = floor(d / 2) 110 1.1 mrg add %g3,%g2,%g3 C %g3 = ceil(d / 2) 111 1.1 mrg 112 1.1 mrg b L(Lp1) 113 1.1 mrg addxcc %o2,%o2,%o2 114 1.1 mrg 115 1.1 mrg L(Lplop): 116 1.1 mrg bcc L(Ln1) 117 1.1 mrg addxcc %o2,%o2,%o2 118 1.1 mrg L(Lp1): addx %o1,%o1,%o1 119 1.1 mrg subcc %o1,%g3,%o4 120 1.1 mrg bcc L(Ln2) 121 1.1 mrg addxcc %o2,%o2,%o2 122 1.1 mrg L(Lp2): addx %o1,%o1,%o1 123 1.1 mrg subcc %o1,%g3,%o4 124 1.1 mrg bcc L(Ln3) 125 1.1 mrg addxcc %o2,%o2,%o2 126 1.1 mrg L(Lp3): addx %o1,%o1,%o1 127 1.1 mrg subcc %o1,%g3,%o4 128 1.1 mrg bcc L(Ln4) 129 1.1 mrg addxcc %o2,%o2,%o2 130 1.1 mrg L(Lp4): addx %o1,%o1,%o1 131 1.1 mrg addcc %g1,-1,%g1 132 1.1 mrg bne L(Lplop) 133 1.1 mrg subcc %o1,%g3,%o4 134 1.1 mrg bcc L(Ln5) 135 1.1 mrg addxcc %o2,%o2,%o2 136 1.1 mrg L(Lp5): add %o1,%o1,%o1 C << 1 137 1.1 mrg tst %g2 138 1.1 mrg bne L(oddp) 139 1.1 mrg add %o5,%o1,%o1 140 1.1 mrg st %o1,[%o0] 141 1.1 mrg retl 142 1.1 mrg xnor %g0,%o2,%o0 143 1.1 mrg 144 1.1 mrg L(Lnlop): 145 1.1 mrg bcc L(Lp1) 146 1.1 mrg addxcc %o2,%o2,%o2 147 1.1 mrg L(Ln1): addx %o4,%o4,%o4 148 1.1 mrg subcc %o4,%g3,%o1 149 1.1 mrg bcc L(Lp2) 150 1.1 mrg addxcc %o2,%o2,%o2 151 1.1 mrg L(Ln2): addx %o4,%o4,%o4 152 1.1 mrg subcc %o4,%g3,%o1 153 1.1 mrg bcc L(Lp3) 154 1.1 mrg addxcc %o2,%o2,%o2 155 1.1 mrg L(Ln3): addx %o4,%o4,%o4 156 1.1 mrg subcc %o4,%g3,%o1 157 1.1 mrg bcc L(Lp4) 158 1.1 mrg addxcc %o2,%o2,%o2 159 1.1 mrg L(Ln4): addx %o4,%o4,%o4 160 1.1 mrg addcc %g1,-1,%g1 161 1.1 mrg bne L(Lnlop) 162 1.1 mrg subcc %o4,%g3,%o1 163 1.1 mrg bcc L(Lp5) 164 1.1 mrg addxcc %o2,%o2,%o2 165 1.1 mrg L(Ln5): add %o4,%o4,%o4 C << 1 166 1.1 mrg tst %g2 167 1.1 mrg bne L(oddn) 168 1.1 mrg add %o5,%o4,%o4 169 1.1 mrg st %o4,[%o0] 170 1.1 mrg retl 171 1.1 mrg xnor %g0,%o2,%o0 172 1.1 mrg 173 1.1 mrg L(oddp): 174 1.1 mrg xnor %g0,%o2,%o2 175 1.1 mrg C q' in %o2. r' in %o1 176 1.1 mrg addcc %o1,%o2,%o1 177 1.1 mrg bcc L(Lp6) 178 1.1 mrg addx %o2,0,%o2 179 1.1 mrg sub %o1,%o3,%o1 180 1.1 mrg L(Lp6): subcc %o1,%o3,%g0 181 1.1 mrg bcs L(Lp7) 182 1.1 mrg subx %o2,-1,%o2 183 1.1 mrg sub %o1,%o3,%o1 184 1.1 mrg L(Lp7): st %o1,[%o0] 185 1.1 mrg retl 186 1.1 mrg mov %o2,%o0 187 1.1 mrg 188 1.1 mrg L(oddn): 189 1.1 mrg xnor %g0,%o2,%o2 190 1.1 mrg C q' in %o2. r' in %o4 191 1.1 mrg addcc %o4,%o2,%o4 192 1.1 mrg bcc L(Ln6) 193 1.1 mrg addx %o2,0,%o2 194 1.1 mrg sub %o4,%o3,%o4 195 1.1 mrg L(Ln6): subcc %o4,%o3,%g0 196 1.1 mrg bcs L(Ln7) 197 1.1 mrg subx %o2,-1,%o2 198 1.1 mrg sub %o4,%o3,%o4 199 1.1 mrg L(Ln7): st %o4,[%o0] 200 1.1 mrg retl 201 1.1 mrg mov %o2,%o0 202 1.1 mrg EPILOGUE(mpn_udiv_qrnnd) 203