@@ -36,7 +36,7 @@ namespace lsp
3636 static const uint32_t lanczos_const[] __lsp_aligned32 =
3737 {
3838 LSP_DSP_VEC8 (0x7fffffff ), // +0x00: Mask for fabsf
39- LSP_DSP_VEC8 (0x3727c5ac ), // +0x20: Sinc threshold = 1e-5
39+ LSP_DSP_VEC8 (0x38d1b717 ), // +0x20: Sinc threshold = 1e-4
4040 LSP_DSP_VEC8 (0x3f800000 ), // +0x40: 1.0
4141 };
4242 )
@@ -65,10 +65,10 @@ namespace lsp
6565 __ASM_EMIT (" vmulps %%ymm4, %%ymm0, %%ymm0" ) /* ymm0 = sinf(x1)*sinf(x2) */ \
6666 __ASM_EMIT (" vandps 0x00 + %[LC], %%ymm1, %%ymm1" ) /* ymm1 = fabsf(x) */ \
6767 __ASM_EMIT (" vdivps 0xa0 + %[state], %%ymm0, %%ymm0" ) /* ymm0 = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
68- __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%ymm1, %%ymm2" ) /* ymm2 = [ fabsf(x) < 1e-5 ] */ \
68+ __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%ymm1, %%ymm2" ) /* ymm2 = [ fabsf(x) < 1e-4 ] */ \
6969 __ASM_EMIT (" vcmpps $1, 0xc0 + %[state], %%ymm1, %%ymm1" ) /* ymm1 = [ fabsf(x) < t ] */ \
70- __ASM_EMIT (" vblendvps %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x) >= 1e-5 ] ? f : 1.0 */ \
71- __ASM_EMIT (" vandps %%ymm1, %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-5 ] ? f : 1.0) : 0.0 */
70+ __ASM_EMIT (" vblendvps %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x) >= 1e-4 ] ? f : 1.0 */ \
71+ __ASM_EMIT (" vandps %%ymm1, %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-4 ] ? f : 1.0) : 0.0 */
7272
7373 #define LANCZOS_GEN_FUNC_X4 \
7474 /* xmm0 = x1 */ \
@@ -84,10 +84,10 @@ namespace lsp
8484 __ASM_EMIT (" vmulps %%xmm4, %%xmm0, %%xmm0" ) /* xmm0 = sinf(x1)*sinf(x2) */ \
8585 __ASM_EMIT (" vandps 0x00 + %[LC], %%xmm1, %%xmm1" ) /* xmm1 = fabsf(x) */ \
8686 __ASM_EMIT (" vdivps 0xa0 + %[state], %%xmm0, %%xmm0" ) /* xmm0 = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
87- __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%xmm1, %%xmm2" ) /* xmm2 = [ fabsf(x) < 1e-5 ] */ \
87+ __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%xmm1, %%xmm2" ) /* xmm2 = [ fabsf(x) < 1e-4 ] */ \
8888 __ASM_EMIT (" vcmpps $1, 0xc0 + %[state], %%xmm1, %%xmm1" ) /* xmm1 = [ fabsf(x) < t ] */ \
89- __ASM_EMIT (" vblendvps %%xmm2, 0x40 + %[LC], %%xmm0, %%xmm0" ) /* xmm0 = [ fabsf(x) >= 1e-5 ] ? f : 1.0 */ \
90- __ASM_EMIT (" vandps %%xmm1, %%xmm0, %%xmm0" ) /* xmm0 = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-5 ] ? f : 1.0) : 0.0 */
89+ __ASM_EMIT (" vblendvps %%xmm2, 0x40 + %[LC], %%xmm0, %%xmm0" ) /* xmm0 = [ fabsf(x) >= 1e-4 ] ? f : 1.0 */ \
90+ __ASM_EMIT (" vandps %%xmm1, %%xmm0, %%xmm0" ) /* xmm0 = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-4 ] ? f : 1.0) : 0.0 */
9191
9292
9393 void lanczos1 (float *dst, float k, float p, float t, float a, size_t count)
@@ -187,10 +187,10 @@ namespace lsp
187187 __ASM_EMIT (" vmulps %%ymm4, %%ymm0, %%ymm0" ) /* ymm0 = sinf(x1)*sinf(x2) */ \
188188 __ASM_EMIT (" vandps 0x00 + %[LC], %%ymm12, %%ymm12" ) /* ymm12 = fabsf(x1) */ \
189189 __ASM_EMIT (" vdivps %%ymm13, %%ymm0, %%ymm0" ) /* ymm0 = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
190- __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%ymm12, %%ymm2" ) /* ymm2 = [ fabsf(x1) < 1e-5 ] */ \
190+ __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%ymm12, %%ymm2" ) /* ymm2 = [ fabsf(x1) < 1e-4 ] */ \
191191 __ASM_EMIT (" vcmpps $1, %%ymm10, %%ymm12, %%ymm1" ) /* ymm1 = [ fabsf(x1) < t ] */ \
192- __ASM_EMIT (" vblendvps %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) >= 1e-5 ] ? f : 1.0 */ \
193- __ASM_EMIT (" vandps %%ymm1, %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-5 ] ? f : 1.0) : 0.0 */
192+ __ASM_EMIT (" vblendvps %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
193+ __ASM_EMIT (" vandps %%ymm1, %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */
194194
195195 #define LANCZOS_GEN_X64_FUNC_X4 \
196196 /* xmm0 = x1 */ \
@@ -203,10 +203,10 @@ namespace lsp
203203 __ASM_EMIT (" vmulps %%ymm4, %%ymm0, %%ymm0" ) /* ymm0 = sinf(x1)*sinf(x2) */ \
204204 __ASM_EMIT (" vandps 0x00 + %[LC], %%ymm12, %%ymm12" ) /* ymm12 = fabsf(x1) */ \
205205 __ASM_EMIT (" vdivps %%ymm13, %%ymm0, %%ymm0" ) /* ymm0 = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
206- __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%ymm12, %%ymm2" ) /* ymm2 = [ fabsf(x1) < 1e-5 ] */ \
206+ __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%ymm12, %%ymm2" ) /* ymm2 = [ fabsf(x1) < 1e-4 ] */ \
207207 __ASM_EMIT (" vcmpps $1, %%ymm10, %%ymm12, %%ymm1" ) /* ymm1 = [ fabsf(x1) < t ] */ \
208- __ASM_EMIT (" vblendvps %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) >= 1e-5 ] ? f : 1.0 */ \
209- __ASM_EMIT (" vandps %%ymm1, %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-5 ] ? f : 1.0) : 0.0 */
208+ __ASM_EMIT (" vblendvps %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
209+ __ASM_EMIT (" vandps %%ymm1, %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */
210210
211211 void x64_lanczos1 (float *dst, float k, float p, float t, float a, size_t count)
212212 {
@@ -290,10 +290,10 @@ namespace lsp
290290 __ASM_EMIT (" vmulps %%ymm4, %%ymm0, %%ymm0" ) /* ymm0 = sinf(x1)*sinf(x2) */ \
291291 __ASM_EMIT (" vandps 0x00 + %[LC], %%ymm1, %%ymm1" ) /* ymm1 = fabsf(x) */ \
292292 __ASM_EMIT (" vdivps 0xa0 + %[state], %%ymm0, %%ymm0" ) /* ymm0 = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
293- __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%ymm1, %%ymm2" ) /* ymm2 = [ fabsf(x) < 1e-5 ] */ \
293+ __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%ymm1, %%ymm2" ) /* ymm2 = [ fabsf(x) < 1e-4 ] */ \
294294 __ASM_EMIT (" vcmpps $1, 0xc0 + %[state], %%ymm1, %%ymm1" ) /* ymm1 = [ fabsf(x) < t ] */ \
295- __ASM_EMIT (" vblendvps %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x) >= 1e-5 ] ? f : 1.0 */ \
296- __ASM_EMIT (" vandps %%ymm1, %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-5 ] ? f : 1.0) : 0.0 */
295+ __ASM_EMIT (" vblendvps %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x) >= 1e-4 ] ? f : 1.0 */ \
296+ __ASM_EMIT (" vandps %%ymm1, %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-4 ] ? f : 1.0) : 0.0 */
297297
298298 #define LANCZOS_GEN_FUNC_X4_FMA3 \
299299 /* xmm0 = x1 */ \
@@ -309,10 +309,10 @@ namespace lsp
309309 __ASM_EMIT (" vmulps %%xmm4, %%xmm0, %%xmm0" ) /* xmm0 = sinf(x1)*sinf(x2) */ \
310310 __ASM_EMIT (" vandps 0x00 + %[LC], %%xmm1, %%xmm1" ) /* xmm1 = fabsf(x) */ \
311311 __ASM_EMIT (" vdivps 0xa0 + %[state], %%xmm0, %%xmm0" ) /* xmm0 = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
312- __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%xmm1, %%xmm2" ) /* xmm2 = [ fabsf(x) < 1e-5 ] */ \
312+ __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%xmm1, %%xmm2" ) /* xmm2 = [ fabsf(x) < 1e-4 ] */ \
313313 __ASM_EMIT (" vcmpps $1, 0xc0 + %[state], %%xmm1, %%xmm1" ) /* xmm1 = [ fabsf(x) < t ] */ \
314- __ASM_EMIT (" vblendvps %%xmm2, 0x40 + %[LC], %%xmm0, %%xmm0" ) /* xmm0 = [ fabsf(x) >= 1e-5 ] ? f : 1.0 */ \
315- __ASM_EMIT (" vandps %%xmm1, %%xmm0, %%xmm0" ) /* xmm0 = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-5 ] ? f : 1.0) : 0.0 */
314+ __ASM_EMIT (" vblendvps %%xmm2, 0x40 + %[LC], %%xmm0, %%xmm0" ) /* xmm0 = [ fabsf(x) >= 1e-4 ] ? f : 1.0 */ \
315+ __ASM_EMIT (" vandps %%xmm1, %%xmm0, %%xmm0" ) /* xmm0 = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-4 ] ? f : 1.0) : 0.0 */
316316
317317 void lanczos1_fma3 (float *dst, float k, float p, float t, float a, size_t count)
318318 {
@@ -411,10 +411,10 @@ namespace lsp
411411 __ASM_EMIT (" vmulps %%ymm4, %%ymm0, %%ymm0" ) /* ymm0 = sinf(x1)*sinf(x2) */ \
412412 __ASM_EMIT (" vandps 0x00 + %[LC], %%ymm12, %%ymm12" ) /* ymm12 = fabsf(x1) */ \
413413 __ASM_EMIT (" vdivps %%ymm13, %%ymm0, %%ymm0" ) /* ymm0 = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
414- __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%ymm12, %%ymm2" ) /* ymm2 = [ fabsf(x1) < 1e-5 ] */ \
414+ __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%ymm12, %%ymm2" ) /* ymm2 = [ fabsf(x1) < 1e-4 ] */ \
415415 __ASM_EMIT (" vcmpps $1, %%ymm10, %%ymm12, %%ymm1" ) /* ymm1 = [ fabsf(x1) < t ] */ \
416- __ASM_EMIT (" vblendvps %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) >= 1e-5 ] ? f : 1.0 */ \
417- __ASM_EMIT (" vandps %%ymm1, %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-5 ] ? f : 1.0) : 0.0 */
416+ __ASM_EMIT (" vblendvps %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
417+ __ASM_EMIT (" vandps %%ymm1, %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */
418418
419419 #define LANCZOS_GEN_X64_FUNC_X4_FMA3 \
420420 /* xmm0 = x1 */ \
@@ -427,10 +427,10 @@ namespace lsp
427427 __ASM_EMIT (" vmulps %%ymm4, %%ymm0, %%ymm0" ) /* ymm0 = sinf(x1)*sinf(x2) */ \
428428 __ASM_EMIT (" vandps 0x00 + %[LC], %%ymm12, %%ymm12" ) /* ymm12 = fabsf(x1) */ \
429429 __ASM_EMIT (" vdivps %%ymm13, %%ymm0, %%ymm0" ) /* ymm0 = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
430- __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%ymm12, %%ymm2" ) /* ymm2 = [ fabsf(x1) < 1e-5 ] */ \
430+ __ASM_EMIT (" vcmpps $1, 0x20 + %[LC], %%ymm12, %%ymm2" ) /* ymm2 = [ fabsf(x1) < 1e-4 ] */ \
431431 __ASM_EMIT (" vcmpps $1, %%ymm10, %%ymm12, %%ymm1" ) /* ymm1 = [ fabsf(x1) < t ] */ \
432- __ASM_EMIT (" vblendvps %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) >= 1e-5 ] ? f : 1.0 */ \
433- __ASM_EMIT (" vandps %%ymm1, %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-5 ] ? f : 1.0) : 0.0 */
432+ __ASM_EMIT (" vblendvps %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
433+ __ASM_EMIT (" vandps %%ymm1, %%ymm0, %%ymm0" ) /* ymm0 = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */
434434
435435 void x64_lanczos1_fma3 (float *dst, float k, float p, float t, float a, size_t count)
436436 {
0 commit comments