[Scummvm-git-logs] scummvm master -> 99e5de932e1842f1ac48e49f0f7d0a717b58ed8b
bluegr
bluegr at gmail.com
Mon May 3 22:16:44 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
99e5de932e AUDIO: Remove the broken ARM audio rate converter
Commit: 99e5de932e1842f1ac48e49f0f7d0a717b58ed8b
https://github.com/scummvm/scummvm/commit/99e5de932e1842f1ac48e49f0f7d0a717b58ed8b
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2021-05-04T01:16:14+03:00
Commit Message:
AUDIO: Remove the broken ARM audio rate converter
This code has been broken and unmaintained for at least 7 years now,
and had been disabled. This also removes the associated define
USE_ARM_SOUND_ASM
Changed paths:
R audio/rate_arm.cpp
R audio/rate_arm_asm.s
audio/module.mk
backends/platform/symbian/AdaptAllMMPs.pl
backends/platform/symbian/S60v3/scummvm_base.mmp
backends/platform/symbian/src/portdefs.h
backends/platform/symbian/symbian_builder/common_names.py
backends/platform/symbian/symbian_builder/parse_codecs.py
configure
diff --git a/audio/module.mk b/audio/module.mk
index 4b795bc786..d79a0cd246 100644
--- a/audio/module.mk
+++ b/audio/module.mk
@@ -17,6 +17,7 @@ MODULE_OBJS := \
mt32gm.o \
musicplugin.o \
null.o \
+ rate.o \
timestamp.o \
decoders/3do.o \
decoders/aac.o \
@@ -96,14 +97,5 @@ MODULE_OBJS += \
opl2lpt.o
endif
-ifndef USE_ARM_SOUND_ASM
-MODULE_OBJS += \
- rate.o
-else
-MODULE_OBJS += \
- rate_arm.o \
- rate_arm_asm.o
-endif
-
# Include common rules
include $(srcdir)/rules.mk
diff --git a/audio/rate_arm.cpp b/audio/rate_arm.cpp
deleted file mode 100644
index 7765266673..0000000000
--- a/audio/rate_arm.cpp
+++ /dev/null
@@ -1,480 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-/*
- * The code in this file, together with the rate_arm_asm.s file offers
- * an ARM optimised version of the code in rate.cpp. The operation of this
- * code should be identical to that of rate.cpp, but faster. The heavy
- * lifting is done in the assembler file.
- *
- * To be as portable as possible we implement the core routines with C
- * linkage in assembly, and implement the C++ routines that call into
- * the C here. The C++ symbol mangling varies wildly between compilers,
- * so this is the simplest way to ensure that the C/C++ combination should
- * work on as many ARM based platforms as possible.
- *
- * Essentially the algorithm herein is the same as that in rate.cpp, so
- * anyone seeking to understand this should attempt to understand that
- * first. That code was based in turn on code with Copyright 1998 Fabrice
- * Bellard - part of SoX (http://sox.sourceforge.net).
- * Max Horn adapted that code to the needs of ScummVM and partially rewrote
- * it, in the process removing any use of floating point arithmetic. Various
- * other improvments over the original code were made.
- */
-
-#include "audio/audiostream.h"
-#include "audio/rate.h"
-#include "audio/mixer.h"
-#include "common/util.h"
-#include "common/textconsole.h"
-
-//#define DEBUG_RATECONV
-
-namespace Audio {
-
-/**
- * The precision of the fractional computations used by the rate converter.
- * Normally you should never have to modify this value.
- * This stuff is defined in common/frac.h, but we redefine it here as the
- * ARM routine we call doesn't respect those definitions.
- */
-#define FRAC_BITS 16
-#define FRAC_ONE (1 << FRAC_BITS)
-
-/**
- * The size of the intermediate input cache. Bigger values may increase
- * performance, but only until some point (depends largely on cache size,
- * target processor and various other factors), at which it will decrease
- * again.
- */
-#define INTERMEDIATE_BUFFER_SIZE 512
-
-/**
- * The default fractional type in frac.h (with 16 fractional bits) limits
- * the rate conversion code to 65536Hz audio: we need to able to handle
- * 96kHz audio, so we use fewer fractional bits in this code.
- */
-enum {
- FRAC_BITS_LOW = 15,
- FRAC_ONE_LOW = (1L << FRAC_BITS_LOW),
- FRAC_HALF_LOW = (1L << (FRAC_BITS_LOW-1))
-};
-
-/**
- * Audio rate converter based on simple resampling. Used when no
- * interpolation is required.
- *
- * Limited to sampling frequency <= 65535 Hz.
- */
-typedef struct {
- const st_sample_t *inPtr;
- int inLen;
-
- /** position of how far output is ahead of input */
- /** Holds what would have been opos-ipos */
- long opos;
-
- /** fractional position increment in the output stream */
- long opos_inc;
-
- st_sample_t inBuf[INTERMEDIATE_BUFFER_SIZE];
-} SimpleRateDetails;
-
-template<bool stereo, bool reverseStereo>
-class SimpleRateConverter : public RateConverter {
-protected:
- SimpleRateDetails sr;
-public:
- SimpleRateConverter(st_rate_t inrate, st_rate_t outrate);
- int flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r);
- int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
- return (ST_SUCCESS);
- }
-};
-
-
-/*
- * Prepare processing.
- */
-template<bool stereo, bool reverseStereo>
-SimpleRateConverter<stereo, reverseStereo>::SimpleRateConverter(st_rate_t inrate, st_rate_t outrate) {
- if (inrate == outrate) {
- error("Input and Output rates must be different to use rate effect");
- }
-
- if ((inrate % outrate) != 0) {
- error("Input rate must be a multiple of Output rate to use rate effect");
- }
-
- if (inrate >= 65536 || outrate >= 65536) {
- error("rate effect can only handle rates < 65536");
- }
-
- sr.opos = 1;
-
- /* increment */
- sr.opos_inc = inrate / outrate;
-
- sr.inLen = 0;
-}
-
-#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" st_sample_t *ARM_SimpleRate_M(
- AudioStream &input,
- int (*fn)(Audio::AudioStream&,int16*,int),
- SimpleRateDetails *sr,
- st_sample_t *obuf,
- st_size_t osamp,
- st_volume_t vol_l,
- st_volume_t vol_r);
-
-extern "C" st_sample_t *ARM_SimpleRate_S(
- AudioStream &input,
- int (*fn)(Audio::AudioStream&,int16*,int),
- SimpleRateDetails *sr,
- st_sample_t *obuf,
- st_size_t osamp,
- st_volume_t vol_l,
- st_volume_t vol_r);
-
-extern "C" st_sample_t *ARM_SimpleRate_R(
- AudioStream &input,
- int (*fn)(Audio::AudioStream&,int16*,int),
- SimpleRateDetails *sr,
- st_sample_t *obuf,
- st_size_t osamp,
- st_volume_t vol_l,
- st_volume_t vol_r);
-
-extern "C" int SimpleRate_readFudge(Audio::AudioStream &input, int16 *a, int b)
-{
-#ifdef DEBUG_RATECONV
- debug("Reading ptr=%x n%d", a, b);
-#endif
- return input.readBuffer(a, b);
-}
-
-template<bool stereo, bool reverseStereo>
-int SimpleRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r) {
-
-#ifdef DEBUG_RATECONV
- debug("Simple st=%d rev=%d", stereo, reverseStereo);
-#endif
- st_sample_t *ostart = obuf;
-
- if (!stereo) {
- obuf = ARM_SimpleRate_M(input,
- &SimpleRate_readFudge,
- &sr,
- obuf, osamp, vol_l, vol_r);
- } else if (reverseStereo) {
- obuf = ARM_SimpleRate_R(input,
- &SimpleRate_readFudge,
- &sr,
- obuf, osamp, vol_l, vol_r);
- } else {
- obuf = ARM_SimpleRate_S(input,
- &SimpleRate_readFudge,
- &sr,
- obuf, osamp, vol_l, vol_r);
- }
-
- return (obuf - ostart) / 2;
-}
-
-/**
- * Audio rate converter based on simple linear Interpolation.
- *
- * The use of fractional increment allows us to use no buffer. It
- * avoid the problems at the end of the buffer we had with the old
- * method which stored a possibly big buffer of size
- * lcm(in_rate,out_rate).
- *
- * Limited to sampling frequency <= 65535 Hz.
- */
-
-typedef struct {
- const st_sample_t *inPtr;
- int inLen;
-
- /** position of how far output is ahead of input */
- /** Holds what would have been opos-ipos<<16 + opos_frac */
- long opos;
-
- /** integer position increment in the output stream */
- long opos_inc;
-
- /** current sample(s) in the input stream (left/right channel) */
- st_sample_t icur[2];
- /** last sample(s) in the input stream (left/right channel) */
- /** Note, these are deliberately ints, not st_sample_t's */
- int32 ilast[2];
-
- 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" st_sample_t *ARM_LinearRate_M(
- AudioStream &input,
- int (*fn)(Audio::AudioStream&,int16*,int),
- LinearRateDetails *lr,
- st_sample_t *obuf,
- st_size_t osamp,
- st_volume_t vol_l,
- st_volume_t vol_r);
-
-extern "C" st_sample_t *ARM_LinearRate_S(
- AudioStream &input,
- int (*fn)(Audio::AudioStream&,int16*,int),
- LinearRateDetails *lr,
- st_sample_t *obuf,
- st_size_t osamp,
- st_volume_t vol_l,
- st_volume_t vol_r);
-
-extern "C" st_sample_t *ARM_LinearRate_R(
- AudioStream &input,
- int (*fn)(Audio::AudioStream&,int16*,int),
- LinearRateDetails *lr,
- st_sample_t *obuf,
- st_size_t osamp,
- st_volume_t vol_l,
- st_volume_t vol_r);
-
-template<bool stereo, bool reverseStereo>
-class LinearRateConverter : public RateConverter {
-protected:
- LinearRateDetails lr;
-
-public:
- LinearRateConverter(st_rate_t inrate, st_rate_t outrate);
- int flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r);
- int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
- return (ST_SUCCESS);
- }
-};
-
-
-/*
- * Prepare processing.
- */
-template<bool stereo, bool reverseStereo>
-LinearRateConverter<stereo, reverseStereo>::LinearRateConverter(st_rate_t inrate, st_rate_t outrate) {
- unsigned long incr;
-
- if (inrate == outrate) {
- error("Input and Output rates must be different to use rate effect");
- }
-
- if (inrate >= 131072 || outrate >= 131072) {
- error("rate effect can only handle rates < 131072");
- }
-
- lr.opos = FRAC_ONE_LOW;
-
- /* increment */
- incr = (inrate << FRAC_BITS_LOW) / outrate;
-
- lr.opos_inc = incr;
-
- // FIXME: Does 32768 here need changing to 65536 or 0? Compare to rate.cpp code...
- lr.ilast[0] = lr.ilast[1] = 32768;
- lr.icur[0] = lr.icur[1] = 0;
-
- lr.inLen = 0;
-}
-
-/*
- * Processed signed long samples from ibuf to obuf.
- * Return number of sample pairs processed.
- */
-template<bool stereo, bool reverseStereo>
-int LinearRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r) {
-
-#ifdef DEBUG_RATECONV
- debug("Linear st=%d rev=%d", stereo, reverseStereo);
-#endif
- st_sample_t *ostart = obuf;
-
- if (vol_l > 0xff)
- vol_l = 0xff;
-
- if (vol_r > 0xff)
- vol_r = 0xff;
-
- if (!stereo) {
- obuf = ARM_LinearRate_M(input,
- &SimpleRate_readFudge,
- &lr,
- obuf, osamp, vol_l, vol_r);
- } else if (reverseStereo) {
- obuf = ARM_LinearRate_R(input,
- &SimpleRate_readFudge,
- &lr,
- obuf, osamp, vol_l, vol_r);
- } else {
- obuf = ARM_LinearRate_S(input,
- &SimpleRate_readFudge,
- &lr,
- obuf, osamp, vol_l, vol_r);
- }
- return (obuf - ostart) / 2;
-}
-
-
-#pragma mark -
-
-
-/**
- * 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" st_sample_t *ARM_CopyRate_M(
- st_size_t len,
- st_sample_t *obuf,
- st_volume_t vol_l,
- st_volume_t vol_r,
- st_sample_t *_buffer);
-
-extern "C" st_sample_t *ARM_CopyRate_S(
- st_size_t len,
- st_sample_t *obuf,
- st_volume_t vol_l,
- st_volume_t vol_r,
- st_sample_t *_buffer);
-
-extern "C" st_sample_t *ARM_CopyRate_R(
- st_size_t len,
- st_sample_t *obuf,
- st_volume_t vol_l,
- st_volume_t vol_r,
- st_sample_t *_buffer);
-
-
-template<bool stereo, bool reverseStereo>
-class CopyRateConverter : public RateConverter {
- st_sample_t *_buffer;
- st_size_t _bufferSize;
-
-public:
- CopyRateConverter() : _buffer(0), _bufferSize(0) {}
- ~CopyRateConverter() {
- free(_buffer);
- }
-
- virtual int flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r) {
- assert(input.isStereo() == stereo);
-
-#ifdef DEBUG_RATECONV
- debug("Copy st=%d rev=%d", stereo, reverseStereo);
-#endif
- st_size_t len;
- st_sample_t *ostart = obuf;
-
- if (stereo)
- osamp *= 2;
-
- // Reallocate temp buffer, if necessary
- if (osamp > _bufferSize) {
- free(_buffer);
- _buffer = (st_sample_t *)malloc(osamp * 2);
- _bufferSize = osamp;
- }
-
- // Read up to 'osamp' samples into our temporary buffer
- len = input.readBuffer(_buffer, osamp);
- if (len <= 0)
- return 0;
-
- // Mix the data into the output buffer
- if (stereo && reverseStereo)
- obuf = ARM_CopyRate_R(len, obuf, vol_l, vol_r, _buffer);
- else if (stereo)
- obuf = ARM_CopyRate_S(len, obuf, vol_l, vol_r, _buffer);
- else
- obuf = ARM_CopyRate_M(len, obuf, vol_l, vol_r, _buffer);
-
- return (obuf - ostart) / 2;
- }
-
- virtual int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
- return (ST_SUCCESS);
- }
-};
-
-
-#pragma mark -
-
-
-/**
- * Create and return a RateConverter object for the specified input and output rates.
- */
-RateConverter *makeRateConverter(st_rate_t inrate, st_rate_t outrate, bool stereo, bool reverseStereo) {
- if (inrate != outrate) {
- if ((inrate % outrate) == 0 && (inrate < 65536)) {
- if (stereo) {
- if (reverseStereo)
- return new SimpleRateConverter<true, true>(inrate, outrate);
- else
- return new SimpleRateConverter<true, false>(inrate, outrate);
- } else
- return new SimpleRateConverter<false, false>(inrate, outrate);
- } else {
- if (stereo) {
- if (reverseStereo)
- return new LinearRateConverter<true, true>(inrate, outrate);
- else
- return new LinearRateConverter<true, false>(inrate, outrate);
- } else
- return new LinearRateConverter<false, false>(inrate, outrate);
- }
- } else {
- if (stereo) {
- if (reverseStereo)
- return new CopyRateConverter<true, true>();
- else
- return new CopyRateConverter<true, false>();
- } else
- return new CopyRateConverter<false, false>();
- }
-}
-
-} // End of namespace Audio
diff --git a/audio/rate_arm_asm.s b/audio/rate_arm_asm.s
deleted file mode 100644
index bb01c614c2..0000000000
--- a/audio/rate_arm_asm.s
+++ /dev/null
@@ -1,692 +0,0 @@
-@ ScummVM - Graphic Adventure Engine
-@
-@ ScummVM is the legal property of its developers, whose names
-@ are too numerous to list here. Please refer to the COPYRIGHT
-@ file distributed with this source distribution.
-@
-@ This program is free software@ you can redistribute it and/or
-@ modify it under the terms of the GNU General Public License
-@ as published by the Free Software Foundation@ either version 2
-@ of the License, or (at your option) any later version.
-@
-@ This program is distributed in the hope that it will be useful,
-@ but WITHOUT ANY WARRANTY@ without even the implied warranty of
-@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-@ GNU General Public License for more details.
-@
-@ You should have received a copy of the GNU General Public License
-@ along with this program@ if not, write to the Free Software
-@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-@
-@ @author Robin Watts (robin at wss.co.uk)
-@
-@ This file, together with rate_arm.cpp, provides an ARM optimised version
-@ of rate.cpp. The algorithm is essentially the same as that within rate.cpp
-@ so to understand this file you should understand rate.cpp first.
-
- .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
-
- .align 2
-_ARM_CopyRate_M:
- @ r0 = len
- @ r1 = obuf
- @ r2 = vol_l
- @ r3 = vol_r
- @ <> = ptr
- LDR r12,[r13]
- STMFD r13!,{r4-r7,r14}
-
- MOV r14,#0 @ r14= 0
- ORR r2, r2, r2, LSL #8 @ r2 = vol_l as 16 bits
- ORR r3, r3, r3, LSL #8 @ r3 = vol_r as 16 bits
-CopyRate_M_loop:
- LDRSH r5, [r12], #2 @ r5 = tmp0 = tmp1 = *ptr++
- LDRSH r6, [r1] @ r6 = obuf[0]
- LDRSH r7, [r1, #2] @ r7 = obuf[1]
- MUL r4, r2, r5 @ r4 = tmp0*vol_l
- MUL r5, r3, r5 @ r5 = tmp1*vol_r
-
- ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
- RSCVS r6, r14,#0x80000000 @ Clamp r6
- ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
- RSCVS r7, r14,#0x80000000 @ Clamp r7
-
- MOV r6, r6, LSR #16 @ Shift back to halfword
- MOV r7, r7, LSR #16 @ Shift back to halfword
-
- STRH r6, [r1], #2 @ Store output value
- STRH r7, [r1], #2 @ Store output value
-
- SUBS r0,r0,#1 @ len--
- BGT CopyRate_M_loop @ and loop
-
- MOV r0, r1 @ return obuf
-
- LDMFD r13!,{r4-r7,PC}
-
- .align 2
-_ARM_CopyRate_S:
- @ r0 = len
- @ r1 = obuf
- @ r2 = vol_l
- @ r3 = vol_r
- @ <> = ptr
- LDR r12,[r13]
- STMFD r13!,{r4-r7,r14}
-
- MOV r14,#0 @ r14= 0
- ORR r2, r2, r2, LSL #8 @ r2 = vol_l as 16 bits
- ORR r3, r3, r3, LSL #8 @ r3 = vol_r as 16 bits
-CopyRate_S_loop:
- LDRSH r4, [r12],#2 @ r4 = tmp0 = *ptr++
- LDRSH r5, [r12],#2 @ r5 = tmp1 = *ptr++
- LDRSH r6, [r1] @ r6 = obuf[0]
- LDRSH r7, [r1,#2] @ r7 = obuf[1]
- MUL r4, r2, r4 @ r4 = tmp0*vol_l
- MUL r5, r3, r5 @ r5 = tmp1*vol_r
-
- ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
- RSCVS r6, r14,#0x80000000 @ Clamp r6
- ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
- RSCVS r7, r14,#0x80000000 @ Clamp r7
-
- MOV r6, r6, LSR #16 @ Shift back to halfword
- MOV r7, r7, LSR #16 @ Shift back to halfword
-
- STRH r6, [r1],#2 @ Store output value
- STRH r7, [r1],#2 @ Store output value
-
- SUBS r0,r0,#2 @ len -= 2
- BGT CopyRate_S_loop @ and loop
-
- MOV r0, r1 @ return obuf
-
- LDMFD r13!,{r4-r7,PC}
-
- .align 2
-_ARM_CopyRate_R:
- @ r0 = len
- @ r1 = obuf
- @ r2 = vol_l
- @ r3 = vol_r
- @ <> = ptr
- LDR r12,[r13]
- STMFD r13!,{r4-r7,r14}
-
- MOV r14,#0 @ r14= 0
- ORR r2, r2, r2, LSL #8 @ r2 = vol_l as 16 bits
- ORR r3, r3, r3, LSL #8 @ r3 = vol_r as 16 bits
-CopyRate_R_loop:
- LDRSH r4, [r12],#2 @ r4 = tmp0 = *ptr++
- LDRSH r5, [r12],#2 @ r5 = tmp1 = *ptr++
- LDRSH r6, [r1] @ r6 = obuf[0]
- LDRSH r7, [r1,#2] @ r7 = obuf[1]
- MUL r4, r2, r4 @ r4 = tmp0*vol_l
- MUL r5, r3, r5 @ r5 = tmp1*vol_r
-
- ADDS r6, r5, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp1*vol_r
- RSCVS r6, r14,#0x80000000 @ Clamp r6
- ADDS r7, r4, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp0*vol_l
- RSCVS r7, r14,#0x80000000 @ Clamp r7
-
- MOV r6, r6, LSR #16 @ Shift back to halfword
- MOV r7, r7, LSR #16 @ Shift back to halfword
-
- STRH r6, [r1],#2 @ Store output value
- STRH r7, [r1],#2 @ Store output value
-
- SUBS r0,r0,#2 @ len -= 2
- BGT CopyRate_R_loop @ and loop
-
- MOV r0, r1 @ return obuf
-
- LDMFD r13!,{r4-r7,PC}
-
- .align 2
-_ARM_SimpleRate_M:
- @ r0 = AudioStream &input
- @ r1 = input.readBuffer
- @ r2 = input->sr
- @ r3 = obuf
- @ <> = osamp
- @ <> = vol_l
- @ <> = vol_r
- MOV r12,r13
- STMFD r13!,{r0-r2,r4-r8,r10-r11,r14}
- LDMFD r12,{r11,r12,r14} @ r11= osamp
- @ r12= vol_l
- @ r14= vol_r
- LDMIA r2,{r0,r1,r2,r8} @ r0 = inPtr
- @ r1 = inLen
- @ r2 = opos
- @ r8 = opos_inc
- CMP r11,#0 @ if (osamp <= 0)
- BLE SimpleRate_M_end @ bale
- MOV r10,#0
- ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
- ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
-SimpleRate_M_loop:
- SUBS r1, r1, #1 @ r1 = inLen -= 1
- BLT SimpleRate_M_read
- SUBS r2, r2, #1 @ r2 = opos--
- ADDGE r0, r0, #2 @ if (r2 >= 0) { sr.inPtr++
- BGE SimpleRate_M_loop @ and loop }
-SimpleRate_M_read_return:
- LDRSH r5, [r0],#2 @ r5 = tmp1 = *inPtr++
- LDRSH r6, [r3] @ r6 = obuf[0]
- LDRSH r7, [r3,#2] @ r7 = obuf[1]
- ADD r2, r2, r8 @ r2 = opos += opos_inc
- MUL r4, r12,r5 @ r4 = tmp0*vol_l
- MUL r5, r14,r5 @ r5 = tmp1*vol_r
-
- ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
- RSCVS r6, r10,#0x80000000 @ Clamp r6
- ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
- RSCVS r7, r10,#0x80000000 @ Clamp r7
-
- MOV r6, r6, LSR #16 @ Shift back to halfword
- MOV r7, r7, LSR #16 @ Shift back to halfword
-
- STRH r6, [r3],#2 @ Store output value
- STRH r7, [r3],#2 @ Store output value
-
- SUBS r11,r11,#1 @ len--
- BGT SimpleRate_M_loop @ and loop
-SimpleRate_M_end:
- LDR r14,[r13,#8] @ r14 = sr
- ADD r13,r13,#12 @ Skip over r0-r2 on stack
- STMIA r14,{r0,r1,r2} @ Store back updated values
-
- MOV r0, r3 @ return obuf
-
- LDMFD r13!,{r4-r8,r10-r11,PC}
-SimpleRate_M_read:
- LDR r0, [r13,#8] @ r0 = sr (8 = 4*2)
- ADD r0, r0, #16 @ r0 = inPtr = inBuf
- STMFD r13!,{r0,r2-r3,r12,r14}
-
- MOV r1, r0 @ r1 = inBuf
- 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,#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
- SUBS r2, r2, #1 @ r2 = opos--
- ADDGE r0, r0, #2 @ if (r2 >= 0) { sr.inPtr++
- BGE SimpleRate_M_loop @ and loop }
- B SimpleRate_M_read_return
-
-
- .align 2
-_ARM_SimpleRate_S:
- @ r0 = AudioStream &input
- @ r1 = input.readBuffer
- @ r2 = input->sr
- @ r3 = obuf
- @ <> = osamp
- @ <> = vol_l
- @ <> = vol_r
- MOV r12,r13
- STMFD r13!,{r0-r2,r4-r8,r10-r11,r14}
- LDMFD r12,{r11,r12,r14} @ r11= osamp
- @ r12= vol_l
- @ r14= vol_r
- LDMIA r2,{r0,r1,r2,r8} @ r0 = inPtr
- @ r1 = inLen
- @ r2 = opos
- @ r8 = opos_inc
- CMP r11,#0 @ if (osamp <= 0)
- BLE SimpleRate_S_end @ bale
- MOV r10,#0
- ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
- ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
-SimpleRate_S_loop:
- SUBS r1, r1, #2 @ r1 = inLen -= 2
- BLT SimpleRate_S_read
- SUBS r2, r2, #1 @ r2 = opos--
- ADDGE r0, r0, #4 @ if (r2 >= 0) { sr.inPtr += 2
- BGE SimpleRate_S_loop @ and loop }
-SimpleRate_S_read_return:
- LDRSH r4, [r0],#2 @ r4 = tmp0 = *inPtr++
- LDRSH r5, [r0],#2 @ r5 = tmp1 = *inPtr++
- LDRSH r6, [r3] @ r6 = obuf[0]
- LDRSH r7, [r3,#2] @ r7 = obuf[1]
- ADD r2, r2, r8 @ r2 = opos += opos_inc
- MUL r4, r12,r4 @ r4 = tmp0*vol_l
- MUL r5, r14,r5 @ r5 = tmp1*vol_r
-
- ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
- RSCVS r6, r10,#0x80000000 @ Clamp r6
- ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
- RSCVS r7, r10,#0x80000000 @ Clamp r7
-
- MOV r6, r6, LSR #16 @ Shift back to halfword
- MOV r7, r7, LSR #16 @ Shift back to halfword
-
- STRH r6, [r3],#2 @ Store output value
- STRH r7, [r3],#2 @ Store output value
-
- SUBS r11,r11,#1 @ osamp--
- BGT SimpleRate_S_loop @ and loop
-SimpleRate_S_end:
- LDR r14,[r13,#8] @ r14 = sr
- ADD r13,r13,#12 @ skip over r0-r2 on stack
- STMIA r14,{r0,r1,r2} @ store back updated values
- MOV r0, r3 @ return obuf
- LDMFD r13!,{r4-r8,r10-r11,PC}
-SimpleRate_S_read:
- LDR r0, [r13,#8] @ r0 = sr (8 = 4*2)
- ADD r0, r0, #16 @ r0 = inPtr = inBuf
- STMFD r13!,{r0,r2-r3,r12,r14}
- MOV r1, r0 @ r1 = inBuf
- 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,#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
- SUBS r2, r2, #1 @ r2 = opos--
- ADDGE r0, r0, #4 @ if (r2 >= 0) { sr.inPtr += 2
- BGE SimpleRate_S_loop @ and loop }
- B SimpleRate_S_read_return
-
-
-
- .align 2
-_ARM_SimpleRate_R:
- @ r0 = AudioStream &input
- @ r1 = input.readBuffer
- @ r2 = input->sr
- @ r3 = obuf
- @ <> = osamp
- @ <> = vol_l
- @ <> = vol_r
- MOV r12,r13
- STMFD r13!,{r0-r2,r4-r8,r10-r11,r14}
- LDMFD r12,{r11,r12,r14} @ r11= osamp
- @ r12= vol_l
- @ r14= vol_r
- LDMIA r2,{r0,r1,r2,r8} @ r0 = inPtr
- @ r1 = inLen
- @ r2 = opos
- @ r8 = opos_inc
- CMP r11,#0 @ if (osamp <= 0)
- BLE SimpleRate_R_end @ bale
- MOV r10,#0
- ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
- ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
-SimpleRate_R_loop:
- SUBS r1, r1, #2 @ r1 = inLen -= 2
- BLT SimpleRate_R_read
- SUBS r2, r2, #1 @ r2 = opos--
- ADDGE r0, r0, #4 @ if (r2 >= 0) { sr.inPtr += 2
- BGE SimpleRate_R_loop @ and loop }
-SimpleRate_R_read_return:
- LDRSH r4, [r0],#2 @ r4 = tmp0 = *inPtr++
- LDRSH r5, [r0],#2 @ r5 = tmp1 = *inPtr++
- LDRSH r6, [r3] @ r6 = obuf[0]
- LDRSH r7, [r3,#2] @ r7 = obuf[1]
- ADD r2, r2, r8 @ r2 = opos += opos_inc
- MUL r4, r12,r4 @ r4 = tmp0*vol_l
- MUL r5, r14,r5 @ r5 = tmp1*vol_r
-
- ADDS r6, r5, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp1*vol_r
- RSCVS r6, r10,#0x80000000 @ Clamp r6
- ADDS r7, r4, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp0*vol_l
- RSCVS r7, r10,#0x80000000 @ Clamp r7
-
- MOV r6, r6, LSR #16 @ Shift back to halfword
- MOV r7, r7, LSR #16 @ Shift back to halfword
-
- STRH r6, [r3],#2 @ Store output value
- STRH r7, [r3],#2 @ Store output value
-
- SUBS r11,r11,#1 @ osamp--
- BGT SimpleRate_R_loop @ and loop
-SimpleRate_R_end:
- LDR r14,[r13,#8] @ r14 = sr
- ADD r13,r13,#12 @ skip over r0-r2 on stack
- STMIA r14,{r0,r1,r2} @ store back updated values
- MOV r0, r3 @ return obuf
- LDMFD r13!,{r4-r8,r10-r11,PC}
-SimpleRate_R_read:
- LDR r0, [r13,#8] @ r0 = sr (8 = 4*2)
- ADD r0, r0, #16 @ r0 = inPtr = inBuf
- STMFD r13!,{r0,r2-r3,r12,r14}
- MOV r1, r0 @ r1 = inBuf
- 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,#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
- SUBS r2, r2, #1 @ r2 = opos--
- ADDGE r0, r0, #4 @ if (r2 >= 0) { sr.inPtr += 2
- BGE SimpleRate_R_loop @ and loop }
- B SimpleRate_R_read_return
-
-
- .align 2
-_ARM_LinearRate_M:
- @ r0 = AudioStream &input
- @ r1 = input.readBuffer
- @ r2 = input->sr
- @ r3 = obuf
- @ <> = osamp
- @ <> = vol_l
- @ <> = vol_r
- MOV r12,r13
- STMFD r13!,{r0-r1,r4-r11,r14}
- LDMFD r12,{r11,r12,r14} @ r11= osamp
- @ r12= vol_l
- @ r14= vol_r
- LDMIA r2,{r0,r1,r8} @ r0 = inPtr
- @ r1 = inLen
- @ r8 = opos
- MOV r10,#0
- CMP r11,#0 @ if (osamp <= 0)
- BLE LinearRate_M_end @ bale
- ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
- ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
- CMP r1,#0
- BGT LinearRate_M_part2
-
- @ part1 - read input samples
-LinearRate_M_loop:
- SUBS r1, r1, #1 @ r1 = inLen -= 1
- BLT LinearRate_M_read
-LinearRate_M_read_return:
- LDRH r4, [r2, #16] @ r4 = icur[0]
- LDRSH r5, [r0],#2 @ r5 = tmp1 = *inPtr++
- SUBS r8, r8, #65536 @ r8 = opos--
- STRH r4, [r2,#22] @ ilast[0] = icur[0]
- STRH r5, [r2,#16] @ icur[0] = tmp1
- BGE LinearRate_M_loop
-
- @ part2 - form output samples
-LinearRate_M_part2:
- @ We are guaranteed that opos < 0 here
- LDR r6, [r2,#20] @ r6 = ilast[0]<<16 + 32768
- LDRSH r5, [r2,#16] @ r5 = icur[0]
- MOV r4, r8, LSL #16
- MOV r4, r4, LSR #16
- SUB r5, r5, r6, ASR #16 @ r5 = icur[0] - ilast[0]
- MLA r6, r4, r5, r6 @ r6 = (icur[0]-ilast[0])*opos_frac+ilast[0]
-
- LDRSH r4, [r3] @ r4 = obuf[0]
- LDRSH r5, [r3,#2] @ r5 = obuf[1]
- MOV r6, r6, ASR #15 @ r6 = tmp0 = tmp1 >>= 15
- MUL r7, r12,r6 @ r7 = tmp0*vol_l
- MUL r6, r14,r6 @ r6 = tmp1*vol_r
-
- ADDS r7, r7, r4, LSL #15 @ r7 = obuf[0]<<15 + tmp0*vol_l
- RSCVS r7, r10, #0x80000000 @ Clamp r7
- ADDS r6, r6, r5, LSL #15 @ r6 = obuf[1]<<15 + tmp1*vol_r
- RSCVS r6, r10, #0x80000000 @ Clamp r6
-
- MOV r7, r7, LSR #15 @ Shift back to halfword
- MOV r6, r6, LSR #15 @ Shift back to halfword
-
- LDR r5, [r2,#12] @ r5 = opos_inc
- STRH r7, [r3],#2 @ Store output value
- STRH r6, [r3],#2 @ Store output value
- SUBS r11, r11,#1 @ osamp--
- BLE LinearRate_M_end @ end if needed
-
- ADDS r8, r8, r5 @ r8 = opos += opos_inc
- BLT LinearRate_M_part2
- B LinearRate_M_loop
-LinearRate_M_end:
- ADD r13,r13,#8
- STMIA r2,{r0,r1,r8}
- MOV r0, r3 @ return obuf
- LDMFD r13!,{r4-r11,PC}
-LinearRate_M_read:
- ADD r0, r2, #28 @ r0 = inPtr = inBuf
- STMFD r13!,{r0,r2-r3,r12,r14}
-
- MOV r1, r0 @ r1 = inBuf
- 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,#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
- B LinearRate_M_read_return
-
- .align 2
-_ARM_LinearRate_S:
- @ r0 = AudioStream &input
- @ r1 = input.readBuffer
- @ r2 = input->sr
- @ r3 = obuf
- @ <> = osamp
- @ <> = vol_l
- @ <> = vol_r
- MOV r12,r13
- STMFD r13!,{r0-r1,r4-r11,r14}
- LDMFD r12,{r11,r12,r14} @ r11= osamp
- @ r12= vol_l
- @ r14= vol_r
- LDMIA r2,{r0,r1,r8} @ r0 = inPtr
- @ r1 = inLen
- @ r8 = opos
- CMP r11,#0 @ if (osamp <= 0)
- BLE LinearRate_S_end @ bale
- ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
- ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
- CMP r1,#0
- BGT LinearRate_S_part2
-
- @ part1 - read input samples
-LinearRate_S_loop:
- SUBS r1, r1, #2 @ r1 = inLen -= 2
- BLT LinearRate_S_read
-LinearRate_S_read_return:
- LDR r10,[r2, #16] @ r10= icur[0,1]
- LDRSH r5, [r0],#2 @ r5 = tmp0 = *inPtr++
- LDRSH r6, [r0],#2 @ r6 = tmp1 = *inPtr++
- SUBS r8, r8, #65536 @ r8 = opos--
- STRH r10,[r2,#22] @ ilast[0] = icur[0]
- MOV r10,r10,LSR #16
- STRH r10,[r2,#26] @ ilast[1] = icur[1]
- STRH r5, [r2,#16] @ icur[0] = tmp0
- STRH r6, [r2,#18] @ icur[1] = tmp1
- BGE LinearRate_S_loop
-
- @ part2 - form output samples
-LinearRate_S_part2:
- @ We are guaranteed that opos < 0 here
- LDR r6, [r2,#20] @ r6 = ilast[0]<<16 + 32768
- LDRSH r5, [r2,#16] @ r5 = icur[0]
- MOV r4, r8, LSL #16
- MOV r4, r4, LSR #16
- SUB r5, r5, r6, ASR #16 @ r5 = icur[0] - ilast[0]
- MLA r6, r4, r5, r6 @ r6 = (icur[0]-ilast[0])*opos_frac+ilast[0]
-
- LDR r7, [r2,#24] @ r7 = ilast[1]<<16 + 32768
- LDRSH r5, [r2,#18] @ r5 = icur[1]
- LDRSH r10,[r3] @ r10= obuf[0]
- MOV r6, r6, ASR #15 @ r6 = tmp1 >>= 15
- SUB r5, r5, r7, ASR #16 @ r5 = icur[1] - ilast[1]
- MLA r7, r4, r5, r7 @ r7 = (icur[1]-ilast[1])*opos_frac+ilast[1]
-
- LDRSH r5, [r3,#2] @ r5 = obuf[1]
- MOV r7, r7, ASR #15 @ r7 = tmp0 >>= 15
- MUL r7, r12,r7 @ r7 = tmp0*vol_l
- MUL r6, r14,r6 @ r6 = tmp1*vol_r
-
- ADDS r7, r7, r10, LSL #15 @ r7 = obuf[0]<<15 + tmp0*vol_l
- MOV r4, #0
- RSCVS r7, r4, #0x80000000 @ Clamp r7
- ADDS r6, r6, r5, LSL #15 @ r6 = obuf[1]<<15 + tmp1*vol_r
- RSCVS r6, r4, #0x80000000 @ Clamp r6
-
- MOV r7, r7, LSR #15 @ Shift back to halfword
- MOV r6, r6, LSR #15 @ Shift back to halfword
-
- LDR r5, [r2,#12] @ r5 = opos_inc
- STRH r7, [r3],#2 @ Store output value
- STRH r6, [r3],#2 @ Store output value
- SUBS r11, r11,#1 @ osamp--
- BLE LinearRate_S_end @ and loop
-
- ADDS r8, r8, r5 @ r8 = opos += opos_inc
- BLT LinearRate_S_part2
- B LinearRate_S_loop
-LinearRate_S_end:
- ADD r13,r13,#8
- STMIA r2,{r0,r1,r8}
- MOV r0, r3 @ return obuf
- LDMFD r13!,{r4-r11,PC}
-LinearRate_S_read:
- ADD r0, r2, #28 @ r0 = inPtr = inBuf
- STMFD r13!,{r0,r2-r3,r12,r14}
-
- MOV r1, r0 @ r1 = inBuf
- 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,#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
-
- .align 2
-_ARM_LinearRate_R:
- @ r0 = AudioStream &input
- @ r1 = input.readBuffer
- @ r2 = input->sr
- @ r3 = obuf
- @ <> = osamp
- @ <> = vol_l
- @ <> = vol_r
- MOV r12,r13
- STMFD r13!,{r0-r1,r4-r11,r14}
- LDMFD r12,{r11,r12,r14} @ r11= osamp
- @ r12= vol_l
- @ r14= vol_r
- LDMIA r2,{r0,r1,r8} @ r0 = inPtr
- @ r1 = inLen
- @ r8 = opos
- CMP r11,#0 @ if (osamp <= 0)
- BLE LinearRate_R_end @ bale
- ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
- ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
- CMP r1,#0
- BGT LinearRate_R_part2
-
- @ part1 - read input samples
-LinearRate_R_loop:
- SUBS r1, r1, #2 @ r1 = inLen -= 2
- BLT LinearRate_R_read
-LinearRate_R_read_return:
- LDR r10,[r2, #16] @ r10= icur[0,1]
- LDRSH r5, [r0],#2 @ r5 = tmp0 = *inPtr++
- LDRSH r6, [r0],#2 @ r6 = tmp1 = *inPtr++
- SUBS r8, r8, #65536 @ r8 = opos--
- STRH r10,[r2,#22] @ ilast[0] = icur[0]
- MOV r10,r10,LSR #16
- STRH r10,[r2,#26] @ ilast[1] = icur[1]
- STRH r5, [r2,#16] @ icur[0] = tmp0
- STRH r6, [r2,#18] @ icur[1] = tmp1
- BGE LinearRate_R_loop
-
- @ part2 - form output samples
-LinearRate_R_part2:
- @ We are guaranteed that opos < 0 here
- LDR r6, [r2,#20] @ r6 = ilast[0]<<16 + 32768
- LDRSH r5, [r2,#16] @ r5 = icur[0]
- MOV r4, r8, LSL #16
- MOV r4, r4, LSR #16
- SUB r5, r5, r6, ASR #16 @ r5 = icur[0] - ilast[0]
- MLA r6, r4, r5, r6 @ r6 = (icur[0]-ilast[0])*opos_frac+ilast[0]
-
- LDR r7, [r2,#24] @ r7 = ilast[1]<<16 + 32768
- LDRSH r5, [r2,#18] @ r5 = icur[1]
- LDRSH r10,[r3,#2] @ r10= obuf[1]
- MOV r6, r6, ASR #15 @ r6 = tmp1 >>= 15
- SUB r5, r5, r7, ASR #16 @ r5 = icur[1] - ilast[1]
- MLA r7, r4, r5, r7 @ r7 = (icur[1]-ilast[1])*opos_frac+ilast[1]
-
- LDRSH r5, [r3] @ r5 = obuf[0]
- MOV r7, r7, ASR #15 @ r7 = tmp0 >>= 15
- MUL r7, r12,r7 @ r7 = tmp0*vol_l
- MUL r6, r14,r6 @ r6 = tmp1*vol_r
-
- ADDS r7, r7, r10, LSL #15 @ r7 = obuf[1]<<15 + tmp0*vol_l
- MOV r4, #0
- RSCVS r7, r4, #0x80000000 @ Clamp r7
- ADDS r6, r6, r5, LSL #15 @ r6 = obuf[0]<<15 + tmp1*vol_r
- RSCVS r6, r4, #0x80000000 @ Clamp r6
-
- MOV r7, r7, LSR #15 @ Shift back to halfword
- MOV r6, r6, LSR #15 @ Shift back to halfword
-
- LDR r5, [r2,#12] @ r5 = opos_inc
- STRH r6, [r3],#2 @ Store output value
- STRH r7, [r3],#2 @ Store output value
- SUBS r11, r11,#1 @ osamp--
- BLE LinearRate_R_end @ and loop
-
- ADDS r8, r8, r5 @ r8 = opos += opos_inc
- BLT LinearRate_R_part2
- B LinearRate_R_loop
-LinearRate_R_end:
- ADD r13,r13,#8
- STMIA r2,{r0,r1,r8}
- MOV r0, r3 @ return obuf
- LDMFD r13!,{r4-r11,PC}
-LinearRate_R_read:
- ADD r0, r2, #28 @ r0 = inPtr = inBuf
- STMFD r13!,{r0,r2-r3,r12,r14}
-
- MOV r1, r0 @ r1 = inBuf
- 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,#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
- B LinearRate_R_read_return
diff --git a/backends/platform/symbian/AdaptAllMMPs.pl b/backends/platform/symbian/AdaptAllMMPs.pl
index a836b764d2..a25c6f1238 100644
--- a/backends/platform/symbian/AdaptAllMMPs.pl
+++ b/backends/platform/symbian/AdaptAllMMPs.pl
@@ -125,10 +125,7 @@ my @excludes_snd = (
"Poly.cpp",
"TVA.cpp",
"TVF.cpp",
- "TVP.cpp",
- "rate.*" # not really needed, USE_ARM_SOUND_ASM currently not parsed correctly,
- # "rate[_arm|_arm_asm].(cpp|s)" will be added later based on WINS/ARM build!
- # These #defines for compile time are set in portdefs.h
+ "TVP.cpp"
);
my @excludes_graphics = (
diff --git a/backends/platform/symbian/S60v3/scummvm_base.mmp b/backends/platform/symbian/S60v3/scummvm_base.mmp
index fd6451699f..86dc98030c 100644
--- a/backends/platform/symbian/S60v3/scummvm_base.mmp
+++ b/backends/platform/symbian/S60v3/scummvm_base.mmp
@@ -228,6 +228,7 @@ SOURCE mixer.cpp
SOURCE mpu401.cpp
SOURCE musicplugin.cpp
SOURCE null.cpp
+SOURCE rate.cpp
SOURCE timestamp.cpp
SOURCE decoders\3do.cpp
SOURCE decoders\aac.cpp
@@ -285,14 +286,6 @@ SOURCE softsynth\wave6581.cpp
//STOP_AUTO_OBJECTS_AUDIO_//
SOURCE softsynth\fmtowns_pc98\towns_pc98_fmsynth.cpp // Included since its excluded by filter
-//#if defined (WINS)
-SOURCE rate.cpp // WINS emulator version: add regular .cpp
-//#else
-//ARM version is broken. Do not use.
-//SOURCE rate_arm.cpp // ARM version: add ASM .cpp wrapper
-//SOURCE rate_arm_asm.s // ARM version: add ASM routines
-//#endif
-
SOURCEPATH ..\..\..\..\video
//START_AUTO_OBJECTS_VIDEO_// Updated @ Thu Dec 10 22:42:12 2015
SOURCE avi_decoder.cpp
diff --git a/backends/platform/symbian/src/portdefs.h b/backends/platform/symbian/src/portdefs.h
index eab8f12315..e2a918911b 100644
--- a/backends/platform/symbian/src/portdefs.h
+++ b/backends/platform/symbian/src/portdefs.h
@@ -211,7 +211,6 @@ extern "C"{
#define USE_ARM_GFX_ASM
#define USE_ARM_SMUSH_ASM
#define USE_ARM_COSTUME_ASM
-//#define USE_ARM_SOUND_ASM //it broken now
#endif
// Symbian bsearch implementation is flawed
diff --git a/backends/platform/symbian/symbian_builder/common_names.py b/backends/platform/symbian/symbian_builder/common_names.py
index 5428f78679..3a86e22f15 100644
--- a/backends/platform/symbian/symbian_builder/common_names.py
+++ b/backends/platform/symbian/symbian_builder/common_names.py
@@ -47,7 +47,7 @@ active_config = ("DISABLE_NUKED_OPL", "USE_A52", "USE_MPEG2", "USE_BINK", "USE_
"ENABLE_VKEYBD")
#activate USE_SCALERS USE_ARM_SCALER_ASM USE_TTS USE_SPEECH_DISPATCHER USE_CLOUD USE_LIBCURL
# USE_SDL_NET USE_DISCORD USE_UPDATES USE_LUA
-disabled_config = ("USE_ALSA", "USE_ARM_SOUND_ASM", "ENABLE_OPL2LPT", "USE_SCALERS", "USE_ARM_SCALER_ASM",
+disabled_config = ("USE_ALSA", "ENABLE_OPL2LPT", "USE_SCALERS", "USE_ARM_SCALER_ASM",
"USE_HQ_SCALERS", "USE_NASM", "USE_ELF_LOADER", "USE_SDL2", "USE_FLUIDSYNTH", "USE_TTS", "USE_SPEECH_DISPATCHER",
"USE_CLOUD", "USE_LIBCURL", "USE_SDL_NET", "USE_OPENGL", "USE_DISCORD", "USE_LINUXCD", "ENABLE_EVENTRECORDER",
"USE_UPDATES", "USE_LUA")
diff --git a/backends/platform/symbian/symbian_builder/parse_codecs.py b/backends/platform/symbian/symbian_builder/parse_codecs.py
index c78fea7c99..283fe12b03 100644
--- a/backends/platform/symbian/symbian_builder/parse_codecs.py
+++ b/backends/platform/symbian/symbian_builder/parse_codecs.py
@@ -45,14 +45,6 @@ TARGETTYPE lib
// compiler must use png.h from libpng.lib instead ScummVM's
OPTION GCCE -I'/Symbian/S60_5th_Edition_SDK_v1.0/epoc32/include/png'
-//SOURCEPATH ..\..\..\..\audio
-//#if defined (WINS)
-////SOURCE rate.cpp // WINS emulator version: add regular .cpp
-//#else
-//ARM version is broken. Do not use.
-//SOURCE rate_arm.cpp // ARM version: add ASM .cpp wrapper
-//SOURCE rate_arm_asm.s // ARM version: add ASM routines
-//#endif
"""
def processModule_mk(dir, mmp_file):
@@ -86,10 +78,7 @@ def processModule_mk(dir, mmp_file):
elif "USE_" in i:
t = i.split()[-1]
print "%s %s" %(dir, t)
- if "USE_ARM_SOUND_ASM" in i: # Special case, broken implementation.
- addsrc = False
- src += ["SOURCE rate.cpp"]
- elif t in active_config:
+ if t in active_config:
print "active_config %s %s" %(dir, t)
addsrc = True
else:
diff --git a/configure b/configure
index 95927e3749..9af7497a58 100755
--- a/configure
+++ b/configure
@@ -2528,12 +2528,6 @@ case $_host_cpu in
;;
androidsdl-armeabi | arm-*riscos | caanoo | gp2x | gp2xwiz | maemo )
define_in_config_if_yes yes 'USE_ARM_SCALER_ASM'
- # FIXME: The following feature exhibits a bug. It produces distorted
- # sound since 9003ce517ff9906b0288f9f7c02197fd091d4554. The ARM
- # assembly will need to be properly adapted to the changes to the C
- # code in 8f5a7cde2f99de9fef849b0ff688906f05f4643e.
- # See bug #6957: "AUDIO: ARM ASM sound code causes distorted audio on 32 bit armv6"
- #define_in_config_if_yes yes 'USE_ARM_SOUND_ASM'
define_in_config_if_yes yes 'USE_ARM_SMUSH_ASM'
define_in_config_if_yes yes 'USE_ARM_GFX_ASM'
# FIXME: The following feature exhibits a bug during the intro scene of Indy 4
More information about the Scummvm-git-logs
mailing list