Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  *  PS3 hvcall interface.
0004  *
0005  *  Copyright (C) 2006 Sony Computer Entertainment Inc.
0006  *  Copyright 2006 Sony Corp.
0007  *  Copyright 2003, 2004 (c) MontaVista Software, Inc.
0008  */
0009 
0010 #include <asm/processor.h>
0011 #include <asm/ppc_asm.h>
0012 
0013 #define lv1call .long 0x44000022; extsw r3, r3
0014 
0015 #define LV1_N_IN_0_OUT(API_NAME, API_NUMBER)    \
0016 _GLOBAL(_##API_NAME)                \
0017                         \
0018     mflr    r0;             \
0019     std r0, 16(r1);         \
0020                         \
0021     li      r11, API_NUMBER;        \
0022     lv1call;                \
0023                         \
0024     ld  r0, 16(r1);         \
0025     mtlr    r0;             \
0026     blr
0027 
0028 #define LV1_0_IN_0_OUT LV1_N_IN_0_OUT
0029 #define LV1_1_IN_0_OUT LV1_N_IN_0_OUT
0030 #define LV1_2_IN_0_OUT LV1_N_IN_0_OUT
0031 #define LV1_3_IN_0_OUT LV1_N_IN_0_OUT
0032 #define LV1_4_IN_0_OUT LV1_N_IN_0_OUT
0033 #define LV1_5_IN_0_OUT LV1_N_IN_0_OUT
0034 #define LV1_6_IN_0_OUT LV1_N_IN_0_OUT
0035 #define LV1_7_IN_0_OUT LV1_N_IN_0_OUT
0036 
0037 #define LV1_0_IN_1_OUT(API_NAME, API_NUMBER)    \
0038 _GLOBAL(_##API_NAME)                \
0039                         \
0040     mflr    r0;             \
0041     std r0, 16(r1);         \
0042                         \
0043     stdu    r3, -8(r1);         \
0044                         \
0045     li      r11, API_NUMBER;        \
0046     lv1call;                \
0047                         \
0048     addi    r1, r1, 8;          \
0049     ld  r11, -8(r1);            \
0050     std r4, 0(r11);         \
0051                         \
0052     ld  r0, 16(r1);         \
0053     mtlr    r0;             \
0054     blr
0055 
0056 #define LV1_0_IN_2_OUT(API_NAME, API_NUMBER)    \
0057 _GLOBAL(_##API_NAME)                \
0058                         \
0059     mflr    r0;             \
0060     std r0, 16(r1);         \
0061                         \
0062     std     r3, -8(r1);         \
0063     stdu    r4, -16(r1);            \
0064                         \
0065     li      r11, API_NUMBER;        \
0066     lv1call;                \
0067                         \
0068     addi    r1, r1, 16;         \
0069     ld  r11, -8(r1);            \
0070     std r4, 0(r11);         \
0071     ld  r11, -16(r1);           \
0072     std r5, 0(r11);         \
0073                         \
0074     ld  r0, 16(r1);         \
0075     mtlr    r0;             \
0076     blr
0077 
0078 #define LV1_0_IN_3_OUT(API_NAME, API_NUMBER)    \
0079 _GLOBAL(_##API_NAME)                \
0080                         \
0081     mflr    r0;             \
0082     std r0, 16(r1);         \
0083                         \
0084     std     r3, -8(r1);         \
0085     std r4, -16(r1);            \
0086     stdu    r5, -24(r1);            \
0087                         \
0088     li      r11, API_NUMBER;        \
0089     lv1call;                \
0090                         \
0091     addi    r1, r1, 24;         \
0092     ld  r11, -8(r1);            \
0093     std r4, 0(r11);         \
0094     ld  r11, -16(r1);           \
0095     std r5, 0(r11);         \
0096     ld  r11, -24(r1);           \
0097     std r6, 0(r11);         \
0098                         \
0099     ld  r0, 16(r1);         \
0100     mtlr    r0;             \
0101     blr
0102 
0103 #define LV1_0_IN_7_OUT(API_NAME, API_NUMBER)    \
0104 _GLOBAL(_##API_NAME)                \
0105                         \
0106     mflr    r0;             \
0107     std r0, 16(r1);         \
0108                         \
0109     std     r3, -8(r1);         \
0110     std r4, -16(r1);            \
0111     std r5, -24(r1);            \
0112     std r6, -32(r1);            \
0113     std r7, -40(r1);            \
0114     std r8, -48(r1);            \
0115     stdu    r9, -56(r1);            \
0116                         \
0117     li      r11, API_NUMBER;        \
0118     lv1call;                \
0119                         \
0120     addi    r1, r1, 56;         \
0121     ld  r11, -8(r1);            \
0122     std r4, 0(r11);         \
0123     ld  r11, -16(r1);           \
0124     std r5, 0(r11);         \
0125     ld  r11, -24(r1);           \
0126     std r6, 0(r11);         \
0127     ld  r11, -32(r1);           \
0128     std r7, 0(r11);         \
0129     ld  r11, -40(r1);           \
0130     std r8, 0(r11);         \
0131     ld  r11, -48(r1);           \
0132     std r9, 0(r11);         \
0133     ld  r11, -56(r1);           \
0134     std r10, 0(r11);            \
0135                         \
0136     ld  r0, 16(r1);         \
0137     mtlr    r0;             \
0138     blr
0139 
0140 #define LV1_1_IN_1_OUT(API_NAME, API_NUMBER)    \
0141 _GLOBAL(_##API_NAME)                \
0142                         \
0143     mflr    r0;             \
0144     std r0, 16(r1);         \
0145                         \
0146     stdu    r4, -8(r1);         \
0147                         \
0148     li      r11, API_NUMBER;        \
0149     lv1call;                \
0150                         \
0151     addi    r1, r1, 8;          \
0152     ld  r11, -8(r1);            \
0153     std r4, 0(r11);         \
0154                         \
0155     ld  r0, 16(r1);         \
0156     mtlr    r0;             \
0157     blr
0158 
0159 #define LV1_1_IN_2_OUT(API_NAME, API_NUMBER)    \
0160 _GLOBAL(_##API_NAME)                \
0161                         \
0162     mflr    r0;             \
0163     std r0, 16(r1);         \
0164                         \
0165     std     r4, -8(r1);         \
0166     stdu    r5, -16(r1);            \
0167                         \
0168     li      r11, API_NUMBER;        \
0169     lv1call;                \
0170                         \
0171     addi    r1, r1, 16;         \
0172     ld  r11, -8(r1);            \
0173     std r4, 0(r11);         \
0174     ld  r11, -16(r1);           \
0175     std r5, 0(r11);         \
0176                         \
0177     ld  r0, 16(r1);         \
0178     mtlr    r0;             \
0179     blr
0180 
0181 #define LV1_1_IN_3_OUT(API_NAME, API_NUMBER)    \
0182 _GLOBAL(_##API_NAME)                \
0183                         \
0184     mflr    r0;             \
0185     std r0, 16(r1);         \
0186                         \
0187     std     r4, -8(r1);         \
0188     std r5, -16(r1);            \
0189     stdu    r6, -24(r1);            \
0190                         \
0191     li      r11, API_NUMBER;        \
0192     lv1call;                \
0193                         \
0194     addi    r1, r1, 24;         \
0195     ld  r11, -8(r1);            \
0196     std r4, 0(r11);         \
0197     ld  r11, -16(r1);           \
0198     std r5, 0(r11);         \
0199     ld  r11, -24(r1);           \
0200     std r6, 0(r11);         \
0201                         \
0202     ld  r0, 16(r1);         \
0203     mtlr    r0;             \
0204     blr
0205 
0206 #define LV1_1_IN_4_OUT(API_NAME, API_NUMBER)    \
0207 _GLOBAL(_##API_NAME)                \
0208                         \
0209     mflr    r0;             \
0210     std r0, 16(r1);         \
0211                         \
0212     std     r4, -8(r1);         \
0213     std r5, -16(r1);            \
0214     std r6, -24(r1);            \
0215     stdu    r7, -32(r1);            \
0216                         \
0217     li      r11, API_NUMBER;        \
0218     lv1call;                \
0219                         \
0220     addi    r1, r1, 32;         \
0221     ld  r11, -8(r1);            \
0222     std r4, 0(r11);         \
0223     ld  r11, -16(r1);           \
0224     std r5, 0(r11);         \
0225     ld  r11, -24(r1);           \
0226     std r6, 0(r11);         \
0227     ld  r11, -32(r1);           \
0228     std r7, 0(r11);         \
0229                         \
0230     ld  r0, 16(r1);         \
0231     mtlr    r0;             \
0232     blr
0233 
0234 #define LV1_1_IN_5_OUT(API_NAME, API_NUMBER)    \
0235 _GLOBAL(_##API_NAME)                \
0236                         \
0237     mflr    r0;             \
0238     std r0, 16(r1);         \
0239                         \
0240     std     r4, -8(r1);         \
0241     std r5, -16(r1);            \
0242     std r6, -24(r1);            \
0243     std r7, -32(r1);            \
0244     stdu    r8, -40(r1);            \
0245                         \
0246     li      r11, API_NUMBER;        \
0247     lv1call;                \
0248                         \
0249     addi    r1, r1, 40;         \
0250     ld  r11, -8(r1);            \
0251     std r4, 0(r11);         \
0252     ld  r11, -16(r1);           \
0253     std r5, 0(r11);         \
0254     ld  r11, -24(r1);           \
0255     std r6, 0(r11);         \
0256     ld  r11, -32(r1);           \
0257     std r7, 0(r11);         \
0258     ld  r11, -40(r1);           \
0259     std r8, 0(r11);         \
0260                         \
0261     ld  r0, 16(r1);         \
0262     mtlr    r0;             \
0263     blr
0264 
0265 #define LV1_1_IN_6_OUT(API_NAME, API_NUMBER)    \
0266 _GLOBAL(_##API_NAME)                \
0267                         \
0268     mflr    r0;             \
0269     std r0, 16(r1);         \
0270                         \
0271     std     r4, -8(r1);         \
0272     std r5, -16(r1);            \
0273     std r6, -24(r1);            \
0274     std r7, -32(r1);            \
0275     std r8, -40(r1);            \
0276     stdu    r9, -48(r1);            \
0277                         \
0278     li      r11, API_NUMBER;        \
0279     lv1call;                \
0280                         \
0281     addi    r1, r1, 48;         \
0282     ld  r11, -8(r1);            \
0283     std r4, 0(r11);         \
0284     ld  r11, -16(r1);           \
0285     std r5, 0(r11);         \
0286     ld  r11, -24(r1);           \
0287     std r6, 0(r11);         \
0288     ld  r11, -32(r1);           \
0289     std r7, 0(r11);         \
0290     ld  r11, -40(r1);           \
0291     std r8, 0(r11);         \
0292     ld  r11, -48(r1);           \
0293     std r9, 0(r11);         \
0294                         \
0295     ld  r0, 16(r1);         \
0296     mtlr    r0;             \
0297     blr
0298 
0299 #define LV1_1_IN_7_OUT(API_NAME, API_NUMBER)    \
0300 _GLOBAL(_##API_NAME)                \
0301                         \
0302     mflr    r0;             \
0303     std r0, 16(r1);         \
0304                         \
0305     std     r4, -8(r1);         \
0306     std r5, -16(r1);            \
0307     std r6, -24(r1);            \
0308     std r7, -32(r1);            \
0309     std r8, -40(r1);            \
0310     std r9, -48(r1);            \
0311     stdu    r10, -56(r1);           \
0312                         \
0313     li      r11, API_NUMBER;        \
0314     lv1call;                \
0315                         \
0316     addi    r1, r1, 56;         \
0317     ld  r11, -8(r1);            \
0318     std r4, 0(r11);         \
0319     ld  r11, -16(r1);           \
0320     std r5, 0(r11);         \
0321     ld  r11, -24(r1);           \
0322     std r6, 0(r11);         \
0323     ld  r11, -32(r1);           \
0324     std r7, 0(r11);         \
0325     ld  r11, -40(r1);           \
0326     std r8, 0(r11);         \
0327     ld  r11, -48(r1);           \
0328     std r9, 0(r11);         \
0329     ld  r11, -56(r1);           \
0330     std r10, 0(r11);            \
0331                         \
0332     ld  r0, 16(r1);         \
0333     mtlr    r0;             \
0334     blr
0335 
0336 #define LV1_2_IN_1_OUT(API_NAME, API_NUMBER)    \
0337 _GLOBAL(_##API_NAME)                \
0338                         \
0339     mflr    r0;             \
0340     std r0, 16(r1);         \
0341                         \
0342     stdu    r5, -8(r1);         \
0343                         \
0344     li      r11, API_NUMBER;        \
0345     lv1call;                \
0346                         \
0347     addi    r1, r1, 8;          \
0348     ld  r11, -8(r1);            \
0349     std r4, 0(r11);         \
0350                         \
0351     ld  r0, 16(r1);         \
0352     mtlr    r0;             \
0353     blr
0354 
0355 #define LV1_2_IN_2_OUT(API_NAME, API_NUMBER)    \
0356 _GLOBAL(_##API_NAME)                \
0357                         \
0358     mflr    r0;             \
0359     std r0, 16(r1);         \
0360                         \
0361     std     r5, -8(r1);         \
0362     stdu    r6, -16(r1);            \
0363                         \
0364     li      r11, API_NUMBER;        \
0365     lv1call;                \
0366                         \
0367     addi    r1, r1, 16;         \
0368     ld  r11, -8(r1);            \
0369     std r4, 0(r11);         \
0370     ld  r11, -16(r1);           \
0371     std r5, 0(r11);         \
0372                         \
0373     ld  r0, 16(r1);         \
0374     mtlr    r0;             \
0375     blr
0376 
0377 #define LV1_2_IN_3_OUT(API_NAME, API_NUMBER)    \
0378 _GLOBAL(_##API_NAME)                \
0379                         \
0380     mflr    r0;             \
0381     std r0, 16(r1);         \
0382                         \
0383     std     r5, -8(r1);         \
0384     std r6, -16(r1);            \
0385     stdu    r7, -24(r1);            \
0386                         \
0387     li      r11, API_NUMBER;        \
0388     lv1call;                \
0389                         \
0390     addi    r1, r1, 24;         \
0391     ld  r11, -8(r1);            \
0392     std r4, 0(r11);         \
0393     ld  r11, -16(r1);           \
0394     std r5, 0(r11);         \
0395     ld  r11, -24(r1);           \
0396     std r6, 0(r11);         \
0397                         \
0398     ld  r0, 16(r1);         \
0399     mtlr    r0;             \
0400     blr
0401 
0402 #define LV1_2_IN_4_OUT(API_NAME, API_NUMBER)    \
0403 _GLOBAL(_##API_NAME)                \
0404                         \
0405     mflr    r0;             \
0406     std r0, 16(r1);         \
0407                         \
0408     std     r5, -8(r1);         \
0409     std r6, -16(r1);            \
0410     std r7, -24(r1);            \
0411     stdu    r8, -32(r1);            \
0412                         \
0413     li      r11, API_NUMBER;        \
0414     lv1call;                \
0415                         \
0416     addi    r1, r1, 32;         \
0417     ld  r11, -8(r1);            \
0418     std r4, 0(r11);         \
0419     ld  r11, -16(r1);           \
0420     std r5, 0(r11);         \
0421     ld  r11, -24(r1);           \
0422     std r6, 0(r11);         \
0423     ld  r11, -32(r1);           \
0424     std r7, 0(r11);         \
0425                         \
0426     ld  r0, 16(r1);         \
0427     mtlr    r0;             \
0428     blr
0429 
0430 #define LV1_2_IN_5_OUT(API_NAME, API_NUMBER)    \
0431 _GLOBAL(_##API_NAME)                \
0432                         \
0433     mflr    r0;             \
0434     std r0, 16(r1);         \
0435                         \
0436     std     r5, -8(r1);         \
0437     std r6, -16(r1);            \
0438     std r7, -24(r1);            \
0439     std r8, -32(r1);            \
0440     stdu    r9, -40(r1);            \
0441                         \
0442     li      r11, API_NUMBER;        \
0443     lv1call;                \
0444                         \
0445     addi    r1, r1, 40;         \
0446     ld  r11, -8(r1);            \
0447     std r4, 0(r11);         \
0448     ld  r11, -16(r1);           \
0449     std r5, 0(r11);         \
0450     ld  r11, -24(r1);           \
0451     std r6, 0(r11);         \
0452     ld  r11, -32(r1);           \
0453     std r7, 0(r11);         \
0454     ld  r11, -40(r1);           \
0455     std r8, 0(r11);         \
0456                         \
0457     ld  r0, 16(r1);         \
0458     mtlr    r0;             \
0459     blr
0460 
0461 #define LV1_3_IN_1_OUT(API_NAME, API_NUMBER)    \
0462 _GLOBAL(_##API_NAME)                \
0463                         \
0464     mflr    r0;             \
0465     std r0, 16(r1);         \
0466                         \
0467     stdu    r6, -8(r1);         \
0468                         \
0469     li      r11, API_NUMBER;        \
0470     lv1call;                \
0471                         \
0472     addi    r1, r1, 8;          \
0473     ld  r11, -8(r1);            \
0474     std r4, 0(r11);         \
0475                         \
0476     ld  r0, 16(r1);         \
0477     mtlr    r0;             \
0478     blr
0479 
0480 #define LV1_3_IN_2_OUT(API_NAME, API_NUMBER)    \
0481 _GLOBAL(_##API_NAME)                \
0482                         \
0483     mflr    r0;             \
0484     std r0, 16(r1);         \
0485                         \
0486     std     r6, -8(r1);         \
0487     stdu    r7, -16(r1);            \
0488                         \
0489     li      r11, API_NUMBER;        \
0490     lv1call;                \
0491                         \
0492     addi    r1, r1, 16;         \
0493     ld  r11, -8(r1);            \
0494     std r4, 0(r11);         \
0495     ld  r11, -16(r1);           \
0496     std r5, 0(r11);         \
0497                         \
0498     ld  r0, 16(r1);         \
0499     mtlr    r0;             \
0500     blr
0501 
0502 #define LV1_3_IN_3_OUT(API_NAME, API_NUMBER)    \
0503 _GLOBAL(_##API_NAME)                \
0504                         \
0505     mflr    r0;             \
0506     std r0, 16(r1);         \
0507                         \
0508     std     r6, -8(r1);         \
0509     std r7, -16(r1);            \
0510     stdu    r8, -24(r1);            \
0511                         \
0512     li      r11, API_NUMBER;        \
0513     lv1call;                \
0514                         \
0515     addi    r1, r1, 24;         \
0516     ld  r11, -8(r1);            \
0517     std r4, 0(r11);         \
0518     ld  r11, -16(r1);           \
0519     std r5, 0(r11);         \
0520     ld  r11, -24(r1);           \
0521     std r6, 0(r11);         \
0522                         \
0523     ld  r0, 16(r1);         \
0524     mtlr    r0;             \
0525     blr
0526 
0527 #define LV1_4_IN_1_OUT(API_NAME, API_NUMBER)    \
0528 _GLOBAL(_##API_NAME)                \
0529                         \
0530     mflr    r0;             \
0531     std r0, 16(r1);         \
0532                         \
0533     stdu    r7, -8(r1);         \
0534                         \
0535     li      r11, API_NUMBER;        \
0536     lv1call;                \
0537                         \
0538     addi    r1, r1, 8;          \
0539     ld  r11, -8(r1);            \
0540     std r4, 0(r11);         \
0541                         \
0542     ld  r0, 16(r1);         \
0543     mtlr    r0;             \
0544     blr
0545 
0546 #define LV1_4_IN_2_OUT(API_NAME, API_NUMBER)    \
0547 _GLOBAL(_##API_NAME)                \
0548                         \
0549     mflr    r0;             \
0550     std r0, 16(r1);         \
0551                         \
0552     std     r7, -8(r1);         \
0553     stdu    r8, -16(r1);            \
0554                         \
0555     li      r11, API_NUMBER;        \
0556     lv1call;                \
0557                         \
0558     addi    r1, r1, 16;         \
0559     ld  r11, -8(r1);            \
0560     std r4, 0(r11);         \
0561     ld  r11, -16(r1);           \
0562     std r5, 0(r11);         \
0563                         \
0564     ld  r0, 16(r1);         \
0565     mtlr    r0;             \
0566     blr
0567 
0568 #define LV1_4_IN_3_OUT(API_NAME, API_NUMBER)    \
0569 _GLOBAL(_##API_NAME)                \
0570                         \
0571     mflr    r0;             \
0572     std r0, 16(r1);         \
0573                         \
0574     std     r7, -8(r1);         \
0575     std r8, -16(r1);            \
0576     stdu    r9, -24(r1);            \
0577                         \
0578     li      r11, API_NUMBER;        \
0579     lv1call;                \
0580                         \
0581     addi    r1, r1, 24;         \
0582     ld  r11, -8(r1);            \
0583     std r4, 0(r11);         \
0584     ld  r11, -16(r1);           \
0585     std r5, 0(r11);         \
0586     ld  r11, -24(r1);           \
0587     std r6, 0(r11);         \
0588                         \
0589     ld  r0, 16(r1);         \
0590     mtlr    r0;             \
0591     blr
0592 
0593 #define LV1_5_IN_1_OUT(API_NAME, API_NUMBER)    \
0594 _GLOBAL(_##API_NAME)                \
0595                         \
0596     mflr    r0;             \
0597     std r0, 16(r1);         \
0598                         \
0599     stdu    r8, -8(r1);         \
0600                         \
0601     li      r11, API_NUMBER;        \
0602     lv1call;                \
0603                         \
0604     addi    r1, r1, 8;          \
0605     ld  r11, -8(r1);            \
0606     std r4, 0(r11);         \
0607                         \
0608     ld  r0, 16(r1);         \
0609     mtlr    r0;             \
0610     blr
0611 
0612 #define LV1_5_IN_2_OUT(API_NAME, API_NUMBER)    \
0613 _GLOBAL(_##API_NAME)                \
0614                         \
0615     mflr    r0;             \
0616     std r0, 16(r1);         \
0617                         \
0618     std     r8, -8(r1);         \
0619     stdu    r9, -16(r1);            \
0620                         \
0621     li      r11, API_NUMBER;        \
0622     lv1call;                \
0623                         \
0624     addi    r1, r1, 16;         \
0625     ld  r11, -8(r1);            \
0626     std r4, 0(r11);         \
0627     ld  r11, -16(r1);           \
0628     std r5, 0(r11);         \
0629                         \
0630     ld  r0, 16(r1);         \
0631     mtlr    r0;             \
0632     blr
0633 
0634 #define LV1_5_IN_3_OUT(API_NAME, API_NUMBER)    \
0635 _GLOBAL(_##API_NAME)                \
0636                         \
0637     mflr    r0;             \
0638     std r0, 16(r1);         \
0639                         \
0640     std     r8, -8(r1);         \
0641     std r9, -16(r1);            \
0642     stdu    r10, -24(r1);           \
0643                         \
0644     li      r11, API_NUMBER;        \
0645     lv1call;                \
0646                         \
0647     addi    r1, r1, 24;         \
0648     ld  r11, -8(r1);            \
0649     std r4, 0(r11);         \
0650     ld  r11, -16(r1);           \
0651     std r5, 0(r11);         \
0652     ld  r11, -24(r1);           \
0653     std r6, 0(r11);         \
0654                         \
0655     ld  r0, 16(r1);         \
0656     mtlr    r0;             \
0657     blr
0658 
0659 #define LV1_6_IN_1_OUT(API_NAME, API_NUMBER)    \
0660 _GLOBAL(_##API_NAME)                \
0661                         \
0662     mflr    r0;             \
0663     std r0, 16(r1);         \
0664                         \
0665     stdu    r9, -8(r1);         \
0666                         \
0667     li      r11, API_NUMBER;        \
0668     lv1call;                \
0669                         \
0670     addi    r1, r1, 8;          \
0671     ld  r11, -8(r1);            \
0672     std r4, 0(r11);         \
0673                         \
0674     ld  r0, 16(r1);         \
0675     mtlr    r0;             \
0676     blr
0677 
0678 #define LV1_6_IN_2_OUT(API_NAME, API_NUMBER)    \
0679 _GLOBAL(_##API_NAME)                \
0680                         \
0681     mflr    r0;             \
0682     std r0, 16(r1);         \
0683                         \
0684     std     r9, -8(r1);         \
0685     stdu    r10, -16(r1);           \
0686                         \
0687     li      r11, API_NUMBER;        \
0688     lv1call;                \
0689                         \
0690     addi    r1, r1, 16;         \
0691     ld  r11, -8(r1);            \
0692     std r4, 0(r11);         \
0693     ld  r11, -16(r1);           \
0694     std r5, 0(r11);         \
0695                         \
0696     ld  r0, 16(r1);         \
0697     mtlr    r0;             \
0698     blr
0699 
0700 #define LV1_6_IN_3_OUT(API_NAME, API_NUMBER)    \
0701 _GLOBAL(_##API_NAME)                \
0702                         \
0703     mflr    r0;             \
0704     std r0, 16(r1);         \
0705                         \
0706     std     r9, -8(r1);         \
0707     stdu    r10, -16(r1);           \
0708                         \
0709     li      r11, API_NUMBER;        \
0710     lv1call;                \
0711                         \
0712     addi    r1, r1, 16;         \
0713     ld  r11, -8(r1);            \
0714     std r4, 0(r11);         \
0715     ld  r11, -16(r1);           \
0716     std r5, 0(r11);         \
0717     ld  r11, 48+8*8(r1);        \
0718     std r6, 0(r11);         \
0719                         \
0720     ld  r0, 16(r1);         \
0721     mtlr    r0;             \
0722     blr
0723 
0724 #define LV1_7_IN_1_OUT(API_NAME, API_NUMBER)    \
0725 _GLOBAL(_##API_NAME)                \
0726                         \
0727     mflr    r0;             \
0728     std r0, 16(r1);         \
0729                         \
0730     stdu    r10, -8(r1);            \
0731                         \
0732     li      r11, API_NUMBER;        \
0733     lv1call;                \
0734                         \
0735     addi    r1, r1, 8;          \
0736     ld  r11, -8(r1);            \
0737     std r4, 0(r11);         \
0738                         \
0739     ld  r0, 16(r1);         \
0740     mtlr    r0;             \
0741     blr
0742 
0743 #define LV1_7_IN_6_OUT(API_NAME, API_NUMBER)    \
0744 _GLOBAL(_##API_NAME)                \
0745                         \
0746     mflr    r0;             \
0747     std r0, 16(r1);         \
0748                         \
0749     std r10, 48+8*7(r1);        \
0750                         \
0751     li  r11, API_NUMBER;        \
0752     lv1call;                \
0753                         \
0754     ld  r11, 48+8*7(r1);        \
0755     std r4, 0(r11);         \
0756     ld  r11, 48+8*8(r1);        \
0757     std r5, 0(r11);         \
0758     ld  r11, 48+8*9(r1);        \
0759     std r6, 0(r11);         \
0760     ld  r11, 48+8*10(r1);       \
0761     std r7, 0(r11);         \
0762     ld  r11, 48+8*11(r1);       \
0763     std r8, 0(r11);         \
0764     ld  r11, 48+8*12(r1);       \
0765     std r9, 0(r11);         \
0766                         \
0767     ld  r0, 16(r1);         \
0768     mtlr    r0;             \
0769     blr
0770 
0771 #define LV1_8_IN_1_OUT(API_NAME, API_NUMBER)    \
0772 _GLOBAL(_##API_NAME)                \
0773                         \
0774     mflr    r0;             \
0775     std r0, 16(r1);         \
0776                         \
0777     li      r11, API_NUMBER;        \
0778     lv1call;                \
0779                         \
0780     ld  r11, 48+8*8(r1);        \
0781     std r4, 0(r11);         \
0782                         \
0783     ld  r0, 16(r1);         \
0784     mtlr    r0;             \
0785     blr
0786 
0787     .text
0788 
0789 /* the lv1 underscored call definitions expand here */
0790 
0791 #define LV1_CALL(name, in, out, num) LV1_##in##_IN_##out##_OUT(lv1_##name, num)
0792 #include <asm/lv1call.h>