[dense-linear-algebra-libraries/linalg.git] / blis / frame / include / level0 / rih / bli_scal2rihs_mxn_uplo.h
1 /*
3 BLIS
4 An object-based framework for developing high-performance BLAS-like
5 libraries.
7 Copyright (C) 2014, The University of Texas at Austin
9 Redistribution and use in source and binary forms, with or without
10 modification, are permitted provided that the following conditions are
11 met:
12 - Redistributions of source code must retain the above copyright
13 notice, this list of conditions and the following disclaimer.
14 - Redistributions in binary form must reproduce the above copyright
15 notice, this list of conditions and the following disclaimer in the
16 documentation and/or other materials provided with the distribution.
17 - Neither the name of The University of Texas at Austin nor the names
18 of its contributors may be used to endorse or promote products
19 derived from this software without specific prior written permission.
21 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 */
35 #ifndef BLIS_SCAL2RIHS_MXN_UPLO_H
36 #define BLIS_SCAL2RIHS_MXN_UPLO_H
38 // scal2rihs_mxn_uplo
40 #define bli_cscal2rihs_mxn_uplo( schema, uplo, conjx, m, a, x, rs_x, cs_x, y_r, rs_y, cs_y ) \
41 { \
42 dim_t i, j; \
43 \
44 /* Handle ro, io, and rpi separately. */ \
45 if ( bli_is_ro_packed( schema ) ) \
46 { \
47 if ( bli_is_lower( uplo ) ) \
48 { \
49 if ( bli_is_conj( conjx ) ) \
50 { \
51 for ( j = 0; j < m; ++j ) \
52 for ( i = j; i < m; ++i ) \
53 { \
54 bli_cscal2jros( *(a), \
55 *(x + i*rs_x + j*cs_x), \
56 *(y_r + i*rs_y + j*cs_y) ); \
57 } \
58 } \
59 else /* if ( bli_is_noconj( conjx ) ) */ \
60 { \
61 for ( j = 0; j < m; ++j ) \
62 for ( i = j; i < m; ++i ) \
63 { \
64 bli_cscal2ros( *(a), \
65 *(x + i*rs_x + j*cs_x), \
66 *(y_r + i*rs_y + j*cs_y) ); \
67 } \
68 } \
69 } \
70 else /* if ( bli_is_upper( uplo ) ) */ \
71 { \
72 if ( bli_is_conj( conjx ) ) \
73 { \
74 for ( j = 0; j < m; ++j ) \
75 for ( i = 0; i < j + 1; ++i ) \
76 { \
77 bli_cscal2jros( *(a), \
78 *(x + i*rs_x + j*cs_x), \
79 *(y_r + i*rs_y + j*cs_y) ); \
80 } \
81 } \
82 else /* if ( bli_is_noconj( conjx ) ) */ \
83 { \
84 for ( j = 0; j < m; ++j ) \
85 for ( i = 0; i < j + 1; ++i ) \
86 { \
87 bli_cscal2ros( *(a), \
88 *(x + i*rs_x + j*cs_x), \
89 *(y_r + i*rs_y + j*cs_y) ); \
90 } \
91 } \
92 } \
93 } \
94 else if ( bli_is_io_packed( schema ) ) \
95 { \
96 if ( bli_is_lower( uplo ) ) \
97 { \
98 if ( bli_is_conj( conjx ) ) \
99 { \
100 for ( j = 0; j < m; ++j ) \
101 for ( i = j; i < m; ++i ) \
102 { \
103 bli_cscal2jios( *(a), \
104 *(x + i*rs_x + j*cs_x), \
105 *(y_r + i*rs_y + j*cs_y) ); \
106 } \
107 } \
108 else /* if ( bli_is_noconj( conjx ) ) */ \
109 { \
110 for ( j = 0; j < m; ++j ) \
111 for ( i = j; i < m; ++i ) \
112 { \
113 bli_cscal2ios( *(a), \
114 *(x + i*rs_x + j*cs_x), \
115 *(y_r + i*rs_y + j*cs_y) ); \
116 } \
117 } \
118 } \
119 else /* if ( bli_is_upper( uplo ) ) */ \
120 { \
121 if ( bli_is_conj( conjx ) ) \
122 { \
123 for ( j = 0; j < m; ++j ) \
124 for ( i = 0; i < j + 1; ++i ) \
125 { \
126 bli_cscal2jios( *(a), \
127 *(x + i*rs_x + j*cs_x), \
128 *(y_r + i*rs_y + j*cs_y) ); \
129 } \
130 } \
131 else /* if ( bli_is_noconj( conjx ) ) */ \
132 { \
133 for ( j = 0; j < m; ++j ) \
134 for ( i = 0; i < j + 1; ++i ) \
135 { \
136 bli_cscal2ios( *(a), \
137 *(x + i*rs_x + j*cs_x), \
138 *(y_r + i*rs_y + j*cs_y) ); \
139 } \
140 } \
141 } \
142 } \
143 else /* if ( bli_is_rpi_packed( schema ) ) */ \
144 { \
145 if ( bli_is_lower( uplo ) ) \
146 { \
147 if ( bli_is_conj( conjx ) ) \
148 { \
149 for ( j = 0; j < m; ++j ) \
150 for ( i = j; i < m; ++i ) \
151 { \
152 bli_cscal2jrpis( *(a), \
153 *(x + i*rs_x + j*cs_x), \
154 *(y_r + i*rs_y + j*cs_y) ); \
155 } \
156 } \
157 else /* if ( bli_is_noconj( conjx ) ) */ \
158 { \
159 for ( j = 0; j < m; ++j ) \
160 for ( i = j; i < m; ++i ) \
161 { \
162 bli_cscal2rpis( *(a), \
163 *(x + i*rs_x + j*cs_x), \
164 *(y_r + i*rs_y + j*cs_y) ); \
165 } \
166 } \
167 } \
168 else /* if ( bli_is_upper( uplo ) ) */ \
169 { \
170 if ( bli_is_conj( conjx ) ) \
171 { \
172 for ( j = 0; j < m; ++j ) \
173 for ( i = 0; i < j + 1; ++i ) \
174 { \
175 bli_cscal2jrpis( *(a), \
176 *(x + i*rs_x + j*cs_x), \
177 *(y_r + i*rs_y + j*cs_y) ); \
178 } \
179 } \
180 else /* if ( bli_is_noconj( conjx ) ) */ \
181 { \
182 for ( j = 0; j < m; ++j ) \
183 for ( i = 0; i < j + 1; ++i ) \
184 { \
185 bli_cscal2rpis( *(a), \
186 *(x + i*rs_x + j*cs_x), \
187 *(y_r + i*rs_y + j*cs_y) ); \
188 } \
189 } \
190 } \
191 } \
192 }
194 #define bli_zscal2rihs_mxn_uplo( schema, uplo, conjx, m, a, x, rs_x, cs_x, y_r, rs_y, cs_y ) \
195 { \
196 dim_t i, j; \
197 \
198 /* Handle ro, io, and rpi separately. */ \
199 if ( bli_is_ro_packed( schema ) ) \
200 { \
201 if ( bli_is_lower( uplo ) ) \
202 { \
203 if ( bli_is_conj( conjx ) ) \
204 { \
205 for ( j = 0; j < m; ++j ) \
206 for ( i = j; i < m; ++i ) \
207 { \
208 bli_zscal2jros( *(a), \
209 *(x + i*rs_x + j*cs_x), \
210 *(y_r + i*rs_y + j*cs_y) ); \
211 } \
212 } \
213 else /* if ( bli_is_noconj( conjx ) ) */ \
214 { \
215 for ( j = 0; j < m; ++j ) \
216 for ( i = j; i < m; ++i ) \
217 { \
218 bli_zscal2ros( *(a), \
219 *(x + i*rs_x + j*cs_x), \
220 *(y_r + i*rs_y + j*cs_y) ); \
221 } \
222 } \
223 } \
224 else /* if ( bli_is_upper( uplo ) ) */ \
225 { \
226 if ( bli_is_conj( conjx ) ) \
227 { \
228 for ( j = 0; j < m; ++j ) \
229 for ( i = 0; i < j + 1; ++i ) \
230 { \
231 bli_zscal2jros( *(a), \
232 *(x + i*rs_x + j*cs_x), \
233 *(y_r + i*rs_y + j*cs_y) ); \
234 } \
235 } \
236 else /* if ( bli_is_noconj( conjx ) ) */ \
237 { \
238 for ( j = 0; j < m; ++j ) \
239 for ( i = 0; i < j + 1; ++i ) \
240 { \
241 bli_zscal2ros( *(a), \
242 *(x + i*rs_x + j*cs_x), \
243 *(y_r + i*rs_y + j*cs_y) ); \
244 } \
245 } \
246 } \
247 } \
248 else if ( bli_is_io_packed( schema ) ) \
249 { \
250 if ( bli_is_lower( uplo ) ) \
251 { \
252 if ( bli_is_conj( conjx ) ) \
253 { \
254 for ( j = 0; j < m; ++j ) \
255 for ( i = j; i < m; ++i ) \
256 { \
257 bli_zscal2jios( *(a), \
258 *(x + i*rs_x + j*cs_x), \
259 *(y_r + i*rs_y + j*cs_y) ); \
260 } \
261 } \
262 else /* if ( bli_is_noconj( conjx ) ) */ \
263 { \
264 for ( j = 0; j < m; ++j ) \
265 for ( i = j; i < m; ++i ) \
266 { \
267 bli_zscal2ios( *(a), \
268 *(x + i*rs_x + j*cs_x), \
269 *(y_r + i*rs_y + j*cs_y) ); \
270 } \
271 } \
272 } \
273 else /* if ( bli_is_upper( uplo ) ) */ \
274 { \
275 if ( bli_is_conj( conjx ) ) \
276 { \
277 for ( j = 0; j < m; ++j ) \
278 for ( i = 0; i < j + 1; ++i ) \
279 { \
280 bli_zscal2jios( *(a), \
281 *(x + i*rs_x + j*cs_x), \
282 *(y_r + i*rs_y + j*cs_y) ); \
283 } \
284 } \
285 else /* if ( bli_is_noconj( conjx ) ) */ \
286 { \
287 for ( j = 0; j < m; ++j ) \
288 for ( i = 0; i < j + 1; ++i ) \
289 { \
290 bli_zscal2ios( *(a), \
291 *(x + i*rs_x + j*cs_x), \
292 *(y_r + i*rs_y + j*cs_y) ); \
293 } \
294 } \
295 } \
296 } \
297 else /* if ( bli_is_rpi_packed( schema ) ) */ \
298 { \
299 if ( bli_is_lower( uplo ) ) \
300 { \
301 if ( bli_is_conj( conjx ) ) \
302 { \
303 for ( j = 0; j < m; ++j ) \
304 for ( i = j; i < m; ++i ) \
305 { \
306 bli_zscal2jrpis( *(a), \
307 *(x + i*rs_x + j*cs_x), \
308 *(y_r + i*rs_y + j*cs_y) ); \
309 } \
310 } \
311 else /* if ( bli_is_noconj( conjx ) ) */ \
312 { \
313 for ( j = 0; j < m; ++j ) \
314 for ( i = j; i < m; ++i ) \
315 { \
316 bli_zscal2rpis( *(a), \
317 *(x + i*rs_x + j*cs_x), \
318 *(y_r + i*rs_y + j*cs_y) ); \
319 } \
320 } \
321 } \
322 else /* if ( bli_is_upper( uplo ) ) */ \
323 { \
324 if ( bli_is_conj( conjx ) ) \
325 { \
326 for ( j = 0; j < m; ++j ) \
327 for ( i = 0; i < j + 1; ++i ) \
328 { \
329 bli_zscal2jrpis( *(a), \
330 *(x + i*rs_x + j*cs_x), \
331 *(y_r + i*rs_y + j*cs_y) ); \
332 } \
333 } \
334 else /* if ( bli_is_noconj( conjx ) ) */ \
335 { \
336 for ( j = 0; j < m; ++j ) \
337 for ( i = 0; i < j + 1; ++i ) \
338 { \
339 bli_zscal2rpis( *(a), \
340 *(x + i*rs_x + j*cs_x), \
341 *(y_r + i*rs_y + j*cs_y) ); \
342 } \
343 } \
344 } \
345 } \
346 }
348 #endif