1/* 2 * VISmoveImage.S: High speed moveImage operations utilizing the UltraSPARC 3 * Visual Instruction Set. 4 * 5 * Copyright (C) 1998,1999 Jakub Jelinek (jakub@redhat.com) 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a copy 8 * of this software and associated documentation files (the "Software"), to deal 9 * in the Software without restriction, including without limitation the rights 10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 * copies of the Software, and to permit persons to whom the Software is 12 * furnished to do so, subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be included in 15 * all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 * JAKUB JELINEK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 */ 24 25 26/* NOTE NOTE NOTE: All loads in these routines _MUST_ be 64-byte block 27 * loads. If any non-block loads are done to the frame- 28 * buffer when prefetching is enabled (which we use, when 29 * available) this will cause lockups on FFB2 due to a 30 * hardware bug. -DaveM 31 */ 32 33/* 34 void 35 VISmoveImageLR(unsigned char *src, unsigned char *dst, long w, long h, long skind, long dkind) 36 { 37 int i; 38 39 // Handles copying non-overlapping images and for overlapping images 40 // copying where dstx <= srcx. 41 // To copy overlapping images where dsty > srcy, set src and dst 42 // to start of the last scanline and negate both skind and dkind arguments. 43 44 assert(abs(skind) >= w && abs(dkind) >= w); 45 46 while (h--) { 47 for (i = 0; i < w; i++) 48 *d++ = *s++; 49 s += skind - w; 50 d += dkind - w; 51 } 52 } 53 54 void 55 VISmoveImageRL(unsigned char *src, unsigned char *dst, long w, long h, long skind, long dkind) 56 { 57 int i; 58 59 // Handles copying non-overlapping images and for overlapping images 60 // copying where dstx >= srcx. 61 // To copy overlapping images where dsty > srcy, set src and dst 62 // to start of the last scanline and negate both skind and dkind arguments. 63 64 assert(abs(skind) >= w && abs(dkind) >= w); 65 66 s += w; 67 d += w; 68 while (h--) { 69 for (i = 0; i < w; i++) 70 *--d = *--s; 71 s += skind + w; 72 d += dkind + w; 73 } 74 } 75 76 */ 77 78#if defined(__sparc_v9__) || defined(__sparcv9) || defined(__arch64__) 79 80 .register %g2, #scratch 81 .register %g3, #scratch 82 83#define SMUL mulx 84#define ICC xcc 85.register %g2,#scratch 86.register %g3,#scratch 87#else 88#define SMUL smul 89#define ICC icc 90#endif 91 92#define ASI_PST8_P 0xc0 93#define ASI_BLK_P 0xf0 94#define SYNC 0x40 95 96/* Register usage: */ 97/* integer registers: */ 98#define src i0 99#define dst i1 100#define w i2 101#define h i3 102#define skind i4 103#define dkind i5 104#define branchbase l0 105#define tmp1 l1 106#define tmp4 l2 107#define tmp5 l3 108#define leftw l4 109#define rightw l5 110#define srcstart l6 111#define mode l7 112#define fregset o0 /* Must be [og]? for v8plusa */ 113#define srcend o1 114#define srcn o2 115#define srcnext o3 116#define rightw2 o4 117#define tmp2 o5 /* Must be [og]? for v8plusa */ 118#define narrow o7 119#define prepw g1 /* Must be [og]? for v8plusa */ 120#define srcstop g2 121#define srcnotdone g3 122#define curw g4 /* Must be [og]? for v8plusa */ 123#define leftw2 rightw2 124#define tmp3 g5 /* Must be [og]? for v8plusa */ 125/* floating point registers: */ 126#define ftmp1 f0 127#define ftmp2 f2 128#define ftmp3 f4 129#define ftmp4 f6 130#define ftmp5 f8 131#define ftmp6 f10 132#define ftmp7 f12 133#define ftmp8 f14 134#define store_regs f16-f31 135#define load_bank1 f32-f46 136#define load_bank2 f48-f62 137#define fnop fmovd %ftmp2, %ftmp2 138 139#define LOAD(f32,f46,tgt,tgtr) \ 140 subcc %curw, 64, %curw; \ 141 bleu,pn %ICC, tgt; \ 142 fmovd %f46, %ftmp1; \ 143 ldda [%src] ASI_BLK_P, %f32; \ 144 add %src, 64, %src; \ 145tgtr: 146 147#define PREPLOAD(f32,f46,tgt,tgtr) \ 148 brlez,pn %prepw, tgt; \ 149 fmovd %f46, %ftmp1; \ 150 ldda [%src] ASI_BLK_P, %f32; \ 151 add %src, 64, %src; \ 152tgtr: 153 154#define STORE \ 155 stda %f16, [%dst] ASI_BLK_P; 156 157#define FREG_FROB(f0,A0,F2,f2,A1,F4,f4,A2,F6,f6,A3,F8,f8,A4,F10,f10,A5,F12,f12,A6,F14,f14,A7,F16) \ 158 A0 \ 159 faligndata %f0,%F2,%f16; \ 160 A1 \ 161 faligndata %f2,%F4,%f18; \ 162 A2 \ 163 faligndata %f4,%F6,%f20; \ 164 A3 \ 165 faligndata %f6,%F8,%f22; \ 166 A4 \ 167 faligndata %f8,%F10,%f24; \ 168 A5 \ 169 faligndata %f10,%F12,%f26; \ 170 A6 \ 171 faligndata %f12,%F14,%f28; \ 172 A7 \ 173 faligndata %f14,%F16,%f30; 174 175 .section ".rodata" 176 .asciz "VISmoveImage (C) 1998,1999 Jakub Jelinek" 177 178/* The code might not be self-explanatory, but it was written to be processed 179 * by machines, not humans. Comments are deliberately left as an exercise 180 * to the occasional reader. */ 181 182 .text 183 .globl VISmoveImageLR 184 .align 32 185VISmoveImageLR: 186#ifdef __arch64__ 187 save %sp, -192, %sp ! Group 0 188#else 189 save %sp, -96, %sp ! Group 0 190#endif 1910: rd %pc, %tmp3 ! Group 1 192 sub %src, %dst, %mode ! Group 7 193 brz,pn %h, return 194 neg %dst, %leftw ! Group 8 195 mov %src, %srcstart 196 andn %src, 63, %src ! Group 9 197 cmp %w, 128 198 blu,pn %ICC, prepare_narrow 199 and %mode, 63, %mode ! Group 10 200 add %dst, %w, %rightw 201 ldda [%src] ASI_BLK_P, %f32 ! Group 11 202 add %src, 64, %src ! Group 12 203 clr %narrow 204 ldda [%src] ASI_BLK_P, %f48 ! Group 13 205 and %leftw, 63, %leftw ! Group 14 206 sub %rightw, 1, %rightw 207 andn %dst, 63, %dst ! Group 15 208 and %rightw, 63, %rightw 209 alignaddr %mode, %g0, %g0 ! Group 16 210 add %rightw, 1, %rightw ! Group 17 211 clr %fregset 212 add %src, 64, %src ! Group 18 213 add %tmp3, (BranchBase - 0b), %branchbase 214 mov 64, %prepw ! Group 19 215 ba,pt %xcc, roll_wide 216 sub %h, 1, %srcnotdone 217prepare_narrow: 218#if defined(__sparc_v9__) || defined(__sparcv9) || defined(__arch64__) 219 brlez,pn %w, return 220#else 221 tst %w 222 ble,pn %icc, return 223#endif 224 add %dst, %w, %rightw ! Group 11 225 and %leftw, 63, %leftw 226 ldda [%src] ASI_BLK_P, %f32 ! Group 12 227 sub %rightw, 1, %rightw ! Group 13 228 andn %dst, 63, %dst 229 and %rightw, 63, %rightw ! Group 14 230 sub %w, %leftw, %tmp2 231 add %rightw, 1, %rightw ! Group 15 232 clr %fregset 233 subcc %tmp2, %rightw, %curw ! Group 16 234 and %srcstart, 63, %tmp1 235 mov %curw, %prepw ! Group 17 236 add %tmp1, %w, %tmp1 237 bg,pt %ICC, 1f 238 add %src, 64, %src ! Group 18 239 cmp %tmp1, 128 240 movg %icc, 64, %prepw ! Group 19 2411: add %srcstart, %w, %srcend 242 sub %h, 1, %srcnotdone ! Group 20 243 add %srcstart, %skind, %srcnext 244 add %srcend, 63, %tmp4 ! Group 21 245 andn %srcnext, 63, %srcnext 246 add %w, 64, %tmp2 ! Group 22 247 cmp %skind, 0 248 bl,pn %ICC, 1f 249 clr %srcstop ! Group 23 250 cmp %skind, %tmp2 251 bgeu,pt %ICC, 2f 252 andn %tmp4, 63, %tmp2 ! Group 24 253 SMUL %skind, %srcnotdone, %srcstop 254 ba,pt %xcc, 2f 255 add %tmp4, %srcstop, %srcstop 2561: addcc %tmp2, %skind, %g0 257 ble,pt %ICC, 2f 258 sub %srcnext, 64, %tmp2 259 SMUL %skind, %srcnotdone, %srcstop 260 sub %srcstart, 64, %narrow 261 add %srcstop, %narrow, %srcstop 2622: add %srcnext, 64, %narrow 263 andn %tmp4, 63, %srcend ! Group 25 264 mov %srcnext, %srcn 265 cmp %narrow, %srcend ! Group 26 266 andn %srcstop, 63, %srcstop 267 move %ICC, %tmp2, %srcnext ! Group 27 268 alignaddr %mode, %g0, %g0 ! Group 28 269 add %tmp3, (BranchBase - 0b), %branchbase 270 mov 1, %narrow ! Group 29 271 cmp %srcnext, %srcstop 272 move %ICC, 0, %srcnotdone ! Group 30 273 cmp %tmp1, 64 274 bleu,pn %ICC, 1f 275 dec %h ! Group 31 276 ldda [%src] ASI_BLK_P, %f48 ! Group 32 277 ba,pt %xcc, roll_narrow ! Group 33 278 addcc %src, 64, %src 2791: brz,a,pn %srcnotdone, roll_narrow 280 membar #Sync 281 ldda [%srcnext] ASI_BLK_P, %f48 282 ba,pt %xcc, roll_narrow 283 addcc %srcnext, 64, %src 284 285 .align 32 286prepr0: faligndata %f32, %f34, %f16 287 faligndata %f34, %f36, %f18 288 faligndata %f36, %f38, %f20 289 faligndata %f38, %f40, %f22 290 faligndata %f40, %f42, %f24 291 faligndata %f42, %f44, %f26 292 ba,pt %xcc, 4f 293 faligndata %f44, %f46, %f28 294 .align 32 295prepr1: faligndata %f48, %f50, %f16 296 faligndata %f50, %f52, %f18 297 faligndata %f52, %f54, %f20 298 faligndata %f54, %f56, %f22 299 faligndata %f56, %f58, %f24 300 faligndata %f58, %f60, %f26 301 ba,pt %xcc, 5f 302 faligndata %f60, %f62, %f28 303 .align 32 304prepr2: faligndata %f34, %f36, %f16 305 faligndata %f36, %f38, %f18 306 faligndata %f38, %f40, %f20 307 faligndata %f40, %f42, %f22 308 faligndata %f42, %f44, %f24 309 faligndata %f44, %f46, %f26 310 ba,pt %xcc, narrowst 311 faligndata %f46, %f0, %f28 312 .align 32 313prepr3: faligndata %f50, %f52, %f16 314 faligndata %f52, %f54, %f18 315 faligndata %f54, %f56, %f20 316 faligndata %f56, %f58, %f22 317 faligndata %f58, %f60, %f24 318 faligndata %f60, %f62, %f26 319 ba,pt %xcc, narrowst 320 faligndata %f62, %f0, %f28 321 .align 32 322prepr4: faligndata %f36, %f38, %f16 323 faligndata %f38, %f40, %f18 324 faligndata %f40, %f42, %f20 325 faligndata %f42, %f44, %f22 326 faligndata %f44, %f46, %f24 327 ba,pt %xcc, narrowst 328 faligndata %f46, %f0, %f26 329 .align 32 330prepr5: faligndata %f52, %f54, %f16 331 faligndata %f54, %f56, %f18 332 faligndata %f56, %f58, %f20 333 faligndata %f58, %f60, %f22 334 faligndata %f60, %f62, %f24 335 ba,pt %xcc, narrowst 336 faligndata %f62, %f0, %f26 337 .align 32 338prepr6: faligndata %f38, %f40, %f16 339 faligndata %f40, %f42, %f18 340 faligndata %f42, %f44, %f20 341 faligndata %f44, %f46, %f22 342 ba,pt %xcc, narrowst 343 faligndata %f46, %f0, %f24 344 .align 32 345prepr7: faligndata %f54, %f56, %f16 346 faligndata %f56, %f58, %f18 347 faligndata %f58, %f60, %f20 348 faligndata %f60, %f62, %f22 349 ba,pt %xcc, narrowst 350 faligndata %f62, %f0, %f24 351 .align 32 352prepr8: faligndata %f40, %f42, %f16 353 faligndata %f42, %f44, %f18 354 faligndata %f44, %f46, %f20 355 ba,pt %xcc, narrowst 356 faligndata %f46, %f0, %f22 357 .align 32 358prepr9: faligndata %f56, %f58, %f16 359 faligndata %f58, %f60, %f18 360 faligndata %f60, %f62, %f20 361 ba,pt %xcc, narrowst 362 faligndata %f62, %f0, %f22 363 .align 32 364prepr10:faligndata %f42, %f44, %f16 365 faligndata %f44, %f46, %f18 366 ba,pt %xcc, narrowst 367 faligndata %f46, %f0, %f20 368 .align 32 369prepr11:faligndata %f58, %f60, %f16 370 faligndata %f60, %f62, %f18 371 ba,pt %xcc, narrowst 372 faligndata %f62, %f0, %f20 373 .align 32 374prepr12:faligndata %f44, %f46, %f16 375 ba,pt %xcc, narrowst 376 faligndata %f46, %f0, %f18 377 .align 32 378prepr13:faligndata %f60, %f62, %f16 379 ba,pt %xcc, narrowst 380 faligndata %f62, %f0, %f18 381 .align 32 382prepr14:ba,pt %xcc, narrowst 383 faligndata %f46, %f0, %f16 384 nop 385 nop 3864: ba,pt %xcc, narrowst 387 faligndata %f46, %f0, %f30 388 .align 32 389prepr15:ba,pt %xcc, narrowst 390 faligndata %f62, %f0, %f16 391 nop 392 nop 3935: ba,pt %xcc, narrowst 394 faligndata %f62, %f0, %f30 395 396 .align 32 397prepn0: faligndata %ftmp1, %f32, %f30 398 ba,pt %xcc, leftst 399 mov (vis0 - BranchBase), %tmp3 400 nop 4011: ba,pt %xcc, leftst 402 mov (vis12 - BranchBase), %tmp3 403 .align 32 404prepn1: faligndata %ftmp1, %f48, %f30 405 ba,pt %xcc, leftst 406 mov (vis1 - BranchBase), %tmp3 407 nop 4082: ba,pt %xcc, leftst 409 mov (vis13 - BranchBase), %tmp3 410 .align 32 411prepn2: faligndata %ftmp1, %f32, %f28 412 faligndata %f32, %f34, %f30 413 ba,pt %xcc, leftst 414 mov (vis2 - BranchBase), %tmp3 4153: faligndata %f44, %f46, %f30 416 ba,pt %xcc, leftst 417 mov (vis14 - BranchBase), %tmp3 418 .align 32 419prepn3: faligndata %ftmp1, %f48, %f28 420 faligndata %f48, %f50, %f30 421 ba,pt %xcc, leftst 422 mov (vis3 - BranchBase), %tmp3 423 .align 32 424prepn4: faligndata %ftmp1, %f32, %f26 425 faligndata %f32, %f34, %f28 426 faligndata %f34, %f36, %f30 427 ba,pt %xcc, leftst 428 mov (vis4 - BranchBase), %tmp3 429 .align 32 430prepn5: faligndata %ftmp1, %f48, %f26 431 faligndata %f48, %f50, %f28 432 faligndata %f50, %f52, %f30 433 ba,pt %xcc, leftst 434 mov (vis5 - BranchBase), %tmp3 435 .align 32 436prepn6: faligndata %ftmp1, %f32, %f24 437 faligndata %f32, %f34, %f26 438 faligndata %f34, %f36, %f28 439 faligndata %f36, %f38, %f30 440 ba,pt %xcc, leftst 441 mov (vis6 - BranchBase), %tmp3 442 .align 32 443prepn7: faligndata %ftmp1, %f48, %f24 444 faligndata %f48, %f50, %f26 445 faligndata %f50, %f52, %f28 446 faligndata %f52, %f54, %f30 447 ba,pt %xcc, leftst 448 mov (vis7 - BranchBase), %tmp3 449 .align 32 450prepn8: faligndata %ftmp1, %f32, %f22 451 faligndata %f32, %f34, %f24 452 faligndata %f34, %f36, %f26 453 faligndata %f36, %f38, %f28 454 faligndata %f38, %f40, %f30 455 ba,pt %xcc, leftst 456 mov (vis8 - BranchBase), %tmp3 457 .align 32 458prepn9: faligndata %ftmp1, %f48, %f22 459 faligndata %f48, %f50, %f24 460 faligndata %f50, %f52, %f26 461 faligndata %f52, %f54, %f28 462 faligndata %f54, %f56, %f30 463 ba,pt %xcc, leftst 464 mov (vis9 - BranchBase), %tmp3 465 .align 32 466prepn10:faligndata %ftmp1, %f32, %f20 467 faligndata %f32, %f34, %f22 468 faligndata %f34, %f36, %f24 469 faligndata %f36, %f38, %f26 470 faligndata %f38, %f40, %f28 471 faligndata %f40, %f42, %f30 472 ba,pt %xcc, leftst 473 mov (vis10 - BranchBase), %tmp3 474 .align 32 475prepn11:faligndata %ftmp1, %f48, %f20 476 faligndata %f48, %f50, %f22 477 faligndata %f50, %f52, %f24 478 faligndata %f52, %f54, %f26 479 faligndata %f54, %f56, %f28 480 faligndata %f56, %f58, %f30 481 ba,pt %xcc, leftst 482 mov (vis11 - BranchBase), %tmp3 483 .align 32 484prepn12:faligndata %ftmp1, %f32, %f18 485 faligndata %f32, %f34, %f20 486 faligndata %f34, %f36, %f22 487 faligndata %f36, %f38, %f24 488 faligndata %f38, %f40, %f26 489 faligndata %f40, %f42, %f28 490 ba,pt %xcc, 1b 491 faligndata %f42, %f44, %f30 492 .align 32 493prepn13:faligndata %ftmp1, %f48, %f18 494 faligndata %f48, %f50, %f20 495 faligndata %f50, %f52, %f22 496 faligndata %f52, %f54, %f24 497 faligndata %f54, %f56, %f26 498 faligndata %f56, %f58, %f28 499 ba,pt %xcc, 2b 500 faligndata %f58, %f60, %f30 501 .align 32 502prepn14:faligndata %ftmp1, %f32, %f16 503 faligndata %f32, %f34, %f18 504 faligndata %f34, %f36, %f20 505 faligndata %f36, %f38, %f22 506 faligndata %f38, %f40, %f24 507 faligndata %f40, %f42, %f26 508 ba,pt %xcc, 3b 509 faligndata %f42, %f44, %f28 510 .align 32 511prepn15:faligndata %ftmp1, %f48, %f16 512 faligndata %f48, %f50, %f18 513 faligndata %f50, %f52, %f20 514 faligndata %f52, %f54, %f22 515 faligndata %f54, %f56, %f24 516 faligndata %f56, %f58, %f26 517 faligndata %f58, %f60, %f28 518 faligndata %f60, %f62, %f30 519 ba,pt %xcc, leftst 520 mov (vis15 - BranchBase), %tmp3 521 522 .align 64 523BranchBase: 524prepl0: FREG_FROB(f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep0e,prep0r),f48) 525 ba,pt %xcc, leftst 526 mov (vis1 - BranchBase), %tmp3 527 .align 64 528prepl1: FREG_FROB(f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep1e,prep1r),f32) 529 ba,pt %xcc, leftst 530 mov (vis0 - BranchBase), %tmp3 531 .align 64 532prepl2: FREG_FROB(f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep2e,prep2r),f48,f48,,f50) 533 ba,pt %xcc, leftst 534 mov (vis3 - BranchBase), %tmp3 535 .align 64 536prepl3: FREG_FROB(f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep3e,prep3r),f32,f32,,f34) 537 ba,pt %xcc, leftst 538 mov (vis2 - BranchBase), %tmp3 539 .align 64 540prepl4: FREG_FROB(f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep4e,prep4r),f48,f48,,f50,f50,,f52) 541 ba,pt %xcc, leftst 542 mov (vis5 - BranchBase), %tmp3 543 .align 64 544prepl5: FREG_FROB(f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep5e,prep5r),f32,f32,,f34,f34,,f36) 545 ba,pt %xcc, leftst 546 mov (vis4 - BranchBase), %tmp3 547 .align 64 548prepl6: FREG_FROB(f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep6e,prep6r),f48,f48,,f50,f50,,f52,f52,,f54) 549 ba,pt %xcc, leftst 550 mov (vis7 - BranchBase), %tmp3 551 .align 64 552prepl7: FREG_FROB(f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep7e,prep7r),f32,f32,,f34,f34,,f36,f36,,f38) 553 ba,pt %xcc, leftst 554 mov (vis6 - BranchBase), %tmp3 555 .align 64 556prepl8: FREG_FROB(f40,,f42,f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep8e,prep8r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56) 557 ba,pt %xcc, leftst 558 mov (vis9 - BranchBase), %tmp3 559 .align 64 560prepl9: FREG_FROB(f56,,f58,f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep9e,prep9r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40) 561 ba,pt %xcc, leftst 562 mov (vis8 - BranchBase), %tmp3 563 .align 64 564prepl10:FREG_FROB(f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep10e,prep10r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58) 565 ba,pt %xcc, leftst 566 mov (vis11 - BranchBase), %tmp3 567 .align 64 568prepl11:FREG_FROB(f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep11e,prep11r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42) 569 ba,pt %xcc, leftst 570 mov (vis10 - BranchBase), %tmp3 571 .align 64 572prepl12:FREG_FROB(f44,,f46,ftmp1,PREPLOAD(f32,f46,prep12e,prep12r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60) 573 ba,pt %xcc, leftst 574 mov (vis13 - BranchBase), %tmp3 575 .align 64 576prepl13:FREG_FROB(f60,,f62,ftmp1,PREPLOAD(f48,f62,prep13e,prep13r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44) 577 ba,pt %xcc, leftst 578 mov (vis12 - BranchBase), %tmp3 579 .align 64 580prepl14:FREG_FROB(ftmp1,PREPLOAD(f32,f46,prep14e,prep14r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62) 581 ba,pt %xcc, leftst 582 mov (vis15 - BranchBase), %tmp3 583 .align 64 584prepl15:FREG_FROB(ftmp1,PREPLOAD(f48,f62,prep15e,prep15r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46) 585 ba,pt %xcc, leftst 586 mov (vis14 - BranchBase), %tmp3 587 588 .align 128 589vis0: FREG_FROB(f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis0e,vis0r),f48) 590 STORE 591 add %dst, 64, %dst 592vis1: FREG_FROB(f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis1e,vis1r),f32) 593 STORE 594 ba,pt %xcc, vis0 595 add %dst, 64, %dst 596 .align 128 597vis2: FREG_FROB(f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis2e,vis2r),f48,f48,,f50) 598 STORE 599 add %dst, 64, %dst 600vis3: FREG_FROB(f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis3e,vis3r),f32,f32,,f34) 601 STORE 602 ba,pt %xcc, vis2 603 add %dst, 64, %dst 604 .align 128 605vis4: FREG_FROB(f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis4e,vis4r),f48,f48,,f50,f50,,f52) 606 STORE 607 add %dst, 64, %dst 608vis5: FREG_FROB(f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis5e,vis5r),f32,f32,,f34,f34,,f36) 609 STORE 610 ba,pt %xcc, vis4 611 add %dst, 64, %dst 612 .align 128 613vis6: FREG_FROB(f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis6e,vis6r),f48,f48,,f50,f50,,f52,f52,,f54) 614 STORE 615 add %dst, 64, %dst 616vis7: FREG_FROB(f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis7e,vis7r),f32,f32,,f34,f34,,f36,f36,,f38) 617 STORE 618 ba,pt %xcc, vis6 619 add %dst, 64, %dst 620 .align 128 621vis8: FREG_FROB(f40,,f42,f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis8e,vis8r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56) 622 STORE 623 add %dst, 64, %dst 624vis9: FREG_FROB(f56,,f58,f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis9e,vis9r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40) 625 STORE 626 ba,pt %xcc, vis8 627 add %dst, 64, %dst 628 .align 128 629vis10: FREG_FROB(f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis10e,vis10r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58) 630 STORE 631 add %dst, 64, %dst 632vis11: FREG_FROB(f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis11e,vis11r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42) 633 STORE 634 ba,pt %xcc, vis10 635 add %dst, 64, %dst 636 .align 128 637vis12: FREG_FROB(f44,,f46,ftmp1,LOAD(f32,f46,vis12e,vis12r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60) 638 STORE 639 add %dst, 64, %dst 640vis13: FREG_FROB(f60,,f62,ftmp1,LOAD(f48,f62,vis13e,vis13r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44) 641 STORE 642 ba,pt %xcc, vis12 643 add %dst, 64, %dst 644 .align 128 645vis14: FREG_FROB(ftmp1,LOAD(f32,f46,vis14e,vis14r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62) 646 STORE 647 add %dst, 64, %dst 648vis15: FREG_FROB(ftmp1,LOAD(f48,f62,vis15e,vis15r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46) 649 STORE 650 ba,pt %xcc, vis14 651 add %dst, 64, %dst 652 653leftst: brlz,pn %curw, narrowst + 4 654 and %leftw, 0x38, %tmp1 655 andcc %leftw, 7, %g0 656 be,pn %icc, 1f 657 neg %tmp1 658 sub %dst, %leftw, %tmp4 659 add %branchbase, (2f - BranchBase - 8), %tmp2 660 edge8 %tmp4, %g0, %tmp5 661 jmpl %tmp2 + %tmp1, %g0 662 andn %tmp4, 7, %tmp4 6631: addcc %branchbase, (3f - BranchBase), %tmp2 664 sra %tmp1, 1, %tmp1 665 jmpl %tmp2 + %tmp1, %g0 666 nop 667 ba,pt %xcc, 2f+0x00 668 stda %f16, [%tmp4 + %tmp5] ASI_PST8_P 669 ba,pt %xcc, 2f+0x04 670 stda %f18, [%tmp4 + %tmp5] ASI_PST8_P 671 ba,pt %xcc, 2f+0x08 672 stda %f20, [%tmp4 + %tmp5] ASI_PST8_P 673 ba,pt %xcc, 2f+0x0c 674 stda %f22, [%tmp4 + %tmp5] ASI_PST8_P 675 ba,pt %xcc, 2f+0x10 676 stda %f24, [%tmp4 + %tmp5] ASI_PST8_P 677 ba,pt %xcc, 2f+0x14 678 stda %f26, [%tmp4 + %tmp5] ASI_PST8_P 679 ba,pt %xcc, 2f+0x18 680 stda %f28, [%tmp4 + %tmp5] ASI_PST8_P 681 jmpl %branchbase + %tmp3, %g0 682 stda %f30, [%tmp4 + %tmp5] ASI_PST8_P 6832: std %f18, [%dst - 0x38] 684 std %f20, [%dst - 0x30] 685 std %f22, [%dst - 0x28] 686 std %f24, [%dst - 0x20] 687 std %f26, [%dst - 0x18] 688 std %f28, [%dst - 0x10] 689 std %f30, [%dst - 0x08] 6903: jmpl %branchbase + %tmp3, %g0 691 nop 692 693rightst:cmp %rightw, 64 694 be,pn %icc, 2f 695 and %rightw, 0x38, %tmp1 696 andcc %rightw, 7, %g0 697 be,pn %icc, 1f 698 neg %tmp1 699 sub %g0, %rightw, %tmp5 700 add %branchbase, (3f - BranchBase - 8), %tmp2 701 edge8l %tmp5, %g0, %tmp5 702 add %mode, %skind, %mode 703 jmpl %tmp1 + %tmp2, %g0 704 sub %dst, %tmp1, %tmp4 7051: addcc %branchbase, (4f - BranchBase), %tmp2 706 sra %tmp1, 1, %tmp1 707 jmpl %tmp1 + %tmp2, %g0 7082: add %mode, %skind, %mode 709 ba,pt %xcc, 4f 710 stda %f16, [%dst] ASI_BLK_P 711 ba,pt %xcc, 3f+0x00 712 stda %f30, [%tmp4 + %tmp5] ASI_PST8_P 713 ba,pt %xcc, 3f+0x04 714 stda %f28, [%tmp4 + %tmp5] ASI_PST8_P 715 ba,pt %xcc, 3f+0x08 716 stda %f26, [%tmp4 + %tmp5] ASI_PST8_P 717 ba,pt %xcc, 3f+0x0c 718 stda %f24, [%tmp4 + %tmp5] ASI_PST8_P 719 ba,pt %xcc, 3f+0x10 720 stda %f22, [%tmp4 + %tmp5] ASI_PST8_P 721 ba,pt %xcc, 3f+0x14 722 stda %f20, [%tmp4 + %tmp5] ASI_PST8_P 723 ba,pt %xcc, 3f+0x18 724 stda %f18, [%tmp4 + %tmp5] ASI_PST8_P 725 ba,pt %xcc, 3f+0x1c 726 stda %f16, [%tmp4 + %tmp5] ASI_PST8_P 7273: std %f28, [%dst + 0x30] 728 std %f26, [%dst + 0x28] 729 std %f24, [%dst + 0x20] 730 std %f22, [%dst + 0x18] 731 std %f20, [%dst + 0x10] 732 std %f18, [%dst + 0x08] 733 std %f16, [%dst + 0x00] 7344: brnz,pn %narrow, narrow_cont 735 deccc %srcnotdone 736 blu,pn %ICC, return 737 sub %mode, %dkind, %mode 738 alignaddr %mode, %g0, %g0 739 and %mode, 63, %mode 740 cmp %srcnext, %srcn 741 bne,a,pn %ICC, 6f 742 xor %fregset, 64, %fregset 743 brnz,a,pn %fregset, 5f 744 ldda [%src] ASI_BLK_P, %f32 745 ldda [%src] ASI_BLK_P, %f48 7465: add %src, 64, %src 7476: add %dst, %dkind, %dst 748 sub %w, %rightw, %tmp1 749 add %srcstart, %skind, %srcstart 750 sub %dst, %tmp1, %dst 751 add %rightw, %dkind, %rightw 752 andn %dst, 63, %dst 753 sub %rightw, 1, %rightw 754 sub %leftw, %dkind, %leftw 755 and %rightw, 63, %rightw 756 and %leftw, 63, %leftw 757 add %rightw, 1, %rightw 758roll_wide: 759 add %srcstart, %w, %srcend 760 add %srcstart, %skind, %srcnext 761 fnop 762 add %srcend, 63, %srcend 763 andncc %srcnext, 63, %srcnext 764 fnop 765 sll %mode, 4, %tmp1 766 andn %srcend, 63, %srcend 767 fnop 768 mov %srcnext, %srcn 769 and %mode, 7, %rightw2 770 fnop 771 andn %tmp1, 127, %tmp1 772 add %rightw2, %rightw, %rightw2 773 fnop 774 add %tmp1, %fregset, %tmp1 775 subcc %w, %leftw, %tmp3 776 fnop 777 srl %tmp1, 1, %tmp2 778 add %srcnext, 64, %tmp4 779 fnop 780 add %tmp2, (prepn0 - BranchBase), %tmp2 781 cmp %mode, %leftw 782 movgeu %icc, %tmp2, %tmp1 783 cmp %tmp4, %srcend 784 add %dst, 64, %tmp4 785 move %ICC, %srcend, %srcnext 786 movrnz %leftw, %tmp4, %dst 787 jmpl %branchbase + %tmp1, %g0 788 sub %tmp3, %rightw, %curw 789 790return: return %i7+8 791#if defined(__NetBSD__) 792 wr %g0, 4, %fprs 793#else 794 wr %g0, 0, %fprs 795#endif 796 797narrowst: 798 and %leftw, 0x38, %tmp1 799 sub %dst, %leftw, %tmp5 800 sub %w, 1, %fregset 801 andcc %leftw, 7, %tmp4 802 add %fregset, %tmp5, %fregset 803 neg %tmp1 804 and %fregset, 7, %srcend 805 be,pn %icc, 1f 806 edge8 %g0, %srcend, %srcend 807 add %tmp1, (2f - BranchBase - 8), %tmp1 808 edge8 %tmp5, %fregset, %tmp2 809 andn %tmp5, 7, %tmp5 810 andn %fregset, 7, %fregset 811 jmpl %branchbase + %tmp1, %g0 812 sub %w, %tmp4, %tmp4 8131: addcc %branchbase, (3f - BranchBase - 8), %tmp2 814 sll %tmp1, 1, %tmp1 815 andn %fregset, 7, %fregset 816 jmpl %tmp2 + %tmp1, %g0 817 mov %w, %tmp4 818 ba,pt %xcc, 2f+0x00 819 stda %f16, [%tmp5 + %tmp2] ASI_PST8_P 820 ba,pt %xcc, 2f+0x10 821 stda %f18, [%tmp5 + %tmp2] ASI_PST8_P 822 ba,pt %xcc, 2f+0x20 823 stda %f20, [%tmp5 + %tmp2] ASI_PST8_P 824 ba,pt %xcc, 2f+0x30 825 stda %f22, [%tmp5 + %tmp2] ASI_PST8_P 826 ba,pt %xcc, 2f+0x40 827 stda %f24, [%tmp5 + %tmp2] ASI_PST8_P 828 ba,pt %xcc, 2f+0x50 829 stda %f26, [%tmp5 + %tmp2] ASI_PST8_P 830 ba,pt %xcc, 2f+0x60 831 stda %f28, [%tmp5 + %tmp2] ASI_PST8_P 832 ba,pt %xcc, 4f 833 stda %f30, [%tmp5 + %tmp2] ASI_PST8_P 8342: subcc %tmp4, 8, %tmp4 835 bl,pn %icc, 3f+0x00 836 fnop 837 std %f18, [%dst - 0x38] 838 subcc %tmp4, 8, %tmp4 839 bl,pn %icc, 3f+0x10 840 fnop 841 std %f20, [%dst - 0x30] 842 subcc %tmp4, 8, %tmp4 843 bl,pn %icc, 3f+0x20 844 fnop 845 std %f22, [%dst - 0x28] 846 subcc %tmp4, 8, %tmp4 847 bl,pn %icc, 3f+0x30 848 fnop 849 std %f24, [%dst - 0x20] 850 subcc %tmp4, 8, %tmp4 851 bl,pn %icc, 3f+0x40 852 fnop 853 std %f26, [%dst - 0x18] 854 subcc %tmp4, 8, %tmp4 855 bl,pn %icc, 3f+0x50 856 fnop 857 std %f28, [%dst - 0x10] 858 subcc %tmp4, 8, %tmp4 859 bl,pn %icc, 3f+0x60 860 fnop 861 std %f30, [%dst - 0x08] 862 ba,pt %xcc, 4f 863 nop 8643: cmp %tmp4, -8 865 bg,a,pn %ICC, 4f 866 stda %f18, [%fregset + %srcend] ASI_PST8_P 867 ba,a,pt %xcc, 4f 868 cmp %tmp4, -8 869 bg,a,pn %ICC, 4f 870 stda %f20, [%fregset + %srcend] ASI_PST8_P 871 ba,a,pt %xcc, 4f 872 cmp %tmp4, -8 873 bg,a,pn %ICC, 4f 874 stda %f22, [%fregset + %srcend] ASI_PST8_P 875 ba,a,pt %xcc, 4f 876 cmp %tmp4, -8 877 bg,a,pn %ICC, 4f 878 stda %f24, [%fregset + %srcend] ASI_PST8_P 879 ba,a,pt %xcc, 4f 880 cmp %tmp4, -8 881 bg,a,pn %ICC, 4f 882 stda %f26, [%fregset + %srcend] ASI_PST8_P 883 ba,a,pt %xcc, 4f 884 cmp %tmp4, -8 885 bg,a,pn %ICC, 4f 886 stda %f28, [%fregset + %srcend] ASI_PST8_P 887 ba,a,pt %xcc, 4f 888 cmp %tmp4, -8 889 bg,a,pn %ICC, 4f 890 stda %f30, [%fregset + %srcend] ASI_PST8_P 8914: and %tmp3, 60, %tmp3 892 sub %dst, 64, %dst 893 add %tmp3, 96, %tmp3 894 add %mode, %skind, %mode 895 brz,pn %h, return 896 and %tmp3, 64, %fregset 897narrow_cont: 898 deccc %h 899 blu,pn %ICC, return 900 sub %mode, %dkind, %mode 901 alignaddr %mode, %g0, %g0 902 and %mode, 63, %mode 903 sub %srcnext, %srcn, %tmp4 904 add %dst, %dkind, %dst 905 sub %w, %rightw, %tmp1 906 add %srcstart, %skind, %srcstart 907 sub %dst, %tmp1, %dst 908 add %rightw, %dkind, %rightw 909 sub %leftw, %dkind, %leftw 910 sub %rightw, 1, %rightw 911 and %leftw, 63, %leftw 912 and %rightw, 63, %rightw 913 add %srcstart, %w, %srcend 914 add %rightw, 1, %rightw 915 add %srcstart, %skind, %srcnext 916 add %srcend, 63, %srcend 917 andn %srcnext, 63, %srcnext 918 andn %srcend, 63, %srcend 919 sub %w, %leftw, %prepw 920 mov %srcnext, %srcn 921 add %srcnext, 64, %tmp2 922 sub %srcnext, 64, %tmp3 923 and %srcstart, 63, %tmp1 924 cmp %skind, 0 925 movg %ICC, %srcend, %tmp3 926 sub %prepw, %rightw, %prepw 927 add %tmp1, %w, %tmp1 928 cmp %tmp2, %srcend 929 mov %prepw, %curw 930 move %ICC, %tmp3, %srcnext 931 mov %h, %srcnotdone 932 cmp %tmp1, 128 933 movg %ICC, 64, %prepw 934 andn %dst, 63, %dst 935 cmp %srcnext, %srcstop 936 move %ICC, 0, %srcnotdone 937 brnz,a,pn %tmp4, roll_narrow 938 xor %fregset, 64, %fregset 939 cmp %tmp1, 64 940 bg,pt %ICC, 5f 941 tst %srcnotdone 942 be,a,pn %ICC, roll_narrow 943 membar SYNC 944 mov %srcnext, %src 9455: brnz,a,pn %fregset, 6f 946 ldda [%src] ASI_BLK_P, %f32 947 ldda [%src] ASI_BLK_P, %f48 9486: addcc %src, 64, %src 949roll_narrow: 950 fnop 951 sll %mode, 4, %tmp2 952 and %mode, 7, %rightw2 953 fnop 954 andn %tmp2, 127, %tmp2 955 add %dst, 64, %tmp4 956 fnop 957 add %tmp2, %fregset, %tmp2 958 addcc %rightw2, %rightw, %rightw2 959 fnop 960 srl %tmp2, 1, %tmp3 961 movrnz %leftw, %tmp4, %dst 962 fnop 963 add %tmp3, (prepr0 - BranchBase), %tmp4 964 cmp %tmp1, 64 965 movleu %icc, %tmp4, %tmp2 966 fnop 967 add %tmp3, (prepn0 - BranchBase), %tmp4 968 cmp %mode, %leftw 969 fnop 970 movgeu %icc, %tmp4, %tmp2 971 jmpl %branchbase + %tmp2, %g0 972 and %tmp3, 32, %tmp3 973 974#define VISEND(i,tgt,tgtr,fi,fset) \ 975tgt: \ 976 brnz,pt %curw, 1f; \ 977 cmp %rightw2, (64 - (i&14)*4); \ 978 bgu,pn %icc, tgtr - 8; \ 979 tst %srcnotdone; \ 980 be,a,pn %ICC, tgtr; \ 981 membar SYNC; \ 982 ba,pt %xcc, tgtr - 8; \ 983 mov %srcnext, %src; \ 9841: mov ((i & 1) ^ 1) * 64, %fregset; \ 985 bleu,pn %icc, rightst; \ 986 faligndata %ftmp1, %ftmp2, %fi; \ 987 brz,a,pn %srcnotdone, 3f; \ 988 membar SYNC; \ 989 ldda [%srcnext] ASI_BLK_P, %fset; \ 990 add %srcnext, 64, %src; \ 9913: mov (i & 1) * 64, %fregset; 992 993VISEND(0,vis0e,vis0r,f30,f32) 994 ba,pt %xcc, rightst 995 faligndata %ftmp1, %f48, %f30 996VISEND(1,vis1e,vis1r,f30,f48) 997 ba,pt %xcc, rightst 998 faligndata %ftmp1, %f32, %f30 999VISEND(2,vis2e,vis2r,f28,f32) 1000 faligndata %ftmp1, %f48, %f28 1001 ba,pt %xcc, rightst 1002 faligndata %f48, %f50, %f30 1003VISEND(3,vis3e,vis3r,f28,f48) 1004 faligndata %ftmp1, %f32, %f28 1005 ba,pt %xcc, rightst 1006 faligndata %f32, %f34, %f30 1007VISEND(4,vis4e,vis4r,f26,f32) 1008 faligndata %ftmp1, %f48, %f26 1009 faligndata %f48, %f50, %f28 1010 ba,pt %xcc, rightst 1011 faligndata %f50, %f52, %f30 1012VISEND(5,vis5e,vis5r,f26,f48) 1013 faligndata %ftmp1, %f32, %f26 1014 faligndata %f32, %f34, %f28 1015 ba,pt %xcc, rightst 1016 faligndata %f34, %f36, %f30 1017VISEND(6,vis6e,vis6r,f24,f32) 1018 faligndata %ftmp1, %f48, %f24 1019 faligndata %f48, %f50, %f26 1020 faligndata %f50, %f52, %f28 1021 ba,pt %xcc, rightst 1022 faligndata %f52, %f54, %f30 1023VISEND(7,vis7e,vis7r,f24,f48) 1024 faligndata %ftmp1, %f32, %f24 1025 faligndata %f32, %f34, %f26 1026 faligndata %f34, %f36, %f28 1027 ba,pt %xcc, rightst 1028 faligndata %f36, %f38, %f30 1029VISEND(8,vis8e,vis8r,f22,f32) 1030 faligndata %ftmp1, %f48, %f22 1031 faligndata %f48, %f50, %f24 1032 faligndata %f50, %f52, %f26 1033 faligndata %f52, %f54, %f28 1034 ba,pt %xcc, rightst 1035 faligndata %f54, %f56, %f30 1036VISEND(9,vis9e,vis9r,f22,f48) 1037 faligndata %ftmp1, %f32, %f22 1038 faligndata %f32, %f34, %f24 1039 faligndata %f34, %f36, %f26 1040 faligndata %f36, %f38, %f28 1041 ba,pt %xcc, rightst 1042 faligndata %f38, %f40, %f30 1043VISEND(10,vis10e,vis10r,f20,f32) 1044 faligndata %ftmp1, %f48, %f20 1045 faligndata %f48, %f50, %f22 1046 faligndata %f50, %f52, %f24 1047 faligndata %f52, %f54, %f26 1048 faligndata %f54, %f56, %f28 1049 ba,pt %xcc, rightst 1050 faligndata %f56, %f58, %f30 1051VISEND(11,vis11e,vis11r,f20,f48) 1052 faligndata %ftmp1, %f32, %f20 1053 faligndata %f32, %f34, %f22 1054 faligndata %f34, %f36, %f24 1055 faligndata %f36, %f38, %f26 1056 faligndata %f38, %f40, %f28 1057 ba,pt %xcc, rightst 1058 faligndata %f40, %f42, %f30 1059VISEND(12,vis12e,vis12r,f18,f32) 1060 faligndata %ftmp1, %f48, %f18 1061 faligndata %f48, %f50, %f20 1062 faligndata %f50, %f52, %f22 1063 faligndata %f52, %f54, %f24 1064 faligndata %f54, %f56, %f26 1065 faligndata %f56, %f58, %f28 1066 ba,pt %xcc, rightst 1067 faligndata %f58, %f60, %f30 1068VISEND(13,vis13e,vis13r,f18,f48) 1069 faligndata %ftmp1, %f32, %f18 1070 faligndata %f32, %f34, %f20 1071 faligndata %f34, %f36, %f22 1072 faligndata %f36, %f38, %f24 1073 faligndata %f38, %f40, %f26 1074 faligndata %f40, %f42, %f28 1075 ba,pt %xcc, rightst 1076 faligndata %f42, %f44, %f30 1077VISEND(14,vis14e,vis14r,f16,f32) 1078 faligndata %ftmp1, %f48, %f16 1079 faligndata %f48, %f50, %f18 1080 faligndata %f50, %f52, %f20 1081 faligndata %f52, %f54, %f22 1082 faligndata %f54, %f56, %f24 1083 faligndata %f56, %f58, %f26 1084 faligndata %f58, %f60, %f28 1085 ba,pt %xcc, rightst 1086 faligndata %f60, %f62, %f30 1087VISEND(15,vis15e,vis15r,f16,f48) 1088 faligndata %ftmp1, %f32, %f16 1089 faligndata %f32, %f34, %f18 1090 faligndata %f34, %f36, %f20 1091 faligndata %f36, %f38, %f22 1092 faligndata %f38, %f40, %f24 1093 faligndata %f40, %f42, %f26 1094 faligndata %f42, %f44, %f28 1095 ba,pt %xcc, rightst 1096 faligndata %f44, %f46, %f30 1097 1098#define PREPEND(tgt,tgtr) \ 1099tgt: \ 1100 brnz,pt %srcnotdone, tgtr - 8; \ 1101 mov %srcnext, %src; \ 1102 ba,pt %xcc, tgtr; \ 1103 membar SYNC; 1104 1105 .align 16 1106PREPEND(prep0e,prep0r) 1107PREPEND(prep1e,prep1r) 1108PREPEND(prep2e,prep2r) 1109PREPEND(prep3e,prep3r) 1110PREPEND(prep4e,prep4r) 1111PREPEND(prep5e,prep5r) 1112PREPEND(prep6e,prep6r) 1113PREPEND(prep7e,prep7r) 1114PREPEND(prep8e,prep8r) 1115PREPEND(prep9e,prep9r) 1116PREPEND(prep10e,prep10r) 1117PREPEND(prep11e,prep11r) 1118PREPEND(prep12e,prep12r) 1119PREPEND(prep13e,prep13r) 1120PREPEND(prep14e,prep14r) 1121PREPEND(prep15e,prep15r) 1122 1123/* The other way is even more complicated, as the hardware prefers 1124 * going from lower addresses up. */ 1125 1126#define RLOAD(f32,tgt,tgtr) \ 1127 subcc %curw, 64, %curw; \ 1128 bleu,pn %ICC, tgt; \ 1129 fmovd %f32, %ftmp1; \ 1130 ldda [%src] ASI_BLK_P, %f32; \ 1131 sub %src, 64, %src; \ 1132tgtr: 1133 1134#if defined(__sparc_v9__) || defined(__sparcv9) || defined(__arch64__) || !defined(SIGNAL_CLOBBERS_OG_REGS) 1135 1136#define RPREPLOAD(f32,tgt,tgtr) \ 1137 brlez,pn %prepw, tgt; \ 1138 fmovd %f32, %ftmp1; \ 1139 ldda [%src] ASI_BLK_P, %f32; \ 1140 sub %src, 64, %src; \ 1141tgtr: 1142 1143#else 1144 1145#define RPREPLOAD(f32,tgt,tgtr) \ 1146 tst %prepw; \ 1147 ble,pn %ICC, tgt; \ 1148 fmovd %f32, %ftmp1; \ 1149 ldda [%src] ASI_BLK_P, %f32; \ 1150 sub %src, 64, %src; \ 1151tgtr: 1152 1153#endif 1154 1155 .globl VISmoveImageRL 1156 .align 32 1157VISmoveImageRL: 1158#ifdef __arch64__ 1159 save %sp, -192, %sp ! Group 0 1160#else 1161 save %sp, -96, %sp ! Group 0 1162#endif 11630: rd %pc, %tmp3 ! Group 1 1164 and %dst, 63, %leftw ! Group 7 1165 mov 64, %tmp1 1166 add %src, %w, %src ! Group 8 1167 add %dst, %w, %dst 1168 sub %src, %dst, %mode ! Group 9 1169 brz,pn %h, rreturn 1170 sub %dst, 1, %rightw ! Group 10 1171 mov %src, %srcstart 1172 dec %src ! Group 11 1173 cmp %w, 128 1174 blu,pn %ICC, rprepare_narrow 1175 and %mode, 63, %mode ! Group 12 1176 andn %src, 63, %src 1177 ldda [%src] ASI_BLK_P, %f32 ! Group 13 1178 sub %src, 64, %src ! Group 14 1179 clr %narrow 1180 ldda [%src] ASI_BLK_P, %f48 ! Group 15 1181 sub %tmp1, %leftw, %leftw ! Group 16 1182 and %rightw, 63, %rightw 1183 dec %dst ! Group 17 1184 add %rightw, 1, %rightw 1185 alignaddr %mode, %g0, %g0 ! Group 18 1186 andn %dst, 63, %dst ! Group 19 1187 clr %fregset 1188 sub %src, 64, %src ! Group 20 1189 add %tmp3, (BranchBaseR - 0b), %branchbase 1190 mov 64, %prepw ! Group 21 1191 ba,pt %xcc, rroll_wide 1192 sub %h, 1, %srcnotdone 1193rprepare_narrow: 1194#if defined(__sparc_v9__) || defined(__sparcv9) || defined(__arch64__) 1195 brlez,pn %w, rreturn 1196#else 1197 tst %w 1198 ble,pn %icc, rreturn 1199#endif 1200 andn %src, 63, %src ! Group 12 1201 sub %tmp1, %leftw, %leftw 1202 ldda [%src] ASI_BLK_P, %f32 ! Group 13 1203 and %rightw, 63, %rightw ! Group 14 1204 dec %dst 1205 add %rightw, 1, %rightw ! Group 15 1206 andn %dst, 63, %dst 1207 sub %w, %leftw, %tmp2 ! Group 16 1208 sub %srcstart, 1, %tmp1 1209 subcc %tmp2, %rightw, %curw ! Group 17 1210 and %tmp1, 63, %tmp1 1211 mov %curw, %prepw ! Group 18 1212 sub %tmp1, %w, %tmp1 1213 bg,pt %ICC, 1f 1214 sub %src, 64, %src ! Group 19 1215 cmp %tmp1, -65 1216 movl %ICC, 64, %prepw ! Group 20 12171: add %srcstart, %skind, %srcnext 1218 sub %h, 1, %srcnotdone ! Group 21 1219 sub %srcstart, %w, %tmp4 1220 sub %srcnext, 1, %srcnext ! Group 22 1221 andn %tmp4, 63, %srcend 1222 andn %srcnext, 63, %srcnext ! Group 23 1223 cmp %skind, 0 1224 add %w, 64, %tmp2 ! Group 24 1225 mov %srcnext, %srcn 1226 bl,pn %ICC, 1f 1227 clr %srcstop ! Group 25 1228 cmp %skind, %tmp2 1229 bgeu,pt %ICC, 3f 1230 add %srcnext, 64, %fregset 1231 SMUL %skind, %srcnotdone, %srcstop 1232 ba,pt %xcc, 2f 1233 add %srcstart, 63, %tmp4 12341: addcc %tmp2, %skind, %g0 1235 ble,pt %ICC, 3f 1236 sub %srcnext, 64, %fregset 1237 SMUL %skind, %srcnotdone, %srcstop 1238 sub %tmp4, 64, %tmp4 12392: add %srcstop, %tmp4, %srcstop 12403: cmp %srcnext, %srcend 1241 andn %srcstop, 63, %srcstop 1242 move %ICC, %fregset, %srcnext 1243 cmp %srcnext, %srcstop 1244 clr %fregset 1245 move %ICC, 0, %srcnotdone 1246 alignaddr %mode, %g0, %g0 1247 add %tmp3, (BranchBaseR - 0b), %branchbase 1248 mov 1, %narrow 1249 cmp %tmp1, -1 1250 bge,pn %ICC, 1f 1251 dec %h 1252 ldda [%src] ASI_BLK_P, %f48 1253 ba,pt %xcc, rroll_narrow 1254 subcc %src, 64, %src 12551: brz,a,pn %srcnotdone, rroll_narrow 1256 membar #Sync 1257 ldda [%srcnext] ASI_BLK_P, %f48 1258 ba,pt %xcc, rroll_narrow 1259 subcc %srcnext, 64, %src 1260 1261 .align 32 1262rrepr0: ba,pt %xcc, narrowstr 1263 faligndata %ftmp1, %f32, %f30 1264 nop 1265 nop 12661: ba,pt %xcc, narrowstr 1267 faligndata %ftmp1, %f32, %f16 1268 .align 32 1269rrepr1: ba,pt %xcc, narrowstr 1270 faligndata %ftmp1, %f48, %f30 1271 nop 1272 nop 12732: ba,pt %xcc, narrowstr 1274 faligndata %ftmp1, %f48, %f16 1275 .align 32 1276rrepr2: faligndata %f32, %f34, %f30 1277 ba,pt %xcc, narrowstr 1278 faligndata %ftmp1, %f32, %f28 1279 .align 32 1280rrepr3: faligndata %f48, %f50, %f30 1281 ba,pt %xcc, narrowstr 1282 faligndata %ftmp1, %f48, %f28 1283 .align 32 1284rrepr4: faligndata %f34, %f36, %f30 1285 faligndata %f32, %f34, %f28 1286 ba,pt %xcc, narrowstr 1287 faligndata %ftmp1, %f32, %f26 1288 .align 32 1289rrepr5: faligndata %f50, %f52, %f30 1290 faligndata %f48, %f50, %f28 1291 ba,pt %xcc, narrowstr 1292 faligndata %ftmp1, %f48, %f26 1293 .align 32 1294rrepr6: faligndata %f36, %f38, %f30 1295 faligndata %f34, %f36, %f28 1296 faligndata %f32, %f34, %f26 1297 ba,pt %xcc, narrowstr 1298 faligndata %ftmp1, %f32, %f24 1299 .align 32 1300rrepr7: faligndata %f52, %f54, %f30 1301 faligndata %f50, %f52, %f28 1302 faligndata %f48, %f50, %f26 1303 ba,pt %xcc, narrowstr 1304 faligndata %ftmp1, %f48, %f24 1305 .align 32 1306rrepr8: faligndata %f38, %f40, %f30 1307 faligndata %f36, %f38, %f28 1308 faligndata %f34, %f36, %f26 1309 faligndata %f32, %f34, %f24 1310 ba,pt %xcc, narrowstr 1311 faligndata %ftmp1, %f32, %f22 1312 .align 32 1313rrepr9: faligndata %f54, %f56, %f30 1314 faligndata %f52, %f54, %f28 1315 faligndata %f50, %f52, %f26 1316 faligndata %f48, %f50, %f24 1317 ba,pt %xcc, narrowstr 1318 faligndata %ftmp1, %f48, %f22 1319 .align 32 1320rrepr10:faligndata %f40, %f42, %f30 1321 faligndata %f38, %f40, %f28 1322 faligndata %f36, %f38, %f26 1323 faligndata %f34, %f36, %f24 1324 faligndata %f32, %f34, %f22 1325 ba,pt %xcc, narrowstr 1326 faligndata %ftmp1, %f32, %f20 1327 .align 32 1328rrepr11:faligndata %f56, %f58, %f30 1329 faligndata %f54, %f56, %f28 1330 faligndata %f52, %f54, %f26 1331 faligndata %f50, %f52, %f24 1332 faligndata %f48, %f50, %f22 1333 ba,pt %xcc, narrowstr 1334 faligndata %ftmp1, %f48, %f20 1335 .align 32 1336rrepr12:faligndata %f42, %f44, %f30 1337 faligndata %f40, %f42, %f28 1338 faligndata %f38, %f40, %f26 1339 faligndata %f36, %f38, %f24 1340 faligndata %f34, %f36, %f22 1341 faligndata %f32, %f34, %f20 1342 ba,pt %xcc, narrowstr 1343 faligndata %ftmp1, %f32, %f18 1344 .align 32 1345rrepr13:faligndata %f58, %f60, %f30 1346 faligndata %f56, %f58, %f28 1347 faligndata %f54, %f56, %f26 1348 faligndata %f52, %f54, %f24 1349 faligndata %f50, %f52, %f22 1350 faligndata %f48, %f50, %f20 1351 ba,pt %xcc, narrowstr 1352 faligndata %ftmp1, %f48, %f18 1353 .align 32 1354rrepr14:faligndata %f44, %f46, %f30 1355 faligndata %f42, %f44, %f28 1356 faligndata %f40, %f42, %f26 1357 faligndata %f38, %f40, %f24 1358 faligndata %f36, %f38, %f22 1359 faligndata %f34, %f36, %f20 1360 ba,pt %xcc, 1b 1361 faligndata %f32, %f34, %f18 1362 .align 32 1363rrepr15:faligndata %f60, %f62, %f30 1364 faligndata %f58, %f60, %f28 1365 faligndata %f56, %f58, %f26 1366 faligndata %f54, %f56, %f24 1367 faligndata %f52, %f54, %f22 1368 faligndata %f50, %f52, %f20 1369 ba,pt %xcc, 2b 1370 faligndata %f48, %f50, %f18 1371 1372 .align 32 1373rrepn0: faligndata %f46, %ftmp1, %f30 1374 faligndata %f44, %f46, %f28 1375 faligndata %f42, %f44, %f26 1376 faligndata %f40, %f42, %f24 1377 faligndata %f38, %f40, %f22 1378 faligndata %f36, %f38, %f20 1379 ba,pt %xcc, 1f 1380 faligndata %f34, %f36, %f18 1381 .align 32 1382rrepn1: faligndata %f62, %ftmp1, %f30 1383 faligndata %f60, %f62, %f28 1384 faligndata %f58, %f60, %f26 1385 faligndata %f56, %f58, %f24 1386 faligndata %f54, %f56, %f22 1387 faligndata %f52, %f54, %f20 1388 ba,pt %xcc, 2f 1389 faligndata %f50, %f52, %f18 1390 .align 32 1391rrepn2: faligndata %f46, %ftmp1, %f28 1392 faligndata %f44, %f46, %f26 1393 faligndata %f42, %f44, %f24 1394 faligndata %f40, %f42, %f22 1395 faligndata %f38, %f40, %f20 1396 faligndata %f36, %f38, %f18 1397 ba,pt %xcc, 3f 1398 faligndata %f34, %f36, %f16 1399 .align 32 1400rrepn3: faligndata %f62, %ftmp1, %f28 1401 faligndata %f60, %f62, %f26 1402 faligndata %f58, %f60, %f24 1403 faligndata %f56, %f58, %f22 1404 faligndata %f54, %f56, %f20 1405 faligndata %f52, %f54, %f18 1406 ba,pt %xcc, 4f 1407 faligndata %f50, %f52, %f16 1408 .align 32 1409rrepn4: faligndata %f46, %ftmp1, %f26 1410 faligndata %f44, %f46, %f24 1411 faligndata %f42, %f44, %f22 1412 faligndata %f40, %f42, %f20 1413 faligndata %f38, %f40, %f18 1414 faligndata %f36, %f38, %f16 1415 ba,pt %xcc, rightstr 1416 mov (rvis4 - BranchBaseR), %tmp3 1417 .align 32 1418rrepn5: faligndata %f62, %ftmp1, %f26 1419 faligndata %f60, %f62, %f24 1420 faligndata %f58, %f60, %f22 1421 faligndata %f56, %f58, %f20 1422 faligndata %f54, %f56, %f18 1423 faligndata %f52, %f54, %f16 1424 ba,pt %xcc, rightstr 1425 mov (rvis5 - BranchBaseR), %tmp3 1426 .align 32 1427rrepn6: faligndata %f46, %ftmp1, %f24 1428 faligndata %f44, %f46, %f22 1429 faligndata %f42, %f44, %f20 1430 faligndata %f40, %f42, %f18 1431 faligndata %f38, %f40, %f16 1432 ba,pt %xcc, rightstr 1433 mov (rvis6 - BranchBaseR), %tmp3 1434 .align 32 1435rrepn7: faligndata %f62, %ftmp1, %f24 1436 faligndata %f60, %f62, %f22 1437 faligndata %f58, %f60, %f20 1438 faligndata %f56, %f58, %f18 1439 faligndata %f54, %f56, %f16 1440 ba,pt %xcc, rightstr 1441 mov (rvis7 - BranchBaseR), %tmp3 1442 .align 32 1443rrepn8: faligndata %f46, %ftmp1, %f22 1444 faligndata %f44, %f46, %f20 1445 faligndata %f42, %f44, %f18 1446 faligndata %f40, %f42, %f16 1447 ba,pt %xcc, rightstr 1448 mov (rvis8 - BranchBaseR), %tmp3 1449 .align 32 1450rrepn9: faligndata %f62, %ftmp1, %f22 1451 faligndata %f60, %f62, %f20 1452 faligndata %f58, %f60, %f18 1453 faligndata %f56, %f58, %f16 1454 ba,pt %xcc, rightstr 1455 mov (rvis9 - BranchBaseR), %tmp3 1456 .align 32 1457rrepn10:faligndata %f46, %ftmp1, %f20 1458 faligndata %f44, %f46, %f18 1459 faligndata %f42, %f44, %f16 1460 ba,pt %xcc, rightstr 1461 mov (rvis10 - BranchBaseR), %tmp3 1462 .align 32 1463rrepn11:faligndata %f62, %ftmp1, %f20 1464 faligndata %f60, %f62, %f18 1465 faligndata %f58, %f60, %f16 1466 ba,pt %xcc, rightstr 1467 mov (rvis11 - BranchBaseR), %tmp3 1468 .align 32 1469rrepn12:faligndata %f46, %ftmp1, %f18 1470 faligndata %f44, %f46, %f16 1471 ba,pt %xcc, rightstr 1472 mov (rvis12 - BranchBaseR), %tmp3 1473 nop 1474 nop 14753: ba,pt %xcc, rightstr 1476 mov (rvis2 - BranchBaseR), %tmp3 1477 .align 32 1478rrepn13:faligndata %f62, %ftmp1, %f18 1479 faligndata %f60, %f62, %f16 1480 ba,pt %xcc, rightstr 1481 mov (rvis13 - BranchBaseR), %tmp3 1482 nop 1483 nop 14844: ba,pt %xcc, rightstr 1485 mov (rvis3 - BranchBaseR), %tmp3 1486 .align 32 1487rrepn14:faligndata %f46, %ftmp1, %f16 1488 ba,pt %xcc, rightstr 1489 mov (rvis14 - BranchBaseR), %tmp3 1490 nop 14911: faligndata %f32, %f34, %f16 1492 ba,pt %xcc, rightstr 1493 mov (rvis0 - BranchBaseR), %tmp3 1494 .align 32 1495rrepn15:faligndata %f62, %ftmp1, %f16 1496 ba,pt %xcc, rightstr 1497 mov (rvis15 - BranchBaseR), %tmp3 1498 nop 14992: faligndata %f48, %f50, %f16 1500 ba,pt %xcc, rightstr 1501 mov (rvis1 - BranchBaseR), %tmp3 1502 1503 .align 64 1504BranchBaseR: 1505rrepl0: RPREPLOAD(f32,rrep0e,rrep0r) 1506 fnop 1507 faligndata %f48, %f50, %f16 1508 faligndata %f50, %f52, %f18 1509 faligndata %f52, %f54, %f20 1510 faligndata %f54, %f56, %f22 1511 faligndata %f56, %f58, %f24 1512 faligndata %f58, %f60, %f26 1513 faligndata %f60, %f62, %f28 1514 faligndata %f62, %ftmp1, %f30 1515 ba,pt %xcc, rightstr 1516 mov (rvis1 - BranchBaseR), %tmp3 1517 nop 1518 nop 1519 .align 32 1520rrepl1: RPREPLOAD(f48,rrep1e,rrep1r) 1521 fnop 1522 faligndata %f32, %f34, %f16 1523 faligndata %f34, %f36, %f18 1524 faligndata %f36, %f38, %f20 1525 faligndata %f38, %f40, %f22 1526 faligndata %f40, %f42, %f24 1527 faligndata %f42, %f44, %f26 1528 faligndata %f44, %f46, %f28 1529 faligndata %f46, %ftmp1, %f30 1530 ba,pt %xcc, rightstr 1531 mov (rvis0 - BranchBaseR), %tmp3 1532 nop 1533 nop 1534 .align 32 1535rrepl2: faligndata %f32, %f34, %f30 1536 RPREPLOAD(f32,rrep2e,rrep2r) 1537 fnop 1538 fnop 1539 faligndata %f50, %f52, %f16 1540 faligndata %f52, %f54, %f18 1541 faligndata %f54, %f56, %f20 1542 faligndata %f56, %f58, %f22 1543 faligndata %f58, %f60, %f24 1544 faligndata %f60, %f62, %f26 1545 faligndata %f62, %ftmp1, %f28 1546 ba,pt %xcc, rightstr 1547 mov (rvis3 - BranchBaseR), %tmp3 1548 nop 1549 .align 32 1550rrepl3: faligndata %f48, %f50, %f30 1551 RPREPLOAD(f48,rrep3e,rrep3r) 1552 fnop 1553 fnop 1554 faligndata %f34, %f36, %f16 1555 faligndata %f36, %f38, %f18 1556 faligndata %f38, %f40, %f20 1557 faligndata %f40, %f42, %f22 1558 faligndata %f42, %f44, %f24 1559 faligndata %f44, %f46, %f26 1560 faligndata %f46, %ftmp1, %f28 1561 ba,pt %xcc, rightstr 1562 mov (rvis2 - BranchBaseR), %tmp3 1563 nop 1564 .align 32 1565rrepl4: faligndata %f32, %f34, %f28 1566 faligndata %f34, %f36, %f30 1567 RPREPLOAD(f32,rrep4e,rrep4r) 1568 fnop 1569 fnop 1570 fnop 1571 faligndata %f52, %f54, %f16 1572 faligndata %f54, %f56, %f18 1573 faligndata %f56, %f58, %f20 1574 faligndata %f58, %f60, %f22 1575 faligndata %f60, %f62, %f24 1576 faligndata %f62, %ftmp1, %f26 1577 ba,pt %xcc, rightstr 1578 mov (rvis5 - BranchBaseR), %tmp3 1579 .align 32 1580rrepl5: faligndata %f48, %f50, %f28 1581 faligndata %f50, %f52, %f30 1582 RPREPLOAD(f48,rrep5e,rrep5r) 1583 fnop 1584 fnop 1585 fnop 1586 faligndata %f36, %f38, %f16 1587 faligndata %f38, %f40, %f18 1588 faligndata %f40, %f42, %f20 1589 faligndata %f42, %f44, %f22 1590 faligndata %f44, %f46, %f24 1591 faligndata %f46, %ftmp1, %f26 1592 ba,pt %xcc, rightstr 1593 mov (rvis4 - BranchBaseR), %tmp3 1594 .align 32 1595rrepl6: faligndata %f32, %f34, %f26 1596 faligndata %f34, %f36, %f28 1597 faligndata %f36, %f38, %f30 1598 RPREPLOAD(f32,rrep6e,rrep6r) 1599 fnop 1600 fnop 1601 fnop 1602 fnop 1603 faligndata %f54, %f56, %f16 1604 faligndata %f56, %f58, %f18 1605 faligndata %f58, %f60, %f20 1606 faligndata %f60, %f62, %f22 1607 faligndata %f62, %ftmp1, %f24 1608 ba,pt %xcc, rightstr 1609 mov (rvis7 - BranchBaseR), %tmp3 1610 .align 32 1611rrepl7: faligndata %f48, %f50, %f26 1612 faligndata %f50, %f52, %f28 1613 faligndata %f52, %f54, %f30 1614 RPREPLOAD(f48,rrep7e,rrep7r) 1615 fnop 1616 fnop 1617 fnop 1618 fnop 1619 faligndata %f38, %f40, %f16 1620 faligndata %f40, %f42, %f18 1621 faligndata %f42, %f44, %f20 1622 faligndata %f44, %f46, %f22 1623 faligndata %f46, %ftmp1, %f24 1624 ba,pt %xcc, rightstr 1625 mov (rvis6 - BranchBaseR), %tmp3 1626 .align 32 1627rrepl8: faligndata %f32, %f34, %f24 1628 faligndata %f34, %f36, %f26 1629 faligndata %f36, %f38, %f28 1630 faligndata %f38, %f40, %f30 1631 RPREPLOAD(f32,rrep8e,rrep8r) 1632 fnop 1633 fnop 1634 fnop 1635 fnop 1636 fnop 1637 faligndata %f56, %f58, %f16 1638 faligndata %f58, %f60, %f18 1639 faligndata %f60, %f62, %f20 1640 faligndata %f62, %ftmp1, %f22 1641 ba,pt %xcc, rightstr 1642 mov (rvis9 - BranchBaseR), %tmp3 1643 .align 32 1644rrepl9: faligndata %f48, %f50, %f24 1645 faligndata %f50, %f52, %f26 1646 faligndata %f52, %f54, %f28 1647 faligndata %f54, %f56, %f30 1648 RPREPLOAD(f48,rrep9e,rrep9r) 1649 fnop 1650 fnop 1651 fnop 1652 fnop 1653 fnop 1654 faligndata %f40, %f42, %f16 1655 faligndata %f42, %f44, %f18 1656 faligndata %f44, %f46, %f20 1657 faligndata %f46, %ftmp1, %f22 1658 ba,pt %xcc, rightstr 1659 mov (rvis8 - BranchBaseR), %tmp3 1660 .align 32 1661rrepl10:faligndata %f32, %f34, %f22 1662 faligndata %f34, %f36, %f24 1663 faligndata %f36, %f38, %f26 1664 faligndata %f38, %f40, %f28 1665 faligndata %f40, %f42, %f30 1666 RPREPLOAD(f32,rrep10e,rrep10r) 1667 fnop 1668 fnop 1669 fnop 1670 fnop 1671 fnop 1672 fnop 1673 faligndata %f58, %f60, %f16 1674 faligndata %f60, %f62, %f18 1675 faligndata %f62, %ftmp1, %f20 1676 ba,pt %xcc, rightstr 1677 mov (rvis11 - BranchBaseR), %tmp3 1678 .align 32 1679rrepl11:faligndata %f48, %f50, %f22 1680 faligndata %f50, %f52, %f24 1681 faligndata %f52, %f54, %f26 1682 faligndata %f54, %f56, %f28 1683 faligndata %f56, %f58, %f30 1684 RPREPLOAD(f48,rrep11e,rrep11r) 1685 fnop 1686 fnop 1687 fnop 1688 fnop 1689 fnop 1690 fnop 1691 faligndata %f42, %f44, %f16 1692 faligndata %f44, %f46, %f18 1693 faligndata %f46, %ftmp1, %f20 1694 ba,pt %xcc, rightstr 1695 mov (rvis10 - BranchBaseR), %tmp3 1696 .align 32 1697rrepl12:faligndata %f32, %f34, %f20 1698 faligndata %f34, %f36, %f22 1699 faligndata %f36, %f38, %f24 1700 faligndata %f38, %f40, %f26 1701 faligndata %f40, %f42, %f28 1702 faligndata %f42, %f44, %f30 1703 RPREPLOAD(f32,rrep12e,rrep12r) 1704 fnop 1705 fnop 1706 fnop 1707 fnop 1708 fnop 1709 fnop 1710 fnop 1711 faligndata %f60, %f62, %f16 1712 faligndata %f62, %ftmp1, %f18 1713 ba,pt %xcc, rightstr 1714 mov (rvis13 - BranchBaseR), %tmp3 1715 .align 32 1716rrepl13:faligndata %f48, %f50, %f20 1717 faligndata %f50, %f52, %f22 1718 faligndata %f52, %f54, %f24 1719 faligndata %f54, %f56, %f26 1720 faligndata %f56, %f58, %f28 1721 faligndata %f58, %f60, %f30 1722 RPREPLOAD(f48,rrep13e,rrep13r) 1723 fnop 1724 fnop 1725 fnop 1726 fnop 1727 fnop 1728 fnop 1729 fnop 1730 faligndata %f44, %f46, %f16 1731 faligndata %f46, %ftmp1, %f18 1732 ba,pt %xcc, rightstr 1733 mov (rvis12 - BranchBaseR), %tmp3 1734 .align 32 1735rrepl14:faligndata %f32, %f34, %f18 1736 faligndata %f34, %f36, %f20 1737 faligndata %f36, %f38, %f22 1738 faligndata %f38, %f40, %f24 1739 faligndata %f40, %f42, %f26 1740 faligndata %f42, %f44, %f28 1741 faligndata %f44, %f46, %f30 1742 RPREPLOAD(f32,rrep14e,rrep14r) 1743 fnop 1744 fnop 1745 fnop 1746 fnop 1747 fnop 1748 fnop 1749 fnop 1750 faligndata %f62, %ftmp1, %f16 1751 ba,pt %xcc, rightstr 1752 mov (rvis15 - BranchBaseR), %tmp3 1753 .align 32 1754rrepl15:faligndata %f48, %f50, %f18 1755 faligndata %f50, %f52, %f20 1756 faligndata %f52, %f54, %f22 1757 faligndata %f54, %f56, %f24 1758 faligndata %f56, %f58, %f26 1759 faligndata %f58, %f60, %f28 1760 faligndata %f60, %f62, %f30 1761 RPREPLOAD(f48,rrep15e,rrep15r) 1762 fnop 1763 fnop 1764 fnop 1765 fnop 1766 fnop 1767 fnop 1768 fnop 1769 faligndata %f46, %ftmp1, %f16 1770 ba,pt %xcc, rightstr 1771 mov (rvis14 - BranchBaseR), %tmp3 1772 1773 .align 64 1774rvis0: nop 1775 RLOAD(f32,rvis0e,rvis0r) 1776 fnop 1777 faligndata %f48, %f50, %f16 1778 faligndata %f50, %f52, %f18 1779 faligndata %f52, %f54, %f20 1780 faligndata %f54, %f56, %f22 1781 faligndata %f56, %f58, %f24 1782 faligndata %f58, %f60, %f26 1783 faligndata %f60, %f62, %f28 1784 faligndata %f62, %ftmp1, %f30 1785 STORE 1786 sub %dst, 64, %dst 1787rvis1: RLOAD(f48,rvis1e,rvis1r) 1788 fnop 1789 faligndata %f32, %f34, %f16 1790 faligndata %f34, %f36, %f18 1791 faligndata %f36, %f38, %f20 1792 faligndata %f38, %f40, %f22 1793 faligndata %f40, %f42, %f24 1794 faligndata %f42, %f44, %f26 1795 faligndata %f44, %f46, %f28 1796 faligndata %f46, %ftmp1, %f30 1797 STORE 1798 ba,pt %xcc, rvis0+0x04 1799 sub %dst, 64, %dst 1800 .align 64 1801rvis2: faligndata %f32, %f34, %ftmp8 1802 RLOAD(f32,rvis2e,rvis2r) 1803 fnop 1804 fnop 1805 faligndata %f50, %f52, %f16 1806 faligndata %f52, %f54, %f18 1807 faligndata %f54, %f56, %f20 1808 faligndata %f56, %f58, %f22 1809 faligndata %f58, %f60, %f24 1810 faligndata %f60, %f62, %f26 1811 faligndata %f62, %ftmp1, %f28 1812 fmovd %ftmp8, %f30 1813 STORE 1814 sub %dst, 64, %dst 1815rvis3: faligndata %f48, %f50, %ftmp8 1816 RLOAD(f48,rvis3e,rvis3r) 1817 fnop 1818 fnop 1819 faligndata %f34, %f36, %f16 1820 faligndata %f36, %f38, %f18 1821 faligndata %f38, %f40, %f20 1822 faligndata %f40, %f42, %f22 1823 faligndata %f42, %f44, %f24 1824 faligndata %f44, %f46, %f26 1825 faligndata %f46, %ftmp1, %f28 1826 fmovd %ftmp8, %f30 1827 STORE 1828 ba,pt %xcc, rvis2 1829 sub %dst, 64, %dst 1830 .align 64 1831rvis4: faligndata %f32, %f34, %ftmp7 1832 faligndata %f34, %f36, %ftmp8 1833 RLOAD(f32,rvis4e,rvis4r) 1834 fnop 1835 fnop 1836 fnop 1837 faligndata %f52, %f54, %f16 1838 faligndata %f54, %f56, %f18 1839 faligndata %f56, %f58, %f20 1840 faligndata %f58, %f60, %f22 1841 faligndata %f60, %f62, %f24 1842 faligndata %f62, %ftmp1, %f26 1843 fmovd %ftmp7, %f28 1844 fmovd %ftmp8, %f30 1845 STORE 1846 sub %dst, 64, %dst 1847rvis5: faligndata %f48, %f50, %ftmp7 1848 faligndata %f50, %f52, %ftmp8 1849 RLOAD(f48,rvis5e,rvis5r) 1850 fnop 1851 fnop 1852 fnop 1853 faligndata %f36, %f38, %f16 1854 faligndata %f38, %f40, %f18 1855 faligndata %f40, %f42, %f20 1856 faligndata %f42, %f44, %f22 1857 faligndata %f44, %f46, %f24 1858 faligndata %f46, %ftmp1, %f26 1859 fmovd %ftmp7, %f28 1860 fmovd %ftmp8, %f30 1861 STORE 1862 ba,pt %xcc, rvis4 1863 sub %dst, 64, %dst 1864 .align 64 1865rvis6: faligndata %f32, %f34, %ftmp6 1866 faligndata %f34, %f36, %ftmp7 1867 faligndata %f36, %f38, %ftmp8 1868 RLOAD(f32,rvis6e,rvis6r) 1869 fnop 1870 fmovd %ftmp6, %f26 1871 fmovd %ftmp7, %f28 1872 fmovd %ftmp8, %f30 1873 faligndata %f54, %f56, %f16 1874 faligndata %f56, %f58, %f18 1875 faligndata %f58, %f60, %f20 1876 faligndata %f60, %f62, %f22 1877 faligndata %f62, %ftmp1, %f24 1878 STORE 1879 sub %dst, 64, %dst 1880rvis7: faligndata %f48, %f50, %ftmp6 1881 faligndata %f50, %f52, %ftmp7 1882 faligndata %f52, %f54, %ftmp8 1883 RLOAD(f48,rvis7e,rvis7r) 1884 fnop 1885 fmovd %ftmp6, %f26 1886 fmovd %ftmp7, %f28 1887 fmovd %ftmp8, %f30 1888 faligndata %f38, %f40, %f16 1889 faligndata %f40, %f42, %f18 1890 faligndata %f42, %f44, %f20 1891 faligndata %f44, %f46, %f22 1892 faligndata %f46, %ftmp1, %f24 1893 STORE 1894 ba,pt %xcc, rvis6 1895 sub %dst, 64, %dst 1896 .align 64 1897rvis8: faligndata %f32, %f34, %ftmp5 1898 faligndata %f34, %f36, %ftmp6 1899 faligndata %f36, %f38, %ftmp7 1900 faligndata %f38, %f40, %ftmp8 1901 RLOAD(f32,rvis8e,rvis8r) 1902 fnop 1903 fmovd %ftmp5, %f24 1904 fmovd %ftmp6, %f26 1905 fmovd %ftmp7, %f28 1906 fmovd %ftmp8, %f30 1907 faligndata %f56, %f58, %f16 1908 faligndata %f58, %f60, %f18 1909 faligndata %f60, %f62, %f20 1910 faligndata %f62, %ftmp1, %f22 1911 STORE 1912 sub %dst, 64, %dst 1913rvis9: faligndata %f48, %f50, %ftmp5 1914 faligndata %f50, %f52, %ftmp6 1915 faligndata %f52, %f54, %ftmp7 1916 faligndata %f54, %f56, %ftmp8 1917 RLOAD(f48,rvis9e,rvis9r) 1918 fnop 1919 fmovd %ftmp5, %f24 1920 fmovd %ftmp6, %f26 1921 fmovd %ftmp7, %f28 1922 fmovd %ftmp8, %f30 1923 faligndata %f40, %f42, %f16 1924 faligndata %f42, %f44, %f18 1925 faligndata %f44, %f46, %f20 1926 faligndata %f46, %ftmp1, %f22 1927 STORE 1928 ba,pt %xcc, rvis8 1929 sub %dst, 64, %dst 1930 .align 64 1931rvis10: faligndata %f32, %f34, %ftmp4 1932 faligndata %f34, %f36, %ftmp5 1933 faligndata %f36, %f38, %ftmp6 1934 faligndata %f38, %f40, %ftmp7 1935 faligndata %f40, %f42, %ftmp8 1936 RLOAD(f32,rvis10e,rvis10r) 1937 fnop 1938 fmovd %ftmp4, %f22 1939 fmovd %ftmp5, %f24 1940 fmovd %ftmp6, %f26 1941 fmovd %ftmp7, %f28 1942 fmovd %ftmp8, %f30 1943 faligndata %f58, %f60, %f16 1944 faligndata %f60, %f62, %f18 1945 faligndata %f62, %ftmp1, %f20 1946 STORE 1947 sub %dst, 64, %dst 1948rvis11: faligndata %f48, %f50, %ftmp4 1949 faligndata %f50, %f52, %ftmp5 1950 faligndata %f52, %f54, %ftmp6 1951 faligndata %f54, %f56, %ftmp7 1952 faligndata %f56, %f58, %ftmp8 1953 RLOAD(f48,rvis11e,rvis11r) 1954 fnop 1955 fmovd %ftmp4, %f22 1956 fmovd %ftmp5, %f24 1957 fmovd %ftmp6, %f26 1958 fmovd %ftmp7, %f28 1959 fmovd %ftmp8, %f30 1960 faligndata %f42, %f44, %f16 1961 faligndata %f44, %f46, %f18 1962 faligndata %f46, %ftmp1, %f20 1963 STORE 1964 ba,pt %xcc, rvis10 1965 sub %dst, 64, %dst 1966 .align 64 1967rvis12: faligndata %f32, %f34, %ftmp3 1968 faligndata %f34, %f36, %ftmp4 1969 faligndata %f36, %f38, %ftmp5 1970 faligndata %f38, %f40, %ftmp6 1971 faligndata %f40, %f42, %ftmp7 1972 faligndata %f42, %f44, %ftmp8 1973 RLOAD(f32,rvis12e,rvis12r) 1974 fnop 1975 fmovd %ftmp3, %f20 1976 fmovd %ftmp4, %f22 1977 fmovd %ftmp5, %f24 1978 fmovd %ftmp6, %f26 1979 fmovd %ftmp7, %f28 1980 fmovd %ftmp8, %f30 1981 faligndata %f60, %f62, %f16 1982 faligndata %f62, %ftmp1, %f18 1983 STORE 1984 sub %dst, 64, %dst 1985rvis13: faligndata %f48, %f50, %ftmp3 1986 faligndata %f50, %f52, %ftmp4 1987 faligndata %f52, %f54, %ftmp5 1988 faligndata %f54, %f56, %ftmp6 1989 faligndata %f56, %f58, %ftmp7 1990 faligndata %f58, %f60, %ftmp8 1991 RLOAD(f48,rvis13e,rvis13r) 1992 fnop 1993 fmovd %ftmp3, %f20 1994 fmovd %ftmp4, %f22 1995 fmovd %ftmp5, %f24 1996 fmovd %ftmp6, %f26 1997 fmovd %ftmp7, %f28 1998 fmovd %ftmp8, %f30 1999 faligndata %f44, %f46, %f16 2000 faligndata %f46, %ftmp1, %f18 2001 STORE 2002 ba,pt %xcc, rvis12 2003 sub %dst, 64, %dst 2004 .align 64 2005rvis14: fnop 2006 faligndata %f32, %f34, %f18 2007 faligndata %f34, %f36, %f20 2008 faligndata %f36, %f38, %f22 2009 faligndata %f38, %f40, %f24 2010 faligndata %f40, %f42, %f26 2011 faligndata %f42, %f44, %f28 2012 faligndata %f44, %f46, %f30 2013 RLOAD(f32,rvis14e,rvis14r) 2014 fnop 2015 fnop 2016 fnop 2017 fnop 2018 fnop 2019 fnop 2020 fnop 2021 faligndata %f62, %ftmp1, %f16 2022 STORE 2023 sub %dst, 64, %dst 2024rvis15: fnop 2025 faligndata %f48, %f50, %f18 2026 faligndata %f50, %f52, %f20 2027 faligndata %f52, %f54, %f22 2028 faligndata %f54, %f56, %f24 2029 faligndata %f56, %f58, %f26 2030 faligndata %f58, %f60, %f28 2031 faligndata %f60, %f62, %f30 2032 RLOAD(f48,rvis15e,rvis15r) 2033 fnop 2034 fnop 2035 fnop 2036 fnop 2037 fnop 2038 fnop 2039 fnop 2040 faligndata %f46, %ftmp1, %f16 2041 STORE 2042 ba,pt %xcc, rvis14 2043 sub %dst, 64, %dst 2044 2045rightstr: 2046 brlz,pn %curw, narrowstr + 4 2047 cmp %rightw, 64 2048 be,pn %icc, 2f 2049 and %rightw, 0x38, %tmp1 2050 andcc %rightw, 7, %g0 2051 be,pn %icc, 1f 2052 neg %tmp1 2053 sub %g0, %rightw, %tmp5 2054 add %branchbase, (3f - BranchBaseR - 8), %tmp2 2055 edge8l %tmp5, %g0, %tmp5 2056 sub %dst, %tmp1, %tmp4 2057 jmpl %tmp1 + %tmp2, %g0 2058 add %tmp4, 0x40, %tmp4 20591: addcc %branchbase, (4f - BranchBaseR), %tmp2 2060 sra %tmp1, 1, %tmp1 2061 jmpl %tmp1 + %tmp2, %g0 20622: add %dst, 0x40, %tmp1 2063 jmpl %branchbase + %tmp3, %g0 2064 stda %f16, [%tmp1] ASI_BLK_P 2065 ba,pt %xcc, 3f+0x00 2066 stda %f30, [%tmp4 + %tmp5] ASI_PST8_P 2067 ba,pt %xcc, 3f+0x04 2068 stda %f28, [%tmp4 + %tmp5] ASI_PST8_P 2069 ba,pt %xcc, 3f+0x08 2070 stda %f26, [%tmp4 + %tmp5] ASI_PST8_P 2071 ba,pt %xcc, 3f+0x0c 2072 stda %f24, [%tmp4 + %tmp5] ASI_PST8_P 2073 ba,pt %xcc, 3f+0x10 2074 stda %f22, [%tmp4 + %tmp5] ASI_PST8_P 2075 ba,pt %xcc, 3f+0x14 2076 stda %f20, [%tmp4 + %tmp5] ASI_PST8_P 2077 ba,pt %xcc, 3f+0x18 2078 stda %f18, [%tmp4 + %tmp5] ASI_PST8_P 2079 jmpl %branchbase + %tmp3, %g0 2080 stda %f16, [%tmp4 + %tmp5] ASI_PST8_P 20813: std %f28, [%dst + 0x70] 2082 std %f26, [%dst + 0x68] 2083 std %f24, [%dst + 0x60] 2084 std %f22, [%dst + 0x58] 2085 std %f20, [%dst + 0x50] 2086 std %f18, [%dst + 0x48] 2087 std %f16, [%dst + 0x40] 20884: jmpl %branchbase + %tmp3, %g0 2089 nop 2090 2091leftstr:cmp %leftw, 64 2092 be,pn %icc, 2f 2093 and %leftw, 0x38, %tmp1 2094 andcc %leftw, 7, %g0 2095 be,pn %icc, 1f 2096 neg %tmp1 2097 sub %dst, %leftw, %tmp4 2098 add %branchbase, (3f - BranchBaseR - 8), %tmp2 2099 edge8 %tmp4, %g0, %tmp5 2100 andn %tmp4, 7, %tmp4 2101 add %mode, %skind, %mode 2102 jmpl %tmp2 + %tmp1, %g0 2103 add %tmp4, 0x40, %tmp4 21041: add %branchbase, (4f - BranchBaseR), %tmp2 2105 sra %tmp1, 1, %tmp1 2106 jmpl %tmp2 + %tmp1, %g0 21072: add %mode, %skind, %mode 2108 ba,pt %xcc, 4f 2109 stda %f16, [%dst] ASI_BLK_P 2110 ba,pt %xcc, 3f+0x00 2111 stda %f16, [%tmp4 + %tmp5] ASI_PST8_P 2112 ba,pt %xcc, 3f+0x04 2113 stda %f18, [%tmp4 + %tmp5] ASI_PST8_P 2114 ba,pt %xcc, 3f+0x08 2115 stda %f20, [%tmp4 + %tmp5] ASI_PST8_P 2116 ba,pt %xcc, 3f+0x0c 2117 stda %f22, [%tmp4 + %tmp5] ASI_PST8_P 2118 ba,pt %xcc, 3f+0x10 2119 stda %f24, [%tmp4 + %tmp5] ASI_PST8_P 2120 ba,pt %xcc, 3f+0x14 2121 stda %f26, [%tmp4 + %tmp5] ASI_PST8_P 2122 ba,pt %xcc, 3f+0x18 2123 stda %f28, [%tmp4 + %tmp5] ASI_PST8_P 2124 ba,pt %xcc, 3f+0x1c 2125 stda %f30, [%tmp4 + %tmp5] ASI_PST8_P 21263: std %f18, [%dst + 0x08] 2127 std %f20, [%dst + 0x10] 2128 std %f22, [%dst + 0x18] 2129 std %f24, [%dst + 0x20] 2130 std %f26, [%dst + 0x28] 2131 std %f28, [%dst + 0x30] 2132 std %f30, [%dst + 0x38] 21334: brnz,pn %narrow, rnarrow_cont 2134 deccc %srcnotdone 2135 blu,pn %ICC, rreturn 2136 sub %mode, %dkind, %mode 2137 alignaddr %mode, %g0, %g0 2138 and %mode, 63, %mode 2139 cmp %srcnext, %srcn 2140 bne,a,pn %ICC, 6f 2141 xor %fregset, 64, %fregset 2142 brnz,a,pn %fregset, 5f 2143 ldda [%src] ASI_BLK_P, %f32 2144 ldda [%src] ASI_BLK_P, %f48 21455: sub %src, 64, %src 21466: add %dst, %dkind, %dst 2147 sub %w, %leftw, %tmp1 2148 add %srcstart, %skind, %srcstart 2149 add %dst, %tmp1, %dst 2150 add %rightw, %dkind, %rightw 2151 add %dst, 63, %dst 2152 sub %rightw, 1, %rightw 2153 sub %dkind, %leftw, %leftw 2154 and %rightw, 63, %rightw 2155 and %leftw, 63, %leftw 2156 add %rightw, 1, %rightw 2157 mov 64, %tmp1 2158 andn %dst, 63, %dst 2159 sub %tmp1, %leftw, %leftw 2160rroll_wide: 2161 add %srcstart, %skind, %srcnext 2162 sub %srcstart, %w, %srcend 2163 fnop 2164 deccc %srcnext 2165 sll %mode, 4, %tmp4 2166 fnop 2167 andn %srcnext, 63, %srcnext 2168 andn %srcend, 63, %srcend 2169 fnop 2170 mov %srcnext, %srcn 2171 and %mode, 7, %leftw2 2172 fnop 2173 andn %tmp4, 127, %tmp4 2174 sub %leftw, %leftw2, %leftw2 2175 fnop 2176 add %tmp4, %fregset, %tmp4 2177 subcc %w, %leftw, %curw 2178 fnop 2179 srl %tmp4, 1, %tmp3 2180 sub %tmp1, %mode, %tmp1 2181 fnop 2182 add %tmp3, (rrepn0 - BranchBaseR), %tmp2 2183 cmp %tmp1, %rightw 2184 add %tmp4, %tmp3, %tmp4 2185 sub %srcnext, 64, %tmp1 2186 movgeu %icc, %tmp2, %tmp4 2187 cmp %srcnext, %srcend 2188 sub %dst, 64, %dst 2189 move %ICC, %tmp1, %srcnext 2190 jmpl %branchbase + %tmp4, %g0 2191 sub %curw, %rightw, %curw 2192 2193rreturn:return %i7+8 2194#if defined(__NetBSD__) 2195 wr %g0, 4, %fprs 2196#else 2197 wr %g0, 0, %fprs 2198#endif 2199 2200narrowstr: 2201 cmp %rightw, 64 2202 add %dst, 0x80, %fregset 2203 and %rightw, 0x38, %tmp1 2204 sub %fregset, %leftw, %tmp2 2205 mov %w, %tmp4 2206 andn %tmp2, 7, %fregset 2207 be,pn %icc, 2f 2208 edge8 %tmp2, %g0, %srcend 2209 andcc %rightw, 7, %g0 2210 be,pn %icc, 1f 2211 neg %tmp1 2212 sub %g0, %rightw, %tmp4 2213 add %tmp1, (2f - BranchBaseR - 8), %tmp1 2214 add %dst, 0x40, %tmp5 2215 sub %leftw, 0x41, %tmp2 2216 add %tmp5, %rightw, %tmp5 2217 edge8l %tmp4, %tmp2, %tmp2 2218 and %rightw, 7, %tmp4 2219 andn %tmp5, 7, %tmp5 2220 jmpl %branchbase + %tmp1, %g0 2221 sub %w, %tmp4, %tmp4 22221: addcc %branchbase, (4f - BranchBaseR - 8), %tmp2 2223 sll %tmp1, 1, %tmp1 2224 jmpl %tmp2 + %tmp1, %g0 2225 nop 2226 ba,pt %xcc, 3f+0x00 2227 stda %f30, [%tmp5 + %tmp2] ASI_PST8_P 2228 ba,pt %xcc, 3f+0x10 2229 stda %f28, [%tmp5 + %tmp2] ASI_PST8_P 2230 ba,pt %xcc, 3f+0x20 2231 stda %f26, [%tmp5 + %tmp2] ASI_PST8_P 2232 ba,pt %xcc, 3f+0x30 2233 stda %f24, [%tmp5 + %tmp2] ASI_PST8_P 2234 ba,pt %xcc, 3f+0x40 2235 stda %f22, [%tmp5 + %tmp2] ASI_PST8_P 2236 ba,pt %xcc, 3f+0x50 2237 stda %f20, [%tmp5 + %tmp2] ASI_PST8_P 2238 ba,pt %xcc, 3f+0x60 2239 stda %f18, [%tmp5 + %tmp2] ASI_PST8_P 2240 ba,pt %xcc, 3f+0x70 2241 stda %f16, [%tmp5 + %tmp2] ASI_PST8_P 22422: subcc %tmp4, 8, %tmp4 2243 bl,pn %icc, 4f+0x00 2244 fnop 2245 std %f30, [%dst + 0x78] 22463: subcc %tmp4, 8, %tmp4 2247 bl,pn %icc, 4f+0x10 2248 fnop 2249 std %f28, [%dst + 0x70] 2250 subcc %tmp4, 8, %tmp4 2251 bl,pn %icc, 4f+0x20 2252 fnop 2253 std %f26, [%dst + 0x68] 2254 subcc %tmp4, 8, %tmp4 2255 bl,pn %icc, 4f+0x30 2256 fnop 2257 std %f24, [%dst + 0x60] 2258 subcc %tmp4, 8, %tmp4 2259 bl,pn %icc, 4f+0x40 2260 fnop 2261 std %f22, [%dst + 0x58] 2262 subcc %tmp4, 8, %tmp4 2263 bl,pn %icc, 4f+0x50 2264 fnop 2265 std %f20, [%dst + 0x50] 2266 subcc %tmp4, 8, %tmp4 2267 bl,pn %icc, 4f+0x60 2268 fnop 2269 std %f18, [%dst + 0x48] 2270 subcc %tmp4, 8, %tmp4 2271 bl,pn %icc, 4f+0x70 2272 fnop 2273 std %f16, [%dst + 0x40] 2274 ba,pt %xcc, 5f 2275 nop 22764: cmp %tmp4, -8 2277 bg,a,pn %ICC, 5f 2278 stda %f30, [%fregset + %srcend] ASI_PST8_P 2279 ba,a,pt %xcc, 5f 2280 cmp %tmp4, -8 2281 bg,a,pn %ICC, 5f 2282 stda %f28, [%fregset + %srcend] ASI_PST8_P 2283 ba,a,pt %xcc, 5f 2284 cmp %tmp4, -8 2285 bg,a,pn %ICC, 5f 2286 stda %f26, [%fregset + %srcend] ASI_PST8_P 2287 ba,a,pt %xcc, 5f 2288 cmp %tmp4, -8 2289 bg,a,pn %ICC, 5f 2290 stda %f24, [%fregset + %srcend] ASI_PST8_P 2291 ba,a,pt %xcc, 5f 2292 cmp %tmp4, -8 2293 bg,a,pn %ICC, 5f 2294 stda %f22, [%fregset + %srcend] ASI_PST8_P 2295 ba,a,pt %xcc, 5f 2296 cmp %tmp4, -8 2297 bg,a,pn %ICC, 5f 2298 stda %f20, [%fregset + %srcend] ASI_PST8_P 2299 ba,a,pt %xcc, 5f 2300 cmp %tmp4, -8 2301 bg,a,pn %ICC, 5f 2302 stda %f18, [%fregset + %srcend] ASI_PST8_P 2303 ba,a,pt %xcc, 5f 2304 cmp %tmp4, -8 2305 bg,a,pn %ICC, 5f 2306 stda %f16, [%fregset + %srcend] ASI_PST8_P 23075: and %tmp3, 60, %tmp3 2308 add %dst, 64, %dst 2309 xor %tmp3, 60, %tmp3 2310 add %mode, %skind, %mode 2311 add %tmp3, 4, %tmp3 2312 brz,pn %h, rreturn 2313 and %tmp3, 64, %fregset 2314rnarrow_cont: 2315 deccc %h 2316 blu,pn %ICC, rreturn 2317 sub %mode, %dkind, %mode 2318 alignaddr %mode, %g0, %g0 2319 and %mode, 63, %mode 2320 sub %srcnext, %srcn, %tmp4 2321 add %dst, %dkind, %dst 2322 sub %w, %leftw, %tmp1 2323 add %srcstart, %skind, %srcstart 2324 add %dst, %tmp1, %dst 2325 add %rightw, %dkind, %rightw 2326 sub %dkind, %leftw, %leftw 2327 sub %rightw, 1, %rightw 2328 and %leftw, 63, %leftw 2329 add %dst, 63, %dst 2330 mov 64, %tmp1 2331 and %rightw, 63, %rightw 2332 sub %tmp1, %leftw, %leftw 2333 add %srcstart, %skind, %srcnext 2334 add %rightw, 1, %rightw 2335 sub %srcstart, %w, %srcend 2336 dec %srcnext 2337 andn %srcend, 63, %srcend 2338 andn %srcnext, 63, %srcnext 2339 sub %w, %leftw, %prepw 2340 mov %srcnext, %srcn 2341 sub %srcnext, 64, %tmp3 2342 add %srcnext, 64, %tmp2 2343 cmp %skind, 0 2344 movg %ICC, %tmp2, %tmp3 2345 mov %h, %srcnotdone 2346 sub %prepw, %rightw, %prepw 2347 sub %srcstart, 1, %tmp1 2348 cmp %srcnext, %srcend 2349 move %ICC, %tmp3, %srcnext 2350 and %tmp1, 63, %tmp1 2351 sub %srcnext, 64, %tmp3 2352 sub %tmp1, %w, %tmp1 2353 cmp %srcnext, %srcend 2354 move %ICC, %tmp3, %srcnext 2355 mov %prepw, %curw 2356 cmp %tmp1, -65 2357 movl %ICC, 64, %prepw 2358 andn %dst, 63, %dst 2359 cmp %srcnext, %srcstop 2360 move %ICC, 0, %srcnotdone 2361 brnz,a,pn %tmp4, rroll_narrow 2362 xor %fregset, 64, %fregset 2363 cmp %tmp1, -1 2364 bl,pt %ICC, 6f 2365 tst %srcnotdone 2366 be,a,pn %ICC, rroll_narrow 2367 membar SYNC 2368 mov %srcnext, %src 23696: brnz,a,pn %fregset, 7f 2370 ldda [%src] ASI_BLK_P, %f32 2371 ldda [%src] ASI_BLK_P, %f48 23727: subcc %src, 64, %src 2373rroll_narrow: 2374 fnop 2375 sll %mode, 4, %tmp2 2376 and %mode, 7, %leftw2 2377 fnop 2378 andn %tmp2, 127, %tmp2 2379 sub %dst, 64, %dst 2380 fnop 2381 add %tmp2, %fregset, %tmp2 2382 subcc %leftw, %leftw2, %leftw2 2383 fnop 2384 srl %tmp2, 1, %tmp3 2385 add %tmp3, (rrepr0 - BranchBaseR), %tmp4 2386 fnop 2387 add %tmp2, %tmp3, %tmp2 2388 cmp %tmp1, -1 2389 fnop 2390 mov 64, %tmp1 2391 movge %icc, %tmp4, %tmp2 2392 sub %tmp1, %mode, %tmp1 2393 add %tmp3, (rrepn0 - BranchBaseR), %tmp4 2394 fnop 2395 cmp %tmp1, %rightw 2396 movgeu %icc, %tmp4, %tmp2 2397 jmpl %branchbase + %tmp2, %g0 2398 and %tmp3, 32, %tmp3 2399 2400#define RVISEND1(i,tgt,tgtr) \ 2401tgt: \ 2402 brnz,pt %curw, 1f; \ 2403 cmp %leftw2, ((i&14)*4); \ 2404 bg,pn %icc, tgtr - 8; \ 2405 tst %srcnotdone; \ 2406 be,a,pn %ICC, tgtr; \ 2407 membar SYNC; \ 2408 ba,pt %xcc, tgtr - 8; \ 2409 mov %srcnext, %src; \ 24101: mov ((i & 1) ^ 1) * 64, %fregset; 2411 2412#define RVISEND2(i,fset) \ 2413 brz,a,pn %srcnotdone, 3f; \ 2414 membar SYNC; \ 2415 ldda [%srcnext] ASI_BLK_P, %fset; \ 2416 sub %srcnext, 64, %src; \ 24173: mov (i & 1) * 64, %fregset; 2418 2419RVISEND1(0,rvis0e,rvis0r) 2420 fnop 2421 fnop 2422 fnop 2423 fnop 2424 fnop 2425 fnop 2426 ble,pn %icc, leftstr 2427 faligndata %ftmp2, %ftmp1, %f30 2428RVISEND2(0,f32) 2429 fnop 2430 faligndata %f48, %f50, %f16 2431 faligndata %f50, %f52, %f18 2432 faligndata %f52, %f54, %f20 2433 faligndata %f54, %f56, %f22 2434 faligndata %f56, %f58, %f24 2435 faligndata %f58, %f60, %f26 2436 faligndata %f60, %f62, %f28 2437 ba,pt %xcc, leftstr 2438 faligndata %f62, %ftmp1, %f30 2439RVISEND1(1,rvis1e,rvis1r) 2440 fnop 2441 fnop 2442 fnop 2443 fnop 2444 fnop 2445 fnop 2446 ble,pn %icc, leftstr 2447 faligndata %ftmp2, %ftmp1, %f30 2448RVISEND2(1,f48) 2449 fnop 2450 faligndata %f32, %f34, %f16 2451 faligndata %f34, %f36, %f18 2452 faligndata %f36, %f38, %f20 2453 faligndata %f38, %f40, %f22 2454 faligndata %f40, %f42, %f24 2455 faligndata %f42, %f44, %f26 2456 faligndata %f44, %f46, %f28 2457 ba,pt %xcc, leftstr 2458 faligndata %f46, %ftmp1, %f30 2459RVISEND1(2,rvis2e,rvis2r) 2460 fnop 2461 fnop 2462 fnop 2463 fnop 2464 faligndata %ftmp2, %ftmp1, %f28 2465 ble,pn %icc, leftstr 2466 fmovd %ftmp8, %f30 2467RVISEND2(2,f32) 2468 fnop 2469 fnop 2470 faligndata %f50, %f52, %f16 2471 faligndata %f52, %f54, %f18 2472 faligndata %f54, %f56, %f20 2473 faligndata %f56, %f58, %f22 2474 faligndata %f58, %f60, %f24 2475 faligndata %f60, %f62, %f26 2476 ba,pt %xcc, leftstr 2477 faligndata %f62, %ftmp1, %f28 2478RVISEND1(3,rvis3e,rvis3r) 2479 fnop 2480 fnop 2481 fnop 2482 fnop 2483 faligndata %ftmp2, %ftmp1, %f28 2484 ble,pn %icc, leftstr 2485 fmovd %ftmp8, %f30 2486RVISEND2(3,f48) 2487 fnop 2488 fnop 2489 faligndata %f34, %f36, %f16 2490 faligndata %f36, %f38, %f18 2491 faligndata %f38, %f40, %f20 2492 faligndata %f40, %f42, %f22 2493 faligndata %f42, %f44, %f24 2494 faligndata %f44, %f46, %f26 2495 ba,pt %xcc, leftstr 2496 faligndata %f46, %ftmp1, %f28 2497RVISEND1(4,rvis4e,rvis4r) 2498 fnop 2499 fnop 2500 faligndata %ftmp2, %ftmp1, %f26 2501 fmovd %ftmp7, %f28 2502 ble,pn %icc, leftstr 2503 fmovd %ftmp8, %f30 2504RVISEND2(4,f32) 2505 fnop 2506 fnop 2507 fnop 2508 faligndata %f52, %f54, %f16 2509 faligndata %f54, %f56, %f18 2510 faligndata %f56, %f58, %f20 2511 faligndata %f58, %f60, %f22 2512 faligndata %f60, %f62, %f24 2513 ba,pt %xcc, leftstr 2514 faligndata %f62, %ftmp1, %f26 2515RVISEND1(5,rvis5e,rvis5r) 2516 fnop 2517 fnop 2518 faligndata %ftmp2, %ftmp1, %f26 2519 fmovd %ftmp7, %f28 2520 ble,pn %icc, leftstr 2521 fmovd %ftmp8, %f30 2522RVISEND2(5,f48) 2523 fnop 2524 fnop 2525 fnop 2526 faligndata %f36, %f38, %f16 2527 faligndata %f38, %f40, %f18 2528 faligndata %f40, %f42, %f20 2529 faligndata %f42, %f44, %f22 2530 faligndata %f44, %f46, %f24 2531 ba,pt %xcc, leftstr 2532 faligndata %f46, %ftmp1, %f26 2533RVISEND1(6,rvis6e,rvis6r) 2534 faligndata %ftmp2, %ftmp1, %f24 2535 fmovd %ftmp6, %f26 2536 fmovd %ftmp7, %f28 2537 ble,pn %icc, leftstr 2538 fmovd %ftmp8, %f30 2539RVISEND2(6,f32) 2540 fnop 2541 fnop 2542 fnop 2543 fnop 2544 faligndata %f54, %f56, %f16 2545 faligndata %f56, %f58, %f18 2546 faligndata %f58, %f60, %f20 2547 faligndata %f60, %f62, %f22 2548 ba,pt %xcc, leftstr 2549 faligndata %f62, %ftmp1, %f24 2550RVISEND1(7,rvis7e,rvis7r) 2551 faligndata %ftmp2, %ftmp1, %f24 2552 fmovd %ftmp6, %f26 2553 fmovd %ftmp7, %f28 2554 ble,pn %icc, leftstr 2555 fmovd %ftmp8, %f30 2556RVISEND2(7,f48) 2557 fnop 2558 fnop 2559 fnop 2560 fnop 2561 faligndata %f38, %f40, %f16 2562 faligndata %f40, %f42, %f18 2563 faligndata %f42, %f44, %f20 2564 faligndata %f44, %f46, %f22 2565 ba,pt %xcc, leftstr 2566 faligndata %f46, %ftmp1, %f24 2567RVISEND1(8,rvis8e,rvis8r) 2568 faligndata %ftmp2, %ftmp1, %f22 2569 fmovd %ftmp5, %f24 2570 fmovd %ftmp6, %f26 2571 fmovd %ftmp7, %f28 2572 ble,pn %icc, leftstr 2573 fmovd %ftmp8, %f30 2574RVISEND2(8,f32) 2575 fnop 2576 fnop 2577 fnop 2578 fnop 2579 fnop 2580 faligndata %f56, %f58, %f16 2581 faligndata %f58, %f60, %f18 2582 faligndata %f60, %f62, %f20 2583 ba,pt %xcc, leftstr 2584 faligndata %f62, %ftmp1, %f22 2585RVISEND1(9,rvis9e,rvis9r) 2586 faligndata %ftmp2, %ftmp1, %f22 2587 fmovd %ftmp5, %f24 2588 fmovd %ftmp6, %f26 2589 fmovd %ftmp7, %f28 2590 ble,pn %icc, leftstr 2591 fmovd %ftmp8, %f30 2592RVISEND2(9,f48) 2593 fnop 2594 fnop 2595 fnop 2596 fnop 2597 fnop 2598 faligndata %f40, %f42, %f16 2599 faligndata %f42, %f44, %f18 2600 faligndata %f44, %f46, %f20 2601 ba,pt %xcc, leftstr 2602 faligndata %f46, %ftmp1, %f22 2603RVISEND1(10,rvis10e,rvis10r) 2604 faligndata %ftmp2, %ftmp1, %f20 2605 fmovd %ftmp4, %f22 2606 fmovd %ftmp5, %f24 2607 fmovd %ftmp6, %f26 2608 fmovd %ftmp7, %f28 2609 ble,pn %icc, leftstr 2610 fmovd %ftmp8, %f30 2611RVISEND2(10,f32) 2612 fnop 2613 fnop 2614 fnop 2615 fnop 2616 fnop 2617 fnop 2618 faligndata %f58, %f60, %f16 2619 faligndata %f60, %f62, %f18 2620 ba,pt %xcc, leftstr 2621 faligndata %f62, %ftmp1, %f20 2622RVISEND1(11,rvis11e,rvis11r) 2623 faligndata %ftmp2, %ftmp1, %f20 2624 fmovd %ftmp4, %f22 2625 fmovd %ftmp5, %f24 2626 fmovd %ftmp6, %f26 2627 fmovd %ftmp7, %f28 2628 ble,pn %icc, leftstr 2629 fmovd %ftmp8, %f30 2630RVISEND2(11,f48) 2631 fnop 2632 fnop 2633 fnop 2634 fnop 2635 fnop 2636 fnop 2637 faligndata %f42, %f44, %f16 2638 faligndata %f44, %f46, %f18 2639 ba,pt %xcc, leftstr 2640 faligndata %f46, %ftmp1, %f20 2641RVISEND1(12,rvis12e,rvis12r) 2642 faligndata %ftmp2, %ftmp1, %f18 2643 fmovd %ftmp3, %f20 2644 fmovd %ftmp4, %f22 2645 fmovd %ftmp5, %f24 2646 fmovd %ftmp6, %f26 2647 fmovd %ftmp7, %f28 2648 ble,pn %icc, leftstr 2649 fmovd %ftmp8, %f30 2650RVISEND2(12,f32) 2651 fnop 2652 fnop 2653 fnop 2654 fnop 2655 fnop 2656 fnop 2657 fnop 2658 faligndata %f60, %f62, %f16 2659 ba,pt %xcc, leftstr 2660 faligndata %f62, %ftmp1, %f18 2661RVISEND1(13,rvis13e,rvis13r) 2662 faligndata %ftmp2, %ftmp1, %f18 2663 fmovd %ftmp3, %f20 2664 fmovd %ftmp4, %f22 2665 fmovd %ftmp5, %f24 2666 fmovd %ftmp6, %f26 2667 fmovd %ftmp7, %f28 2668 ble,pn %icc, leftstr 2669 fmovd %ftmp8, %f30 2670RVISEND2(13,f48) 2671 fnop 2672 fnop 2673 fnop 2674 fnop 2675 fnop 2676 fnop 2677 fnop 2678 faligndata %f44, %f46, %f16 2679 ba,pt %xcc, leftstr 2680 faligndata %f46, %ftmp1, %f18 2681RVISEND1(14,rvis14e,rvis14r) 2682 ble,pn %icc, leftstr 2683 faligndata %ftmp2, %ftmp1, %f16 2684RVISEND2(14,f32) 2685 fnop 2686 fnop 2687 fnop 2688 fnop 2689 fnop 2690 fnop 2691 fnop 2692 ba,pt %xcc, leftstr 2693 faligndata %f62, %ftmp1, %f16 2694RVISEND1(15,rvis15e,rvis15r) 2695 ble,pn %icc, leftstr 2696 faligndata %ftmp2, %ftmp1, %f16 2697RVISEND2(15,f48) 2698 fnop 2699 fnop 2700 fnop 2701 fnop 2702 fnop 2703 fnop 2704 fnop 2705 ba,pt %xcc, leftstr 2706 faligndata %f46, %ftmp1, %f16 2707 2708#define RREPEND(tgt,tgtr) \ 2709tgt: \ 2710 brnz,pt %srcnotdone, tgtr - 8; \ 2711 mov %srcnext, %src; \ 2712 ba,pt %xcc, tgtr; \ 2713 membar SYNC; 2714 2715 .align 16 2716RREPEND(rrep0e,rrep0r) 2717RREPEND(rrep1e,rrep1r) 2718RREPEND(rrep2e,rrep2r) 2719RREPEND(rrep3e,rrep3r) 2720RREPEND(rrep4e,rrep4r) 2721RREPEND(rrep5e,rrep5r) 2722RREPEND(rrep6e,rrep6r) 2723RREPEND(rrep7e,rrep7r) 2724RREPEND(rrep8e,rrep8r) 2725RREPEND(rrep9e,rrep9r) 2726RREPEND(rrep10e,rrep10r) 2727RREPEND(rrep11e,rrep11r) 2728RREPEND(rrep12e,rrep12r) 2729RREPEND(rrep13e,rrep13r) 2730RREPEND(rrep14e,rrep14r) 2731RREPEND(rrep15e,rrep15r) 2732