1 /*
2  * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
3  *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
4  *
5  * This file is part of lsp-plugins
6  * Created on: 26 нояб. 2019 г.
7  *
8  * lsp-plugins is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU Lesser General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * any later version.
12  *
13  * lsp-plugins is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with lsp-plugins. If not, see <https://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef DSP_ARCH_NATIVE_PMATH_ABS_VV_H_
23 #define DSP_ARCH_NATIVE_PMATH_ABS_VV_H_
24 
25 #ifndef __DSP_NATIVE_IMPL
26     #error "This header should not be included directly"
27 #endif /* __DSP_NATIVE_IMPL */
28 
29 namespace native
30 {
abs1(float * dst,size_t count)31     void abs1(float *dst, size_t count)
32     {
33         for (size_t i=0; i<count; ++i)
34             dst[i]      = fabs(dst[i]);
35     }
36 
abs2(float * dst,const float * src,size_t count)37     void abs2(float *dst, const float *src, size_t count)
38     {
39         for (size_t i=0; i<count; ++i)
40             dst[i]      = fabs(src[i]);
41     }
42 
abs_add2(float * dst,const float * src,size_t count)43     void abs_add2(float *dst, const float *src, size_t count)
44     {
45         for (size_t i=0; i<count; ++i)
46             dst[i]     += fabs(src[i]);
47     }
48 
abs_sub2(float * dst,const float * src,size_t count)49     void abs_sub2(float *dst, const float *src, size_t count)
50     {
51         for (size_t i=0; i<count; ++i)
52             dst[i]     -= fabs(src[i]);
53     }
54 
abs_rsub2(float * dst,const float * src,size_t count)55     void abs_rsub2(float *dst, const float *src, size_t count)
56     {
57         for (size_t i=0; i<count; ++i)
58             dst[i]     = fabs(src[i]) - dst[i];
59     }
60 
abs_mul2(float * dst,const float * src,size_t count)61     void abs_mul2(float *dst, const float *src, size_t count)
62     {
63         for (size_t i=0; i<count; ++i)
64             dst[i]     *= fabs(src[i]);
65     }
66 
abs_div2(float * dst,const float * src,size_t count)67     void abs_div2(float *dst, const float *src, size_t count)
68     {
69         for (size_t i=0; i<count; ++i)
70             dst[i]     /= fabs(src[i]);
71     }
72 
abs_rdiv2(float * dst,const float * src,size_t count)73     void abs_rdiv2(float *dst, const float *src, size_t count)
74     {
75         for (size_t i=0; i<count; ++i)
76             dst[i]      = fabs(src[i]) / dst[i];
77     }
78 
abs_add3(float * dst,const float * src1,const float * src2,size_t count)79     void abs_add3(float *dst, const float *src1, const float *src2, size_t count)
80     {
81         for (size_t i=0; i<count; ++i)
82             dst[i]      = src1[i] + fabs(src2[i]);
83     }
84 
abs_sub3(float * dst,const float * src1,const float * src2,size_t count)85     void abs_sub3(float *dst, const float *src1, const float *src2, size_t count)
86     {
87         for (size_t i=0; i<count; ++i)
88             dst[i]      = src1[i] - fabs(src2[i]);
89     }
90 
abs_rsub3(float * dst,const float * src1,const float * src2,size_t count)91     void abs_rsub3(float *dst, const float *src1, const float *src2, size_t count)
92     {
93         for (size_t i=0; i<count; ++i)
94             dst[i]      = fabs(src2[i]) - src1[i];
95     }
96 
abs_mul3(float * dst,const float * src1,const float * src2,size_t count)97     void abs_mul3(float *dst, const float *src1, const float *src2, size_t count)
98     {
99         for (size_t i=0; i<count; ++i)
100             dst[i]      = src1[i] * fabs(src2[i]);
101     }
102 
abs_div3(float * dst,const float * src1,const float * src2,size_t count)103     void abs_div3(float *dst, const float *src1, const float *src2, size_t count)
104     {
105         for (size_t i=0; i<count; ++i)
106             dst[i]      = src1[i] / fabs(src2[i]);
107     }
108 
abs_rdiv3(float * dst,const float * src1,const float * src2,size_t count)109     void abs_rdiv3(float *dst, const float *src1, const float *src2, size_t count)
110     {
111         for (size_t i=0; i<count; ++i)
112             dst[i]      = fabs(src2[i]) / src1[i];
113     }
114 }
115 
116 
117 #endif /* INCLUDE_DSP_ARCH_NATIVE_PMATH_ABS_VV_H_ */
118