1! Copyright 2000-2003 Sun Microsystems, Inc. All Rights Reserved. 2! DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3! 4! This code is free software; you can redistribute it and/or modify it 5! under the terms of the GNU General Public License version 2 only, as 6! published by the Free Software Foundation. Oracle designates this 7! particular file as subject to the "Classpath" exception as provided 8! by Oracle in the LICENSE file that accompanied this code. 9! 10! This code is distributed in the hope that it will be useful, but WITHOUT 11! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13! version 2 for more details (a copy is included in the LICENSE file that 14! accompanied this code). 15! 16! You should have received a copy of the GNU General Public License version 17! 2 along with this work; if not, write to the Free Software Foundation, 18! Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19! 20! Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 21! or visit www.oracle.com if you need additional information or have any 22! questions. 23! 24! This file contains inline procedures for VIS instructions in 64-bit mode. 25! 26!-------------------------------------------------------------------- 27! Pure edge handling instructions 28! 29! int vis_edge8(void */*frs1*/, void */*frs2*/); 30! 31 .inline vis_edge8,16 32 edge8 %o0,%o1,%o0 33 .end 34! 35! int vis_edge8l(void */*frs1*/, void */*frs2*/); 36! 37 .inline vis_edge8l,16 38 edge8l %o0,%o1,%o0 39 .end 40! 41! int vis_edge16(void */*frs1*/, void */*frs2*/); 42! 43 .inline vis_edge16,16 44 edge16 %o0,%o1,%o0 45 .end 46! 47! int vis_edge16l(void */*frs1*/, void */*frs2*/); 48! 49 .inline vis_edge16l,16 50 edge16l %o0,%o1,%o0 51 .end 52! 53! int vis_edge32(void */*frs1*/, void */*frs2*/); 54! 55 .inline vis_edge32,16 56 edge32 %o0,%o1,%o0 57 .end 58! 59! int vis_edge32l(void */*frs1*/, void */*frs2*/); 60! 61 .inline vis_edge32l,16 62 edge32l %o0,%o1,%o0 63 .end 64 65!-------------------------------------------------------------------- 66! Edge handling instructions with negative return values if cc set 67! 68! int vis_edge8cc(void */*frs1*/, void */*frs2*/); 69! 70 .inline vis_edge8cc,16 71 edge8 %o0,%o1,%o0 72 mov 0,%o1 73 movgu %xcc,-1024,%o1 74 or %o1,%o0,%o0 75 .end 76! 77! int vis_edge8lcc(void */*frs1*/, void */*frs2*/); 78! 79 .inline vis_edge8lcc,16 80 edge8l %o0,%o1,%o0 81 mov 0,%o1 82 movgu %xcc,-1024,%o1 83 or %o1,%o0,%o0 84 .end 85! 86! int vis_edge16cc(void */*frs1*/, void */*frs2*/); 87! 88 .inline vis_edge16cc,16 89 edge16 %o0,%o1,%o0 90 mov 0,%o1 91 movgu %xcc,-1024,%o1 92 or %o1,%o0,%o0 93 .end 94! 95! int vis_edge16lcc(void */*frs1*/, void */*frs2*/); 96! 97 .inline vis_edge16lcc,16 98 edge16l %o0,%o1,%o0 99 mov 0,%o1 100 movgu %xcc,-1024,%o1 101 or %o1,%o0,%o0 102 .end 103! 104! int vis_edge32cc(void */*frs1*/, void */*frs2*/); 105! 106 .inline vis_edge32cc,16 107 edge32 %o0,%o1,%o0 108 mov 0,%o1 109 movgu %xcc,-1024,%o1 110 or %o1,%o0,%o0 111 .end 112! 113! int vis_edge32lcc(void */*frs1*/, void */*frs2*/); 114! 115 .inline vis_edge32lcc,16 116 edge32l %o0,%o1,%o0 117 mov 0,%o1 118 movgu %xcc,-1024,%o1 119 or %o1,%o0,%o0 120 .end 121 122!-------------------------------------------------------------------- 123! Alignment instructions 124! 125! void *vis_alignaddr(void */*rs1*/, int /*rs2*/); 126! 127 .inline vis_alignaddr,12 128 alignaddr %o0,%o1,%o0 129 .end 130! 131! void *vis_alignaddrl(void */*rs1*/, int /*rs2*/); 132! 133 .inline vis_alignaddrl,12 134 alignaddrl %o0,%o1,%o0 135 .end 136! 137! double vis_faligndata(double /*frs1*/, double /*frs2*/); 138! 139 .inline vis_faligndata,16 140 faligndata %f0,%f2,%f0 141 .end 142 143!-------------------------------------------------------------------- 144! Partitioned comparison instructions 145! 146! int vis_fcmple16(double /*frs1*/, double /*frs2*/); 147! 148 .inline vis_fcmple16,16 149 fcmple16 %f0,%f2,%o0 150 .end 151! 152! int vis_fcmpne16(double /*frs1*/, double /*frs2*/); 153! 154 .inline vis_fcmpne16,16 155 fcmpne16 %f0,%f2,%o0 156 .end 157! 158! int vis_fcmple32(double /*frs1*/, double /*frs2*/); 159! 160 .inline vis_fcmple32,16 161 fcmple32 %f0,%f2,%o0 162 .end 163! 164! int vis_fcmpne32(double /*frs1*/, double /*frs2*/); 165! 166 .inline vis_fcmpne32,16 167 fcmpne32 %f0,%f2,%o0 168 .end 169! 170! int vis_fcmpgt16(double /*frs1*/, double /*frs2*/); 171! 172 .inline vis_fcmpgt16,16 173 fcmpgt16 %f0,%f2,%o0 174 .end 175! 176! int vis_fcmpeq16(double /*frs1*/, double /*frs2*/); 177! 178 .inline vis_fcmpeq16,16 179 fcmpeq16 %f0,%f2,%o0 180 .end 181! 182! int vis_fcmpgt32(double /*frs1*/, double /*frs2*/); 183! 184 .inline vis_fcmpgt32,16 185 fcmpgt32 %f0,%f2,%o0 186 .end 187! 188! int vis_fcmpeq32(double /*frs1*/, double /*frs2*/); 189! 190 .inline vis_fcmpeq32,16 191 fcmpeq32 %f0,%f2,%o0 192 .end 193 194!-------------------------------------------------------------------- 195! Partitioned arithmetic 196! 197! double vis_fmul8x16(float /*frs1*/, double /*frs2*/); 198! 199 .inline vis_fmul8x16,12 200 fmul8x16 %f1,%f2,%f0 201 .end 202! 203! double vis_fmul8x16_dummy(float /*frs1*/, int /*dummy*/, double /*frs2*/); 204! 205 .inline vis_fmul8x16_dummy,16 206 fmul8x16 %f1,%f4,%f0 207 .end 208! 209! double vis_fmul8x16au(float /*frs1*/, float /*frs2*/); 210! 211 .inline vis_fmul8x16au,8 212 fmul8x16au %f1,%f3,%f0 213 .end 214! 215! double vis_fmul8x16al(float /*frs1*/, float /*frs2*/); 216! 217 .inline vis_fmul8x16al,8 218 fmul8x16al %f1,%f3,%f0 219 .end 220! 221! double vis_fmul8sux16(double /*frs1*/, double /*frs2*/); 222! 223 .inline vis_fmul8sux16,16 224 fmul8sux16 %f0,%f2,%f0 225 .end 226! 227! double vis_fmul8ulx16(double /*frs1*/, double /*frs2*/); 228! 229 .inline vis_fmul8ulx16,16 230 fmul8ulx16 %f0,%f2,%f0 231 .end 232! 233! double vis_fmuld8sux16(float /*frs1*/, float /*frs2*/); 234! 235 .inline vis_fmuld8sux16,8 236 fmuld8sux16 %f1,%f3,%f0 237 .end 238! 239! double vis_fmuld8ulx16(float /*frs1*/, float /*frs2*/); 240! 241 .inline vis_fmuld8ulx16,8 242 fmuld8ulx16 %f1,%f3,%f0 243 .end 244! 245! double vis_fpadd16(double /*frs1*/, double /*frs2*/); 246! 247 .inline vis_fpadd16,16 248 fpadd16 %f0,%f2,%f0 249 .end 250! 251! float vis_fpadd16s(float /*frs1*/, float /*frs2*/); 252! 253 .inline vis_fpadd16s,8 254 fpadd16s %f1,%f3,%f0 255 .end 256! 257! double vis_fpadd32(double /*frs1*/, double /*frs2*/); 258! 259 .inline vis_fpadd32,16 260 fpadd32 %f0,%f2,%f0 261 .end 262! 263! float vis_fpadd32s(float /*frs1*/, float /*frs2*/); 264! 265 .inline vis_fpadd32s,8 266 fpadd32s %f1,%f3,%f0 267 .end 268! 269! double vis_fpsub16(double /*frs1*/, double /*frs2*/); 270! 271 .inline vis_fpsub16,16 272 fpsub16 %f0,%f2,%f0 273 .end 274! 275! float vis_fpsub16s(float /*frs1*/, float /*frs2*/); 276! 277 .inline vis_fpsub16s,8 278 fpsub16s %f1,%f3,%f0 279 .end 280! 281! double vis_fpsub32(double /*frs1*/, double /*frs2*/); 282! 283 .inline vis_fpsub32,16 284 fpsub32 %f0,%f2,%f0 285 .end 286! 287! float vis_fpsub32s(float /*frs1*/, float /*frs2*/); 288! 289 .inline vis_fpsub32s,8 290 fpsub32s %f1,%f3,%f0 291 .end 292 293!-------------------------------------------------------------------- 294! Pixel packing 295! 296! float vis_fpack16(double /*frs2*/); 297! 298 .inline vis_fpack16,8 299 fpack16 %f0,%f0 300 .end 301! 302! double vis_fpack32(double /*frs1*/, double /*frs2*/); 303! 304 .inline vis_fpack32,16 305 fpack32 %f0,%f2,%f0 306 .end 307! 308! float vis_fpackfix(double /*frs2*/); 309! 310 .inline vis_fpackfix,8 311 fpackfix %f0,%f0 312 .end 313! 314! double vis_fpack16_pair(double /*frs2*/, double /*frs2*/); 315! 316 .inline vis_fpack16_pair,16 317 fpack16 %f0,%f0 318 fpack16 %f2,%f1 319 .end 320! 321! double vis_fpackfix_pair(double /*frs2*/, double /*frs2*/); 322! 323 .inline vis_fpackfix_pair,16 324 fpackfix %f0,%f0 325 fpackfix %f2,%f1 326 .end 327! 328! void vis_st2_fpack16(double, double, double *); 329! 330 .inline vis_st2_fpack16,24 331 fpack16 %f0,%f0 332 fpack16 %f2,%f1 333 st %f0,[%o2+0] 334 st %f1,[%o2+4] 335 .end 336! 337! void vis_std_fpack16(double, double, double *); 338! 339 .inline vis_std_fpack16,24 340 fpack16 %f0,%f0 341 fpack16 %f2,%f1 342 std %f0,[%o2] 343 .end 344! 345! void vis_st2_fpackfix(double, double, double *); 346! 347 .inline vis_st2_fpackfix,24 348 fpackfix %f0,%f0 349 fpackfix %f2,%f1 350 st %f0,[%o2+0] 351 st %f1,[%o2+4] 352 .end 353! 354! double vis_fpack16_to_hi(double /*frs1*/, double /*frs2*/); 355! 356 .inline vis_fpack16_to_hi,16 357 fpack16 %f2,%f0 358 .end 359! 360! double vis_fpack16_to_lo(double /*frs1*/, double /*frs2*/); 361! 362 .inline vis_fpack16_to_lo,16 363 fpack16 %f2,%f1 364 .end 365 366!-------------------------------------------------------------------- 367! Motion estimation 368! 369! double vis_pxldist64(double accum /*frd*/, double pxls1 /*frs1*/, 370! double pxls2 /*frs2*/); 371! 372 .inline vis_pxldist64,24 373 pdist %f2,%f4,%f0 374 .end 375 376!-------------------------------------------------------------------- 377! Channel merging 378! 379! double vis_fpmerge(float /*frs1*/, float /*frs2*/); 380! 381 .inline vis_fpmerge,8 382 fpmerge %f1,%f3,%f0 383 .end 384 385!-------------------------------------------------------------------- 386! Pixel expansion 387! 388! double vis_fexpand(float /*frs2*/); 389! 390 .inline vis_fexpand,4 391 fexpand %f1,%f0 392 .end 393! 394! double vis_fexpand_hi(double /*frs2*/); 395! 396 .inline vis_fexpand_hi,8 397 fexpand %f0,%f0 398 .end 399! 400! double vis_fexpand_lo(double /*frs2*/); 401! 402 .inline vis_fexpand_lo,8 403 fexpand %f1,%f0 404 .end 405 406!-------------------------------------------------------------------- 407! Bitwise logical operations 408! 409! double vis_fnor(double /*frs1*/, double /*frs2*/); 410! 411 .inline vis_fnor,16 412 fnor %f0,%f2,%f0 413 .end 414! 415! float vis_fnors(float /*frs1*/, float /*frs2*/); 416! 417 .inline vis_fnors,8 418 fnors %f1,%f3,%f0 419 .end 420! 421! double vis_fandnot(double /*frs1*/, double /*frs2*/); 422! 423 .inline vis_fandnot,16 424 fandnot1 %f0,%f2,%f0 425 .end 426! 427! float vis_fandnots(float /*frs1*/, float /*frs2*/); 428! 429 .inline vis_fandnots,8 430 fandnot1s %f1,%f3,%f0 431 .end 432! 433! double vis_fnot(double /*frs1*/); 434! 435 .inline vis_fnot,8 436 fnot1 %f0,%f0 437 .end 438! 439! float vis_fnots(float /*frs1*/); 440! 441 .inline vis_fnots,4 442 fnot1s %f1,%f0 443 .end 444! 445! double vis_fxor(double /*frs1*/, double /*frs2*/); 446! 447 .inline vis_fxor,16 448 fxor %f0,%f2,%f0 449 .end 450! 451! float vis_fxors(float /*frs1*/, float /*frs2*/); 452! 453 .inline vis_fxors,8 454 fxors %f1,%f3,%f0 455 .end 456! 457! double vis_fnand(double /*frs1*/, double /*frs2*/); 458! 459 .inline vis_fnand,16 460 fnand %f0,%f2,%f0 461 .end 462! 463! float vis_fnands(float /*frs1*/, float /*frs2*/); 464! 465 .inline vis_fnands,8 466 fnands %f1,%f3,%f0 467 .end 468! 469! double vis_fand(double /*frs1*/, double /*frs2*/); 470! 471 .inline vis_fand,16 472 fand %f0,%f2,%f0 473 .end 474! 475! float vis_fands(float /*frs1*/, float /*frs2*/); 476! 477 .inline vis_fands,8 478 fands %f1,%f3,%f0 479 .end 480! 481! double vis_fxnor(double /*frs1*/, double /*frs2*/); 482! 483 .inline vis_fxnor,16 484 fxnor %f0,%f2,%f0 485 .end 486! 487! float vis_fxnors(float /*frs1*/, float /*frs2*/); 488! 489 .inline vis_fxnors,8 490 fxnors %f1,%f3,%f0 491 .end 492! 493! double vis_fsrc(double /*frs1*/); 494! 495 .inline vis_fsrc,8 496 fsrc1 %f0,%f0 497 .end 498! 499! float vis_fsrcs(float /*frs1*/); 500! 501 .inline vis_fsrcs,4 502 fsrc1s %f1,%f0 503 .end 504! 505! double vis_fornot(double /*frs1*/, double /*frs2*/); 506! 507 .inline vis_fornot,16 508 fornot1 %f0,%f2,%f0 509 .end 510! 511! float vis_fornots(float /*frs1*/, float /*frs2*/); 512! 513 .inline vis_fornots,8 514 fornot1s %f1,%f3,%f0 515 .end 516! 517! double vis_for(double /*frs1*/, double /*frs2*/); 518! 519 .inline vis_for,16 520 for %f0,%f2,%f0 521 .end 522! 523! float vis_fors(float /*frs1*/, float /*frs2*/); 524! 525 .inline vis_fors,8 526 fors %f1,%f3,%f0 527 .end 528! 529! double vis_fzero(void); 530! 531 .inline vis_fzero,0 532 fzero %f0 533 .end 534! 535! float vis_fzeros(void); 536! 537 .inline vis_fzeros,0 538 fzeros %f0 539 .end 540! 541! double vis_fone(void); 542! 543 .inline vis_fone,0 544 fone %f0 545 .end 546! 547! float vis_fones(void); 548! 549 .inline vis_fones,0 550 fones %f0 551 .end 552 553!-------------------------------------------------------------------- 554! Partial store instructions 555! 556! void vis_stdfa_ASI_PST8P(double /*frd*/, void * /*rs1*/, int /*rmask*/); 557! 558 .inline vis_stdfa_ASI_PST8P,20 559 stda %f0,[%o1]%o2,0xc0 ! ASI_PST8_P 560 .end 561! 562! void vis_stdfa_ASI_PST8PL(double /*frd*/, void * /*rs1*/, int /*rmask*/); 563! 564 .inline vis_stdfa_ASI_PST8PL,20 565 stda %f0,[%o1]%o2,0xc8 ! ASI_PST8_PL 566 .end 567! 568! void vis_stdfa_ASI_PST8S(double /*frd*/, void * /*rs1*/, int /*rmask*/); 569! 570 .inline vis_stdfa_ASI_PST8S,20 571 stda %f0,[%o1]%o2,0xc1 ! ASI_PST8_S 572 .end 573! 574! void vis_stdfa_ASI_PST8P_int_pair(void * /*rs1*/, void * /*rs2*/, void * /*rs3*/, int /*rmask*/);; 575! 576 .inline vis_stdfa_ASI_PST8P_int_pair,28 577 ld [%o0],%f4 578 ld [%o1],%f5 579 stda %f4,[%o2]%o3,0xc0 ! ASI_PST8_P 580 .end 581! 582! void vis_stdfa_ASI_PST16P(double /*frd*/, void * /*rs1*/, int /*rmask*/); 583! 584 .inline vis_stdfa_ASI_PST16P,20 585 stda %f0,[%o1]%o2,0xc2 ! ASI_PST16_P 586 .end 587! 588! void vis_stdfa_ASI_PST16PL(double /*frd*/, void * /*rs1*/, int /*rmask*/); 589! 590 .inline vis_stdfa_ASI_PST16PL,20 591 stda %f0,[%o1]%o2,0xca ! ASI_PST16_PL 592 .end 593! 594! void vis_stdfa_ASI_PST16S(double /*frd*/, void * /*rs1*/, int /*rmask*/); 595! 596 .inline vis_stdfa_ASI_PST16S,20 597 stda %f0,[%o1]%o2,0xc3 ! ASI_PST16_S 598 .end 599! 600! void vis_stdfa_ASI_PST32P(double /*frd*/, void * /*rs1*/, int /*rmask*/); 601! 602 .inline vis_stdfa_ASI_PST32P,20 603 stda %f0,[%o1]%o2,0xc4 ! ASI_PST32_P 604 .end 605! 606! void vis_stdfa_ASI_PST32PL(double /*frd*/, void * /*rs1*/, int /*rmask*/); 607! 608 .inline vis_stdfa_ASI_PST32PL,20 609 stda %f0,[%o1]%o2,0xcc ! ASI_PST32_PL 610 .end 611! 612! void vis_stdfa_ASI_PST32S(double /*frd*/, void * /*rs1*/, int /*rmask*/); 613! 614 .inline vis_stdfa_ASI_PST32S,20 615 stda %f0,[%o1]%o2,0xc5 ! ASI_PST32_S 616 .end 617 618!-------------------------------------------------------------------- 619! Byte & short store instructions 620! 621! void vis_stdfa_ASI_FL8P(double /*frd*/, void * /*rs1*/); 622! 623 .inline vis_stdfa_ASI_FL8P,16 624 stda %f0,[%o1]0xd0 ! ASI_FL8_P 625 .end 626! 627! void vis_stdfa_ASI_FL8P_index(double /*frd*/, void * /*rs1*/, long /*index*/); 628! 629 .inline vis_stdfa_ASI_FL8P_index,24 630 stda %f0,[%o1+%o2]0xd0 ! ASI_FL8_P 631 .end 632! 633! void vis_stdfa_ASI_FL8S(double /*frd*/, void * /*rs1*/); 634! 635 .inline vis_stdfa_ASI_FL8S,16 636 stda %f0,[%o1]0xd1 ! ASI_FL8_S 637 .end 638! 639! void vis_stdfa_ASI_FL16P(double /*frd*/, void * /*rs1*/); 640! 641 .inline vis_stdfa_ASI_FL16P,16 642 stda %f0,[%o1]0xd2 ! ASI_FL16_P 643 .end 644! 645! void vis_stdfa_ASI_FL16P_index(double /*frd*/, void * /*rs1*/, long /*index*/); 646! 647 .inline vis_stdfa_ASI_FL16P_index,24 648 stda %f0,[%o1+%o2]0xd2 ! ASI_FL16_P 649 .end 650! 651! void vis_stdfa_ASI_FL16S(double /*frd*/, void * /*rs1*/); 652! 653 .inline vis_stdfa_ASI_FL16S,16 654 stda %f0,[%o1]0xd3 ! ASI_FL16_S 655 .end 656! 657! void vis_stdfa_ASI_FL8PL(double /*frd*/, void * /*rs1*/); 658! 659 .inline vis_stdfa_ASI_FL8PL,16 660 stda %f0,[%o1]0xd8 ! ASI_FL8_PL 661 .end 662! 663! void vis_stdfa_ASI_FL8PL_index(double /*frd*/, void * /*rs1*/, long /*index*/); 664! 665 .inline vis_stdfa_ASI_FL8PL_index,24 666 stda %f0,[%o1+%o2]0xd8 ! ASI_FL8_PL 667 .end 668! 669! void vis_stdfa_ASI_FL8SL(double /*frd*/, void * /*rs1*/); 670! 671 .inline vis_stdfa_ASI_FL8SL,16 672 stda %f0,[%o1]0xd9 ! ASI_FL8_SL 673 .end 674! 675! void vis_stdfa_ASI_FL16PL(double /*frd*/, void * /*rs1*/); 676! 677 .inline vis_stdfa_ASI_FL16PL,16 678 stda %f0,[%o1]0xda ! ASI_FL16_PL 679 .end 680! 681! void vis_stdfa_ASI_FL16PL_index(double /*frd*/, void * /*rs1*/, long /*index*/); 682! 683 .inline vis_stdfa_ASI_FL16PL_index,24 684 stda %f0,[%o1+%o2]0xda ! ASI_FL16_PL 685 .end 686! 687! void vis_stdfa_ASI_FL16SL(double /*frd*/, void * /*rs1*/); 688! 689 .inline vis_stdfa_ASI_FL16SL,16 690 stda %f0,[%o1]0xdb ! ASI_FL16_SL 691 .end 692 693!-------------------------------------------------------------------- 694! Byte & short load instructions 695! 696! double vis_lddfa_ASI_FL8P(void * /*rs1*/); 697! 698 .inline vis_lddfa_ASI_FL8P,8 699 ldda [%o0]0xd0,%f0 ! ASI_FL8_P 700 .end 701! 702! double vis_lddfa_ASI_FL8P_index(void * /*rs1*/, long /*index*/); 703! 704 .inline vis_lddfa_ASI_FL8P_index,16 705 ldda [%o0+%o1]0xd0,%f0 ! ASI_FL8_P 706 .end 707! 708! double vis_lddfa_ASI_FL8P_hi(void * /*rs1*/, unsigned int /*index*/); 709! 710 .inline vis_lddfa_ASI_FL8P_hi,12 711 sra %o1,16,%o1 712 ldda [%o0+%o1]0xd0,%f0 ! ASI_FL8_P 713 .end 714! 715! double vis_lddfa_ASI_FL8P_lo(void * /*rs1*/, unsigned int /*index*/); 716! 717 .inline vis_lddfa_ASI_FL8P_lo,12 718 sll %o1,16,%o1 719 sra %o1,16,%o1 720 ldda [%o0+%o1]0xd0,%f0 ! ASI_FL8_P 721 .end 722! 723! double vis_lddfa_ASI_FL8S(void * /*rs1*/); 724! 725 .inline vis_lddfa_ASI_FL8S,8 726 ldda [%o0]0xd1,%f0 ! ASI_FL8_S 727 .end 728! 729! double vis_lddfa_ASI_FL16P(void * /*rs1*/); 730! 731 .inline vis_lddfa_ASI_FL16P,8 732 ldda [%o0]0xd2,%f0 ! ASI_FL16_P 733 .end 734! 735! double vis_lddfa_ASI_FL16P_index(void * /*rs1*/, long /*index*/); 736! 737 .inline vis_lddfa_ASI_FL16P_index,16 738 ldda [%o0+%o1]0xd2,%f0 ! ASI_FL16_P 739 .end 740! 741! double vis_lddfa_ASI_FL16S(void * /*rs1*/); 742! 743 .inline vis_lddfa_ASI_FL16S,8 744 ldda [%o0]0xd3,%f0 ! ASI_FL16_S 745 .end 746! 747! double vis_lddfa_ASI_FL8PL(void * /*rs1*/); 748! 749 .inline vis_lddfa_ASI_FL8PL,8 750 ldda [%o0]0xd8,%f0 ! ASI_FL8_PL 751 .end 752! 753! double vis_lddfa_ASI_FL8PL_index(void * /*rs1*/, long /*index*/); 754! 755 .inline vis_lddfa_ASI_FL8PL_index,16 756 ldda [%o0+%o1]0xd8,%f0 ! ASI_FL8_PL 757 .end 758! 759! double vis_lddfa_ASI_FL8SL(void * /*rs1*/); 760! 761 .inline vis_lddfa_ASI_FL8SL,8 762 ldda [%o0]0xd9,%f0 ! ASI_FL8_SL 763 .end 764! 765! double vis_lddfa_ASI_FL16PL(void * /*rs1*/); 766! 767 .inline vis_lddfa_ASI_FL16PL,8 768 ldda [%o0]0xda,%f0 ! ASI_FL16_PL 769 .end 770! 771! double vis_lddfa_ASI_FL16PL_index(void * /*rs1*/, long /*index*/); 772! 773 .inline vis_lddfa_ASI_FL16PL_index,16 774 ldda [%o0+%o1]0xda,%f0 ! ASI_FL16_PL 775 .end 776! 777! double vis_lddfa_ASI_FL16SL(void * /*rs1*/); 778! 779 .inline vis_lddfa_ASI_FL16SL,8 780 ldda [%o0]0xdb,%f0 ! ASI_FL16_SL 781 .end 782 783!-------------------------------------------------------------------- 784! Graphics status register 785! 786! unsigned int vis_read_gsr32(void); 787! 788 .inline vis_read_gsr32,0 789 rd %gsr,%o0 790 .end 791! 792! void vis_write_gsr32(unsigned int /* GSR */); 793! 794 .inline vis_write_gsr32,4 795 wr %g0,%o0,%gsr 796 .end 797 798!-------------------------------------------------------------------- 799! Voxel texture mapping 800! 801! unsigned long vis_array8(unsigned long /*rs1 */, int /*rs2*/); 802! 803 .inline vis_array8,12 804 array8 %o0,%o1,%o0 805 .end 806! 807! unsigned long vis_array16(unsigned long /*rs1*/, int /*rs2*/); 808! 809 .inline vis_array16,12 810 array16 %o0,%o1,%o0 811 .end 812! 813! unsigned long vis_array32(unsigned long /*rs1*/, int /*rs2*/); 814! 815 .inline vis_array32,12 816 array32 %o0,%o1,%o0 817 .end 818 819!-------------------------------------------------------------------- 820! Register aliasing and type casts 821! 822! float vis_read_hi(double /* frs1 */); 823! 824 .inline vis_read_hi,8 825 fmovs %f0,%f0 826 .end 827! 828! float vis_read_lo(double /* frs1 */); 829! 830 .inline vis_read_lo,8 831 fmovs %f1,%f0 ! %f0 = low word (frs1); return %f0; 832 .end 833! 834! double vis_write_hi(double /* frs1 */, float /* frs2 */); 835! 836 .inline vis_write_hi,12 837 fmovs %f3,%f0 ! %f3 = float frs2; return %f0:f1; 838 .end 839! 840! double vis_write_lo(double /* frs1 */, float /* frs2 */); 841! 842 .inline vis_write_lo,12 843 fmovs %f3,%f1 ! %f3 = float frs2; return %f0:f1; 844 .end 845! 846! double vis_freg_pair(float /* frs1 */, float /* frs2 */); 847! 848 .inline vis_freg_pair,8 849 fmovs %f1,%f0 850 fmovs %f3,%f1 851 .end 852! 853! float vis_to_float(unsigned int /*value*/); 854! 855 .inline vis_to_float,4 856 st %o0,[%sp+2183] 857 ld [%sp+2183],%f0 858 .end 859! 860! double vis_to_double(unsigned int /*value1*/, unsigned int /*value2*/); 861! 862 .inline vis_to_double,8 863 st %o0,[%sp+2183] 864 ld [%sp+2183],%f0 865 st %o1,[%sp+2183] 866 ld [%sp+2183],%f1 867 .end 868! 869! double vis_to_double_dup(unsigned int /*value*/); 870! 871 .inline vis_to_double_dup,4 872 st %o0,[%sp+2183] 873 ld [%sp+2183],%f1 874 fmovs %f1,%f0 ! duplicate value 875 .end 876! 877! double vis_ll_to_double(unsigned long /*value*/); 878! 879 .inline vis_ll_to_double,8 880 stx %o0,[%sp+2183] 881 ldd [%sp+2183],%f0 882 .end 883 884!-------------------------------------------------------------------- 885! Address space identifier (ASI) register 886! 887! unsigned int vis_read_asi(void); 888! 889 .inline vis_read_asi,0 890 rd %asi,%o0 891 .end 892! 893! void vis_write_asi(unsigned int /* ASI */); 894! 895 .inline vis_write_asi,4 896 wr %g0,%o0,%asi 897 .end 898 899!-------------------------------------------------------------------- 900! Load/store from/into alternate space 901! 902! float vis_ldfa_ASI_REG(void * /*rs1*/); 903! 904 .inline vis_ldfa_ASI_REG,8 905 lda [%o0+0]%asi,%f0 906 .end 907! 908! float vis_ldfa_ASI_P(void * /*rs1*/); 909! 910 .inline vis_ldfa_ASI_P,8 911 lda [%o0]0x80,%f0 ! ASI_P 912 .end 913! 914! float vis_ldfa_ASI_P_index(void * /*rs1*/, long /*index*/); 915! 916 .inline vis_ldfa_ASI_P_index,16 917 lda [%o0+%o1]0x80,%f0 ! ASI_P 918 .end 919! 920! float vis_ldfa_ASI_PL(void * /*rs1*/); 921! 922 .inline vis_ldfa_ASI_PL,8 923 lda [%o0]0x88,%f0 ! ASI_PL 924 .end 925! 926! float vis_ldfa_ASI_PL_index(void * /*rs1*/, long /*index*/); 927! 928 .inline vis_ldfa_ASI_PL_index,16 929 lda [%o0+%o1]0x88,%f0 ! ASI_PL 930 .end 931! 932! double vis_lddfa_ASI_REG(void * /*rs1*/); 933! 934 .inline vis_lddfa_ASI_REG,8 935 ldda [%o0+0]%asi,%f0 936 .end 937! 938! double vis_lddfa_ASI_P(void * /*rs1*/); 939! 940 .inline vis_lddfa_ASI_P,8 941 ldda [%o0]0x80,%f0 ! ASI_P 942 .end 943! 944! double vis_lddfa_ASI_P_index(void * /*rs1*/, long /*index*/); 945! 946 .inline vis_lddfa_ASI_P_index,16 947 ldda [%o0+%o1]0x80,%f0 ! ASI_P 948 .end 949! 950! double vis_lddfa_ASI_PL(void * /*rs1*/); 951! 952 .inline vis_lddfa_ASI_PL,8 953 ldda [%o0]0x88,%f0 ! ASI_PL 954 .end 955! 956! double vis_lddfa_ASI_PL_index(void * /*rs1*/, long /*index*/); 957! 958 .inline vis_lddfa_ASI_PL_index,16 959 ldda [%o0+%o1]0x88,%f0 ! ASI_PL 960 .end 961! 962! void vis_stfa_ASI_REG(float /*frs*/, void * /*rs1*/); 963! 964 .inline vis_stfa_ASI_REG,12 965 sta %f1,[%o1]%asi 966 .end 967! 968! void vis_stfa_ASI_P(float /*frs*/, void * /*rs1*/); 969! 970 .inline vis_stfa_ASI_P,12 971 sta %f1,[%o1]0x80 ! ASI_P 972 .end 973! 974! void vis_stfa_ASI_P_index(float /*frs*/, void * /*rs1*/, long /*index*/); 975! 976 .inline vis_stfa_ASI_P_index,24 977 sta %f1,[%o1+%o2]0x80 ! ASI_P 978 .end 979! 980! void vis_stfa_ASI_PL(float /*frs*/, void * /*rs1*/); 981! 982 .inline vis_stfa_ASI_PL,12 983 sta %f1,[%o1]0x88 ! ASI_PL 984 .end 985! 986! void vis_stfa_ASI_PL_index(float /*frs*/, void * /*rs1*/, long /*index*/); 987! 988 .inline vis_stfa_ASI_PL_index,24 989 sta %f1,[%o1+%o2]0x88 ! ASI_PL 990 .end 991! 992! void vis_stdfa_ASI_REG(double /*frd*/, void * /*rs1*/); 993! 994 .inline vis_stdfa_ASI_REG,16 995 stda %f0,[%o1]%asi 996 .end 997! 998! void vis_stdfa_ASI_P(double /*frd*/, void * /*rs1*/); 999! 1000 .inline vis_stdfa_ASI_P,16 1001 stda %f0,[%o1]0x80 ! ASI_P 1002 .end 1003! 1004! void vis_stdfa_ASI_P_index(double /*frd*/, void * /*rs1*/, long /*index*/); 1005! 1006 .inline vis_stdfa_ASI_P_index,24 1007 stda %f0,[%o1+%o2]0x80 ! ASI_P 1008 .end 1009! 1010! void vis_stdfa_ASI_PL(double /*frd*/, void * /*rs1*/); 1011! 1012 .inline vis_stdfa_ASI_PL,16 1013 stda %f0,[%o1]0x88 ! ASI_PL 1014 .end 1015! 1016! void vis_stdfa_ASI_PL_index(double /*frd*/, void * /*rs1*/, long /*index*/); 1017! 1018 .inline vis_stdfa_ASI_PL_index,24 1019 stda %f0,[%o1+%o2]0x88 ! ASI_PL 1020 .end 1021! 1022! unsigned short vis_lduha_ASI_REG(void * /*rs1*/); 1023! 1024 .inline vis_lduha_ASI_REG,8 1025 lduha [%o0+0]%asi,%o0 1026 .end 1027! 1028! unsigned short vis_lduha_ASI_P(void * /*rs1*/); 1029! 1030 .inline vis_lduha_ASI_P,8 1031 lduha [%o0]0x80,%o0 ! ASI_P 1032 .end 1033! 1034! unsigned short vis_lduha_ASI_PL(void * /*rs1*/); 1035! 1036 .inline vis_lduha_ASI_PL,8 1037 lduha [%o0]0x88,%o0 ! ASI_PL 1038 .end 1039! 1040! unsigned short vis_lduha_ASI_P_index(void * /*rs1*/, long /*index*/); 1041! 1042 .inline vis_lduha_ASI_P_index,16 1043 lduha [%o0+%o1]0x80,%o0 ! ASI_P 1044 .end 1045! 1046! unsigned short vis_lduha_ASI_PL_index(void * /*rs1*/, long /*index*/); 1047! 1048 .inline vis_lduha_ASI_PL_index,16 1049 lduha [%o0+%o1]0x88,%o0 ! ASI_PL 1050 .end 1051 1052!-------------------------------------------------------------------- 1053! Prefetch 1054! 1055! void vis_prefetch_read(void * /*address*/); 1056! 1057 .inline vis_prefetch_read,8 1058 prefetch [%o0],0 1059 .end 1060! 1061! void vis_prefetch_write(void * /*address*/); 1062! 1063 .inline vis_prefetch_write,8 1064 prefetch [%o0],2 1065 .end 1066 1067!-------------------------------------------------------------------- 1068! Nonfaulting load instructions 1069! 1070! char vis_ldsba_ASI_PNF(void * /*rs1*/); 1071! 1072 .inline vis_ldsba_ASI_PNF,8 1073 ldsba [%o0]0x82,%o0 ! ASI_PNF 1074 .end 1075! 1076! char vis_ldsba_ASI_PNF_index(void * /*rs1*/, long /*index*/); 1077! 1078 .inline vis_ldsba_ASI_PNF_index,16 1079 ldsba [%o0+%o1]0x82,%o0 ! ASI_PNF 1080 .end 1081! 1082! char vis_ldsba_ASI_PNFL(void * /*rs1*/); 1083! 1084 .inline vis_ldsba_ASI_PNFL,8 1085 ldsba [%o0]0x8a,%o0 ! ASI_PNFL 1086 .end 1087! 1088! char vis_ldsba_ASI_PNFL_index(void * /*rs1*/, long /*index*/); 1089! 1090 .inline vis_ldsba_ASI_PNFL_index,16 1091 ldsba [%o0+%o1]0x8a,%o0 ! ASI_PNFL 1092 .end 1093! 1094! unsigned char vis_lduba_ASI_PNF(void * /*rs1*/); 1095! 1096 .inline vis_lduba_ASI_PNF,8 1097 lduba [%o0]0x82,%o0 ! ASI_PNF 1098 .end 1099! 1100! unsigned char vis_lduba_ASI_PNF_index(void * /*rs1*/, long /*index*/); 1101! 1102 .inline vis_lduba_ASI_PNF_index,16 1103 lduba [%o0+%o1]0x82,%o0 ! ASI_PNF 1104 .end 1105! 1106! unsigned char vis_lduba_ASI_PNFL(void * /*rs1*/); 1107! 1108 .inline vis_lduba_ASI_PNFL,8 1109 lduba [%o0]0x8a,%o0 ! ASI_PNFL 1110 .end 1111! 1112! unsigned char vis_lduba_ASI_PNFL_index(void * /*rs1*/, long /*index*/); 1113! 1114 .inline vis_lduba_ASI_PNFL_index,16 1115 lduba [%o0+%o1]0x8a,%o0 ! ASI_PNFL 1116 .end 1117! 1118! short vis_ldsha_ASI_PNF(void * /*rs1*/); 1119! 1120 .inline vis_ldsha_ASI_PNF,8 1121 ldsha [%o0]0x82,%o0 ! ASI_PNF 1122 .end 1123! 1124! short vis_ldsha_ASI_PNF_index(void * /*rs1*/, long /*index*/); 1125! 1126 .inline vis_ldsha_ASI_PNF_index,16 1127 ldsha [%o0+%o1]0x82,%o0 ! ASI_PNF 1128 .end 1129! 1130! short vis_ldsha_ASI_PNFL(void * /*rs1*/); 1131! 1132 .inline vis_ldsha_ASI_PNFL,8 1133 ldsha [%o0]0x8a,%o0 ! ASI_PNFL 1134 .end 1135! 1136! short vis_ldsha_ASI_PNFL_index(void * /*rs1*/, long /*index*/); 1137! 1138 .inline vis_ldsha_ASI_PNFL_index,16 1139 ldsha [%o0+%o1]0x8a,%o0 ! ASI_PNFL 1140 .end 1141! 1142! unsigned short vis_lduha_ASI_PNF(void * /*rs1*/); 1143! 1144 .inline vis_lduha_ASI_PNF,8 1145 lduha [%o0]0x82,%o0 ! ASI_PNF 1146 .end 1147! 1148! unsigned short vis_lduha_ASI_PNF_index(void * /*rs1*/, long /*index*/); 1149! 1150 .inline vis_lduha_ASI_PNF_index,16 1151 lduha [%o0+%o1]0x82,%o0 ! ASI_PNF 1152 .end 1153! 1154! unsigned short vis_lduha_ASI_PNFL(void * /*rs1*/); 1155! 1156 .inline vis_lduha_ASI_PNFL,8 1157 lduha [%o0]0x8a,%o0 ! ASI_PNFL 1158 .end 1159! 1160! unsigned short vis_lduha_ASI_PNFL_index(void * /*rs1*/, long /*index*/); 1161! 1162 .inline vis_lduha_ASI_PNFL_index,16 1163 lduha [%o0+%o1]0x8a,%o0 ! ASI_PNFL 1164 .end 1165! 1166! int vis_ldswa_ASI_PNF(void * /*rs1*/); 1167! 1168 .inline vis_ldswa_ASI_PNF,8 1169 ldswa [%o0]0x82,%o0 ! ASI_PNF 1170 .end 1171! 1172! int vis_ldswa_ASI_PNF_index(void * /*rs1*/, long /*index*/); 1173! 1174 .inline vis_ldswa_ASI_PNF_index,16 1175 ldswa [%o0+%o1]0x82,%o0 ! ASI_PNF 1176 .end 1177! 1178! int vis_ldswa_ASI_PNFL(void * /*rs1*/); 1179! 1180 .inline vis_ldswa_ASI_PNFL,8 1181 ldswa [%o0]0x8a,%o0 ! ASI_PNFL 1182 .end 1183! 1184! int vis_ldswa_ASI_PNFL_index(void * /*rs1*/, long /*index*/); 1185! 1186 .inline vis_ldswa_ASI_PNFL_index,16 1187 ldswa [%o0+%o1]0x8a,%o0 ! ASI_PNFL 1188 .end 1189! 1190! unsigned int vis_lduwa_ASI_PNF(void * /*rs1*/); 1191! 1192 .inline vis_lduwa_ASI_PNF,8 1193 lduwa [%o0]0x82,%o0 ! ASI_PNF 1194 .end 1195! 1196! unsigned int vis_lduwa_ASI_PNF_index(void * /*rs1*/, long /*index*/); 1197! 1198 .inline vis_lduwa_ASI_PNF_index,16 1199 lduwa [%o0+%o1]0x82,%o0 ! ASI_PNF 1200 .end 1201! 1202! unsigned int vis_lduwa_ASI_PNFL(void * /*rs1*/); 1203! 1204 .inline vis_lduwa_ASI_PNFL,8 1205 lduwa [%o0]0x8a,%o0 ! ASI_PNFL 1206 .end 1207! 1208! unsigned int vis_lduwa_ASI_PNFL_index(void * /*rs1*/, long /*index*/); 1209! 1210 .inline vis_lduwa_ASI_PNFL_index,16 1211 lduwa [%o0+%o1]0x8a,%o0 ! ASI_PNFL 1212 .end 1213! 1214! long vis_ldxa_ASI_PNF(void * /*rs1*/); 1215! 1216 .inline vis_ldxa_ASI_PNF,8 1217 ldxa [%o0]0x82,%o0 ! ASI_PNF 1218 .end 1219! 1220! long vis_ldxa_ASI_PNF_index(void * /*rs1*/, long /*index*/); 1221! 1222 .inline vis_ldxa_ASI_PNF_index,16 1223 ldxa [%o0+%o1]0x82,%o0 ! ASI_PNF 1224 .end 1225! 1226! long vis_ldxa_ASI_PNFL(void * /*rs1*/); 1227! 1228 .inline vis_ldxa_ASI_PNFL,8 1229 ldxa [%o0]0x8a,%o0 ! ASI_PNFL 1230 .end 1231! 1232! long vis_ldxa_ASI_PNFL_index(void * /*rs1*/, long /*index*/); 1233! 1234 .inline vis_ldxa_ASI_PNFL_index,16 1235 ldxa [%o0+%o1]0x8a,%o0 ! ASI_PNFL 1236 .end 1237! 1238! long long vis_ldda_ASI_PNF(void * /*rs1*/); 1239! 1240 .inline vis_ldda_ASI_PNF,8 1241 ldda [%o0]0x82,%o0 ! ASI_PNF 1242 .end 1243! 1244! long long vis_ldda_ASI_PNF_index(void * /*rs1*/, long /*index*/); 1245! 1246 .inline vis_ldda_ASI_PNF_index,16 1247 ldda [%o0+%o1]0x82,%o0 ! ASI_PNF 1248 .end 1249! 1250! long long vis_ldda_ASI_PNFL(void * /*rs1*/); 1251! 1252 .inline vis_ldda_ASI_PNFL,8 1253 ldda [%o0]0x8a,%o0 ! ASI_PNFL 1254 .end 1255! 1256! long long vis_ldda_ASI_PNFL_index(void * /*rs1*/, long /*index*/); 1257! 1258 .inline vis_ldda_ASI_PNFL_index,16 1259 ldda [%o0+%o1]0x8a,%o0 ! ASI_PNFL 1260 .end 1261! 1262! float vis_ldfa_ASI_PNF(void * /*rs1*/); 1263! 1264 .inline vis_ldfa_ASI_PNF,8 1265 lda [%o0]0x82,%f0 ! ASI_PNF 1266 .end 1267! 1268! float vis_ldfa_ASI_PNF_index(void * /*rs1*/, long /*index*/); 1269! 1270 .inline vis_ldfa_ASI_PNF_index,16 1271 lda [%o0+%o1]0x82,%f0 ! ASI_PNF 1272 .end 1273! 1274! float vis_ldfa_ASI_PNFL(void * /*rs1*/); 1275! 1276 .inline vis_ldfa_ASI_PNFL,8 1277 lda [%o0]0x8a,%f0 ! ASI_PNFL 1278 .end 1279! 1280! float vis_ldfa_ASI_PNFL_index(void * /*rs1*/, long /*index*/); 1281! 1282 .inline vis_ldfa_ASI_PNFL_index,16 1283 lda [%o0+%o1]0x8a,%f0 ! ASI_PNFL 1284 .end 1285! 1286! double vis_lddfa_ASI_PNF(void * /*rs1*/); 1287! 1288 .inline vis_lddfa_ASI_PNF,8 1289 ldda [%o0]0x82,%f0 ! ASI_PNF 1290 .end 1291! 1292! double vis_lddfa_ASI_PNF_index(void * /*rs1*/, long /*index*/); 1293! 1294 .inline vis_lddfa_ASI_PNF_index,16 1295 ldda [%o0+%o1]0x82,%f0 ! ASI_PNF 1296 .end 1297! 1298! double vis_lddfa_ASI_PNFL(void * /*rs1*/); 1299! 1300 .inline vis_lddfa_ASI_PNFL,8 1301 ldda [%o0]0x8a,%f0 ! ASI_PNFL 1302 .end 1303! 1304! double vis_lddfa_ASI_PNFL_index(void * /*rs1*/, long /*index*/); 1305! 1306 .inline vis_lddfa_ASI_PNFL_index,16 1307 ldda [%o0+%o1]0x8a,%f0 ! ASI_PNFL 1308 .end 1309 1310!-------------------------------------------------------------------- 1311! 1312! The following are the new VIS 2.0 instructions. 1313! 1314 1315! 1316! Edge handling instructions which do not set the integer condition codes 1317! 1318! int vis_edge8n(void * /*rs1*/, void * /*rs2*/); 1319! 1320 .inline vis_edge8n,16 1321 edge8n %o0,%o1,%o0 1322 .end 1323! 1324! int vis_edge8ln(void * /*rs1*/, void * /*rs2*/); 1325! 1326 .inline vis_edge8ln,16 1327 edge8ln %o0,%o1,%o0 1328 .end 1329! 1330! int vis_edge16n(void * /*rs1*/, void * /*rs2*/); 1331! 1332 .inline vis_edge16n,16 1333 edge16n %o0,%o1,%o0 1334 .end 1335! 1336! int vis_edge16ln(void * /*rs1*/, void * /*rs2*/); 1337! 1338 .inline vis_edge16ln,16 1339 edge16ln %o0,%o1,%o0 1340 .end 1341! 1342! int vis_edge32n(void * /*rs1*/, void * /*rs2*/); 1343! 1344 .inline vis_edge32n,16 1345 edge32n %o0,%o1,%o0 1346 .end 1347! 1348! int vis_edge32ln(void * /*rs1*/, void * /*rs2*/); 1349! 1350 .inline vis_edge32ln,16 1351 edge32ln %o0,%o1,%o0 1352 .end 1353 1354!-------------------------------------------------------------------- 1355! Byte mask and shuffle instructions 1356! 1357! void vis_write_bmask(unsigned int /*rs1*/, unsigned int /*rs2*/); 1358! 1359 .inline vis_write_bmask,8 1360 bmask %o0,%o1,%o0 1361 .end 1362! 1363! double vis_bshuffle(double /*frs1*/, double /*frs2*/); 1364! 1365 .inline vis_bshuffle,16 1366 bshuffle %f0,%f2,%f0 1367 .end 1368 1369!-------------------------------------------------------------------- 1370! Graphics status register 1371! 1372! unsigned int vis_read_bmask(void); 1373! 1374 .inline vis_read_bmask,0 1375 rd %gsr,%o0 1376 srlx %o0,32,%o0 1377 .end 1378! 1379! unsigned long vis_read_gsr64(void); 1380! 1381 .inline vis_read_gsr64,0 1382 rd %gsr,%o0 1383 .end 1384! 1385! void vis_write_gsr64(unsigned long /* GSR */); 1386! 1387 .inline vis_write_gsr64,8 1388 wr %g0,%o0,%gsr 1389 .end 1390