Enabling the SMUSH/sound ARM optimizations for the iPhone. Converting any numerical expressions in the asm to absolute values (moving the expression to comments) since the iPhone assembler can't handle them, and prepending an underscore to the exported symbols (with some preprocessor magic similar to the hq3x asm for handle ports where it's not needed)
svn-id: r30093
This commit is contained in:
parent
a38fa007bb
commit
1c88ab2c47
5 changed files with 102 additions and 71 deletions
4
configure
vendored
4
configure
vendored
|
@ -1077,12 +1077,14 @@ if test -n "$_host"; then
|
|||
;;
|
||||
iphone)
|
||||
echo "Cross-compiling to $_host, forcing endianness, alignment and type sizes"
|
||||
DEFINES="$DEFINES -DIPHONE -DUNIX"
|
||||
DEFINES="$DEFINES -DIPHONE -DUNIX -DUSE_ARM_SOUND_ASM -DUSE_ARM_SMUSH_ASM"
|
||||
_endian=little
|
||||
_need_memalign=yes
|
||||
type_1_byte='char'
|
||||
type_2_byte='short'
|
||||
type_4_byte='int'
|
||||
add_line_to_config_mk 'USE_ARM_SOUND_ASM = 1'
|
||||
add_line_to_config_mk 'USE_ARM_SMUSH_ASM = 1'
|
||||
_backend="iphone"
|
||||
_mak_hq_scalers='DISABLE_HQ_SCALERS = 1'
|
||||
_build_hq_scalers="no"
|
||||
|
|
|
@ -340,6 +340,12 @@ void Codec47Decoder::makeTables47(int width) {
|
|||
|
||||
#ifdef USE_ARM_SMUSH_ASM
|
||||
|
||||
extern "C" {
|
||||
#ifndef IPHONE
|
||||
#define ARM_Smush_decode2 _ARM_Smush_decode2
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void ARM_Smush_decode2( byte *dst,
|
||||
const byte *src,
|
||||
int width,
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
@ along with this program@ if not, write to the Free Software
|
||||
@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
@
|
||||
@ $URL:$
|
||||
@ $Id:$
|
||||
@ $URL$
|
||||
@ $Id$
|
||||
@
|
||||
@ @author Robin Watts (robin@wss.co.uk)
|
||||
@
|
||||
|
@ -29,9 +29,9 @@
|
|||
|
||||
.text
|
||||
|
||||
.global ARM_Smush_decode2
|
||||
.global _ARM_Smush_decode2
|
||||
|
||||
ARM_Smush_decode2:
|
||||
_ARM_Smush_decode2:
|
||||
@ r0 = dst
|
||||
@ r1 = src
|
||||
@ r2 = width
|
||||
|
@ -44,7 +44,7 @@ ARM_Smush_decode2:
|
|||
@ <> = _tableSmall
|
||||
STMFD r13!,{r2,r4-r11,R14}
|
||||
|
||||
LDR r4,[r13,#(9+1)*4] @ r4 = param
|
||||
LDR r4,[r13,#40] @ r4 = param (40 = (9+1)*4)
|
||||
@ stall
|
||||
@ stall
|
||||
SUB r4,r4,#0xF8
|
||||
|
@ -72,7 +72,7 @@ x_loop:
|
|||
BEQ level1codeFE
|
||||
level1codeFD:
|
||||
LDRB r6,[r1],#1 @ r6 = tmp = *_d_src++
|
||||
LDR r8,[r13,#(9+1+2)*4] @ r8 = _tableBig
|
||||
LDR r8,[r13,#48] @ r8 = _tableBig (48 = (9+1+2)*4)
|
||||
@ stall
|
||||
ADD r12,r6,r6,LSL #1 @ r12= tmp*3
|
||||
ADD r6,r6,r12,LSL #5 @ r6 = tmp*97
|
||||
|
@ -93,7 +93,7 @@ level1codeFD_loop1:
|
|||
level1codeFD_over1:
|
||||
LDRB r9,[r12,#1] @ r9 = l = tmp_ptr[385]
|
||||
LDRB r6,[r1],#1 @ r6 = val = *_d_src++
|
||||
SUB r12,r12,#384-128 @ r12= &tmp_ptr[128]
|
||||
SUB r12,r12,#256 @ r12= &tmp_ptr[128] (256 = 384-128)
|
||||
@ I don't really believe the next 2 lines are necessary, but...
|
||||
CMP r9,#0
|
||||
BEQ level1codeFD_over2
|
||||
|
@ -121,13 +121,13 @@ level1_end:
|
|||
LDMFD r13!,{r2,r4-r11,PC}
|
||||
|
||||
level1codeSMALL:
|
||||
LDR r8,[r13,#(9+1+1)*4] @ r8 = _table
|
||||
LDR r9,[r13,#(9+1+3)*4] @ r9 = _offset1
|
||||
LDR r8,[r13,#44] @ r8 = _table (44 = (9+1+1)*4)
|
||||
LDR r9,[r13,#52] @ r9 = _offset1 (52 = (9+1+3)*4)
|
||||
MOV r6,r6,LSL #1 @ r6 = code<<1
|
||||
LDRSH r8,[r8,r6] @ tmp2 = _table[code]
|
||||
level1codeFC:
|
||||
@ EQ => FC
|
||||
LDREQ r9,[r13,#(9+1+4)*4] @ r9 = _offset2
|
||||
LDREQ r9,[r13,#56] @ r9 = _offset2 (56 = (9+1+4)*4)
|
||||
MOVEQ r8,#0
|
||||
SUB r11,r2,#7 @ r11 = _d_pitch-7
|
||||
ADD r9,r9,r0 @ tmp2 = _d_dst+_offset
|
||||
|
@ -212,7 +212,7 @@ level2:
|
|||
BEQ level2codeFE
|
||||
level2codeFD:
|
||||
LDRB r6,[r1],#1 @ r6 = tmp = *_d_src++
|
||||
LDR r8,[r13,#(9+1+5)*4] @ r8 = _tableSmall
|
||||
LDR r8,[r13,#60] @ r8 = _tableSmall (60 = (9+1+5)*4)
|
||||
@ stall
|
||||
@ stall
|
||||
ADD r8,r8,r6,LSL #7 @ r8 = _tableSmall + tmp*128
|
||||
|
@ -230,7 +230,7 @@ level2codeFD_loop1:
|
|||
STRB r6,[r10,r11,LSL #8] @ *(_d_dst + (*tmp_ptr2++)) = val
|
||||
BGT level2codeFD_loop1
|
||||
level2codeFD_over1:
|
||||
LDRB r9,[r12,#97-32] @ r9 = l = tmp_ptr[97]
|
||||
LDRB r9,[r12,#65] @ r9 = l = tmp_ptr[97] (65 = 97-32)
|
||||
LDRB r6,[r1],#1 @ r6 = val = *_d_src++
|
||||
@ I don't really believe the next 2 lines are necessary, but...
|
||||
CMP r9,#0
|
||||
|
@ -246,13 +246,13 @@ level2codeFD_loop2:
|
|||
MOV PC,R14
|
||||
|
||||
level2codeSMALL:
|
||||
LDR r8,[r13,#(9+1+1)*4] @ r8 = _table
|
||||
LDR r9,[r13,#(9+1+3)*4] @ r9 = _offset1
|
||||
LDR r8,[r13,#44] @ r8 = _table (44 = (9+1+1)*4)
|
||||
LDR r9,[r13,#52] @ r9 = _offset1 (52 = (9+1+3)*4)
|
||||
MOV r6,r6,LSL #1 @ r6 = code<<1
|
||||
LDRSH r8,[r8,r6] @ tmp2 = _table[code]
|
||||
level2codeFC:
|
||||
@ EQ => FC
|
||||
LDREQ r9,[r13,#(9+1+4)*4] @ r9 = _offset2
|
||||
LDREQ r9,[r13,#56] @ r9 = _offset2 (56 = (9+1+4)*4)
|
||||
MOVEQ r8,#0
|
||||
SUB r11,r2,#3 @ r11 = _d_pitch-3
|
||||
ADD r9,r9,r0 @ tmp2 = _d_dst + _table[code]
|
||||
|
@ -350,13 +350,13 @@ level3codeFF:
|
|||
MOV PC,R14
|
||||
|
||||
level3codeSMALL:
|
||||
LDR r8,[r13,#(9+1+1)*4] @ r8 = _table
|
||||
LDR r9,[r13,#(9+1+3)*4] @ r9 = _offset1
|
||||
LDR r8,[r13,#44] @ r8 = _table (44 = (9+1+1)*4)
|
||||
LDR r9,[r13,#52] @ r9 = _offset1 (52 = (9+1+3)*4)
|
||||
MOV r6,r6,LSL #1 @ r6 = code<<1
|
||||
LDRSH r8,[r8,r6] @ tmp2 = _table[code]
|
||||
level3codeFC:
|
||||
@ EQ => FC
|
||||
LDREQ r9,[r13,#(9+1+4)*4] @ r9 = _offset2
|
||||
LDREQ r9,[r13,#56] @ r9 = _offset2 (56 = (9+1+4)*4)
|
||||
MOVEQ r8,#0
|
||||
ADD r9,r9,r0 @ tmp2 = _d_dst+offset
|
||||
ADD r8,r8,r9 @ tmp2 = _d_dst+_table[code]+_offset
|
||||
|
|
|
@ -129,6 +129,14 @@ SimpleRateConverter<stereo, reverseStereo>::SimpleRateConverter(st_rate_t inrate
|
|||
sr.inLen = 0;
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
#ifndef IPHONE
|
||||
#define ARM_SimpleRate_M _ARM_SimpleRate_M
|
||||
#define ARM_SimpleRate_S _ARM_SimpleRate_S
|
||||
#define ARM_SimpleRate_R _ARM_SimpleRate_R
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void ARM_SimpleRate_M(AudioStream &input,
|
||||
int (*fn)(Audio::AudioStream&,int16*,int),
|
||||
SimpleRateDetails *sr,
|
||||
|
@ -220,6 +228,14 @@ typedef struct {
|
|||
st_sample_t inBuf[INTERMEDIATE_BUFFER_SIZE];
|
||||
} LinearRateDetails;
|
||||
|
||||
extern "C" {
|
||||
#ifndef IPHONE
|
||||
#define ARM_LinearRate_M _ARM_LinearRate_M
|
||||
#define ARM_LinearRate_S _ARM_LinearRate_S
|
||||
#define ARM_LinearRate_R _ARM_LinearRate_R
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void ARM_LinearRate_M(AudioStream &input,
|
||||
int (*fn)(Audio::AudioStream&,int16*,int),
|
||||
LinearRateDetails *lr,
|
||||
|
@ -323,6 +339,14 @@ fflush(stderr);
|
|||
/**
|
||||
* Simple audio rate converter for the case that the inrate equals the outrate.
|
||||
*/
|
||||
extern "C" {
|
||||
#ifndef IPHONE
|
||||
#define ARM_CopyRate_M _ARM_CopyRate_M
|
||||
#define ARM_CopyRate_S _ARM_CopyRate_S
|
||||
#define ARM_CopyRate_R _ARM_CopyRate_R
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void ARM_CopyRate_M(st_size_t len,
|
||||
st_sample_t *obuf,
|
||||
st_volume_t vol_l,
|
||||
|
@ -359,7 +383,6 @@ public:
|
|||
fprintf(stderr, "Copy st=%d rev=%d\n", stereo, reverseStereo);
|
||||
fflush(stderr);
|
||||
#endif
|
||||
st_sample_t *ptr;
|
||||
st_size_t len;
|
||||
|
||||
if (stereo)
|
||||
|
|
|
@ -29,17 +29,17 @@
|
|||
|
||||
.text
|
||||
|
||||
.global ARM_CopyRate_M
|
||||
.global ARM_CopyRate_S
|
||||
.global ARM_CopyRate_R
|
||||
.global ARM_SimpleRate_M
|
||||
.global ARM_SimpleRate_S
|
||||
.global ARM_SimpleRate_R
|
||||
.global ARM_LinearRate_M
|
||||
.global ARM_LinearRate_S
|
||||
.global ARM_LinearRate_R
|
||||
.global _ARM_CopyRate_M
|
||||
.global _ARM_CopyRate_S
|
||||
.global _ARM_CopyRate_R
|
||||
.global _ARM_SimpleRate_M
|
||||
.global _ARM_SimpleRate_S
|
||||
.global _ARM_SimpleRate_R
|
||||
.global _ARM_LinearRate_M
|
||||
.global _ARM_LinearRate_S
|
||||
.global _ARM_LinearRate_R
|
||||
|
||||
ARM_CopyRate_M:
|
||||
_ARM_CopyRate_M:
|
||||
@ r0 = len
|
||||
@ r1 = obuf
|
||||
@ r2 = vol_l
|
||||
|
@ -59,9 +59,9 @@ CopyRate_M_loop:
|
|||
MUL r5, r3, r5 @ r5 = tmp1*vol_r
|
||||
|
||||
ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
|
||||
RSCVS r6, r14,#1<<31 @ Clamp r6
|
||||
RSCVS r6, r14,#0x80000000 @ Clamp r6
|
||||
ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
|
||||
RSCVS r7, r14,#1<<31 @ Clamp r7
|
||||
RSCVS r7, r14,#0x80000000 @ Clamp r7
|
||||
|
||||
MOV r6, r6, LSR #16 @ Shift back to halfword
|
||||
MOV r7, r7, LSR #16 @ Shift back to halfword
|
||||
|
@ -74,7 +74,7 @@ CopyRate_M_loop:
|
|||
|
||||
LDMFD r13!,{r4-r7,PC}
|
||||
|
||||
ARM_CopyRate_S:
|
||||
_ARM_CopyRate_S:
|
||||
@ r0 = len
|
||||
@ r1 = obuf
|
||||
@ r2 = vol_l
|
||||
|
@ -95,9 +95,9 @@ CopyRate_S_loop:
|
|||
MUL r5, r3, r5 @ r6 = tmp1*vol_r
|
||||
|
||||
ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
|
||||
RSCVS r6, r14,#1<<31 @ Clamp r6
|
||||
RSCVS r6, r14,#0x80000000 @ Clamp r6
|
||||
ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
|
||||
RSCVS r7, r14,#1<<31 @ Clamp r7
|
||||
RSCVS r7, r14,#0x80000000 @ Clamp r7
|
||||
|
||||
MOV r6, r6, LSR #16 @ Shift back to halfword
|
||||
MOV r7, r7, LSR #16 @ Shift back to halfword
|
||||
|
@ -110,7 +110,7 @@ CopyRate_S_loop:
|
|||
|
||||
LDMFD r13!,{r4-r7,PC}
|
||||
|
||||
ARM_CopyRate_R:
|
||||
_ARM_CopyRate_R:
|
||||
@ r0 = len
|
||||
@ r1 = obuf
|
||||
@ r2 = vol_l
|
||||
|
@ -131,9 +131,9 @@ CopyRate_R_loop:
|
|||
MUL r5, r3, r5 @ r5 = tmp1*vol_r
|
||||
|
||||
ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
|
||||
RSCVS r6, r14,#1<<31 @ Clamp r6
|
||||
RSCVS r6, r14,#0x80000000 @ Clamp r6
|
||||
ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
|
||||
RSCVS r7, r14,#1<<31 @ Clamp r7
|
||||
RSCVS r7, r14,#0x80000000 @ Clamp r7
|
||||
|
||||
MOV r6, r6, LSR #16 @ Shift back to halfword
|
||||
MOV r7, r7, LSR #16 @ Shift back to halfword
|
||||
|
@ -146,7 +146,7 @@ CopyRate_R_loop:
|
|||
|
||||
LDMFD r13!,{r4-r7,PC}
|
||||
|
||||
ARM_SimpleRate_M:
|
||||
_ARM_SimpleRate_M:
|
||||
@ r0 = AudioStream &input
|
||||
@ r1 = input.readBuffer
|
||||
@ r2 = input->sr
|
||||
|
@ -183,9 +183,9 @@ SimpleRate_M_read_return:
|
|||
MUL r5, r14,r5 @ r5 = tmp1*vol_r
|
||||
|
||||
ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
|
||||
RSCVS r6, r10,#1<<31 @ Clamp r6
|
||||
RSCVS r6, r10,#0x80000000 @ Clamp r6
|
||||
ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
|
||||
RSCVS r7, r10,#1<<31 @ Clamp r7
|
||||
RSCVS r7, r10,#0x80000000 @ Clamp r7
|
||||
|
||||
MOV r6, r6, LSR #16 @ Shift back to halfword
|
||||
MOV r7, r7, LSR #16 @ Shift back to halfword
|
||||
|
@ -201,7 +201,7 @@ SimpleRate_M_end:
|
|||
STMIA r14,{r0,r1,r2} @ Store back updated values
|
||||
LDMFD r13!,{r4-r8,r10-r11,PC}
|
||||
SimpleRate_M_read:
|
||||
LDR r0, [r13,#4*2] @ r0 = sr
|
||||
LDR r0, [r13,#8] @ r0 = sr (8 = 4*2)
|
||||
ADD r0, r0, #16 @ r0 = inPtr = inBuf
|
||||
.ifdef PALMOS_MODE
|
||||
LDR r10,[r13,#4*8] @ restore r10
|
||||
|
@ -209,14 +209,14 @@ SimpleRate_M_read:
|
|||
STMFD r13!,{r0,r2-r3,r12,r14}
|
||||
|
||||
MOV r1, r0 @ r1 = inBuf
|
||||
LDR r0, [r13,#4*5] @ r0 = AudioStream & input
|
||||
LDR r0, [r13,#20] @ r0 = AudioStream & input (20 = 4*5)
|
||||
MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
|
||||
|
||||
@ Calling back into C++ here. WinCE is fairly easy about such things
|
||||
@ but other OS are more awkward. r9 is preserved for Symbian, and
|
||||
@ we have 3+8+5 = 16 things on the stack (an even number).
|
||||
MOV r14,PC
|
||||
LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
|
||||
LDR PC,[r13,#24] @ inLen = input.readBuffer(inBuf,512) (24 = 4*6)
|
||||
SUBS r1, r0, #1 @ r1 = inLen-1
|
||||
LDMFD r13!,{r0,r2-r3,r12,r14}
|
||||
BLT SimpleRate_M_end
|
||||
|
@ -229,7 +229,7 @@ SimpleRate_M_read:
|
|||
B SimpleRate_M_read_return
|
||||
|
||||
|
||||
ARM_SimpleRate_S:
|
||||
_ARM_SimpleRate_S:
|
||||
@ r0 = AudioStream &input
|
||||
@ r1 = input.readBuffer
|
||||
@ r2 = input->sr
|
||||
|
@ -267,9 +267,9 @@ SimpleRate_S_read_return:
|
|||
MUL r5, r14,r5 @ r6 = tmp1*vol_r
|
||||
|
||||
ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
|
||||
RSCVS r6, r10,#1<<31 @ Clamp r6
|
||||
RSCVS r6, r10,#0x80000000 @ Clamp r6
|
||||
ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
|
||||
RSCVS r7, r10,#1<<31 @ Clamp r7
|
||||
RSCVS r7, r10,#0x80000000 @ Clamp r7
|
||||
|
||||
MOV r6, r6, LSR #16 @ Shift back to halfword
|
||||
MOV r7, r7, LSR #16 @ Shift back to halfword
|
||||
|
@ -285,21 +285,21 @@ SimpleRate_S_end:
|
|||
STMIA r14,{r0,r1,r2} @ store back updated values
|
||||
LDMFD r13!,{r4-r8,r10-r11,PC}
|
||||
SimpleRate_S_read:
|
||||
LDR r0, [r13,#4*2] @ r0 = sr
|
||||
LDR r0, [r13,#8] @ r0 = sr (8 = 4*2)
|
||||
ADD r0, r0, #16 @ r0 = inPtr = inBuf
|
||||
.ifdef PALMOS_MODE
|
||||
LDR r10,[r13,#4*8] @ restore r10
|
||||
.endif
|
||||
STMFD r13!,{r0,r2-r3,r12,r14}
|
||||
MOV r1, r0 @ r1 = inBuf
|
||||
LDR r0, [r13,#4*5] @ r0 = AudioStream & input
|
||||
LDR r0, [r13,#20] @ r0 = AudioStream & input (20 = 4*5)
|
||||
MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
|
||||
|
||||
@ Calling back into C++ here. WinCE is fairly easy about such things
|
||||
@ but other OS are more awkward. r9 is preserved for Symbian, and
|
||||
@ we have 3+8+5 = 16 things on the stack (an even number).
|
||||
MOV r14,PC
|
||||
LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
|
||||
LDR PC,[r13,#24] @ inLen = input.readBuffer(inBuf,512) (24 = 4*6)
|
||||
SUBS r1, r0, #2 @ r1 = inLen-2
|
||||
LDMFD r13!,{r0,r2-r3,r12,r14}
|
||||
BLT SimpleRate_S_end
|
||||
|
@ -313,7 +313,7 @@ SimpleRate_S_read:
|
|||
|
||||
|
||||
|
||||
ARM_SimpleRate_R:
|
||||
_ARM_SimpleRate_R:
|
||||
@ r0 = AudioStream &input
|
||||
@ r1 = input.readBuffer
|
||||
@ r2 = input->sr
|
||||
|
@ -351,9 +351,9 @@ SimpleRate_R_read_return:
|
|||
MUL r5, r14,r5 @ r6 = tmp1*vol_r
|
||||
|
||||
ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
|
||||
RSCVS r6, r10,#1<<31 @ Clamp r6
|
||||
RSCVS r6, r10,#0x80000000 @ Clamp r6
|
||||
ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
|
||||
RSCVS r7, r10,#1<<31 @ Clamp r7
|
||||
RSCVS r7, r10,#0x80000000 @ Clamp r7
|
||||
|
||||
MOV r6, r6, LSR #16 @ Shift back to halfword
|
||||
MOV r7, r7, LSR #16 @ Shift back to halfword
|
||||
|
@ -369,7 +369,7 @@ SimpleRate_R_end:
|
|||
STMIA r14,{r0,r1,r2} @ Store back updated values
|
||||
LDMFD r13!,{r4-r8,r10-r11,PC}
|
||||
SimpleRate_R_read:
|
||||
LDR r0, [r13,#4*2] @ r0 = sr
|
||||
LDR r0, [r13,#8] @ r0 = sr (8 = 4*2)
|
||||
ADD r0, r0, #16 @ r0 = inPtr = inBuf
|
||||
.ifdef PALMOS_MODE
|
||||
LDR r10,[r13,#4*8] @ restore r10
|
||||
|
@ -377,14 +377,14 @@ SimpleRate_R_read:
|
|||
STMFD r13!,{r0,r2-r3,r12,r14}
|
||||
|
||||
MOV r1, r0 @ r1 = inBuf
|
||||
LDR r0, [r13,#4*5] @ r0 = AudioStream & input
|
||||
LDR r0, [r13,#20] @ r0 = AudioStream & input (20 = 4*5)
|
||||
MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
|
||||
|
||||
@ Calling back into C++ here. WinCE is fairly easy about such things
|
||||
@ but other OS are more awkward. r9 is preserved for Symbian, and
|
||||
@ we have 3+8+5 = 16 things on the stack (an even number).
|
||||
MOV r14,PC
|
||||
LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
|
||||
LDR PC,[r13,#24] @ inLen = input.readBuffer(inBuf,512) (24 = 4*6)
|
||||
SUBS r1, r0, #2 @ r1 = inLen-2
|
||||
LDMFD r13!,{r0,r2-r3,r12,r14}
|
||||
BLT SimpleRate_R_end
|
||||
|
@ -397,7 +397,7 @@ SimpleRate_R_read:
|
|||
B SimpleRate_R_read_return
|
||||
|
||||
|
||||
ARM_LinearRate_M:
|
||||
_ARM_LinearRate_M:
|
||||
@ r0 = AudioStream &input
|
||||
@ r1 = input.readBuffer
|
||||
@ r2 = input->sr
|
||||
|
@ -450,9 +450,9 @@ LinearRate_M_part2:
|
|||
MUL r6, r14,r6 @ r6 = tmp1*vol_r
|
||||
|
||||
ADDS r7, r7, r4, LSL #16 @ r7 = obuf[0]<<16 + tmp0*vol_l
|
||||
RSCVS r7, r10, #1<<31 @ Clamp r7
|
||||
RSCVS r7, r10, #0x80000000 @ Clamp r7
|
||||
ADDS r6, r6, r5, LSL #16 @ r6 = obuf[1]<<16 + tmp1*vol_r
|
||||
RSCVS r6, r10, #1<<31 @ Clamp r6
|
||||
RSCVS r6, r10, #0x80000000 @ Clamp r6
|
||||
|
||||
MOV r7, r7, LSR #16 @ Shift back to halfword
|
||||
MOV r6, r6, LSR #16 @ Shift back to halfword
|
||||
|
@ -478,14 +478,14 @@ LinearRate_M_read:
|
|||
STMFD r13!,{r0,r2-r3,r12,r14}
|
||||
|
||||
MOV r1, r0 @ r1 = inBuf
|
||||
LDR r0, [r13,#4*5] @ r0 = AudioStream & input
|
||||
LDR r0, [r13,#20] @ r0 = AudioStream & input (20 = 4*5)
|
||||
MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
|
||||
|
||||
@ Calling back into C++ here. WinCE is fairly easy about such things
|
||||
@ but other OS are more awkward. r9 is preserved for Symbian, and
|
||||
@ we have 2+9+5 = 16 things on the stack (an even number).
|
||||
MOV r14,PC
|
||||
LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
|
||||
LDR PC,[r13,#24] @ inLen = input.readBuffer(inBuf,512) (24 = 4*6)
|
||||
SUBS r1, r0, #1 @ r1 = inLen-1
|
||||
LDMFD r13!,{r0,r2-r3,r12,r14}
|
||||
BLT LinearRate_M_end
|
||||
|
@ -494,7 +494,7 @@ LinearRate_M_read:
|
|||
.endif
|
||||
B LinearRate_M_read_return
|
||||
|
||||
ARM_LinearRate_S:
|
||||
_ARM_LinearRate_S:
|
||||
@ r0 = AudioStream &input
|
||||
@ r1 = input.readBuffer
|
||||
@ r2 = input->sr
|
||||
|
@ -557,9 +557,9 @@ LinearRate_S_part2:
|
|||
|
||||
ADDS r7, r7, r10, LSL #16 @ r7 = obuf[0]<<16 + tmp0*vol_l
|
||||
MOV r4, #0
|
||||
RSCVS r7, r4, #1<<31 @ Clamp r7
|
||||
RSCVS r7, r4, #0x80000000 @ Clamp r7
|
||||
ADDS r6, r6, r5, LSL #16 @ r6 = obuf[1]<<16 + tmp1*vol_r
|
||||
RSCVS r6, r4, #1<<31 @ Clamp r6
|
||||
RSCVS r6, r4, #0x80000000 @ Clamp r6
|
||||
|
||||
MOV r7, r7, LSR #16 @ Shift back to halfword
|
||||
MOV r6, r6, LSR #16 @ Shift back to halfword
|
||||
|
@ -585,20 +585,20 @@ LinearRate_S_read:
|
|||
STMFD r13!,{r0,r2-r3,r12,r14}
|
||||
|
||||
MOV r1, r0 @ r1 = inBuf
|
||||
LDR r0, [r13,#4*5] @ r0 = AudioStream & input
|
||||
LDR r0, [r13,#20] @ r0 = AudioStream & input (20 = 4*5)
|
||||
MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
|
||||
|
||||
@ Calling back into C++ here. WinCE is fairly easy about such things
|
||||
@ but other OS are more awkward. r9 is preserved for Symbian, and
|
||||
@ we have 2+9+5 = 16 things on the stack (an even number).
|
||||
MOV r14,PC
|
||||
LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
|
||||
LDR PC,[r13,#24] @ inLen = input.readBuffer(inBuf,512) (24 = 4*6)
|
||||
SUBS r1, r0, #2 @ r1 = inLen-2
|
||||
LDMFD r13!,{r0,r2-r3,r12,r14}
|
||||
BLT LinearRate_S_end
|
||||
B LinearRate_S_read_return
|
||||
|
||||
ARM_LinearRate_R:
|
||||
_ARM_LinearRate_R:
|
||||
@ r0 = AudioStream &input
|
||||
@ r1 = input.readBuffer
|
||||
@ r2 = input->sr
|
||||
|
@ -661,9 +661,9 @@ LinearRate_R_part2:
|
|||
|
||||
ADDS r7, r7, r10, LSL #16 @ r7 = obuf[0]<<16 + tmp0*vol_l
|
||||
MOV r4, #0
|
||||
RSCVS r7, r4, #1<<31 @ Clamp r7
|
||||
RSCVS r7, r4, #0x80000000 @ Clamp r7
|
||||
ADDS r6, r6, r5, LSL #16 @ r6 = obuf[1]<<16 + tmp1*vol_r
|
||||
RSCVS r6, r4, #1<<31 @ Clamp r6
|
||||
RSCVS r6, r4, #0x80000000 @ Clamp r6
|
||||
|
||||
MOV r7, r7, LSR #16 @ Shift back to halfword
|
||||
MOV r6, r6, LSR #16 @ Shift back to halfword
|
||||
|
@ -689,14 +689,14 @@ LinearRate_R_read:
|
|||
STMFD r13!,{r0,r2-r3,r12,r14}
|
||||
|
||||
MOV r1, r0 @ r1 = inBuf
|
||||
LDR r0, [r13,#4*5] @ r0 = AudioStream & input
|
||||
LDR r0, [r13,#20] @ r0 = AudioStream & input (20 = 4*5)
|
||||
MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
|
||||
|
||||
@ Calling back into C++ here. WinCE is fairly easy about such things
|
||||
@ but other OS are more awkward. r9 is preserved for Symbian, and
|
||||
@ we have 2+9+5 = 16 things on the stack (an even number).
|
||||
MOV r14,PC
|
||||
LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
|
||||
LDR PC,[r13,#24] @ inLen = input.readBuffer(inBuf,512) (24 = 4*6)
|
||||
SUBS r1, r0, #2 @ r1 = inLen-2
|
||||
LDMFD r13!,{r0,r2-r3,r12,r14}
|
||||
BLT LinearRate_R_end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue