github.com/aergoio/aergo@v1.3.1/libtool/src/gmp-6.1.2/mpn/sparc64/ultrasparc1234/sqr_diagonal.asm (about) 1 dnl SPARC v9 64-bit mpn_sqr_diagonal. 2 3 dnl Copyright 2001, 2002 Free Software Foundation, Inc. 4 5 dnl This file is part of the GNU MP Library. 6 dnl 7 dnl The GNU MP Library is free software; you can redistribute it and/or modify 8 dnl it under the terms of either: 9 dnl 10 dnl * the GNU Lesser General Public License as published by the Free 11 dnl Software Foundation; either version 3 of the License, or (at your 12 dnl option) any later version. 13 dnl 14 dnl or 15 dnl 16 dnl * the GNU General Public License as published by the Free Software 17 dnl Foundation; either version 2 of the License, or (at your option) any 18 dnl later version. 19 dnl 20 dnl or both in parallel, as here. 21 dnl 22 dnl The GNU MP Library is distributed in the hope that it will be useful, but 23 dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 24 dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 25 dnl for more details. 26 dnl 27 dnl You should have received copies of the GNU General Public License and the 28 dnl GNU Lesser General Public License along with the GNU MP Library. If not, 29 dnl see https://www.gnu.org/licenses/. 30 31 include(`../config.m4') 32 33 C cycles/limb 34 C UltraSPARC 1&2: 22 35 C UltraSPARC 3: 36 36 37 C This was generated by the Sun C compiler. It runs at 22 cycles/limb on the 38 C UltraSPARC-1/2, three cycles slower than theoretically possible for optimal 39 C code using the same algorithm. For 1-3 limbs, a special loop was generated, 40 C which causes performance problems in particular for 2 and 3 limbs. 41 C Ultimately, this should be replaced by hand-written code in the same software 42 C pipeline style as e.g., addmul_1.asm. 43 44 ASM_START() 45 REGISTER(%g2,#scratch) 46 REGISTER(%g3,#scratch) 47 PROLOGUE(mpn_sqr_diagonal) 48 save %sp, -240, %sp 49 50 sethi %hi(0x1ffc00), %o0 51 sethi %hi(0x3ffc00), %o1 52 add %o0, 1023, %o7 53 cmp %i2, 4 54 add %o1, 1023, %o4 55 or %g0, %i1, %g1 56 or %g0, %i0, %o0 57 bl,pn %xcc, .Lsmall 58 or %g0, 0, %g2 59 60 ldx [%i1], %o1 61 add %i1, 24, %g1 62 or %g0, 3, %g2 63 srlx %o1, 42, %g3 64 stx %g3, [%sp+2279] 65 and %o1, %o7, %o2 66 stx %o2, [%sp+2263] 67 srlx %o1, 21, %o1 68 ldd [%sp+2279], %f0 69 and %o1, %o7, %o1 70 stx %o1, [%sp+2271] 71 ldx [%i1+8], %o2 72 fxtod %f0, %f12 73 srlx %o2, 21, %o1 74 and %o2, %o7, %g3 75 ldd [%sp+2263], %f2 76 fmuld %f12, %f12, %f10 77 srlx %o2, 42, %o2 78 ldd [%sp+2271], %f0 79 and %o1, %o7, %o1 80 fxtod %f2, %f8 81 stx %o2, [%sp+2279] 82 stx %o1, [%sp+2271] 83 fxtod %f0, %f0 84 stx %g3, [%sp+2263] 85 fdtox %f10, %f14 86 fmuld %f12, %f8, %f6 87 ldx [%i1+16], %o2 88 std %f14, [%sp+2255] 89 fmuld %f0, %f0, %f2 90 fmuld %f8, %f8, %f10 91 srlx %o2, 42, %o1 92 faddd %f6, %f6, %f6 93 fmuld %f12, %f0, %f12 94 fmuld %f0, %f8, %f8 95 ldd [%sp+2279], %f0 96 ldd [%sp+2263], %f4 97 fdtox %f10, %f10 98 std %f10, [%sp+2239] 99 faddd %f2, %f6, %f6 100 ldd [%sp+2271], %f2 101 fdtox %f12, %f12 102 std %f12, [%sp+2247] 103 fdtox %f8, %f8 104 std %f8, [%sp+2231] 105 fdtox %f6, %f6 106 std %f6, [%sp+2223] 107 108 .Loop: srlx %o2, 21, %g3 109 stx %o1, [%sp+2279] 110 add %g2, 1, %g2 111 and %g3, %o7, %o1 112 ldx [%sp+2255], %g4 113 cmp %g2, %i2 114 stx %o1, [%sp+2271] 115 add %g1, 8, %g1 116 add %o0, 16, %o0 117 ldx [%sp+2239], %o1 118 fxtod %f0, %f10 119 fxtod %f4, %f14 120 ldx [%sp+2231], %i0 121 ldx [%sp+2223], %g5 122 ldx [%sp+2247], %g3 123 and %o2, %o7, %o2 124 fxtod %f2, %f8 125 fmuld %f10, %f10, %f0 126 stx %o2, [%sp+2263] 127 fmuld %f10, %f14, %f6 128 ldx [%g1-8], %o2 129 fmuld %f10, %f8, %f12 130 fdtox %f0, %f2 131 ldd [%sp+2279], %f0 132 fmuld %f8, %f8, %f4 133 faddd %f6, %f6, %f6 134 fmuld %f14, %f14, %f10 135 std %f2, [%sp+2255] 136 sllx %g4, 20, %g4 137 ldd [%sp+2271], %f2 138 fmuld %f8, %f14, %f8 139 sllx %i0, 22, %i1 140 fdtox %f12, %f12 141 std %f12, [%sp+2247] 142 sllx %g5, 42, %i0 143 add %o1, %i1, %o1 144 faddd %f4, %f6, %f6 145 ldd [%sp+2263], %f4 146 add %o1, %i0, %o1 147 add %g3, %g4, %g3 148 fdtox %f10, %f10 149 std %f10, [%sp+2239] 150 srlx %o1, 42, %g4 151 and %g5, %o4, %i0 152 fdtox %f8, %f8 153 std %f8, [%sp+2231] 154 srlx %g5, 22, %g5 155 sub %g4, %i0, %g4 156 fdtox %f6, %f6 157 std %f6, [%sp+2223] 158 srlx %g4, 63, %g4 159 add %g3, %g5, %g3 160 add %g3, %g4, %g3 161 stx %o1, [%o0-16] 162 srlx %o2, 42, %o1 163 bl,pt %xcc, .Loop 164 stx %g3, [%o0-8] 165 166 stx %o1, [%sp+2279] 167 srlx %o2, 21, %o1 168 fxtod %f0, %f16 169 ldx [%sp+2223], %g3 170 fxtod %f4, %f6 171 and %o2, %o7, %o3 172 stx %o3, [%sp+2263] 173 fxtod %f2, %f4 174 and %o1, %o7, %o1 175 ldx [%sp+2231], %o2 176 sllx %g3, 42, %g4 177 fmuld %f16, %f16, %f14 178 stx %o1, [%sp+2271] 179 fmuld %f16, %f6, %f8 180 add %o0, 48, %o0 181 ldx [%sp+2239], %o1 182 sllx %o2, 22, %o2 183 fmuld %f4, %f4, %f10 184 ldx [%sp+2255], %o3 185 fdtox %f14, %f14 186 fmuld %f4, %f6, %f2 187 std %f14, [%sp+2255] 188 faddd %f8, %f8, %f12 189 add %o1, %o2, %o2 190 fmuld %f16, %f4, %f4 191 ldd [%sp+2279], %f0 192 sllx %o3, 20, %g5 193 add %o2, %g4, %o2 194 fmuld %f6, %f6, %f6 195 srlx %o2, 42, %o3 196 and %g3, %o4, %g4 197 srlx %g3, 22, %g3 198 faddd %f10, %f12, %f16 199 ldd [%sp+2271], %f12 200 ldd [%sp+2263], %f8 201 fxtod %f0, %f0 202 sub %o3, %g4, %o3 203 ldx [%sp+2247], %o1 204 srlx %o3, 63, %o3 205 fdtox %f2, %f10 206 fxtod %f8, %f8 207 std %f10, [%sp+2231] 208 fdtox %f6, %f6 209 std %f6, [%sp+2239] 210 add %o1, %g5, %o1 211 fmuld %f0, %f0, %f2 212 fdtox %f16, %f16 213 std %f16, [%sp+2223] 214 add %o1, %g3, %o1 215 fdtox %f4, %f4 216 std %f4, [%sp+2247] 217 fmuld %f0, %f8, %f10 218 fxtod %f12, %f12 219 add %o1, %o3, %o1 220 stx %o2, [%o0-48] 221 fmuld %f8, %f8, %f6 222 stx %o1, [%o0-40] 223 fdtox %f2, %f2 224 ldx [%sp+2231], %o2 225 faddd %f10, %f10, %f10 226 ldx [%sp+2223], %g3 227 fmuld %f12, %f12, %f4 228 fdtox %f6, %f6 229 ldx [%sp+2239], %o1 230 sllx %o2, 22, %o2 231 fmuld %f12, %f8, %f8 232 sllx %g3, 42, %g5 233 ldx [%sp+2255], %o3 234 fmuld %f0, %f12, %f0 235 add %o1, %o2, %o2 236 faddd %f4, %f10, %f4 237 ldx [%sp+2247], %o1 238 add %o2, %g5, %o2 239 and %g3, %o4, %g4 240 fdtox %f8, %f8 241 sllx %o3, 20, %g5 242 std %f8, [%sp+2231] 243 fdtox %f0, %f0 244 srlx %o2, 42, %o3 245 add %o1, %g5, %o1 246 fdtox %f4, %f4 247 srlx %g3, 22, %g3 248 sub %o3, %g4, %o3 249 std %f6, [%sp+2239] 250 std %f4, [%sp+2223] 251 srlx %o3, 63, %o3 252 add %o1, %g3, %o1 253 std %f2, [%sp+2255] 254 add %o1, %o3, %o1 255 std %f0, [%sp+2247] 256 stx %o2, [%o0-32] 257 stx %o1, [%o0-24] 258 ldx [%sp+2231], %o2 259 ldx [%sp+2223], %o3 260 ldx [%sp+2239], %o1 261 sllx %o2, 22, %o2 262 sllx %o3, 42, %g5 263 ldx [%sp+2255], %g4 264 and %o3, %o4, %g3 265 add %o1, %o2, %o2 266 ldx [%sp+2247], %o1 267 add %o2, %g5, %o2 268 stx %o2, [%o0-16] 269 sllx %g4, 20, %g4 270 srlx %o2, 42, %o2 271 add %o1, %g4, %o1 272 srlx %o3, 22, %o3 273 sub %o2, %g3, %o2 274 srlx %o2, 63, %o2 275 add %o1, %o3, %o1 276 add %o1, %o2, %o1 277 stx %o1, [%o0-8] 278 ret 279 restore %g0, %g0, %g0 280 .Lsmall: 281 ldx [%g1], %o2 282 .Loop0: 283 and %o2, %o7, %o1 284 stx %o1, [%sp+2263] 285 add %g2, 1, %g2 286 srlx %o2, 21, %o1 287 add %g1, 8, %g1 288 srlx %o2, 42, %o2 289 stx %o2, [%sp+2279] 290 and %o1, %o7, %o1 291 ldd [%sp+2263], %f0 292 cmp %g2, %i2 293 stx %o1, [%sp+2271] 294 fxtod %f0, %f6 295 ldd [%sp+2279], %f0 296 ldd [%sp+2271], %f4 297 fxtod %f0, %f2 298 fmuld %f6, %f6, %f0 299 fxtod %f4, %f10 300 fmuld %f2, %f6, %f4 301 fdtox %f0, %f0 302 std %f0, [%sp+2239] 303 fmuld %f10, %f6, %f8 304 fmuld %f10, %f10, %f0 305 faddd %f4, %f4, %f6 306 fmuld %f2, %f2, %f4 307 fdtox %f8, %f8 308 std %f8, [%sp+2231] 309 fmuld %f2, %f10, %f2 310 faddd %f0, %f6, %f0 311 fdtox %f4, %f4 312 std %f4, [%sp+2255] 313 fdtox %f2, %f2 314 std %f2, [%sp+2247] 315 fdtox %f0, %f0 316 std %f0, [%sp+2223] 317 ldx [%sp+2239], %o1 318 ldx [%sp+2255], %g4 319 ldx [%sp+2231], %o2 320 sllx %g4, 20, %g4 321 ldx [%sp+2223], %o3 322 sllx %o2, 22, %o2 323 sllx %o3, 42, %g5 324 add %o1, %o2, %o2 325 ldx [%sp+2247], %o1 326 add %o2, %g5, %o2 327 stx %o2, [%o0] 328 and %o3, %o4, %g3 329 srlx %o2, 42, %o2 330 add %o1, %g4, %o1 331 srlx %o3, 22, %o3 332 sub %o2, %g3, %o2 333 srlx %o2, 63, %o2 334 add %o1, %o3, %o1 335 add %o1, %o2, %o1 336 stx %o1, [%o0+8] 337 add %o0, 16, %o0 338 bl,a,pt %xcc, .Loop0 339 ldx [%g1], %o2 340 ret 341 restore %g0, %g0, %g0 342 EPILOGUE(mpn_sqr_diagonal)