aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xconfigure4
-rw-r--r--engines/scumm/smush/codec47.cpp6
-rw-r--r--engines/scumm/smush/codec47ARM.s36
-rw-r--r--sound/rate_arm.cpp25
-rw-r--r--sound/rate_arm_asm.s104
5 files changed, 103 insertions, 72 deletions
diff --git a/configure b/configure
index 16aa38c817..8dd062f69e 100755
--- a/configure
+++ b/configure
@@ -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