Skip to content

Commit 0367df0

Browse files
committed
Yet more reduced precision of sinc function
1 parent e9547e9 commit 0367df0

File tree

6 files changed

+65
-65
lines changed

6 files changed

+65
-65
lines changed

include/private/dsp/arch/aarch64/asimd/pmath/lanczos.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ namespace lsp
3535
IF_ARCH_AARCH64(
3636
static const uint32_t lanczos_const[] __lsp_aligned16 =
3737
{
38-
LSP_DSP_VEC4(0x3727c5ac), // +0x00: Sinc threshold = 1e-5
38+
LSP_DSP_VEC4(0x38d1b717), // +0x00: Sinc threshold = 1e-4
3939
LSP_DSP_VEC4(0x3f800000), // +0x10: 1.0
4040
};
4141
)
@@ -76,18 +76,18 @@ namespace lsp
7676
/* v2 = sinf(x2[0]), v3 = sinf(x2[1]) */ \
7777
__ASM_EMIT("ldp q4, q5, [%[state], 0x00]") /* v4 = fabsf(x1) */ \
7878
__ASM_EMIT("ldp q6, q7, [%[state], 0x20]") /* v6 = n = 1/(x1*x2) */ \
79-
__ASM_EMIT("ldp q8, q9, [%[LC]]") /* v8 = 1e-5, v9 = 1.0 */ \
79+
__ASM_EMIT("ldp q8, q9, [%[LC]]") /* v8 = 1e-4, v9 = 1.0 */ \
8080
__ASM_EMIT("fmul v0.4s, v0.4s, v2.4s") /* v0 = sinf(x1)*sinf(x2) */ \
8181
__ASM_EMIT("fmul v1.4s, v1.4s, v3.4s") \
82-
__ASM_EMIT("fcmge v2.4s, v4.4s, v8.4s") /* v2 = [ fabsf(x1) >= 1e-5 ] */ \
82+
__ASM_EMIT("fcmge v2.4s, v4.4s, v8.4s") /* v2 = [ fabsf(x1) >= 1e-4 ] */ \
8383
__ASM_EMIT("fcmge v3.4s, v5.4s, v8.4s") \
8484
__ASM_EMIT("fmul v0.4s, v0.4s, v6.4s") /* v6 = sinf(x1)*sinf(x2)/(x1*x2) */ \
8585
__ASM_EMIT("fmul v1.4s, v1.4s, v7.4s") \
8686
__ASM_EMIT("fcmgt v4.4s, v26.4s, v4.4s") /* v4 = [ fabsf(x1) < t ] */ \
8787
__ASM_EMIT("fcmgt v5.4s, v26.4s, v5.4s") \
88-
__ASM_EMIT("bif v0.16b, v9.16b, v2.16b") /* v0 = [ fabsf(x1) >= 1e-5 ] ? f : 1.0 */ \
88+
__ASM_EMIT("bif v0.16b, v9.16b, v2.16b") /* v0 = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
8989
__ASM_EMIT("bif v1.16b, v9.16b, v3.16b") \
90-
__ASM_EMIT("and v0.16b, v0.16b, v4.16b") /* v0 = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-5 ] ? f : 1.0) : 0.0 */ \
90+
__ASM_EMIT("and v0.16b, v0.16b, v4.16b") /* v0 = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */ \
9191
__ASM_EMIT("and v1.16b, v1.16b, v5.16b")
9292

9393
#define LANCZOS_GEN_FUNC_X4 \
@@ -104,13 +104,13 @@ namespace lsp
104104
__ASM_EMIT("fadd v1.4s, v1.4s, v16.4s") /* v1 = x2 + PI/2 */ \
105105
SINF_X_PLUS_PI_2_CORE_X8 \
106106
/* v0 = sinf(x1), v1 = sinf(x2) */ \
107-
__ASM_EMIT("ldp q8, q9, [%[LC]]") /* v8 = 1e-5, v9 = 1.0 */ \
107+
__ASM_EMIT("ldp q8, q9, [%[LC]]") /* v8 = 1e-4, v9 = 1.0 */ \
108108
__ASM_EMIT("fmul v0.4s, v0.4s, v1.4s") /* v0 = sinf(x1)*sinf(x2) */ \
109-
__ASM_EMIT("fcmge v4.4s, v2.4s, v8.4s") /* v4 = [ fabsf(x1) >= 1e-5 ] */ \
109+
__ASM_EMIT("fcmge v4.4s, v2.4s, v8.4s") /* v4 = [ fabsf(x1) >= 1e-4 ] */ \
110110
__ASM_EMIT("fmul v0.4s, v0.4s, v3.4s") /* v0 = sinf(x1)*sinf(x2)/(x1*x2) */ \
111111
__ASM_EMIT("fcmgt v5.4s, v26.4s, v2.4s") /* v5 = [ fabsf(x1) < t ] */ \
112-
__ASM_EMIT("bif v0.16b, v9.16b, v4.16b") /* v0 = [ fabsf(x1) >= 1e-5 ] ? f : 1.0 */ \
113-
__ASM_EMIT("and v0.16b, v0.16b, v5.16b") /* v0 = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-5 ] ? f : 1.0) : 0.0 */
112+
__ASM_EMIT("bif v0.16b, v9.16b, v4.16b") /* v0 = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
113+
__ASM_EMIT("and v0.16b, v0.16b, v5.16b") /* v0 = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */
114114

115115

116116
void lanczos1(float *dst, float k, float p, float t, float a, size_t count)

include/private/dsp/arch/arm/neon-d32/pmath/lanczos.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ namespace lsp
3535
IF_ARCH_ARM(
3636
static const uint32_t lanczos_const[] __lsp_aligned16 =
3737
{
38-
LSP_DSP_VEC4(0x3727c5ac), // +0x00: Sinc threshold = 1e-5
38+
LSP_DSP_VEC4(0x38d1b717), // +0x00: Sinc threshold = 1e-4
3939
LSP_DSP_VEC4(0x3f800000), // +0x10: 1.0
4040
};
4141
)
@@ -68,13 +68,13 @@ namespace lsp
6868
__ASM_EMIT("vadd.f32 q1, q1, q8") /* q1 = x2 + PI/2 */ \
6969
SINF_X_PLUS_PI_2_CORE_X8 /* q0 = sinf(x1), q1 = sinf(x2) */ \
7070
__ASM_EMIT("vldm %[state], {q8-q15}") /* load state */ \
71-
__ASM_EMIT("vldm %[LC], {q6-q7}") /* q6 = 1e-5, q7 = 1.0 */ \
71+
__ASM_EMIT("vldm %[LC], {q6-q7}") /* q6 = 1e-4, q7 = 1.0 */ \
7272
__ASM_EMIT("vmul.f32 q0, q0, q1") /* q0 = sinf(x1)*sinf(x2) */ \
73-
__ASM_EMIT("vcge.f32 q2, q13, q6") /* q2 = [ fabsf(x1) >= 1e-5 ] */ \
73+
__ASM_EMIT("vcge.f32 q2, q13, q6") /* q2 = [ fabsf(x1) >= 1e-4 ] */ \
7474
__ASM_EMIT("vmul.f32 q0, q0, q14") /* q0 = f = sinf(x1)*sinf(x2)/(x1*x2) */ \
7575
__ASM_EMIT("vcgt.f32 q3, q12, q13") /* q3 = [ fabsf(x1) < t ] */ \
76-
__ASM_EMIT("vbif q0, q7, q2") /* q0 = [ fabsf(x1) >= 1e-5 ] ? f : 1.0 */ \
77-
__ASM_EMIT("vand q0, q0, q3") /* q0 = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-5 ] ? f : 1.0) : 0.0 */
76+
__ASM_EMIT("vbif q0, q7, q2") /* q0 = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
77+
__ASM_EMIT("vand q0, q0, q3") /* q0 = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */
7878

7979
void lanczos1(float *dst, float k, float p, float t, float a, size_t count)
8080
{

include/private/dsp/arch/generic/pmath/lanczos.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ namespace lsp
4040
if (ax < t)
4141
{
4242
const float x2 = x1 * a;
43-
dst[j] = (ax >= 1e-5f) ? (sinf(x1) * sinf(x2)) / (x1 * x2) : 1.0f;
43+
dst[j] = (ax >= 1e-4f) ? (sinf(x1) * sinf(x2)) / (x1 * x2) : 1.0f;
4444
}
4545
else
4646
dst[j] = 0.0f;

include/private/dsp/arch/x86/avx2/pmath/lanczos.h

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)