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