Move code into IRAM and explicitly inline some functions (gcc was inlining them anyway, but this way is better)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7741 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
6f7f921ebe
commit
439ba9bdbb
2 changed files with 30 additions and 9 deletions
|
@ -105,7 +105,7 @@ void alac_set_info(alac_file *alac, char *inputbuffer)
|
|||
/* stream reading */
|
||||
|
||||
/* supports reading 1 to 16 bits, in big endian format */
|
||||
static uint32_t readbits_16(alac_file *alac, int bits)
|
||||
static inline uint32_t readbits_16(alac_file *alac, int bits)
|
||||
{
|
||||
uint32_t result;
|
||||
int new_accumulator;
|
||||
|
@ -137,7 +137,7 @@ static uint32_t readbits_16(alac_file *alac, int bits)
|
|||
}
|
||||
|
||||
/* supports reading 1 to 32 bits, in big endian format */
|
||||
static uint32_t readbits(alac_file *alac, int bits)
|
||||
static inline uint32_t readbits(alac_file *alac, int bits)
|
||||
{
|
||||
int32_t result = 0;
|
||||
|
||||
|
@ -153,7 +153,7 @@ static uint32_t readbits(alac_file *alac, int bits)
|
|||
}
|
||||
|
||||
/* reads a single bit */
|
||||
static int readbit(alac_file *alac)
|
||||
static inline int readbit(alac_file *alac)
|
||||
{
|
||||
int result;
|
||||
int new_accumulator;
|
||||
|
@ -173,7 +173,7 @@ static int readbit(alac_file *alac)
|
|||
return result;
|
||||
}
|
||||
|
||||
static void unreadbits(alac_file *alac, int bits)
|
||||
static inline void unreadbits(alac_file *alac, int bits)
|
||||
{
|
||||
int new_accumulator = (alac->input_buffer_bitaccumulator - bits);
|
||||
|
||||
|
@ -187,7 +187,7 @@ static void unreadbits(alac_file *alac, int bits)
|
|||
/* hideously inefficient. could use a bitmask search,
|
||||
* alternatively bsr on x86,
|
||||
*/
|
||||
static int count_leading_zeros(int32_t input)
|
||||
static inline int count_leading_zeros(int32_t input)
|
||||
{
|
||||
int i = 0;
|
||||
while (!(0x80000000 & input) && i < 32)
|
||||
|
@ -206,7 +206,16 @@ void basterdised_rice_decompress(alac_file *alac,
|
|||
int rice_kmodifier, /* arg424->d */
|
||||
int rice_historymult, /* arg424->c */
|
||||
int rice_kmodifier_mask /* arg424->e */
|
||||
)
|
||||
) ICODE_ATTR;
|
||||
void basterdised_rice_decompress(alac_file *alac,
|
||||
int32_t *output_buffer,
|
||||
int output_size,
|
||||
int readsamplesize, /* arg_10 */
|
||||
int rice_initialhistory, /* arg424->b */
|
||||
int rice_kmodifier, /* arg424->d */
|
||||
int rice_historymult, /* arg424->c */
|
||||
int rice_kmodifier_mask /* arg424->e */
|
||||
)
|
||||
{
|
||||
int output_count;
|
||||
unsigned int history = rice_initialhistory;
|
||||
|
@ -338,6 +347,13 @@ void basterdised_rice_decompress(alac_file *alac,
|
|||
((v > 0) ? (1) : \
|
||||
(0)))
|
||||
|
||||
static void predictor_decompress_fir_adapt(int32_t *error_buffer,
|
||||
int32_t *buffer_out,
|
||||
int output_size,
|
||||
int readsamplesize,
|
||||
int16_t *predictor_coef_table,
|
||||
int predictor_coef_num,
|
||||
int predictor_quantitization) ICODE_ATTR;
|
||||
static void predictor_decompress_fir_adapt(int32_t *error_buffer,
|
||||
int32_t *buffer_out,
|
||||
int output_size,
|
||||
|
@ -605,6 +621,11 @@ static void predictor_decompress_fir_adapt(int32_t *error_buffer,
|
|||
}
|
||||
}
|
||||
|
||||
void deinterlace_16(int32_t* buffer0,
|
||||
int32_t* buffer1,
|
||||
int numsamples,
|
||||
uint8_t interlacing_shift,
|
||||
uint8_t interlacing_leftweight) ICODE_ATTR;
|
||||
void deinterlace_16(int32_t* buffer0,
|
||||
int32_t* buffer1,
|
||||
int numsamples,
|
||||
|
|
|
@ -31,12 +31,12 @@ typedef struct
|
|||
/* end setinfo stuff */
|
||||
} alac_file;
|
||||
|
||||
void create_alac(int samplesize, int numchannels, alac_file* alac);
|
||||
void create_alac(int samplesize, int numchannels, alac_file* alac) ICODE_ATTR;
|
||||
int alac_decode_frame(alac_file *alac,
|
||||
unsigned char *inbuffer,
|
||||
int32_t outputbuffer[ALAC_MAX_CHANNELS][ALAC_BLOCKSIZE],
|
||||
void (*yield)(void));
|
||||
void alac_set_info(alac_file *alac, char *inputbuffer);
|
||||
void (*yield)(void)) ICODE_ATTR;
|
||||
void alac_set_info(alac_file *alac, char *inputbuffer) ICODE_ATTR;
|
||||
|
||||
#endif /* __ALAC__DECOMP_H */
|
||||
|
||||
|
|
Loading…
Reference in a new issue