Skip to content

Commit 53387d0

Browse files
committed
Replaced implementation for mix_v2 and mix_k2 functions with lerp_vvv and lerp_vvk respectively.
1 parent 50af5fc commit 53387d0

18 files changed

Lines changed: 42 additions & 1626 deletions

File tree

CHANGELOG

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
=== 1.0.37 ===
66
* Fixed lanczos kernel generation functions to make buildable by MacOS on
77
x86_64 architecture.
8-
* Added three-operand lerp functions optimized with SSE, AVX, FMA3, AVX-512.
8+
* Added three-operand lerp functions optimized with SSE, AVX, FMA3, AVX-512,
9+
NEON and ASIMD.
10+
* Replaced implementation for mix_v2 and mix_k2 functions with lerp_vvv and
11+
lerp_vvk respectively.
912

1013
=== 1.0.36 ===
1114
* Updated build system: ASAN, CROSS_COMPILE, DEBUG, DEVEL, PROFILE, STRICT,

include/lsp-plug.in/dsp/common/pmath/pmix.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ LSP_DSP_LIB_SYMBOL(void, pmix_v1, float *dst, const float *src, const float *k,
3737
* Compute mixed value:
3838
* dst[i] = src1[i] + (src2[i] - src1[i]) * k[i];
3939
*
40+
* @note this function has the same implementation to the lerp_vvv function
41+
*
4042
* @param dst destination array
4143
* @param src1 first source array
4244
* @param src2 second source array
@@ -60,6 +62,8 @@ LSP_DSP_LIB_SYMBOL(void, pmix_k1, float *dst, const float *src, float k, size_t
6062
* Compute mixed value:
6163
* dst[i] = src1[i] + (src2[i] - src1[i]) * k;
6264
*
65+
* @note this function has the same implementation to the lerp_vvk function
66+
*
6367
* @param dst destination array
6468
* @param src1 first source array
6569
* @param src2 second source array

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

Lines changed: 2 additions & 254 deletions
Large diffs are not rendered by default.

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

Lines changed: 0 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -101,77 +101,6 @@ namespace lsp
101101
);
102102
}
103103

104-
void pmix_v2(float *dst, const float *src1, const float *src2, const float *k, size_t count)
105-
{
106-
ARCH_ARM_ASM
107-
(
108-
// x16 blocks
109-
__ASM_EMIT("subs %[count], #16")
110-
__ASM_EMIT("blo 2f")
111-
__ASM_EMIT("1:")
112-
__ASM_EMIT("vldm %[src1]!, {q0-q3}") // q0 = d
113-
__ASM_EMIT("vldm %[src2]!, {q4-q7}") // q4 = s
114-
__ASM_EMIT("vldm %[k]!, {q8-q11}") // q8 = k
115-
__ASM_EMIT("vsub.f32 q4, q4, q0") // q4 = s - d
116-
__ASM_EMIT("vsub.f32 q5, q5, q1")
117-
__ASM_EMIT("vsub.f32 q6, q6, q2")
118-
__ASM_EMIT("vsub.f32 q7, q7, q3")
119-
__ASM_EMIT("vmla.f32 q0, q4, q8") // q0 = d + (s-d)*k
120-
__ASM_EMIT("vmla.f32 q1, q5, q9")
121-
__ASM_EMIT("vmla.f32 q2, q6, q10")
122-
__ASM_EMIT("vmla.f32 q3, q7, q11")
123-
__ASM_EMIT("subs %[count], #16")
124-
__ASM_EMIT("vstm %[dst]!, {q0-q3}")
125-
__ASM_EMIT("bhs 1b")
126-
// x8 block
127-
__ASM_EMIT("2:")
128-
__ASM_EMIT("adds %[count], #8")
129-
__ASM_EMIT("blt 4f")
130-
__ASM_EMIT("vldm %[src1]!, {q0-q1}") // q0 = d
131-
__ASM_EMIT("vldm %[src2]!, {q4-q5}") // q4 = s
132-
__ASM_EMIT("vldm %[k]!, {q8-q9}") // q8 = k
133-
__ASM_EMIT("vsub.f32 q4, q4, q0") // q4 = s - d
134-
__ASM_EMIT("vsub.f32 q5, q5, q1")
135-
__ASM_EMIT("vmla.f32 q0, q4, q8") // q0 = d + (s-d)*k
136-
__ASM_EMIT("vmla.f32 q1, q5, q9")
137-
__ASM_EMIT("sub %[count], #8")
138-
__ASM_EMIT("vstm %[dst]!, {q0-q1}")
139-
// x4 blocks
140-
__ASM_EMIT("4:")
141-
__ASM_EMIT("adds %[count], #4")
142-
__ASM_EMIT("blt 6f")
143-
__ASM_EMIT("vldm %[src1]!, {q0}") // q0 = d
144-
__ASM_EMIT("vldm %[src2]!, {q4}") // q4 = s
145-
__ASM_EMIT("vldm %[k]!, {q8}") // q8 = k
146-
__ASM_EMIT("vsub.f32 q4, q4, q0") // q4 = s - d
147-
__ASM_EMIT("vmla.f32 q0, q4, q8") // q0 = d + (s-d)*k
148-
__ASM_EMIT("sub %[count], #4")
149-
__ASM_EMIT("vstm %[dst]!, {q0}")
150-
// x1 blocks
151-
__ASM_EMIT("6:")
152-
__ASM_EMIT("adds %[count], #3")
153-
__ASM_EMIT("blt 8f")
154-
__ASM_EMIT("7:")
155-
__ASM_EMIT("vld1.32 {d0[], d1[]}, [%[src1]]!") // q0 = d
156-
__ASM_EMIT("vld1.32 {d8[], d9[]}, [%[src2]]!") // q4 = s
157-
__ASM_EMIT("vld1.32 {d16[], d17[]}, [%[k]]!") // q8 = k
158-
__ASM_EMIT("vsub.f32 q4, q4, q0") // q4 = s - d
159-
__ASM_EMIT("vmla.f32 q0, q4, q8") // q0 = d + (s-d)*k
160-
__ASM_EMIT("subs %[count], #1")
161-
__ASM_EMIT("vst1.32 {d0[0]}, [%[dst]]!")
162-
__ASM_EMIT("bge 7b")
163-
// end
164-
__ASM_EMIT("8:")
165-
166-
: [dst] "+r" (dst), [src1] "+r" (src1), [src2] "+r" (src2), [k] "+r" (k),
167-
[count] "+r" (count)
168-
:
169-
: "cc", "memory",
170-
"q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
171-
"q8", "q9", "q10", "q11"
172-
);
173-
}
174-
175104
void pmix_k1(float *dst, const float *src, float k, size_t count)
176105
{
177106
ARCH_ARM_ASM
@@ -240,73 +169,6 @@ namespace lsp
240169
);
241170
}
242171

243-
void pmix_k2(float *dst, const float *src1, const float *src2, float k, size_t count)
244-
{
245-
ARCH_ARM_ASM
246-
(
247-
// x16 blocks
248-
__ASM_EMIT("subs %[count], #16")
249-
__ASM_EMIT("vld1.32 {d16[], d17[]}, [%[k]]") // q8 = k
250-
__ASM_EMIT("blo 2f")
251-
__ASM_EMIT("1:")
252-
__ASM_EMIT("vldm %[src1]!, {q0-q3}") // q0 = d
253-
__ASM_EMIT("vldm %[src2]!, {q4-q7}") // q4 = s
254-
__ASM_EMIT("vsub.f32 q4, q4, q0") // q4 = s - d
255-
__ASM_EMIT("vsub.f32 q5, q5, q1")
256-
__ASM_EMIT("vsub.f32 q6, q6, q2")
257-
__ASM_EMIT("vsub.f32 q7, q7, q3")
258-
__ASM_EMIT("vmla.f32 q0, q4, q8") // q0 = d + (s-d)*k
259-
__ASM_EMIT("vmla.f32 q1, q5, q8")
260-
__ASM_EMIT("vmla.f32 q2, q6, q8")
261-
__ASM_EMIT("vmla.f32 q3, q7, q8")
262-
__ASM_EMIT("subs %[count], #16")
263-
__ASM_EMIT("vstm %[dst]!, {q0-q3}")
264-
__ASM_EMIT("bhs 1b")
265-
// x8 block
266-
__ASM_EMIT("2:")
267-
__ASM_EMIT("adds %[count], #8")
268-
__ASM_EMIT("blt 4f")
269-
__ASM_EMIT("vldm %[src1]!, {q0-q1}") // q0 = d
270-
__ASM_EMIT("vldm %[src2]!, {q4-q5}") // q4 = s
271-
__ASM_EMIT("vsub.f32 q4, q4, q0") // q4 = s - d
272-
__ASM_EMIT("vsub.f32 q5, q5, q1")
273-
__ASM_EMIT("vmla.f32 q0, q4, q8") // q0 = d + (s-d)*k
274-
__ASM_EMIT("vmla.f32 q1, q5, q8")
275-
__ASM_EMIT("sub %[count], #8")
276-
__ASM_EMIT("vstm %[dst]!, {q0-q1}")
277-
// x4 blocks
278-
__ASM_EMIT("4:")
279-
__ASM_EMIT("adds %[count], #4")
280-
__ASM_EMIT("blt 6f")
281-
__ASM_EMIT("vldm %[src1]!, {q0}") // q0 = d
282-
__ASM_EMIT("vldm %[src2]!, {q4}") // q4 = s
283-
__ASM_EMIT("vsub.f32 q4, q4, q0") // q4 = s - d
284-
__ASM_EMIT("vmla.f32 q0, q4, q8") // q0 = d + (s-d)*k
285-
__ASM_EMIT("sub %[count], #4")
286-
__ASM_EMIT("vstm %[dst]!, {q0}")
287-
// x1 blocks
288-
__ASM_EMIT("6:")
289-
__ASM_EMIT("adds %[count], #3")
290-
__ASM_EMIT("blt 8f")
291-
__ASM_EMIT("7:")
292-
__ASM_EMIT("vld1.32 {d0[], d1[]}, [%[src1]]!") // q0 = d
293-
__ASM_EMIT("vld1.32 {d8[], d9[]}, [%[src2]]!") // q4 = s
294-
__ASM_EMIT("vsub.f32 q4, q4, q0") // q4 = s - d
295-
__ASM_EMIT("vmla.f32 q0, q4, q8") // q0 = d + (s-d)*k
296-
__ASM_EMIT("subs %[count], #1")
297-
__ASM_EMIT("vst1.32 {d0[0]}, [%[dst]]!")
298-
__ASM_EMIT("bge 7b")
299-
// end
300-
__ASM_EMIT("8:")
301-
302-
: [dst] "+r" (dst), [src1] "+r" (src1), [src2] "+r" (src2),
303-
[count] "+r" (count)
304-
: [k] "r" (&k)
305-
: "cc", "memory",
306-
"q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
307-
"q8"
308-
);
309-
}
310172
} /* namespace neon_d32 */
311173
} /* namespace lsp */
312174

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

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,24 +36,12 @@ namespace lsp
3636
dst[i] += (src[i] - dst[i])*k[i];
3737
}
3838

39-
void pmix_v2(float *dst, const float *src1, const float *src2, const float *k, size_t count)
40-
{
41-
for (size_t i=0; i<count; ++i)
42-
dst[i] = src1[i] + (src2[i] - src1[i])*k[i];
43-
}
44-
4539
void pmix_k1(float *dst, const float *src, float k, size_t count)
4640
{
4741
for (size_t i=0; i<count; ++i)
4842
dst[i] += (src[i] - dst[i])*k;
4943
}
5044

51-
void pmix_k2(float *dst, const float *src1, const float *src2, float k, size_t count)
52-
{
53-
for (size_t i=0; i<count; ++i)
54-
dst[i] = src1[i] + (src2[i] - src1[i])*k;
55-
}
56-
5745
} /* namespace generic */
5846
} /* namespace lsp */
5947

0 commit comments

Comments
 (0)