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