diff options
-rwxr-xr-x | configure | 4 | ||||
-rw-r--r-- | engines/scumm/smush/codec47.cpp | 6 | ||||
-rw-r--r-- | engines/scumm/smush/codec47ARM.s | 36 | ||||
-rw-r--r-- | sound/rate_arm.cpp | 25 | ||||
-rw-r--r-- | sound/rate_arm_asm.s | 104 |
5 files changed, 103 insertions, 72 deletions
@@ -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" diff --git a/engines/scumm/smush/codec47.cpp b/engines/scumm/smush/codec47.cpp index 0ad3815b1e..d4ff77b1f9 100644 --- a/engines/scumm/smush/codec47.cpp +++ b/engines/scumm/smush/codec47.cpp @@ -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, diff --git a/engines/scumm/smush/codec47ARM.s b/engines/scumm/smush/codec47ARM.s index d96049a32c..dd4377bff6 100644 --- a/engines/scumm/smush/codec47ARM.s +++ b/engines/scumm/smush/codec47ARM.s @@ -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 diff --git a/sound/rate_arm.cpp b/sound/rate_arm.cpp index 0935b95ebd..bf72d4e00e 100644 --- a/sound/rate_arm.cpp +++ b/sound/rate_arm.cpp @@ -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) diff --git a/sound/rate_arm_asm.s b/sound/rate_arm_asm.s index 6ec519f922..9731434e8e 100644 --- a/sound/rate_arm_asm.s +++ b/sound/rate_arm_asm.s @@ -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 - -ARM_CopyRate_M: + .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: @ 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 |