1 /*
2
3 Copyright (C) 2014, The University of Texas at Austin
4
5 This file is part of libflame and is available under the 3-Clause
6 BSD license, which can be found in the LICENSE file at the top-level
7 directory, or at http://opensource.org/licenses/BSD-3-Clause
8
9 */
10
11 #include "blis1.h"
12
bl1_icopyv(conj1_t conj,int m,int * x,int incx,int * y,int incy)13 void bl1_icopyv( conj1_t conj, int m, int* x, int incx, int* y, int incy )
14 {
15 int* chi;
16 int* psi;
17 int i;
18
19 // Return early if possible.
20 if ( bl1_zero_dim1( m ) ) return;
21
22 // Initialize pointers.
23 chi = x;
24 psi = y;
25
26 for ( i = 0; i < m; ++i )
27 {
28 *psi = *chi;
29
30 chi += incx;
31 psi += incy;
32 }
33 }
34
bl1_scopyv(conj1_t conj,int m,float * x,int incx,float * y,int incy)35 void bl1_scopyv( conj1_t conj, int m, float* x, int incx, float* y, int incy )
36 {
37 bl1_scopy( m,
38 x, incx,
39 y, incy );
40 }
41
bl1_dcopyv(conj1_t conj,int m,double * x,int incx,double * y,int incy)42 void bl1_dcopyv( conj1_t conj, int m, double* x, int incx, double* y, int incy )
43 {
44 bl1_dcopy( m,
45 x, incx,
46 y, incy );
47 }
48
bl1_ccopyv(conj1_t conj,int m,scomplex * x,int incx,scomplex * y,int incy)49 void bl1_ccopyv( conj1_t conj, int m, scomplex* x, int incx, scomplex* y, int incy )
50 {
51 // Return early if possible.
52 if ( bl1_zero_dim1( m ) ) return;
53
54 bl1_ccopy( m,
55 x, incx,
56 y, incy );
57
58 if ( bl1_is_conj( conj ) )
59 bl1_cconjv( m,
60 y, incy );
61 }
62
bl1_zcopyv(conj1_t conj,int m,dcomplex * x,int incx,dcomplex * y,int incy)63 void bl1_zcopyv( conj1_t conj, int m, dcomplex* x, int incx, dcomplex* y, int incy )
64 {
65 // Return early if possible.
66 if ( bl1_zero_dim1( m ) ) return;
67
68 bl1_zcopy( m,
69 x, incx,
70 y, incy );
71
72 if ( bl1_is_conj( conj ) )
73 bl1_zconjv( m,
74 y, incy );
75 }
76
77 // --- Mixed-datatype and general stride copy routines---------------
78
79 // sd ds
bl1_sdcopyv(conj1_t conj,int m,float * x,int incx,double * y,int incy)80 void bl1_sdcopyv( conj1_t conj, int m, float* x, int incx, double* y, int incy )
81 {
82 float* chi;
83 double* psi;
84 int i;
85
86 // Return early if possible.
87 if ( bl1_zero_dim1( m ) ) return;
88
89 // Initialize pointers.
90 chi = x;
91 psi = y;
92
93 for ( i = 0; i < m; ++i )
94 {
95 *psi = *chi;
96
97 chi += incx;
98 psi += incy;
99 }
100 }
bl1_dscopyv(conj1_t conj,int m,double * x,int incx,float * y,int incy)101 void bl1_dscopyv( conj1_t conj, int m, double* x, int incx, float* y, int incy )
102 {
103 double* chi;
104 float* psi;
105 int i;
106
107 // Return early if possible.
108 if ( bl1_zero_dim1( m ) ) return;
109
110 // Initialize pointers.
111 chi = x;
112 psi = y;
113
114 for ( i = 0; i < m; ++i )
115 {
116 *psi = *chi;
117
118 chi += incx;
119 psi += incy;
120 }
121 }
122
123 // sc cs
bl1_sccopyv(conj1_t conj,int m,float * x,int incx,scomplex * y,int incy)124 void bl1_sccopyv( conj1_t conj, int m, float* x, int incx, scomplex* y, int incy )
125 {
126 float* chi;
127 scomplex* psi;
128 int i;
129
130 // Return early if possible.
131 if ( bl1_zero_dim1( m ) ) return;
132
133 // Initialize pointers.
134 chi = x;
135 psi = y;
136
137 for ( i = 0; i < m; ++i )
138 {
139 psi->real = *chi;
140 psi->imag = 0.0F;
141
142 chi += incx;
143 psi += incy;
144 }
145 }
bl1_cscopyv(conj1_t conj,int m,scomplex * x,int incx,float * y,int incy)146 void bl1_cscopyv( conj1_t conj, int m, scomplex* x, int incx, float* y, int incy )
147 {
148 scomplex* chi;
149 float* psi;
150 int i;
151
152 // Return early if possible.
153 if ( bl1_zero_dim1( m ) ) return;
154
155 // Initialize pointers.
156 chi = x;
157 psi = y;
158
159 for ( i = 0; i < m; ++i )
160 {
161 *psi = chi->real;
162
163 chi += incx;
164 psi += incy;
165 }
166 }
167
168 // sz zs
bl1_szcopyv(conj1_t conj,int m,float * x,int incx,dcomplex * y,int incy)169 void bl1_szcopyv( conj1_t conj, int m, float* x, int incx, dcomplex* y, int incy )
170 {
171 float* chi;
172 dcomplex* psi;
173 int i;
174
175 // Return early if possible.
176 if ( bl1_zero_dim1( m ) ) return;
177
178 // Initialize pointers.
179 chi = x;
180 psi = y;
181
182 for ( i = 0; i < m; ++i )
183 {
184 psi->real = *chi;
185 psi->imag = 0.0;
186
187 chi += incx;
188 psi += incy;
189 }
190 }
bl1_zscopyv(conj1_t conj,int m,dcomplex * x,int incx,float * y,int incy)191 void bl1_zscopyv( conj1_t conj, int m, dcomplex* x, int incx, float* y, int incy )
192 {
193 dcomplex* chi;
194 float* psi;
195 int i;
196
197 // Return early if possible.
198 if ( bl1_zero_dim1( m ) ) return;
199
200 // Initialize pointers.
201 chi = x;
202 psi = y;
203
204 for ( i = 0; i < m; ++i )
205 {
206 *psi = chi->real;
207
208 chi += incx;
209 psi += incy;
210 }
211 }
212
213 // dc cd
bl1_dccopyv(conj1_t conj,int m,double * x,int incx,scomplex * y,int incy)214 void bl1_dccopyv( conj1_t conj, int m, double* x, int incx, scomplex* y, int incy )
215 {
216 double* chi;
217 scomplex* psi;
218 int i;
219
220 // Return early if possible.
221 if ( bl1_zero_dim1( m ) ) return;
222
223 // Initialize pointers.
224 chi = x;
225 psi = y;
226
227 for ( i = 0; i < m; ++i )
228 {
229 psi->real = *chi;
230 psi->imag = 0.0F;
231
232 chi += incx;
233 psi += incy;
234 }
235 }
bl1_cdcopyv(conj1_t conj,int m,scomplex * x,int incx,double * y,int incy)236 void bl1_cdcopyv( conj1_t conj, int m, scomplex* x, int incx, double* y, int incy )
237 {
238 scomplex* chi;
239 double* psi;
240 int i;
241
242 // Return early if possible.
243 if ( bl1_zero_dim1( m ) ) return;
244
245 // Initialize pointers.
246 chi = x;
247 psi = y;
248
249 for ( i = 0; i < m; ++i )
250 {
251 *psi = chi->real;
252
253 chi += incx;
254 psi += incy;
255 }
256 }
257
258 // dz zd
bl1_dzcopyv(conj1_t conj,int m,double * x,int incx,dcomplex * y,int incy)259 void bl1_dzcopyv( conj1_t conj, int m, double* x, int incx, dcomplex* y, int incy )
260 {
261 double* chi;
262 dcomplex* psi;
263 int i;
264
265 // Return early if possible.
266 if ( bl1_zero_dim1( m ) ) return;
267
268 // Initialize pointers.
269 chi = x;
270 psi = y;
271
272 for ( i = 0; i < m; ++i )
273 {
274 psi->real = *chi;
275 psi->imag = 0.0;
276
277 chi += incx;
278 psi += incy;
279 }
280 }
bl1_zdcopyv(conj1_t conj,int m,dcomplex * x,int incx,double * y,int incy)281 void bl1_zdcopyv( conj1_t conj, int m, dcomplex* x, int incx, double* y, int incy )
282 {
283 dcomplex* chi;
284 double* psi;
285 int i;
286
287 // Return early if possible.
288 if ( bl1_zero_dim1( m ) ) return;
289
290 // Initialize pointers.
291 chi = x;
292 psi = y;
293
294 for ( i = 0; i < m; ++i )
295 {
296 *psi = chi->real;
297
298 chi += incx;
299 psi += incy;
300 }
301 }
302
303 // cz zc
bl1_czcopyv(conj1_t conj,int m,scomplex * x,int incx,dcomplex * y,int incy)304 void bl1_czcopyv( conj1_t conj, int m, scomplex* x, int incx, dcomplex* y, int incy )
305 {
306 scomplex* chi;
307 dcomplex* psi;
308 int i;
309
310 // Return early if possible.
311 if ( bl1_zero_dim1( m ) ) return;
312
313 // Initialize pointers.
314 chi = x;
315 psi = y;
316
317 for ( i = 0; i < m; ++i )
318 {
319 psi->real = chi->real;
320 psi->imag = chi->imag;
321
322 chi += incx;
323 psi += incy;
324 }
325
326 if ( bl1_is_conj( conj ) )
327 bl1_zconjv( m,
328 y, incy );
329 }
bl1_zccopyv(conj1_t conj,int m,dcomplex * x,int incx,scomplex * y,int incy)330 void bl1_zccopyv( conj1_t conj, int m, dcomplex* x, int incx, scomplex* y, int incy )
331 {
332 dcomplex* chi;
333 scomplex* psi;
334 int i;
335
336 // Return early if possible.
337 if ( bl1_zero_dim1( m ) ) return;
338
339 // Initialize pointers.
340 chi = x;
341 psi = y;
342
343 for ( i = 0; i < m; ++i )
344 {
345 psi->real = chi->real;
346 psi->imag = chi->imag;
347
348 chi += incx;
349 psi += incy;
350 }
351
352 if ( bl1_is_conj( conj ) )
353 bl1_cconjv( m,
354 y, incy );
355 }
356
357