Advertisement
Guest User

Untitled

a guest
Jun 4th, 2018
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # arguments:
  2. #
  3. # r3 = audio state (sample history and index, 2 channels, all 32-bit values = 16 bytes)
  4. # r4 = input buffer
  5. # r5 = output buffer
  6. # r6 = frame format
  7. # r7 = sample count
  8. # r8 = ALWAYS 0
  9. #
  10. # (*) since r8 is always zero you can safely ignore all of these instructions
  11.  
  12. hvqm_decode_stereo_ima_adpcm:                                   # CODE XREF: hvqm_decode_audio_frame+110
  13.  
  14. .set var_8, -8
  15. .set var_4, -4
  16.  
  17.                 stwu      r1, -0x10(r1)                         # Store Word with Update
  18.                 cmplwi    r4, 0                                 # CR0 = COMPARE(r4, 0);
  19.                 stw       r31, 0x10+var_4(r1)                   # Store Word
  20.                 stw       r30, 0x10+var_8(r1)                   # Store Word
  21.                 beq       return                                # if (CR0.eq) return;
  22.                 cmplwi    r6, 1                                 #                                                                 (*)
  23.                 mr        r10, r7                               #                                                                 (*)
  24.                 bne       loc_801BE8E8                          #                                                                 (*)
  25.                 lis       r9, ((dword_80338C2C+0x10000)@h)      #                                                                 (*)
  26.                 addi      r10, r10, 4                           #                                                                 (*)
  27.                 stw       r8, dword_80338C2C@l(r9)              #                                                                 (*)
  28.                 b         loc_801BE8FC                          #                                                                 (*)
  29. # ---------------------------------------------------------------------------
  30.  
  31. loc_801BE8E8:                                                   # CODE XREF: hvqm_decode_stereo_ima_adpcm+1C
  32.                 cmplwi    r6, 3                                 #                                                                 (*)
  33.                 bne       loc_801BE8FC                          #                                                                 (*)
  34.                 lis       r9, ((dword_80338C2C+0x10000)@h)      #                                                                 (*)
  35.                 addi      r10, r10, 6                           #                                                                 (*)
  36.                 stw       r8, dword_80338C2C@l(r9)              #                                                                 (*)
  37.  
  38. loc_801BE8FC:                                                   # CODE XREF: hvqm_decode_stereo_ima_adpcm+2C
  39.                                                                 # hvqm_decode_stereo_ima_adpcm+34
  40.                 clrlwi.   r0, r10, 31                           #                                                                 (*)
  41.                 beq       loc_801BE908                          #                                                                 (*)
  42.                 addi      r10, r10, 1                           #                                                                 (*)
  43.  
  44. loc_801BE908:                                                   # CODE XREF: hvqm_decode_stereo_ima_adpcm+48
  45.                 lis       r8, ((dword_80338C2C+0x10000)@h)      #                                                                 (*)
  46.                 cmplwi    r6, 1                                 # CR0 = COMPARE(r6, 1)                 <- frame format
  47.                 addi      r9, r8, -0x73D4 # dword_80338C2C      #                                                                 (*)
  48.                 mr        r8, r5                                # r8 = r5
  49.                 lwz       r0, ((dword_80338C2C+0x73D4)@l)(r9)   #                                                                 (*)
  50.                 mullw     r10, r10, r0                          #                                                                 (*)
  51.                 add       r4, r4, r10                           #                                                                 (*)
  52.                 bne       loc_801BE988                          # if (CR0.eq) {
  53.                 lbz       r0, 1(r4)                             #     r0 = r4[1]
  54.                 addi      r8, r5, 4                             #     r8 = r5 + 4                      <- output pointer
  55.                 lbz       r9, 0(r4)                             #     r9 = r4[0]
  56.                 addi      r7, r7, -1                            #     r7 = r7 - 1                      <- sample_count
  57.                 rlwinm    r6, r0, 0,24,24                       #     r6 = r0 & 0x80
  58.                 clrlwi    r0, r0, 25                            #     r0 = r0 & 0x7F
  59.                 insrwi    r6, r9, 8,16                          #     r6 = (r9 << 8) | r6
  60.                 extsh     r6, r6                                #     r6 = (int32_t)((int16_t)r6)
  61.                 stw       r6, 0(r3)                             #     r3[0] = r6                       <- hist sample (32-bit value)
  62.                 stw       r0, 4(r3)                             #     r3[1] = r0                       <- index (32-bit value)
  63.                 lbz       r0, 3(r4)                             #     r0 = r4[3]
  64.                 lbz       r9, 2(r4)                             #     r9 = r4[2]
  65.                 addi      r4, r4, 4                             #     r4 = r4 + 4                      <- input pointer
  66.                 rlwinm    r6, r0, 0,24,24                       #     r6 = r0 & 0x80
  67.                 clrlwi    r0, r0, 25                            #     r0 = r0 & 0x7F
  68.                 insrwi    r6, r9, 8,16                          #     r6 = (r9 << 8) | r6
  69.                 extsh     r6, r6                                #     r6 = (int32_t)((int16_t)r6)
  70.                 stw       r6, 8(r3)                             #     r3[3] = r6
  71.                 stw       r0, 0xC(r3)                           #     r3[4] = r0
  72.                 lwz       r0, 0(r3)                             #     r0 = r3[0]
  73.                 sth       r0, 2(r5)                             #     r5[1] = r0                       <- decoded sample (16-bit value)
  74.                 lwz       r0, 8(r3)                             #     r0 = r3[1]
  75.                 sth       r0, 0(r5)                             #     r5[0] = r0
  76.                 b         loc_801BE9E4                          #     goto loc_801BE9E4;
  77.                                                                 # }
  78. # ---------------------------------------------------------------------------
  79.  
  80. loc_801BE988:                                                   # CODE XREF: hvqm_decode_stereo_ima_adpcm+6C
  81.                 cmplwi    r6, 3                                 # CR0 = COMPARE(r6, 3);
  82.                 bne       loc_801BE9E4                          # if (CR0.eq) {
  83.                 lbz       r6, 0(r4)                             #     r6 = r4[0]
  84.                 addi      r8, r5, 4                             #     r8 = r5 + 4
  85.                 lbz       r0, 1(r4)                             #     r0 = r4[1]
  86.                 addi      r7, r7, -1                            #     r7 = r7 - 1
  87.                 insrwi    r0, r6, 8,16                          #     r0 = (r6 << 8) | r0
  88.                 extsh     r0, r0                                #     r0 = (int32_t)((int16_t)r0)
  89.                 stw       r0, 0(r3)                             #     r3[0] = r0
  90.                 lbz       r0, 2(r4)                             #     r0 = r4[2]
  91.                 stw       r0, 4(r3)                             #     r3[1] = r0
  92.                 lbz       r6, 3(r4)                             #     r6 = r4[3]
  93.                 lbz       r0, 4(r4)                             #     r0 = r4[4]
  94.                 insrwi    r0, r6, 8,16                          #     r0 = (r6 << 8) | r0
  95.                 extsh     r0, r0                                #     r0 = (int32_t)((int16_t)r0)
  96.                 stw       r0, 8(r3)                             #     r3[2] = r0
  97.                 lbz       r0, 5(r4)                             #     r0 = r4[5]
  98.                 addi      r4, r4, 6                             #     r4 = r4 + 6
  99.                 stw       r0, 0xC(r3)                           #     r3[3] = r0
  100.                 lwz       r0, 0(r3)                             #     r0 = r3[0]
  101.                 sth       r0, 2(r5)                             #     r5[1] = r0
  102.                 lwz       r0, 8(r3)                             #     r0 = r3[2]
  103.                 sth       r0, 0(r5)                             #     r5[0] = r0
  104.                                                                 # }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement