tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

vis_64.il (19882B)


      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