Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # arguments:
- #
- # r3 = audio state (sample history and index, 2 channels, all 32-bit values = 16 bytes)
- # r4 = input buffer
- # r5 = output buffer
- # r6 = frame format
- # r7 = sample count
- # r8 = ALWAYS 0
- #
- # (*) since r8 is always zero you can safely ignore all of these instructions
- hvqm_decode_stereo_ima_adpcm: # CODE XREF: hvqm_decode_audio_frame+110
- .set var_8, -8
- .set var_4, -4
- stwu r1, -0x10(r1) # Store Word with Update
- cmplwi r4, 0 # CR0 = COMPARE(r4, 0);
- stw r31, 0x10+var_4(r1) # Store Word
- stw r30, 0x10+var_8(r1) # Store Word
- beq return # if (CR0.eq) return;
- cmplwi r6, 1 # (*)
- mr r10, r7 # (*)
- bne loc_801BE8E8 # (*)
- lis r9, ((dword_80338C2C+0x10000)@h) # (*)
- addi r10, r10, 4 # (*)
- stw r8, dword_80338C2C@l(r9) # (*)
- b loc_801BE8FC # (*)
- # ---------------------------------------------------------------------------
- loc_801BE8E8: # CODE XREF: hvqm_decode_stereo_ima_adpcm+1C
- cmplwi r6, 3 # (*)
- bne loc_801BE8FC # (*)
- lis r9, ((dword_80338C2C+0x10000)@h) # (*)
- addi r10, r10, 6 # (*)
- stw r8, dword_80338C2C@l(r9) # (*)
- loc_801BE8FC: # CODE XREF: hvqm_decode_stereo_ima_adpcm+2C
- # hvqm_decode_stereo_ima_adpcm+34
- clrlwi. r0, r10, 31 # (*)
- beq loc_801BE908 # (*)
- addi r10, r10, 1 # (*)
- loc_801BE908: # CODE XREF: hvqm_decode_stereo_ima_adpcm+48
- lis r8, ((dword_80338C2C+0x10000)@h) # (*)
- cmplwi r6, 1 # CR0 = COMPARE(r6, 1) <- frame format
- addi r9, r8, -0x73D4 # dword_80338C2C # (*)
- mr r8, r5 # r8 = r5
- lwz r0, ((dword_80338C2C+0x73D4)@l)(r9) # (*)
- mullw r10, r10, r0 # (*)
- add r4, r4, r10 # (*)
- bne loc_801BE988 # if (CR0.eq) {
- lbz r0, 1(r4) # r0 = r4[1]
- addi r8, r5, 4 # r8 = r5 + 4 <- output pointer
- lbz r9, 0(r4) # r9 = r4[0]
- addi r7, r7, -1 # r7 = r7 - 1 <- sample_count
- rlwinm r6, r0, 0,24,24 # r6 = r0 & 0x80
- clrlwi r0, r0, 25 # r0 = r0 & 0x7F
- insrwi r6, r9, 8,16 # r6 = (r9 << 8) | r6
- extsh r6, r6 # r6 = (int32_t)((int16_t)r6)
- stw r6, 0(r3) # r3[0] = r6 <- hist sample (32-bit value)
- stw r0, 4(r3) # r3[1] = r0 <- index (32-bit value)
- lbz r0, 3(r4) # r0 = r4[3]
- lbz r9, 2(r4) # r9 = r4[2]
- addi r4, r4, 4 # r4 = r4 + 4 <- input pointer
- rlwinm r6, r0, 0,24,24 # r6 = r0 & 0x80
- clrlwi r0, r0, 25 # r0 = r0 & 0x7F
- insrwi r6, r9, 8,16 # r6 = (r9 << 8) | r6
- extsh r6, r6 # r6 = (int32_t)((int16_t)r6)
- stw r6, 8(r3) # r3[3] = r6
- stw r0, 0xC(r3) # r3[4] = r0
- lwz r0, 0(r3) # r0 = r3[0]
- sth r0, 2(r5) # r5[1] = r0 <- decoded sample (16-bit value)
- lwz r0, 8(r3) # r0 = r3[1]
- sth r0, 0(r5) # r5[0] = r0
- b loc_801BE9E4 # goto loc_801BE9E4;
- # }
- # ---------------------------------------------------------------------------
- loc_801BE988: # CODE XREF: hvqm_decode_stereo_ima_adpcm+6C
- cmplwi r6, 3 # CR0 = COMPARE(r6, 3);
- bne loc_801BE9E4 # if (CR0.eq) {
- lbz r6, 0(r4) # r6 = r4[0]
- addi r8, r5, 4 # r8 = r5 + 4
- lbz r0, 1(r4) # r0 = r4[1]
- addi r7, r7, -1 # r7 = r7 - 1
- insrwi r0, r6, 8,16 # r0 = (r6 << 8) | r0
- extsh r0, r0 # r0 = (int32_t)((int16_t)r0)
- stw r0, 0(r3) # r3[0] = r0
- lbz r0, 2(r4) # r0 = r4[2]
- stw r0, 4(r3) # r3[1] = r0
- lbz r6, 3(r4) # r6 = r4[3]
- lbz r0, 4(r4) # r0 = r4[4]
- insrwi r0, r6, 8,16 # r0 = (r6 << 8) | r0
- extsh r0, r0 # r0 = (int32_t)((int16_t)r0)
- stw r0, 8(r3) # r3[2] = r0
- lbz r0, 5(r4) # r0 = r4[5]
- addi r4, r4, 6 # r4 = r4 + 6
- stw r0, 0xC(r3) # r3[3] = r0
- lwz r0, 0(r3) # r0 = r3[0]
- sth r0, 2(r5) # r5[1] = r0
- lwz r0, 8(r3) # r0 = r3[2]
- sth r0, 0(r5) # r5[0] = r0
- # }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement