aboutsummaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
Diffstat (limited to 'sound')
-rw-r--r--sound/rate_arm.cpp25
-rw-r--r--sound/rate_arm_asm.s104
2 files changed, 76 insertions, 53 deletions
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