|
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 |