Move InitiatePositionArrays to mixer_defs.h

This commit is contained in:
Chris Robinson
2014-06-06 01:52:53 -07:00
parent fc0be88c0f
commit 6d1622dc68
4 changed files with 21 additions and 45 deletions
+3
View File
@@ -37,6 +37,9 @@
#include "bs2b.h"
extern inline void InitiatePositionArrays(ALuint frac, ALuint increment, ALuint *frac_arr, ALuint *pos_arr, ALuint size);
static inline ALfloat Sample_ALbyte(ALbyte val)
{ return val * (1.0f/127.0f); }
+15
View File
@@ -4,6 +4,7 @@
#include "AL/alc.h"
#include "AL/al.h"
#include "alMain.h"
#include "alu.h"
struct MixGains;
struct MixGainMono;
@@ -43,6 +44,20 @@ void MixSend_SSE(ALfloat (*restrict OutBuffer)[BUFFERSIZE], const ALfloat *data,
ALuint BufferSize);
/* SSE resamplers */
inline void InitiatePositionArrays(ALuint frac, ALuint increment, ALuint *frac_arr, ALuint *pos_arr, ALuint size)
{
ALuint i;
pos_arr[0] = 0;
frac_arr[0] = frac;
for(i = 1;i < size;i++)
{
ALuint frac_tmp = frac_arr[i-1] + increment;
pos_arr[i] = pos_arr[i-1] + (frac_tmp>>FRACTIONBITS);
frac_arr[i] = frac_tmp&FRACTIONMASK;
}
}
const ALfloat *Resample_lerp32_SSE2(const ALfloat *src, ALuint frac, ALuint increment,
ALfloat *restrict dst, ALuint numsamples);
const ALfloat *Resample_lerp32_SSE41(const ALfloat *src, ALuint frac, ALuint increment,
+1 -22
View File
@@ -27,27 +27,6 @@
#include "mixer_defs.h"
static inline void InitiatePositionArrays(ALuint frac, ALuint increment,
ALuint *frac_arr, ALuint *pos_arr)
{
ALuint frac_tmp;
pos_arr[0] = 0;
frac_arr[0] = frac;
frac_tmp = frac_arr[0] + increment;
pos_arr[1] = pos_arr[0] + (frac_tmp>>FRACTIONBITS);
frac_arr[1] = frac_tmp & FRACTIONMASK;
frac_tmp = frac_arr[1] + increment;
pos_arr[2] = pos_arr[1] + (frac_tmp>>FRACTIONBITS);
frac_arr[2] = frac_tmp & FRACTIONMASK;
frac_tmp = frac_arr[2] + increment;
pos_arr[3] = pos_arr[2] + (frac_tmp>>FRACTIONBITS);
frac_arr[3] = frac_tmp & FRACTIONMASK;
}
const ALfloat *Resample_lerp32_SSE2(const ALfloat *src, ALuint frac, ALuint increment,
ALfloat *restrict dst, ALuint numsamples)
{
@@ -60,7 +39,7 @@ const ALfloat *Resample_lerp32_SSE2(const ALfloat *src, ALuint frac, ALuint incr
ALuint pos;
ALuint i;
InitiatePositionArrays(frac, increment, frac_.i, pos_.i);
InitiatePositionArrays(frac, increment, frac_.i, pos_.i, 4);
frac4 = _mm_castps_si128(_mm_load_ps(frac_.f));
pos4 = _mm_castps_si128(_mm_load_ps(pos_.f));
+2 -23
View File
@@ -28,27 +28,6 @@
#include "mixer_defs.h"
static inline void InitiatePositionArrays(ALuint frac, ALuint increment,
ALuint *frac_arr, ALuint *pos_arr)
{
ALuint frac_tmp;
pos_arr[0] = 0;
frac_arr[0] = frac;
frac_tmp = frac_arr[0] + increment;
pos_arr[1] = pos_arr[0] + (frac_tmp>>FRACTIONBITS);
frac_arr[1] = frac_tmp & FRACTIONMASK;
frac_tmp = frac_arr[1] + increment;
pos_arr[2] = pos_arr[1] + (frac_tmp>>FRACTIONBITS);
frac_arr[2] = frac_tmp & FRACTIONMASK;
frac_tmp = frac_arr[2] + increment;
pos_arr[3] = pos_arr[2] + (frac_tmp>>FRACTIONBITS);
frac_arr[3] = frac_tmp & FRACTIONMASK;
}
const ALfloat *Resample_lerp32_SSE41(const ALfloat *src, ALuint frac, ALuint increment,
ALfloat *restrict dst, ALuint numsamples)
{
@@ -61,12 +40,12 @@ const ALfloat *Resample_lerp32_SSE41(const ALfloat *src, ALuint frac, ALuint inc
ALuint pos;
ALuint i;
InitiatePositionArrays(frac, increment, frac_.i, pos_.i);
InitiatePositionArrays(frac, increment, frac_.i, pos_.i, 4);
frac4 = _mm_castps_si128(_mm_load_ps(frac_.f));
pos4 = _mm_castps_si128(_mm_load_ps(pos_.f));
for(i = 0;i < numsamples-3;i += 4)
for(i = 0;numsamples-i > 3;i += 4)
{
const __m128 val1 = _mm_setr_ps(src[pos_.i[0]], src[pos_.i[1]], src[pos_.i[2]], src[pos_.i[3]]);
const __m128 val2 = _mm_setr_ps(src[pos_.i[0]+1], src[pos_.i[1]+1], src[pos_.i[2]+1], src[pos_.i[3]+1]);