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