Advertisement
TheRouletteBoi

General Purpose Registers (GPR For PS3)

Oct 7th, 2018
627
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.52 KB | None | 0 0
  1. /*
  2. from sdk docs
  3. search this: "Low Level System Information"
  4. or go to this directory:
  5. PlayStation®3 Programmer Tool Runtime Library Release 4.7.0
  6.     -OS Low-level Specifications
  7.         -PPU ABI Specifications for Cell OS Lv-2
  8.             -2 PPU ABI Specifications
  9.                 -2. 2 Low Level System Information
  10. */
  11.  
  12.  
  13.  
  14.  
  15. __attribute__((naked)) void _savegpr0_N()
  16. {
  17.     __asm__
  18.     (
  19.         "std  %r14, -144(%r1);"         // _savegpr0_14
  20.         "std  %r15, -136(%r1);"         // _savegpr0_15
  21.         "std  %r16, -128(%r1);"         // _savegpr0_16
  22.         "std  %r17, -120(%r1);"         // _savegpr0_17
  23.         "std  %r18, -112(%r1);"         // _savegpr0_18
  24.         "std  %r19, -104(%r1);"         // _savegpr0_19
  25.         "std  %r20, -96(%r1);"          // _savegpr0_20
  26.         "std  %r21, -88(%r1);"          // _savegpr0_21
  27.         "std  %r22, -80(%r1);"          // _savegpr0_22
  28.         "std  %r23, -72(%r1);"          // _savegpr0_23
  29.         "std  %r24, -64(%r1);"          // _savegpr0_24
  30.         "std  %r25, -56(%r1);"          // _savegpr0_25
  31.         "std  %r26, -48(%r1);"          // _savegpr0_26
  32.         "std  %r27, -40(%r1);"          // _savegpr0_27
  33.         "std  %r28, -32(%r1);"          // _savegpr0_28
  34.         "std  %r29, -24(%r1);"          // _savegpr0_29
  35.         "std  %r30, -16(%r1);"          // _savegpr0_30
  36.         "std  %r31, -8(%r1);"           // _savegpr0_31
  37.         "std  %r0, 16(%r1);"
  38.         "blr;"
  39.     );
  40. }
  41.  
  42. __attribute__((naked)) void restgpr0_N()
  43. {
  44.     __asm__
  45.     (
  46.         "ld   %r14, -144(%r1);"         // _restgpr0_14
  47.         "ld   %r15, -136(%r1);"         // _restgpr0_15
  48.         "ld   %r16, -128(%r1);"         // _restgpr0_16
  49.         "ld   %r17, -120(%r1);"         // _restgpr0_17
  50.         "ld   %r18, -112(%r1);"         // _restgpr0_18
  51.         "ld   %r19, -104(%r1);"         // _restgpr0_19
  52.         "ld   %r20, -96(%r1);"          // _restgpr0_20
  53.         "ld   %r21, -88(%r1);"          // _restgpr0_21
  54.         "ld   %r22, -80(%r1);"          // _restgpr0_22
  55.         "ld   %r23, -72(%r1);"          // _restgpr0_23
  56.         "ld   %r24, -64(%r1);"          // _restgpr0_24
  57.         "ld   %r25, -56(%r1);"          // _restgpr0_25
  58.         "ld   %r26, -48(%r1);"          // _restgpr0_26
  59.         "ld   %r27, -40(%r1);"          // _restgpr0_27
  60.         "ld   %r28, -32(%r1);"          // _restgpr0_28
  61.         "ld   %r0, 16(%r1);"            // _restgpr0_29
  62.         "ld   %r29, -24(%r1);"
  63.         "mtlr %r0;"
  64.         "ld   %r30, -16(%r1);"
  65.         "ld   %r31, -8(%r1);"
  66.         "blr;"
  67.         "ld   %r30, -16(%r1);"          // _restgpr0_30
  68.         "ld   %r0, 16(%r1);"            // _restgpr0_31
  69.         "ld   %r31, -8(%r1);"
  70.         "mtlr %r0;"
  71.         "blr;"
  72.     );
  73. }
  74.  
  75. __attribute__((naked)) void _savegpr1_N()
  76. {
  77.     __asm__
  78.     (
  79.         "std  %r14, -144(%r12);"        // _savegpr1_14
  80.         "std  %r15, -136(%r12);"        // _savegpr1_15
  81.         "std  %r16, -128(%r12);"        // _savegpr1_16
  82.         "std  %r17, -120(%r12);"        // _savegpr1_17
  83.         "std  %r18, -112(%r12);"        // _savegpr1_18
  84.         "std  %r19, -104(%r12);"        // _savegpr1_19
  85.         "std  %r20, -96(%r12);"         // _savegpr1_20
  86.         "std  %r21, -88(%r12);"         // _savegpr1_21
  87.         "std  %r22, -80(%r12);"         // _savegpr1_22
  88.         "std  %r23, -72(%r12);"         // _savegpr1_23
  89.         "std  %r24, -64(%r12);"         // _savegpr1_24
  90.         "std  %r25, -56(%r12);"         // _savegpr1_25
  91.         "std  %r26, -48(%r12);"         // _savegpr1_26
  92.         "std  %r27, -40(%r12);"         // _savegpr1_27
  93.         "std  %r28, -32(%r12);"         // _savegpr1_28
  94.         "std  %r29, -24(%r12);"         // _savegpr1_29
  95.         "std  %r30, -16(%r12);"         // _savegpr1_30
  96.         "std  %r31, -8(%r12);"          // _savegpr1_31
  97.         "blr;"
  98.     );
  99. }
  100.  
  101. __attribute__((naked)) void _restgpr1_N()
  102. {
  103.     __asm__
  104.     (
  105.         "ld   %r14, -144(%r12);"        // _restgpr1_14
  106.         "ld   %r15, -136(%r12);"        // _restgpr1_15
  107.         "ld   %r16, -128(%r12);"        // _restgpr1_16
  108.         "ld   %r17, -120(%r12);"        // _restgpr1_17
  109.         "ld   %r18, -112(%r12);"        // _restgpr1_18
  110.         "ld   %r19, -104(%r12);"        // _restgpr1_19
  111.         "ld   %r20, -96(%r12);"         // _restgpr1_20
  112.         "ld   %r21, -88(%r12);"         // _restgpr1_21
  113.         "ld   %r22, -80(%r12);"         // _restgpr1_22
  114.         "ld   %r23, -72(%r12);"         // _restgpr1_23
  115.         "ld   %r24, -64(%r12);"         // _restgpr1_24
  116.         "ld   %r25, -56(%r12);"         // _restgpr1_25
  117.         "ld   %r26, -48(%r12);"         // _restgpr1_26
  118.         "ld   %r27, -40(%r12);"         // _restgpr1_27
  119.         "ld   %r28, -32(%r12);"         // _restgpr1_28
  120.         "ld   %r29, -24(%r12);"         // _restgpr1_29
  121.         "ld   %r30, -16(%r12);"         // _restgpr1_30
  122.         "ld   %r31, -8(%r12);"          // _restgpr1_31
  123.         "blr;"
  124.     );
  125. }
  126.  
  127. __attribute__((naked)) void _savefpr_N()
  128. {
  129.     __asm__
  130.     (
  131.         "stfd %f14, -144(%r1);"         // _savefpr_14
  132.         "stfd %f15, -136(%r1);"         // _savefpr_15
  133.         "stfd %f16, -128(%r1);"         // _savefpr_16
  134.         "stfd %f17, -120(%r1);"         // _savefpr_17
  135.         "stfd %f18, -112(%r1);"         // _savefpr_18
  136.         "stfd %f19, -104(%r1);"         // _savefpr_19
  137.         "stfd %f20, -96(%r1);"          // _savefpr_20
  138.         "stfd %f21, -88(%r1);"          // _savefpr_21
  139.         "stfd %f22, -80(%r1);"          // _savefpr_22
  140.         "stfd %f23, -72(%r1);"          // _savefpr_23
  141.         "stfd %f24, -64(%r1);"          // _savefpr_24
  142.         "stfd %f25, -56(%r1);"          // _savefpr_25
  143.         "stfd %f26, -48(%r1);"          // _savefpr_26
  144.         "stfd %f27, -40(%r1);"          // _savefpr_27
  145.         "stfd %f28, -32(%r1);"          // _savefpr_28
  146.         "stfd %f29, -24(%r1);"          // _savefpr_29
  147.         "stfd %f30, -16(%r1);"          // _savefpr_30
  148.         "stfd %f31, -8(%r1);"           // _savefpr_31
  149.         "std  %r0, 16(%r1);"
  150.         "blr;"
  151.     );
  152. }
  153.  
  154. __attribute__((naked)) void _restfpr_N()
  155. {
  156.     __asm__
  157.     (
  158.         "lfd  %f14, -144(%r1);"         // _restfpr_14
  159.         "lfd  %f15, -136(%r1);"         // _restfpr_15
  160.         "lfd  %f16, -128(%r1);"         // _restfpr_16
  161.         "lfd  %f17, -120(%r1);"         // _restfpr_17
  162.         "lfd  %f18, -112(%r1);"         // _restfpr_18
  163.         "lfd  %f19, -104(%r1);"         // _restfpr_19
  164.         "lfd  %f20, -96(%r1);"          // _restfpr_20
  165.         "lfd  %f21, -88(%r1);"          // _restfpr_21
  166.         "lfd  %f22, -80(%r1);"          // _restfpr_22
  167.         "lfd  %f23, -72(%r1);"          // _restfpr_23
  168.         "lfd  %f24, -64(%r1);"          // _restfpr_24
  169.         "lfd  %f25, -56(%r1);"          // _restfpr_25
  170.         "lfd  %f26, -48(%r1);"          // _restfpr_26
  171.         "lfd  %f27, -40(%r1);"          // _restfpr_27
  172.         "lfd  %f28, -32(%r1);"          // _restfpr_28
  173.         "ld   %r0, 16(%r1);"            // _restfpr_29
  174.         "lfd  %f29, -24(%r1);"
  175.         "mtlr %r0;"
  176.         "lfd  %f30, -16(%r1);"
  177.         "lfd  %f31, -8(%r1);"
  178.         "blr;"
  179.         "lfd  %f30, -16(%r1);"          // _restfpr_30
  180.         "ld   %r0, 16(%r1);"            // _restfpr_31
  181.         "lfd  %f31, -8(%r1);"
  182.         "mtlr %r0;"
  183.         "blr;"
  184.     );
  185. }
  186.  
  187. __attribute__((naked)) void _savevr_N()
  188. {
  189.     __asm__
  190.     (
  191.         "addi %r12, %r0, -192;"         // _savevr_20
  192.         "stvx %v20, %r12, %r0;"
  193.         "addi %r12, %r0, -176;"         // _savevr_21
  194.         "stvx %v21, %r12, %r0;"
  195.         "addi %r12, %r0, -160;"         // _savevr_22
  196.         "stvx %v22, %r12, %r0;"
  197.         "addi %r12, %r0, -144;"         // _savevr_23
  198.         "stvx %v23, %r12, %r0;"
  199.         "addi %r12, %r0, -128;"         // _savevr_24
  200.         "stvx %v24, %r12, %r0;"
  201.         "addi %r12, %r0, -112;"         // _savevr_25
  202.         "stvx %v25, %r12, %r0;"
  203.         "addi %r12, %r0, -96;"          // _savevr_26
  204.         "stvx %v26, %r12, %r0;"
  205.         "addi %r12, %r0, -80;"          // _savevr_27
  206.         "stvx %v27, %r12, %r0;"
  207.         "addi %r12, %r0, -64;"          // _savevr_28
  208.         "stvx %v28, %r12, %r0;"
  209.         "addi %r12, %r0, -48;"          // _savevr_29
  210.         "stvx %v29, %r12, %r0;"
  211.         "addi %r12, %r0, -32;"          // _savevr_30
  212.         "stvx %v30, %r12, %r0;"
  213.         "addi %r12, %r0, -16;"          // _savevr_31
  214.         "stvx %v31, %r12, %r0;"
  215.         "blr;"
  216.     );
  217. }
  218.  
  219. __attribute__((naked)) void _restvr_M()
  220. {
  221.     __asm__
  222.     (
  223.         "addi %r12, %r0, -192;"         // _restvr_20
  224.         "lvx  %v20, %r12, %r0;"
  225.         "addi %r12, %r0, -176;"         // _restvr_21
  226.         "lvx  %v21, %r12, %r0;"
  227.         "addi %r12, %r0, -160;"         // _restvr_22
  228.         "lvx  %v22, %r12, %r0;"
  229.         "addi %r12, %r0, -144;"         // _restvr_23
  230.         "lvx  %v23, %r12, %r0;"
  231.         "addi %r12, %r0, -128;"         // _restvr_24
  232.         "lvx  %v24, %r12, %r0;"
  233.         "addi %r12, %r0, -112;"         // _restvr_25
  234.         "lvx  %v25, %r12, %r0;"
  235.         "addi %r12, %r0, -96;"          // _restvr_26
  236.         "lvx  %v26, %r12, %r0;"
  237.         "addi %r12, %r0, -80;"          // _restvr_27
  238.         "lvx  %v27, %r12, %r0;"
  239.         "addi %r12, %r0, -64;"          // _restvr_28
  240.         "lvx  %v28, %r12, %r0;"
  241.         "addi %r12, %r0, -48;"          // _restvr_29
  242.         "lvx  %v29, %r12, %r0;"
  243.         "addi %r12, %r0, -32;"          // _restvr_30
  244.         "lvx  %v30, %r12, %r0;"
  245.         "addi %r12, %r0, -16;"          // _restvr_31
  246.         "lvx  %v31, %r12, %r0;"
  247.         "blr;"
  248.     );
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement