Make sure the working coefficients are aligned for the SSE mixer
This commit is contained in:
parent
64cd763e19
commit
4d157d2849
@ -53,7 +53,7 @@ void MERGE4(MixDirect_Hrtf_,SAMPLER,_,SUFFIX)(
|
||||
ALfloat (*RESTRICT Values)[2] = Source->Hrtf.Values[i];
|
||||
ALint Counter = maxu(Source->Hrtf.Counter, OutPos) - OutPos;
|
||||
ALuint Offset = Source->Hrtf.Offset + OutPos;
|
||||
ALfloat Coeffs[HRIR_LENGTH][2];
|
||||
ALfloat Coeffs[HRIR_LENGTH][2] ALIGN(16);
|
||||
ALuint Delay[2];
|
||||
ALfloat left, right;
|
||||
|
||||
|
@ -20,16 +20,12 @@ static __inline void ApplyCoeffs(ALuint Offset, ALfloat (*RESTRICT Values)[2],
|
||||
{
|
||||
const ALuint o0 = (Offset++)&HRIR_MASK;
|
||||
const ALuint o1 = (Offset++)&HRIR_MASK;
|
||||
__m128 coeffs = _mm_load_ps(&Coeffs[c][0]);
|
||||
__m128 vals = { 0.0f, 0.0f, 0.0f, 0.0f };
|
||||
__m128 coeffs = { 0.0f, 0.0f, 0.0f, 0.0f };
|
||||
|
||||
vals = _mm_loadl_pi(vals, (__m64*)&Values[o0][0]);
|
||||
vals = _mm_loadh_pi(vals, (__m64*)&Values[o1][0]);
|
||||
coeffs = _mm_loadl_pi(coeffs, (__m64*)&Coeffs[c ][0]);
|
||||
coeffs = _mm_loadh_pi(coeffs, (__m64*)&Coeffs[c+1][0]);
|
||||
|
||||
vals = _mm_add_ps(vals, _mm_mul_ps(coeffs, lrlr));
|
||||
|
||||
_mm_storel_pi((__m64*)&Values[o0][0], vals);
|
||||
_mm_storeh_pi((__m64*)&Values[o1][0], vals);
|
||||
}
|
||||
|
@ -85,6 +85,7 @@ SET(LIB_MINOR_VERSION "14")
|
||||
SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}")
|
||||
|
||||
SET(EXPORT_DECL "")
|
||||
SET(ALIGN_DECL "")
|
||||
|
||||
|
||||
CHECK_TYPE_SIZE("long" SIZEOF_LONG)
|
||||
@ -173,6 +174,7 @@ ENDIF()
|
||||
# Set visibility/export options if available
|
||||
IF(WIN32)
|
||||
SET(EXPORT_DECL "__declspec(dllexport)")
|
||||
SET(ALIGN_DECL "__declspec(aligned((x)))")
|
||||
|
||||
OPTION(WINE "Enable use of Wine headers when compiling" OFF)
|
||||
IF(WINE)
|
||||
@ -218,6 +220,12 @@ ELSE()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
CHECK_C_SOURCE_COMPILES("int foo __attribute__((aligned(16)));
|
||||
int main() {return 0;}" HAVE_ATTRIBUTE_ALIGNED)
|
||||
IF(HAVE_ATTRIBUTE_ALIGNED)
|
||||
SET(ALIGN_DECL "__attribute__((aligned((x))))")
|
||||
ENDIF()
|
||||
|
||||
SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS}")
|
||||
ENDIF()
|
||||
|
||||
|
@ -5,6 +5,8 @@
|
||||
/* Define to the library version */
|
||||
#define ALSOFT_VERSION "${LIB_VERSION}"
|
||||
|
||||
#define ALIGN(x) ${ALIGN_DECL}
|
||||
|
||||
/* Define if we have SSE CPU extensions */
|
||||
#cmakedefine HAVE_SSE
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user