1
2
3
4
5
6
7
8
9
10 #include <asm/processor.h>
11 #include <asm/ppc_asm.h>
12
13 #define lv1call .long 0x44000022; extsw r3, r3
14
15 #define LV1_N_IN_0_OUT(API_NAME, API_NUMBER) \
16 _GLOBAL(_##API_NAME) \
17 \
18 mflr r0; \
19 std r0, 16(r1); \
20 \
21 li r11, API_NUMBER; \
22 lv1call; \
23 \
24 ld r0, 16(r1); \
25 mtlr r0; \
26 blr
27
28 #define LV1_0_IN_0_OUT LV1_N_IN_0_OUT
29 #define LV1_1_IN_0_OUT LV1_N_IN_0_OUT
30 #define LV1_2_IN_0_OUT LV1_N_IN_0_OUT
31 #define LV1_3_IN_0_OUT LV1_N_IN_0_OUT
32 #define LV1_4_IN_0_OUT LV1_N_IN_0_OUT
33 #define LV1_5_IN_0_OUT LV1_N_IN_0_OUT
34 #define LV1_6_IN_0_OUT LV1_N_IN_0_OUT
35 #define LV1_7_IN_0_OUT LV1_N_IN_0_OUT
36
37 #define LV1_0_IN_1_OUT(API_NAME, API_NUMBER) \
38 _GLOBAL(_##API_NAME) \
39 \
40 mflr r0; \
41 std r0, 16(r1); \
42 \
43 stdu r3, -8(r1); \
44 \
45 li r11, API_NUMBER; \
46 lv1call; \
47 \
48 addi r1, r1, 8; \
49 ld r11, -8(r1); \
50 std r4, 0(r11); \
51 \
52 ld r0, 16(r1); \
53 mtlr r0; \
54 blr
55
56 #define LV1_0_IN_2_OUT(API_NAME, API_NUMBER) \
57 _GLOBAL(_##API_NAME) \
58 \
59 mflr r0; \
60 std r0, 16(r1); \
61 \
62 std r3, -8(r1); \
63 stdu r4, -16(r1); \
64 \
65 li r11, API_NUMBER; \
66 lv1call; \
67 \
68 addi r1, r1, 16; \
69 ld r11, -8(r1); \
70 std r4, 0(r11); \
71 ld r11, -16(r1); \
72 std r5, 0(r11); \
73 \
74 ld r0, 16(r1); \
75 mtlr r0; \
76 blr
77
78 #define LV1_0_IN_3_OUT(API_NAME, API_NUMBER) \
79 _GLOBAL(_##API_NAME) \
80 \
81 mflr r0; \
82 std r0, 16(r1); \
83 \
84 std r3, -8(r1); \
85 std r4, -16(r1); \
86 stdu r5, -24(r1); \
87 \
88 li r11, API_NUMBER; \
89 lv1call; \
90 \
91 addi r1, r1, 24; \
92 ld r11, -8(r1); \
93 std r4, 0(r11); \
94 ld r11, -16(r1); \
95 std r5, 0(r11); \
96 ld r11, -24(r1); \
97 std r6, 0(r11); \
98 \
99 ld r0, 16(r1); \
100 mtlr r0; \
101 blr
102
103 #define LV1_0_IN_7_OUT(API_NAME, API_NUMBER) \
104 _GLOBAL(_##API_NAME) \
105 \
106 mflr r0; \
107 std r0, 16(r1); \
108 \
109 std r3, -8(r1); \
110 std r4, -16(r1); \
111 std r5, -24(r1); \
112 std r6, -32(r1); \
113 std r7, -40(r1); \
114 std r8, -48(r1); \
115 stdu r9, -56(r1); \
116 \
117 li r11, API_NUMBER; \
118 lv1call; \
119 \
120 addi r1, r1, 56; \
121 ld r11, -8(r1); \
122 std r4, 0(r11); \
123 ld r11, -16(r1); \
124 std r5, 0(r11); \
125 ld r11, -24(r1); \
126 std r6, 0(r11); \
127 ld r11, -32(r1); \
128 std r7, 0(r11); \
129 ld r11, -40(r1); \
130 std r8, 0(r11); \
131 ld r11, -48(r1); \
132 std r9, 0(r11); \
133 ld r11, -56(r1); \
134 std r10, 0(r11); \
135 \
136 ld r0, 16(r1); \
137 mtlr r0; \
138 blr
139
140 #define LV1_1_IN_1_OUT(API_NAME, API_NUMBER) \
141 _GLOBAL(_##API_NAME) \
142 \
143 mflr r0; \
144 std r0, 16(r1); \
145 \
146 stdu r4, -8(r1); \
147 \
148 li r11, API_NUMBER; \
149 lv1call; \
150 \
151 addi r1, r1, 8; \
152 ld r11, -8(r1); \
153 std r4, 0(r11); \
154 \
155 ld r0, 16(r1); \
156 mtlr r0; \
157 blr
158
159 #define LV1_1_IN_2_OUT(API_NAME, API_NUMBER) \
160 _GLOBAL(_##API_NAME) \
161 \
162 mflr r0; \
163 std r0, 16(r1); \
164 \
165 std r4, -8(r1); \
166 stdu r5, -16(r1); \
167 \
168 li r11, API_NUMBER; \
169 lv1call; \
170 \
171 addi r1, r1, 16; \
172 ld r11, -8(r1); \
173 std r4, 0(r11); \
174 ld r11, -16(r1); \
175 std r5, 0(r11); \
176 \
177 ld r0, 16(r1); \
178 mtlr r0; \
179 blr
180
181 #define LV1_1_IN_3_OUT(API_NAME, API_NUMBER) \
182 _GLOBAL(_##API_NAME) \
183 \
184 mflr r0; \
185 std r0, 16(r1); \
186 \
187 std r4, -8(r1); \
188 std r5, -16(r1); \
189 stdu r6, -24(r1); \
190 \
191 li r11, API_NUMBER; \
192 lv1call; \
193 \
194 addi r1, r1, 24; \
195 ld r11, -8(r1); \
196 std r4, 0(r11); \
197 ld r11, -16(r1); \
198 std r5, 0(r11); \
199 ld r11, -24(r1); \
200 std r6, 0(r11); \
201 \
202 ld r0, 16(r1); \
203 mtlr r0; \
204 blr
205
206 #define LV1_1_IN_4_OUT(API_NAME, API_NUMBER) \
207 _GLOBAL(_##API_NAME) \
208 \
209 mflr r0; \
210 std r0, 16(r1); \
211 \
212 std r4, -8(r1); \
213 std r5, -16(r1); \
214 std r6, -24(r1); \
215 stdu r7, -32(r1); \
216 \
217 li r11, API_NUMBER; \
218 lv1call; \
219 \
220 addi r1, r1, 32; \
221 ld r11, -8(r1); \
222 std r4, 0(r11); \
223 ld r11, -16(r1); \
224 std r5, 0(r11); \
225 ld r11, -24(r1); \
226 std r6, 0(r11); \
227 ld r11, -32(r1); \
228 std r7, 0(r11); \
229 \
230 ld r0, 16(r1); \
231 mtlr r0; \
232 blr
233
234 #define LV1_1_IN_5_OUT(API_NAME, API_NUMBER) \
235 _GLOBAL(_##API_NAME) \
236 \
237 mflr r0; \
238 std r0, 16(r1); \
239 \
240 std r4, -8(r1); \
241 std r5, -16(r1); \
242 std r6, -24(r1); \
243 std r7, -32(r1); \
244 stdu r8, -40(r1); \
245 \
246 li r11, API_NUMBER; \
247 lv1call; \
248 \
249 addi r1, r1, 40; \
250 ld r11, -8(r1); \
251 std r4, 0(r11); \
252 ld r11, -16(r1); \
253 std r5, 0(r11); \
254 ld r11, -24(r1); \
255 std r6, 0(r11); \
256 ld r11, -32(r1); \
257 std r7, 0(r11); \
258 ld r11, -40(r1); \
259 std r8, 0(r11); \
260 \
261 ld r0, 16(r1); \
262 mtlr r0; \
263 blr
264
265 #define LV1_1_IN_6_OUT(API_NAME, API_NUMBER) \
266 _GLOBAL(_##API_NAME) \
267 \
268 mflr r0; \
269 std r0, 16(r1); \
270 \
271 std r4, -8(r1); \
272 std r5, -16(r1); \
273 std r6, -24(r1); \
274 std r7, -32(r1); \
275 std r8, -40(r1); \
276 stdu r9, -48(r1); \
277 \
278 li r11, API_NUMBER; \
279 lv1call; \
280 \
281 addi r1, r1, 48; \
282 ld r11, -8(r1); \
283 std r4, 0(r11); \
284 ld r11, -16(r1); \
285 std r5, 0(r11); \
286 ld r11, -24(r1); \
287 std r6, 0(r11); \
288 ld r11, -32(r1); \
289 std r7, 0(r11); \
290 ld r11, -40(r1); \
291 std r8, 0(r11); \
292 ld r11, -48(r1); \
293 std r9, 0(r11); \
294 \
295 ld r0, 16(r1); \
296 mtlr r0; \
297 blr
298
299 #define LV1_1_IN_7_OUT(API_NAME, API_NUMBER) \
300 _GLOBAL(_##API_NAME) \
301 \
302 mflr r0; \
303 std r0, 16(r1); \
304 \
305 std r4, -8(r1); \
306 std r5, -16(r1); \
307 std r6, -24(r1); \
308 std r7, -32(r1); \
309 std r8, -40(r1); \
310 std r9, -48(r1); \
311 stdu r10, -56(r1); \
312 \
313 li r11, API_NUMBER; \
314 lv1call; \
315 \
316 addi r1, r1, 56; \
317 ld r11, -8(r1); \
318 std r4, 0(r11); \
319 ld r11, -16(r1); \
320 std r5, 0(r11); \
321 ld r11, -24(r1); \
322 std r6, 0(r11); \
323 ld r11, -32(r1); \
324 std r7, 0(r11); \
325 ld r11, -40(r1); \
326 std r8, 0(r11); \
327 ld r11, -48(r1); \
328 std r9, 0(r11); \
329 ld r11, -56(r1); \
330 std r10, 0(r11); \
331 \
332 ld r0, 16(r1); \
333 mtlr r0; \
334 blr
335
336 #define LV1_2_IN_1_OUT(API_NAME, API_NUMBER) \
337 _GLOBAL(_##API_NAME) \
338 \
339 mflr r0; \
340 std r0, 16(r1); \
341 \
342 stdu r5, -8(r1); \
343 \
344 li r11, API_NUMBER; \
345 lv1call; \
346 \
347 addi r1, r1, 8; \
348 ld r11, -8(r1); \
349 std r4, 0(r11); \
350 \
351 ld r0, 16(r1); \
352 mtlr r0; \
353 blr
354
355 #define LV1_2_IN_2_OUT(API_NAME, API_NUMBER) \
356 _GLOBAL(_##API_NAME) \
357 \
358 mflr r0; \
359 std r0, 16(r1); \
360 \
361 std r5, -8(r1); \
362 stdu r6, -16(r1); \
363 \
364 li r11, API_NUMBER; \
365 lv1call; \
366 \
367 addi r1, r1, 16; \
368 ld r11, -8(r1); \
369 std r4, 0(r11); \
370 ld r11, -16(r1); \
371 std r5, 0(r11); \
372 \
373 ld r0, 16(r1); \
374 mtlr r0; \
375 blr
376
377 #define LV1_2_IN_3_OUT(API_NAME, API_NUMBER) \
378 _GLOBAL(_##API_NAME) \
379 \
380 mflr r0; \
381 std r0, 16(r1); \
382 \
383 std r5, -8(r1); \
384 std r6, -16(r1); \
385 stdu r7, -24(r1); \
386 \
387 li r11, API_NUMBER; \
388 lv1call; \
389 \
390 addi r1, r1, 24; \
391 ld r11, -8(r1); \
392 std r4, 0(r11); \
393 ld r11, -16(r1); \
394 std r5, 0(r11); \
395 ld r11, -24(r1); \
396 std r6, 0(r11); \
397 \
398 ld r0, 16(r1); \
399 mtlr r0; \
400 blr
401
402 #define LV1_2_IN_4_OUT(API_NAME, API_NUMBER) \
403 _GLOBAL(_##API_NAME) \
404 \
405 mflr r0; \
406 std r0, 16(r1); \
407 \
408 std r5, -8(r1); \
409 std r6, -16(r1); \
410 std r7, -24(r1); \
411 stdu r8, -32(r1); \
412 \
413 li r11, API_NUMBER; \
414 lv1call; \
415 \
416 addi r1, r1, 32; \
417 ld r11, -8(r1); \
418 std r4, 0(r11); \
419 ld r11, -16(r1); \
420 std r5, 0(r11); \
421 ld r11, -24(r1); \
422 std r6, 0(r11); \
423 ld r11, -32(r1); \
424 std r7, 0(r11); \
425 \
426 ld r0, 16(r1); \
427 mtlr r0; \
428 blr
429
430 #define LV1_2_IN_5_OUT(API_NAME, API_NUMBER) \
431 _GLOBAL(_##API_NAME) \
432 \
433 mflr r0; \
434 std r0, 16(r1); \
435 \
436 std r5, -8(r1); \
437 std r6, -16(r1); \
438 std r7, -24(r1); \
439 std r8, -32(r1); \
440 stdu r9, -40(r1); \
441 \
442 li r11, API_NUMBER; \
443 lv1call; \
444 \
445 addi r1, r1, 40; \
446 ld r11, -8(r1); \
447 std r4, 0(r11); \
448 ld r11, -16(r1); \
449 std r5, 0(r11); \
450 ld r11, -24(r1); \
451 std r6, 0(r11); \
452 ld r11, -32(r1); \
453 std r7, 0(r11); \
454 ld r11, -40(r1); \
455 std r8, 0(r11); \
456 \
457 ld r0, 16(r1); \
458 mtlr r0; \
459 blr
460
461 #define LV1_3_IN_1_OUT(API_NAME, API_NUMBER) \
462 _GLOBAL(_##API_NAME) \
463 \
464 mflr r0; \
465 std r0, 16(r1); \
466 \
467 stdu r6, -8(r1); \
468 \
469 li r11, API_NUMBER; \
470 lv1call; \
471 \
472 addi r1, r1, 8; \
473 ld r11, -8(r1); \
474 std r4, 0(r11); \
475 \
476 ld r0, 16(r1); \
477 mtlr r0; \
478 blr
479
480 #define LV1_3_IN_2_OUT(API_NAME, API_NUMBER) \
481 _GLOBAL(_##API_NAME) \
482 \
483 mflr r0; \
484 std r0, 16(r1); \
485 \
486 std r6, -8(r1); \
487 stdu r7, -16(r1); \
488 \
489 li r11, API_NUMBER; \
490 lv1call; \
491 \
492 addi r1, r1, 16; \
493 ld r11, -8(r1); \
494 std r4, 0(r11); \
495 ld r11, -16(r1); \
496 std r5, 0(r11); \
497 \
498 ld r0, 16(r1); \
499 mtlr r0; \
500 blr
501
502 #define LV1_3_IN_3_OUT(API_NAME, API_NUMBER) \
503 _GLOBAL(_##API_NAME) \
504 \
505 mflr r0; \
506 std r0, 16(r1); \
507 \
508 std r6, -8(r1); \
509 std r7, -16(r1); \
510 stdu r8, -24(r1); \
511 \
512 li r11, API_NUMBER; \
513 lv1call; \
514 \
515 addi r1, r1, 24; \
516 ld r11, -8(r1); \
517 std r4, 0(r11); \
518 ld r11, -16(r1); \
519 std r5, 0(r11); \
520 ld r11, -24(r1); \
521 std r6, 0(r11); \
522 \
523 ld r0, 16(r1); \
524 mtlr r0; \
525 blr
526
527 #define LV1_4_IN_1_OUT(API_NAME, API_NUMBER) \
528 _GLOBAL(_##API_NAME) \
529 \
530 mflr r0; \
531 std r0, 16(r1); \
532 \
533 stdu r7, -8(r1); \
534 \
535 li r11, API_NUMBER; \
536 lv1call; \
537 \
538 addi r1, r1, 8; \
539 ld r11, -8(r1); \
540 std r4, 0(r11); \
541 \
542 ld r0, 16(r1); \
543 mtlr r0; \
544 blr
545
546 #define LV1_4_IN_2_OUT(API_NAME, API_NUMBER) \
547 _GLOBAL(_##API_NAME) \
548 \
549 mflr r0; \
550 std r0, 16(r1); \
551 \
552 std r7, -8(r1); \
553 stdu r8, -16(r1); \
554 \
555 li r11, API_NUMBER; \
556 lv1call; \
557 \
558 addi r1, r1, 16; \
559 ld r11, -8(r1); \
560 std r4, 0(r11); \
561 ld r11, -16(r1); \
562 std r5, 0(r11); \
563 \
564 ld r0, 16(r1); \
565 mtlr r0; \
566 blr
567
568 #define LV1_4_IN_3_OUT(API_NAME, API_NUMBER) \
569 _GLOBAL(_##API_NAME) \
570 \
571 mflr r0; \
572 std r0, 16(r1); \
573 \
574 std r7, -8(r1); \
575 std r8, -16(r1); \
576 stdu r9, -24(r1); \
577 \
578 li r11, API_NUMBER; \
579 lv1call; \
580 \
581 addi r1, r1, 24; \
582 ld r11, -8(r1); \
583 std r4, 0(r11); \
584 ld r11, -16(r1); \
585 std r5, 0(r11); \
586 ld r11, -24(r1); \
587 std r6, 0(r11); \
588 \
589 ld r0, 16(r1); \
590 mtlr r0; \
591 blr
592
593 #define LV1_5_IN_1_OUT(API_NAME, API_NUMBER) \
594 _GLOBAL(_##API_NAME) \
595 \
596 mflr r0; \
597 std r0, 16(r1); \
598 \
599 stdu r8, -8(r1); \
600 \
601 li r11, API_NUMBER; \
602 lv1call; \
603 \
604 addi r1, r1, 8; \
605 ld r11, -8(r1); \
606 std r4, 0(r11); \
607 \
608 ld r0, 16(r1); \
609 mtlr r0; \
610 blr
611
612 #define LV1_5_IN_2_OUT(API_NAME, API_NUMBER) \
613 _GLOBAL(_##API_NAME) \
614 \
615 mflr r0; \
616 std r0, 16(r1); \
617 \
618 std r8, -8(r1); \
619 stdu r9, -16(r1); \
620 \
621 li r11, API_NUMBER; \
622 lv1call; \
623 \
624 addi r1, r1, 16; \
625 ld r11, -8(r1); \
626 std r4, 0(r11); \
627 ld r11, -16(r1); \
628 std r5, 0(r11); \
629 \
630 ld r0, 16(r1); \
631 mtlr r0; \
632 blr
633
634 #define LV1_5_IN_3_OUT(API_NAME, API_NUMBER) \
635 _GLOBAL(_##API_NAME) \
636 \
637 mflr r0; \
638 std r0, 16(r1); \
639 \
640 std r8, -8(r1); \
641 std r9, -16(r1); \
642 stdu r10, -24(r1); \
643 \
644 li r11, API_NUMBER; \
645 lv1call; \
646 \
647 addi r1, r1, 24; \
648 ld r11, -8(r1); \
649 std r4, 0(r11); \
650 ld r11, -16(r1); \
651 std r5, 0(r11); \
652 ld r11, -24(r1); \
653 std r6, 0(r11); \
654 \
655 ld r0, 16(r1); \
656 mtlr r0; \
657 blr
658
659 #define LV1_6_IN_1_OUT(API_NAME, API_NUMBER) \
660 _GLOBAL(_##API_NAME) \
661 \
662 mflr r0; \
663 std r0, 16(r1); \
664 \
665 stdu r9, -8(r1); \
666 \
667 li r11, API_NUMBER; \
668 lv1call; \
669 \
670 addi r1, r1, 8; \
671 ld r11, -8(r1); \
672 std r4, 0(r11); \
673 \
674 ld r0, 16(r1); \
675 mtlr r0; \
676 blr
677
678 #define LV1_6_IN_2_OUT(API_NAME, API_NUMBER) \
679 _GLOBAL(_##API_NAME) \
680 \
681 mflr r0; \
682 std r0, 16(r1); \
683 \
684 std r9, -8(r1); \
685 stdu r10, -16(r1); \
686 \
687 li r11, API_NUMBER; \
688 lv1call; \
689 \
690 addi r1, r1, 16; \
691 ld r11, -8(r1); \
692 std r4, 0(r11); \
693 ld r11, -16(r1); \
694 std r5, 0(r11); \
695 \
696 ld r0, 16(r1); \
697 mtlr r0; \
698 blr
699
700 #define LV1_6_IN_3_OUT(API_NAME, API_NUMBER) \
701 _GLOBAL(_##API_NAME) \
702 \
703 mflr r0; \
704 std r0, 16(r1); \
705 \
706 std r9, -8(r1); \
707 stdu r10, -16(r1); \
708 \
709 li r11, API_NUMBER; \
710 lv1call; \
711 \
712 addi r1, r1, 16; \
713 ld r11, -8(r1); \
714 std r4, 0(r11); \
715 ld r11, -16(r1); \
716 std r5, 0(r11); \
717 ld r11, 48+8*8(r1); \
718 std r6, 0(r11); \
719 \
720 ld r0, 16(r1); \
721 mtlr r0; \
722 blr
723
724 #define LV1_7_IN_1_OUT(API_NAME, API_NUMBER) \
725 _GLOBAL(_##API_NAME) \
726 \
727 mflr r0; \
728 std r0, 16(r1); \
729 \
730 stdu r10, -8(r1); \
731 \
732 li r11, API_NUMBER; \
733 lv1call; \
734 \
735 addi r1, r1, 8; \
736 ld r11, -8(r1); \
737 std r4, 0(r11); \
738 \
739 ld r0, 16(r1); \
740 mtlr r0; \
741 blr
742
743 #define LV1_7_IN_6_OUT(API_NAME, API_NUMBER) \
744 _GLOBAL(_##API_NAME) \
745 \
746 mflr r0; \
747 std r0, 16(r1); \
748 \
749 std r10, 48+8*7(r1); \
750 \
751 li r11, API_NUMBER; \
752 lv1call; \
753 \
754 ld r11, 48+8*7(r1); \
755 std r4, 0(r11); \
756 ld r11, 48+8*8(r1); \
757 std r5, 0(r11); \
758 ld r11, 48+8*9(r1); \
759 std r6, 0(r11); \
760 ld r11, 48+8*10(r1); \
761 std r7, 0(r11); \
762 ld r11, 48+8*11(r1); \
763 std r8, 0(r11); \
764 ld r11, 48+8*12(r1); \
765 std r9, 0(r11); \
766 \
767 ld r0, 16(r1); \
768 mtlr r0; \
769 blr
770
771 #define LV1_8_IN_1_OUT(API_NAME, API_NUMBER) \
772 _GLOBAL(_##API_NAME) \
773 \
774 mflr r0; \
775 std r0, 16(r1); \
776 \
777 li r11, API_NUMBER; \
778 lv1call; \
779 \
780 ld r11, 48+8*8(r1); \
781 std r4, 0(r11); \
782 \
783 ld r0, 16(r1); \
784 mtlr r0; \
785 blr
786
787 .text
788
789
790
791 #define LV1_CALL(name, in, out, num) LV1_##in##_IN_##out##_OUT(lv1_##name, num)
792 #include <asm/lv1call.h>