1! 2! This Source Code Form is subject to the terms of the Mozilla Public 3! License, v. 2.0. If a copy of the MPL was not distributed with this 4! file, You can obtain one at http://mozilla.org/MPL/2.0/. 5 6! This file is to be used in place of vis.il in 64-bit builds. 7 8!-------------------------------------------------------------------- 9! Pure edge handling instructions 10! 11! int vis_edge8(void */*frs1*/, void */*frs2*/); 12! 13 .inline vis_edge8,16 14 edge8 %o0,%o1,%o0 15 .end 16! 17! int vis_edge8l(void */*frs1*/, void */*frs2*/); 18! 19 .inline vis_edge8l,16 20 edge8l %o0,%o1,%o0 21 .end 22! 23! int vis_edge16(void */*frs1*/, void */*frs2*/); 24! 25 .inline vis_edge16,16 26 edge16 %o0,%o1,%o0 27 .end 28! 29! int vis_edge16l(void */*frs1*/, void */*frs2*/); 30! 31 .inline vis_edge16l,16 32 edge16l %o0,%o1,%o0 33 .end 34! 35! int vis_edge32(void */*frs1*/, void */*frs2*/); 36! 37 .inline vis_edge32,16 38 edge32 %o0,%o1,%o0 39 .end 40! 41! int vis_edge32l(void */*frs1*/, void */*frs2*/); 42! 43 .inline vis_edge32l,16 44 edge32l %o0,%o1,%o0 45 .end 46 47!-------------------------------------------------------------------- 48! Edge handling instructions with negative return values if cc set 49! 50! int vis_edge8cc(void */*frs1*/, void */*frs2*/); 51! 52 .inline vis_edge8cc,16 53 edge8 %o0,%o1,%o0 54 mov 0,%o1 55 movgu %xcc,-1024,%o1 56 or %o1,%o0,%o0 57 .end 58! 59! int vis_edge8lcc(void */*frs1*/, void */*frs2*/); 60! 61 .inline vis_edge8lcc,16 62 edge8l %o0,%o1,%o0 63 mov 0,%o1 64 movgu %xcc,-1024,%o1 65 or %o1,%o0,%o0 66 .end 67! 68! int vis_edge16cc(void */*frs1*/, void */*frs2*/); 69! 70 .inline vis_edge16cc,16 71 edge16 %o0,%o1,%o0 72 mov 0,%o1 73 movgu %xcc,-1024,%o1 74 or %o1,%o0,%o0 75 .end 76! 77! int vis_edge16lcc(void */*frs1*/, void */*frs2*/); 78! 79 .inline vis_edge16lcc,16 80 edge16l %o0,%o1,%o0 81 mov 0,%o1 82 movgu %xcc,-1024,%o1 83 or %o1,%o0,%o0 84 .end 85! 86! int vis_edge32cc(void */*frs1*/, void */*frs2*/); 87! 88 .inline vis_edge32cc,16 89 edge32 %o0,%o1,%o0 90 mov 0,%o1 91 movgu %xcc,-1024,%o1 92 or %o1,%o0,%o0 93 .end 94! 95! int vis_edge32lcc(void */*frs1*/, void */*frs2*/); 96! 97 .inline vis_edge32lcc,16 98 edge32l %o0,%o1,%o0 99 mov 0,%o1 100 movgu %xcc,-1024,%o1 101 or %o1,%o0,%o0 102 .end 103 104!-------------------------------------------------------------------- 105! Alignment instructions 106! 107! void *vis_alignaddr(void */*rs1*/, int /*rs2*/); 108! 109 .inline vis_alignaddr,12 110 alignaddr %o0,%o1,%o0 111 .end 112! 113! void *vis_alignaddrl(void */*rs1*/, int /*rs2*/); 114! 115 .inline vis_alignaddrl,12 116 alignaddrl %o0,%o1,%o0 117 .end 118! 119! double vis_faligndata(double /*frs1*/, double /*frs2*/); 120! 121 .inline vis_faligndata,16 122 faligndata %f0,%f2,%f0 123 .end 124 125!-------------------------------------------------------------------- 126! Partitioned comparison instructions 127! 128! int vis_fcmple16(double /*frs1*/, double /*frs2*/); 129! 130 .inline vis_fcmple16,16 131 fcmple16 %f0,%f2,%o0 132 .end 133! 134! int vis_fcmpne16(double /*frs1*/, double /*frs2*/); 135! 136 .inline vis_fcmpne16,16 137 fcmpne16 %f0,%f2,%o0 138 .end 139! 140! int vis_fcmple32(double /*frs1*/, double /*frs2*/); 141! 142 .inline vis_fcmple32,16 143 fcmple32 %f0,%f2,%o0 144 .end 145! 146! int vis_fcmpne32(double /*frs1*/, double /*frs2*/); 147! 148 .inline vis_fcmpne32,16 149 fcmpne32 %f0,%f2,%o0 150 .end 151! 152! int vis_fcmpgt16(double /*frs1*/, double /*frs2*/); 153! 154 .inline vis_fcmpgt16,16 155 fcmpgt16 %f0,%f2,%o0 156 .end 157! 158! int vis_fcmpeq16(double /*frs1*/, double /*frs2*/); 159! 160 .inline vis_fcmpeq16,16 161 fcmpeq16 %f0,%f2,%o0 162 .end 163! 164! int vis_fcmpgt32(double /*frs1*/, double /*frs2*/); 165! 166 .inline vis_fcmpgt32,16 167 fcmpgt32 %f0,%f2,%o0 168 .end 169! 170! int vis_fcmpeq32(double /*frs1*/, double /*frs2*/); 171! 172 .inline vis_fcmpeq32,16 173 fcmpeq32 %f0,%f2,%o0 174 .end 175 176!-------------------------------------------------------------------- 177! Partitioned arithmetic 178! 179! double vis_fmul8x16(float /*frs1*/, double /*frs2*/); 180! 181 .inline vis_fmul8x16,12 182 fmul8x16 %f1,%f2,%f0 183 .end 184! 185! double vis_fmul8x16_dummy(float /*frs1*/, int /*dummy*/, double /*frs2*/); 186! 187 .inline vis_fmul8x16_dummy,16 188 fmul8x16 %f1,%f4,%f0 189 .end 190! 191! double vis_fmul8x16au(float /*frs1*/, float /*frs2*/); 192! 193 .inline vis_fmul8x16au,8 194 fmul8x16au %f1,%f3,%f0 195 .end 196! 197! double vis_fmul8x16al(float /*frs1*/, float /*frs2*/); 198! 199 .inline vis_fmul8x16al,8 200 fmul8x16al %f1,%f3,%f0 201 .end 202! 203! double vis_fmul8sux16(double /*frs1*/, double /*frs2*/); 204! 205 .inline vis_fmul8sux16,16 206 fmul8sux16 %f0,%f2,%f0 207 .end 208! 209! double vis_fmul8ulx16(double /*frs1*/, double /*frs2*/); 210! 211 .inline vis_fmul8ulx16,16 212 fmul8ulx16 %f0,%f2,%f0 213 .end 214! 215! double vis_fmuld8sux16(float /*frs1*/, float /*frs2*/); 216! 217 .inline vis_fmuld8sux16,8 218 fmuld8sux16 %f1,%f3,%f0 219 .end 220! 221! double vis_fmuld8ulx16(float /*frs1*/, float /*frs2*/); 222! 223 .inline vis_fmuld8ulx16,8 224 fmuld8ulx16 %f1,%f3,%f0 225 .end 226! 227! double vis_fpadd16(double /*frs1*/, double /*frs2*/); 228! 229 .inline vis_fpadd16,16 230 fpadd16 %f0,%f2,%f0 231 .end 232! 233! float vis_fpadd16s(float /*frs1*/, float /*frs2*/); 234! 235 .inline vis_fpadd16s,8 236 fpadd16s %f1,%f3,%f0 237 .end 238! 239! double vis_fpadd32(double /*frs1*/, double /*frs2*/); 240! 241 .inline vis_fpadd32,16 242 fpadd32 %f0,%f2,%f0 243 .end 244! 245! float vis_fpadd32s(float /*frs1*/, float /*frs2*/); 246! 247 .inline vis_fpadd32s,8 248 fpadd32s %f1,%f3,%f0 249 .end 250! 251! double vis_fpsub16(double /*frs1*/, double /*frs2*/); 252! 253 .inline vis_fpsub16,16 254 fpsub16 %f0,%f2,%f0 255 .end 256! 257! float vis_fpsub16s(float /*frs1*/, float /*frs2*/); 258! 259 .inline vis_fpsub16s,8 260 fpsub16s %f1,%f3,%f0 261 .end 262! 263! double vis_fpsub32(double /*frs1*/, double /*frs2*/); 264! 265 .inline vis_fpsub32,16 266 fpsub32 %f0,%f2,%f0 267 .end 268! 269! float vis_fpsub32s(float /*frs1*/, float /*frs2*/); 270! 271 .inline vis_fpsub32s,8 272 fpsub32s %f1,%f3,%f0 273 .end 274 275!-------------------------------------------------------------------- 276! Pixel packing 277! 278! float vis_fpack16(double /*frs2*/); 279! 280 .inline vis_fpack16,8 281 fpack16 %f0,%f0 282 .end 283! 284! double vis_fpack16_pair(double /*frs2*/, double /*frs2*/); 285! 286 .inline vis_fpack16_pair,16 287 fpack16 %f0,%f0 288 fpack16 %f2,%f1 289 .end 290! 291! void vis_st2_fpack16(double, double, double *) 292! 293 .inline vis_st2_fpack16,24 294 fpack16 %f0,%f0 295 fpack16 %f2,%f1 296 st %f0,[%o2+0] 297 st %f1,[%o2+4] 298 .end 299! 300! void vis_std_fpack16(double, double, double *) 301! 302 .inline vis_std_fpack16,24 303 fpack16 %f0,%f0 304 fpack16 %f2,%f1 305 std %f0,[%o2] 306 .end 307! 308! void vis_st2_fpackfix(double, double, double *) 309! 310 .inline vis_st2_fpackfix,24 311 fpackfix %f0,%f0 312 fpackfix %f2,%f1 313 st %f0,[%o2+0] 314 st %f1,[%o2+4] 315 .end 316! 317! double vis_fpack16_to_hi(double /*frs1*/, double /*frs2*/); 318! 319 .inline vis_fpack16_to_hi,16 320 fpack16 %f2,%f0 321 .end 322 323! double vis_fpack16_to_lo(double /*frs1*/, double /*frs2*/); 324! 325 .inline vis_fpack16_to_lo,16 326 fpack16 %f2,%f3 327 fmovs %f3,%f1 /* without this, optimizer goes wrong */ 328 .end 329 330! 331! double vis_fpack32(double /*frs1*/, double /*frs2*/); 332! 333 .inline vis_fpack32,16 334 fpack32 %f0,%f2,%f0 335 .end 336! 337! float vis_fpackfix(double /*frs2*/); 338! 339 .inline vis_fpackfix,8 340 fpackfix %f0,%f0 341 .end 342! 343! double vis_fpackfix_pair(double /*frs2*/, double /*frs2*/); 344! 345 .inline vis_fpackfix_pair,16 346 fpackfix %f0,%f0 347 fpackfix %f2,%f1 348 .end 349 350!-------------------------------------------------------------------- 351! Motion estimation 352! 353! double vis_pxldist64(double accum /*frd*/, double pxls1 /*frs1*/, 354! double pxls2 /*frs2*/); 355! 356 .inline vis_pxldist64,24 357 pdist %f2,%f4,%f0 358 .end 359 360!-------------------------------------------------------------------- 361! Channel merging 362! 363! double vis_fpmerge(float /*frs1*/, float /*frs2*/); 364! 365 .inline vis_fpmerge,8 366 fpmerge %f1,%f3,%f0 367 .end 368 369!-------------------------------------------------------------------- 370! Pixel expansion 371! 372! double vis_fexpand(float /*frs2*/); 373! 374 .inline vis_fexpand,4 375 fexpand %f1,%f0 376 .end 377 378! double vis_fexpand_hi(double /*frs2*/); 379! 380 .inline vis_fexpand_hi,8 381 fexpand %f0,%f0 382 .end 383 384! double vis_fexpand_lo(double /*frs2*/); 385! 386 .inline vis_fexpand_lo,8 387 fexpand %f1,%f0 388 .end 389 390!-------------------------------------------------------------------- 391! Bitwise logical operations 392! 393! double vis_fnor(double /*frs1*/, double /*frs2*/); 394! 395 .inline vis_fnor,16 396 fnor %f0,%f2,%f0 397 .end 398! 399! float vis_fnors(float /*frs1*/, float /*frs2*/); 400! 401 .inline vis_fnors,8 402 fnors %f1,%f3,%f0 403 .end 404! 405! double vis_fandnot(double /*frs1*/, double /*frs2*/); 406! 407 .inline vis_fandnot,16 408 fandnot1 %f0,%f2,%f0 409 .end 410! 411! float vis_fandnots(float /*frs1*/, float /*frs2*/); 412! 413 .inline vis_fandnots,8 414 fandnot1s %f1,%f3,%f0 415 .end 416! 417! double vis_fnot(double /*frs1*/); 418! 419 .inline vis_fnot,8 420 fnot1 %f0,%f0 421 .end 422! 423! float vis_fnots(float /*frs1*/); 424! 425 .inline vis_fnots,4 426 fnot1s %f1,%f0 427 .end 428! 429! double vis_fxor(double /*frs1*/, double /*frs2*/); 430! 431 .inline vis_fxor,16 432 fxor %f0,%f2,%f0 433 .end 434! 435! float vis_fxors(float /*frs1*/, float /*frs2*/); 436! 437 .inline vis_fxors,8 438 fxors %f1,%f3,%f0 439 .end 440! 441! double vis_fnand(double /*frs1*/, double /*frs2*/); 442! 443 .inline vis_fnand,16 444 fnand %f0,%f2,%f0 445 .end 446! 447! float vis_fnands(float /*frs1*/, float /*frs2*/); 448! 449 .inline vis_fnands,8 450 fnands %f1,%f3,%f0 451 .end 452! 453! double vis_fand(double /*frs1*/, double /*frs2*/); 454! 455 .inline vis_fand,16 456 fand %f0,%f2,%f0 457 .end 458! 459! float vis_fands(float /*frs1*/, float /*frs2*/); 460! 461 .inline vis_fands,8 462 fands %f1,%f3,%f0 463 .end 464! 465! double vis_fxnor(double /*frs1*/, double /*frs2*/); 466! 467 .inline vis_fxnor,16 468 fxnor %f0,%f2,%f0 469 .end 470! 471! float vis_fxnors(float /*frs1*/, float /*frs2*/); 472! 473 .inline vis_fxnors,8 474 fxnors %f1,%f3,%f0 475 .end 476! 477! double vis_fsrc(double /*frs1*/); 478! 479 .inline vis_fsrc,8 480 fsrc1 %f0,%f0 481 .end 482! 483! float vis_fsrcs(float /*frs1*/); 484! 485 .inline vis_fsrcs,4 486 fsrc1s %f1,%f0 487 .end 488! 489! double vis_fornot(double /*frs1*/, double /*frs2*/); 490! 491 .inline vis_fornot,16 492 fornot1 %f0,%f2,%f0 493 .end 494! 495! float vis_fornots(float /*frs1*/, float /*frs2*/); 496! 497 .inline vis_fornots,8 498 fornot1s %f1,%f3,%f0 499 .end 500! 501! double vis_for(double /*frs1*/, double /*frs2*/); 502! 503 .inline vis_for,16 504 for %f0,%f2,%f0 505 .end 506! 507! float vis_fors(float /*frs1*/, float /*frs2*/); 508! 509 .inline vis_fors,8 510 fors %f1,%f3,%f0 511 .end 512! 513! double vis_fzero(/* void */) 514! 515 .inline vis_fzero,0 516 fzero %f0 517 .end 518! 519! float vis_fzeros(/* void */) 520! 521 .inline vis_fzeros,0 522 fzeros %f0 523 .end 524! 525! double vis_fone(/* void */) 526! 527 .inline vis_fone,0 528 fone %f0 529 .end 530! 531! float vis_fones(/* void */) 532! 533 .inline vis_fones,0 534 fones %f0 535 .end 536 537!-------------------------------------------------------------------- 538! Partial store instructions 539! 540! vis_stdfa_ASI_PST8P(double frd, void *rs1, int rmask) 541! 542 .inline vis_stdfa_ASI_PST8P,20 543 stda %f0,[%o1]%o2,0xc0 ! ASI_PST8_P 544 .end 545! 546! vis_stdfa_ASI_PST8PL(double frd, void *rs1, int rmask) 547! 548 .inline vis_stdfa_ASI_PST8PL,20 549 stda %f0,[%o1]%o2,0xc8 ! ASI_PST8_PL 550 .end 551! 552! vis_stdfa_ASI_PST8P_int_pair(void *rs1, void *rs2, void *rs3, int rmask); 553! 554 .inline vis_stdfa_ASI_PST8P_int_pair,28 555 ld [%o0],%f4 556 ld [%o1],%f5 557 stda %f4,[%o2]%o3,0xc0 ! ASI_PST8_P 558 .end 559! 560! vis_stdfa_ASI_PST8S(double frd, void *rs1, int rmask) 561! 562 .inline vis_stdfa_ASI_PST8S,20 563 stda %f0,[%o1]%o2,0xc1 ! ASI_PST8_S 564 .end 565! 566! vis_stdfa_ASI_PST16P(double frd, void *rs1, int rmask) 567! 568 .inline vis_stdfa_ASI_PST16P,20 569 stda %f0,[%o1]%o2,0xc2 ! ASI_PST16_P 570 .end 571! 572! vis_stdfa_ASI_PST16S(double frd, void *rs1, int rmask) 573! 574 .inline vis_stdfa_ASI_PST16S,20 575 stda %f0,[%o1]%o2,0xc3 ! ASI_PST16_S 576 .end 577! 578! vis_stdfa_ASI_PST32P(double frd, void *rs1, int rmask) 579! 580 .inline vis_stdfa_ASI_PST32P,20 581 stda %f0,[%o1]%o2,0xc4 ! ASI_PST32_P 582 .end 583! 584! vis_stdfa_ASI_PST32S(double frd, void *rs1, int rmask) 585! 586 .inline vis_stdfa_ASI_PST32S,20 587 stda %f0,[%o1]%o2,0xc5 ! ASI_PST32_S 588 .end 589 590!-------------------------------------------------------------------- 591! Short store instructions 592! 593! vis_stdfa_ASI_FL8P(double frd, void *rs1) 594! 595 .inline vis_stdfa_ASI_FL8P,16 596 stda %f0,[%o1]0xd0 ! ASI_FL8_P 597 .end 598! 599! vis_stdfa_ASI_FL8P_index(double frd, void *rs1, long index) 600! 601 .inline vis_stdfa_ASI_FL8P_index,24 602 stda %f0,[%o1+%o2]0xd0 ! ASI_FL8_P 603 .end 604! 605! vis_stdfa_ASI_FL8S(double frd, void *rs1) 606! 607 .inline vis_stdfa_ASI_FL8S,16 608 stda %f0,[%o1]0xd1 ! ASI_FL8_S 609 .end 610! 611! vis_stdfa_ASI_FL16P(double frd, void *rs1) 612! 613 .inline vis_stdfa_ASI_FL16P,16 614 stda %f0,[%o1]0xd2 ! ASI_FL16_P 615 .end 616! 617! vis_stdfa_ASI_FL16P_index(double frd, void *rs1, long index) 618! 619 .inline vis_stdfa_ASI_FL16P_index,24 620 stda %f0,[%o1+%o2]0xd2 ! ASI_FL16_P 621 .end 622! 623! vis_stdfa_ASI_FL16S(double frd, void *rs1) 624! 625 .inline vis_stdfa_ASI_FL16S,16 626 stda %f0,[%o1]0xd3 ! ASI_FL16_S 627 .end 628! 629! vis_stdfa_ASI_FL8PL(double frd, void *rs1) 630! 631 .inline vis_stdfa_ASI_FL8PL,16 632 stda %f0,[%o1]0xd8 ! ASI_FL8_PL 633 .end 634! 635! vis_stdfa_ASI_FL8SL(double frd, void *rs1) 636! 637 .inline vis_stdfa_ASI_FL8SL,16 638 stda %f0,[%o1]0xd9 ! ASI_FL8_SL 639 .end 640! 641! vis_stdfa_ASI_FL16PL(double frd, void *rs1) 642! 643 .inline vis_stdfa_ASI_FL16PL,16 644 stda %f0,[%o1]0xda ! ASI_FL16_PL 645 .end 646! 647! vis_stdfa_ASI_FL16SL(double frd, void *rs1) 648! 649 .inline vis_stdfa_ASI_FL16SL,16 650 stda %f0,[%o1]0xdb ! ASI_FL16_SL 651 .end 652 653!-------------------------------------------------------------------- 654! Short load instructions 655! 656! double vis_lddfa_ASI_FL8P(void *rs1) 657! 658 .inline vis_lddfa_ASI_FL8P,8 659 ldda [%o0]0xd0,%f4 ! ASI_FL8_P 660 fmovd %f4,%f0 ! Compiler can clean this up 661 .end 662! 663! double vis_lddfa_ASI_FL8P_index(void *rs1, long index) 664! 665 .inline vis_lddfa_ASI_FL8P_index,16 666 ldda [%o0+%o1]0xd0,%f4 667 fmovd %f4,%f0 668 .end 669! 670! double vis_lddfa_ASI_FL8P_hi(void *rs1, unsigned int index) 671! 672 .inline vis_lddfa_ASI_FL8P_hi,12 673 sra %o1,16,%o1 674 ldda [%o0+%o1]0xd0,%f4 675 fmovd %f4,%f0 676 .end 677! 678! double vis_lddfa_ASI_FL8P_lo(void *rs1, unsigned int index) 679! 680 .inline vis_lddfa_ASI_FL8P_lo,12 681 sll %o1,16,%o1 682 sra %o1,16,%o1 683 ldda [%o0+%o1]0xd0,%f4 684 fmovd %f4,%f0 685 .end 686! 687! double vis_lddfa_ASI_FL8S(void *rs1) 688! 689 .inline vis_lddfa_ASI_FL8S,8 690 ldda [%o0]0xd1,%f4 ! ASI_FL8_S 691 fmovd %f4,%f0 692 .end 693! 694! double vis_lddfa_ASI_FL16P(void *rs1) 695! 696 .inline vis_lddfa_ASI_FL16P,8 697 ldda [%o0]0xd2,%f4 ! ASI_FL16_P 698 fmovd %f4,%f0 699 .end 700! 701! double vis_lddfa_ASI_FL16P_index(void *rs1, long index) 702! 703 .inline vis_lddfa_ASI_FL16P_index,16 704 ldda [%o0+%o1]0xd2,%f4 ! ASI_FL16_P 705 fmovd %f4,%f0 706 .end 707! 708! double vis_lddfa_ASI_FL16S(void *rs1) 709! 710 .inline vis_lddfa_ASI_FL16S,8 711 ldda [%o0]0xd3,%f4 ! ASI_FL16_S 712 fmovd %f4,%f0 713 .end 714! 715! double vis_lddfa_ASI_FL8PL(void *rs1) 716! 717 .inline vis_lddfa_ASI_FL8PL,8 718 ldda [%o0]0xd8,%f4 ! ASI_FL8_PL 719 fmovd %f4,%f0 720 .end 721! 722! double vis_lddfa_ASI_FL8PL_index(void *rs1, long index) 723! 724 .inline vis_lddfa_ASI_FL8PL_index,16 725 ldda [%o0+%o1]0xd8,%f4 ! ASI_FL8_PL 726 fmovd %f4,%f0 727 .end 728! 729! double vis_lddfa_ASI_FL8SL(void *rs1) 730! 731 .inline vis_lddfa_ASI_FL8SL,8 732 ldda [%o0]0xd9,%f4 ! ASI_FL8_SL 733 fmovd %f4,%f0 734 .end 735! 736! double vis_lddfa_ASI_FL16PL(void *rs1) 737! 738 .inline vis_lddfa_ASI_FL16PL,8 739 ldda [%o0]0xda,%f4 ! ASI_FL16_PL 740 fmovd %f4,%f0 741 .end 742! 743! double vis_lddfa_ASI_FL16PL_index(void *rs1, long index) 744! 745 .inline vis_lddfa_ASI_FL16PL_index,16 746 ldda [%o0+%o1]0xda,%f4 ! ASI_FL16_PL 747 fmovd %f4,%f0 748 .end 749! 750! double vis_lddfa_ASI_FL16SL(void *rs1) 751! 752 .inline vis_lddfa_ASI_FL16SL,8 753 ldda [%o0]0xdb,%f4 ! ASI_FL16_SL 754 fmovd %f4,%f0 755 .end 756 757!-------------------------------------------------------------------- 758! Graphics status register 759! 760! unsigned int vis_read_gsr(void) 761! 762 .inline vis_read_gsr,0 763 rd %gsr,%o0 764 .end 765! 766! void vis_write_gsr(unsigned int /* GSR */) 767! 768 .inline vis_write_gsr,4 769 wr %g0,%o0,%gsr 770 .end 771 772!-------------------------------------------------------------------- 773! Voxel texture mapping 774! 775! unsigned long vis_array8(unsigned long long /*rs1 */, int /*rs2*/) 776! 777 .inline vis_array8,12 778 array8 %o0,%o1,%o0 779 .end 780! 781! unsigned long vis_array16(unsigned long long /*rs1*/, int /*rs2*/) 782! 783 .inline vis_array16,12 784 array16 %o0,%o1,%o0 785 .end 786! 787! unsigned long vis_array32(unsigned long long /*rs1*/, int /*rs2*/) 788! 789 .inline vis_array32,12 790 array32 %o0,%o1,%o0 791 .end 792 793!-------------------------------------------------------------------- 794! Register aliasing and type casts 795! 796! float vis_read_hi(double /* frs1 */); 797! 798 .inline vis_read_hi,8 799 fmovs %f0,%f0 800 .end 801! 802! float vis_read_lo(double /* frs1 */); 803! 804 .inline vis_read_lo,8 805 fmovs %f1,%f0 ! %f0 = low word (frs1); return %f0; 806 .end 807! 808! double vis_write_hi(double /* frs1 */, float /* frs2 */); 809! 810 .inline vis_write_hi,12 811 fmovs %f3,%f0 ! %f3 = float frs2; return %f0:f1; 812 .end 813! 814! double vis_write_lo(double /* frs1 */, float /* frs2 */); 815! 816 .inline vis_write_lo,12 817 fmovs %f3,%f1 ! %f3 = float frs2; return %f0:f1; 818 .end 819! 820! double vis_freg_pair(float /* frs1 */, float /* frs2 */); 821! 822 .inline vis_freg_pair,8 823 fmovs %f1,%f0 ! %f1 = float frs1; put in hi; 824 fmovs %f3,%f1 ! %f3 = float frs2; put in lo; return %f0:f1; 825 .end 826! 827! float vis_to_float(unsigned int /*value*/); 828! 829 .inline vis_to_float,4 830 st %o0,[%sp+2183] 831 ld [%sp+2183],%f0 832 .end 833! 834! double vis_to_double(unsigned int /*value1*/, unsigned int /*value2*/); 835! 836 .inline vis_to_double,8 837 st %o0,[%sp+2183] 838 ld [%sp+2183],%f0 839 st %o1,[%sp+2183] 840 ld [%sp+2183],%f1 841 .end 842! 843! double vis_to_double_dup(unsigned int /*value*/); 844! 845 .inline vis_to_double_dup,4 846 st %o0,[%sp+2183] 847 ld [%sp+2183],%f1 848 fmovs %f1,%f0 ! duplicate value 849 .end 850! 851! double vis_ll_to_double(unsigned long long /*value*/); 852! 853 .inline vis_ll_to_double,8 854 stx %o0,[%sp+2183] 855 ldd [%sp+2183],%f0 856 .end 857 858!-------------------------------------------------------------------- 859! Address space identifier (ASI) register 860! 861! unsigned int vis_read_asi(void) 862! 863 .inline vis_read_asi,0 864 rd %asi,%o0 865 .end 866! 867! void vis_write_asi(unsigned int /* ASI */) 868! 869 .inline vis_write_asi,4 870 wr %g0,%o0,%asi 871 .end 872 873!-------------------------------------------------------------------- 874! Load/store from/into alternate space 875! 876! float vis_ldfa_ASI_REG(void *rs1) 877! 878 .inline vis_ldfa_ASI_REG,8 879 lda [%o0+0]%asi,%f4 880 fmovs %f4,%f0 ! Compiler can clean this up 881 .end 882! 883! float vis_ldfa_ASI_P(void *rs1) 884! 885 .inline vis_ldfa_ASI_P,8 886 lda [%o0]0x80,%f4 ! ASI_P 887 fmovs %f4,%f0 ! Compiler can clean this up 888 .end 889! 890! float vis_ldfa_ASI_PL(void *rs1) 891! 892 .inline vis_ldfa_ASI_PL,8 893 lda [%o0]0x88,%f4 ! ASI_PL 894 fmovs %f4,%f0 ! Compiler can clean this up 895 .end 896! 897! double vis_lddfa_ASI_REG(void *rs1) 898! 899 .inline vis_lddfa_ASI_REG,8 900 ldda [%o0+0]%asi,%f4 901 fmovd %f4,%f0 ! Compiler can clean this up 902 .end 903! 904! double vis_lddfa_ASI_P(void *rs1) 905! 906 .inline vis_lddfa_ASI_P,8 907 ldda [%o0]0x80,%f4 ! ASI_P 908 fmovd %f4,%f0 ! Compiler can clean this up 909 .end 910! 911! double vis_lddfa_ASI_PL(void *rs1) 912! 913 .inline vis_lddfa_ASI_PL,8 914 ldda [%o0]0x88,%f4 ! ASI_PL 915 fmovd %f4,%f0 ! Compiler can clean this up 916 .end 917! 918! vis_stfa_ASI_REG(float frs, void *rs1) 919! 920 .inline vis_stfa_ASI_REG,12 921 sta %f1,[%o1+0]%asi 922 .end 923! 924! vis_stfa_ASI_P(float frs, void *rs1) 925! 926 .inline vis_stfa_ASI_P,12 927 sta %f1,[%o1]0x80 ! ASI_P 928 .end 929! 930! vis_stfa_ASI_PL(float frs, void *rs1) 931! 932 .inline vis_stfa_ASI_PL,12 933 sta %f1,[%o1]0x88 ! ASI_PL 934 .end 935! 936! vis_stdfa_ASI_REG(double frd, void *rs1) 937! 938 .inline vis_stdfa_ASI_REG,16 939 stda %f0,[%o1+0]%asi 940 .end 941! 942! vis_stdfa_ASI_P(double frd, void *rs1) 943! 944 .inline vis_stdfa_ASI_P,16 945 stda %f0,[%o1]0x80 ! ASI_P 946 .end 947! 948! vis_stdfa_ASI_PL(double frd, void *rs1) 949! 950 .inline vis_stdfa_ASI_PL,16 951 stda %f0,[%o1]0x88 ! ASI_PL 952 .end 953! 954! unsigned short vis_lduha_ASI_REG(void *rs1) 955! 956 .inline vis_lduha_ASI_REG,8 957 lduha [%o0+0]%asi,%o0 958 .end 959! 960! unsigned short vis_lduha_ASI_P(void *rs1) 961! 962 .inline vis_lduha_ASI_P,8 963 lduha [%o0]0x80,%o0 ! ASI_P 964 .end 965! 966! unsigned short vis_lduha_ASI_PL(void *rs1) 967! 968 .inline vis_lduha_ASI_PL,8 969 lduha [%o0]0x88,%o0 ! ASI_PL 970 .end 971! 972! unsigned short vis_lduha_ASI_P_index(void *rs1, long index) 973! 974 .inline vis_lduha_ASI_P_index,16 975 lduha [%o0+%o1]0x80,%o0 ! ASI_P 976 .end 977! 978! unsigned short vis_lduha_ASI_PL_index(void *rs1, long index) 979! 980 .inline vis_lduha_ASI_PL_index,16 981 lduha [%o0+%o1]0x88,%o0 ! ASI_PL 982 .end 983 984!-------------------------------------------------------------------- 985! Prefetch 986! 987! void vis_prefetch_read(void * /*address*/); 988! 989 .inline vis_prefetch_read,8 990 prefetch [%o0+0],0 991 .end 992! 993! void vis_prefetch_write(void * /*address*/); 994! 995 .inline vis_prefetch_write,8 996 prefetch [%o0+0],2 997 .end 998