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