SSE2饱和算术

Cal*_*ant 3 c sse simd intrinsics sse2

我正在写一些音频处理软件,我需要知道如何使用SSE2双精度指令进行饱和算术运算。我的值需要在-1和1之间进行归一化。是否可以通过SSE2内部函数做到这一点的灵巧方法,还是需要2套if / else语句(每个值一个)?

Pau*_*l R 5

要将双精度值裁剪到-1.0到+1.0范围内,可以使用max / min操作。例如,如果您有buffN个double值的,

const __m128d kMax = _mm_set1_pd(1.0);
const __m128d kMin = _mm_set1_pd(-1.0);

for (int i = 0; i < N; i += 2)
{
    __m128d v = _mm_loadu_pd(&buff[i]);
    v = _mm_max_pd(v, kMin);
    v = _mm_min_pd(v, kMax);
    _mm_storeu_pd(&buff[i], v);
}
Run Code Online (Sandbox Code Playgroud)