poulpy/poulpy-backend/src/cpu_fft64_ref/reim.rs
poulpy-backend/src/cpu_fft64_ref/reim.rsRaw
1use poulpy_hal::reference::fft64::{
2 reim::{
3 ReimAdd, ReimAddInplace, ReimAddMul, ReimCopy, ReimDFTExecute, ReimFFTTable, ReimFromZnx, ReimIFFTTable, ReimMul,
4 ReimMulInplace, ReimNegate, ReimNegateInplace, ReimSub, ReimSubABInplace, ReimSubBAInplace, ReimToZnx, ReimToZnxInplace,
5 ReimZero, fft_ref, ifft_ref, reim_add_inplace_ref, reim_add_ref, reim_addmul_ref, reim_copy_ref, reim_from_znx_i64_ref,
6 reim_mul_inplace_ref, reim_mul_ref, reim_negate_inplace_ref, reim_negate_ref, reim_sub_ab_inplace_ref,
7 reim_sub_ba_inplace_ref, reim_sub_ref, reim_to_znx_i64_inplace_ref, reim_to_znx_i64_ref, reim_zero_ref,
8 },
9 reim4::{
10 Reim4Extract1Blk, Reim4Mat1ColProd, Reim4Mat2Cols2ndColProd, Reim4Mat2ColsProd, Reim4Save1Blk, Reim4Save2Blks,
11 reim4_extract_1blk_from_reim_ref, reim4_save_1blk_to_reim_ref, reim4_save_2blk_to_reim_ref,
12 reim4_vec_mat1col_product_ref, reim4_vec_mat2cols_2ndcol_product_ref, reim4_vec_mat2cols_product_ref,
13 },
14};
15
16use crate::FFT64Ref;
17
18impl ReimDFTExecute<ReimFFTTable<f64>, f64> for FFT64Ref {
19 fn reim_dft_execute(table: &ReimFFTTable<f64>, data: &mut [f64]) {
20 fft_ref(table.m(), table.omg(), data);
21 }
22}
23
24impl ReimDFTExecute<ReimIFFTTable<f64>, f64> for FFT64Ref {
25 fn reim_dft_execute(table: &ReimIFFTTable<f64>, data: &mut [f64]) {
26 ifft_ref(table.m(), table.omg(), data);
27 }
28}
29
30impl ReimFromZnx for FFT64Ref {
31 #[inline(always)]
32 fn reim_from_znx(res: &mut [f64], a: &[i64]) {
33 reim_from_znx_i64_ref(res, a);
34 }
35}
36
37impl ReimToZnx for FFT64Ref {
38 #[inline(always)]
39 fn reim_to_znx(res: &mut [i64], divisor: f64, a: &[f64]) {
40 reim_to_znx_i64_ref(res, divisor, a);
41 }
42}
43
44impl ReimToZnxInplace for FFT64Ref {
45 #[inline(always)]
46 fn reim_to_znx_inplace(res: &mut [f64], divisor: f64) {
47 reim_to_znx_i64_inplace_ref(res, divisor);
48 }
49}
50
51impl ReimAdd for FFT64Ref {
52 #[inline(always)]
53 fn reim_add(res: &mut [f64], a: &[f64], b: &[f64]) {
54 reim_add_ref(res, a, b);
55 }
56}
57
58impl ReimAddInplace for FFT64Ref {
59 #[inline(always)]
60 fn reim_add_inplace(res: &mut [f64], a: &[f64]) {
61 reim_add_inplace_ref(res, a);
62 }
63}
64
65impl ReimSub for FFT64Ref {
66 #[inline(always)]
67 fn reim_sub(res: &mut [f64], a: &[f64], b: &[f64]) {
68 reim_sub_ref(res, a, b);
69 }
70}
71
72impl ReimSubABInplace for FFT64Ref {
73 #[inline(always)]
74 fn reim_sub_ab_inplace(res: &mut [f64], a: &[f64]) {
75 reim_sub_ab_inplace_ref(res, a);
76 }
77}
78
79impl ReimSubBAInplace for FFT64Ref {
80 #[inline(always)]
81 fn reim_sub_ba_inplace(res: &mut [f64], a: &[f64]) {
82 reim_sub_ba_inplace_ref(res, a);
83 }
84}
85
86impl ReimNegate for FFT64Ref {
87 #[inline(always)]
88 fn reim_negate(res: &mut [f64], a: &[f64]) {
89 reim_negate_ref(res, a);
90 }
91}
92
93impl ReimNegateInplace for FFT64Ref {
94 #[inline(always)]
95 fn reim_negate_inplace(res: &mut [f64]) {
96 reim_negate_inplace_ref(res);
97 }
98}
99
100impl ReimMul for FFT64Ref {
101 #[inline(always)]
102 fn reim_mul(res: &mut [f64], a: &[f64], b: &[f64]) {
103 reim_mul_ref(res, a, b);
104 }
105}
106
107impl ReimMulInplace for FFT64Ref {
108 #[inline(always)]
109 fn reim_mul_inplace(res: &mut [f64], a: &[f64]) {
110 reim_mul_inplace_ref(res, a);
111 }
112}
113
114impl ReimAddMul for FFT64Ref {
115 #[inline(always)]
116 fn reim_addmul(res: &mut [f64], a: &[f64], b: &[f64]) {
117 reim_addmul_ref(res, a, b);
118 }
119}
120
121impl ReimCopy for FFT64Ref {
122 #[inline(always)]
123 fn reim_copy(res: &mut [f64], a: &[f64]) {
124 reim_copy_ref(res, a);
125 }
126}
127
128impl ReimZero for FFT64Ref {
129 #[inline(always)]
130 fn reim_zero(res: &mut [f64]) {
131 reim_zero_ref(res);
132 }
133}
134
135impl Reim4Extract1Blk for FFT64Ref {
136 #[inline(always)]
137 fn reim4_extract_1blk(m: usize, rows: usize, blk: usize, dst: &mut [f64], src: &[f64]) {
138 reim4_extract_1blk_from_reim_ref(m, rows, blk, dst, src);
139 }
140}
141
142impl Reim4Save1Blk for FFT64Ref {
143 #[inline(always)]
144 fn reim4_save_1blk<const OVERWRITE: bool>(m: usize, blk: usize, dst: &mut [f64], src: &[f64]) {
145 reim4_save_1blk_to_reim_ref::<OVERWRITE>(m, blk, dst, src);
146 }
147}
148
149impl Reim4Save2Blks for FFT64Ref {
150 #[inline(always)]
151 fn reim4_save_2blks<const OVERWRITE: bool>(m: usize, blk: usize, dst: &mut [f64], src: &[f64]) {
152 reim4_save_2blk_to_reim_ref::<OVERWRITE>(m, blk, dst, src);
153 }
154}
155
156impl Reim4Mat1ColProd for FFT64Ref {
157 #[inline(always)]
158 fn reim4_mat1col_prod(nrows: usize, dst: &mut [f64], u: &[f64], v: &[f64]) {
159 reim4_vec_mat1col_product_ref(nrows, dst, u, v);
160 }
161}
162
163impl Reim4Mat2ColsProd for FFT64Ref {
164 #[inline(always)]
165 fn reim4_mat2cols_prod(nrows: usize, dst: &mut [f64], u: &[f64], v: &[f64]) {
166 reim4_vec_mat2cols_product_ref(nrows, dst, u, v);
167 }
168}
169
170impl Reim4Mat2Cols2ndColProd for FFT64Ref {
171 #[inline(always)]
172 fn reim4_mat2cols_2ndcol_prod(nrows: usize, dst: &mut [f64], u: &[f64], v: &[f64]) {
173 reim4_vec_mat2cols_2ndcol_product_ref(nrows, dst, u, v);
174 }
175}