From 3555e90cf60360273f3fac159c05009b9528c223 Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Thu, 1 Oct 2015 20:32:48 -0700 Subject: [PATCH] Improved random generator for SIMD dither --- libraries/audio/src/AudioSRC.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/audio/src/AudioSRC.cpp b/libraries/audio/src/AudioSRC.cpp index 99760fc42f..59fe29df36 100644 --- a/libraries/audio/src/AudioSRC.cpp +++ b/libraries/audio/src/AudioSRC.cpp @@ -975,11 +975,11 @@ void AudioSRC::convertInputFromInt16(const int16_t* input, float** outputs, int // fast TPDF dither in [-1.0f, 1.0f] static inline __m128 dither4() { - static __m128i rz = _mm_set_epi16(0, -12285, 8251, 22985, -4297, 14758, -19785, -26093); + static __m128i rz; - // update the parallel LCGs - rz = _mm_mullo_epi16(rz, _mm_set1_epi16(25173)); - rz = _mm_add_epi16(rz, _mm_set1_epi16(13849)); + // update the 8 different maximum-length LCGs + rz = _mm_mullo_epi16(rz, _mm_set_epi16(25173, -25511, -5975, -23279, 19445, -27591, 30185, -3495)); + rz = _mm_add_epi16(rz, _mm_set_epi16(13849, -32767, 105, -19675, -7701, -32679, -13225, 28013)); // promote to 32-bit __m128i r0 = _mm_unpacklo_epi16(rz, _mm_setzero_si128());