Merge pull request #3469 from martin-frbg/issue2986
[platform/upstream/openblas.git] / param.h
1 /*****************************************************************************
2 Copyright (c) 2011-2014, The OpenBLAS Project
3 All rights reserved.
4
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions are
7 met:
8
9    1. Redistributions of source code must retain the above copyright
10       notice, this list of conditions and the following disclaimer.
11
12    2. Redistributions in binary form must reproduce the above copyright
13       notice, this list of conditions and the following disclaimer in
14       the documentation and/or other materials provided with the
15       distribution.
16    3. Neither the name of the OpenBLAS project nor the names of 
17       its contributors may be used to endorse or promote products 
18       derived from this software without specific prior written 
19       permission.
20
21 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
30 USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
32 **********************************************************************************/
33
34 /*********************************************************************/
35 /* Copyright 2009, 2010 The University of Texas at Austin.           */
36 /* All rights reserved.                                              */
37 /*                                                                   */
38 /* Redistribution and use in source and binary forms, with or        */
39 /* without modification, are permitted provided that the following   */
40 /* conditions are met:                                               */
41 /*                                                                   */
42 /*   1. Redistributions of source code must retain the above         */
43 /*      copyright notice, this list of conditions and the following  */
44 /*      disclaimer.                                                  */
45 /*                                                                   */
46 /*   2. Redistributions in binary form must reproduce the above      */
47 /*      copyright notice, this list of conditions and the following  */
48 /*      disclaimer in the documentation and/or other materials       */
49 /*      provided with the distribution.                              */
50 /*                                                                   */
51 /*    THIS  SOFTWARE IS PROVIDED  BY THE  UNIVERSITY OF  TEXAS AT    */
52 /*    AUSTIN  ``AS IS''  AND ANY  EXPRESS OR  IMPLIED WARRANTIES,    */
53 /*    INCLUDING, BUT  NOT LIMITED  TO, THE IMPLIED  WARRANTIES OF    */
54 /*    MERCHANTABILITY  AND FITNESS FOR  A PARTICULAR  PURPOSE ARE    */
55 /*    DISCLAIMED.  IN  NO EVENT SHALL THE UNIVERSITY  OF TEXAS AT    */
56 /*    AUSTIN OR CONTRIBUTORS BE  LIABLE FOR ANY DIRECT, INDIRECT,    */
57 /*    INCIDENTAL,  SPECIAL, EXEMPLARY,  OR  CONSEQUENTIAL DAMAGES    */
58 /*    (INCLUDING, BUT  NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE    */
59 /*    GOODS  OR  SERVICES; LOSS  OF  USE,  DATA,  OR PROFITS;  OR    */
60 /*    BUSINESS INTERRUPTION) HOWEVER CAUSED  AND ON ANY THEORY OF    */
61 /*    LIABILITY, WHETHER  IN CONTRACT, STRICT  LIABILITY, OR TORT    */
62 /*    (INCLUDING NEGLIGENCE OR OTHERWISE)  ARISING IN ANY WAY OUT    */
63 /*    OF  THE  USE OF  THIS  SOFTWARE,  EVEN  IF ADVISED  OF  THE    */
64 /*    POSSIBILITY OF SUCH DAMAGE.                                    */
65 /*                                                                   */
66 /* The views and conclusions contained in the software and           */
67 /* documentation are those of the authors and should not be          */
68 /* interpreted as representing official policies, either expressed   */
69 /* or implied, of The University of Texas at Austin.                 */
70 /*********************************************************************/
71
72 #ifndef PARAM_H
73 #define PARAM_H
74
75
76 #define SBGEMM_DEFAULT_UNROLL_N 4
77 #define SBGEMM_DEFAULT_UNROLL_M 8
78 #define SBGEMM_DEFAULT_UNROLL_MN 32
79 #define SBGEMM_DEFAULT_P 256
80 #define SBGEMM_DEFAULT_R 256
81 #define SBGEMM_DEFAULT_Q 256
82 #ifdef OPTERON
83
84 #define SNUMOPT         4
85 #define DNUMOPT         2
86
87 #define GEMM_DEFAULT_OFFSET_A  64
88 #define GEMM_DEFAULT_OFFSET_B 256
89 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x01ffffUL
90
91 #define SGEMM_DEFAULT_UNROLL_N 4
92 #define DGEMM_DEFAULT_UNROLL_N 4
93 #define QGEMM_DEFAULT_UNROLL_N 2
94 #define CGEMM_DEFAULT_UNROLL_N 2
95 #define ZGEMM_DEFAULT_UNROLL_N 2
96 #define XGEMM_DEFAULT_UNROLL_N 1
97
98 #ifdef ARCH_X86
99 #define SGEMM_DEFAULT_UNROLL_M 4
100 #define DGEMM_DEFAULT_UNROLL_M 2
101 #define QGEMM_DEFAULT_UNROLL_M 2
102 #define CGEMM_DEFAULT_UNROLL_M 2
103 #define ZGEMM_DEFAULT_UNROLL_M 1
104 #define XGEMM_DEFAULT_UNROLL_M 1
105 #else
106 #define SGEMM_DEFAULT_UNROLL_M 8
107 #define DGEMM_DEFAULT_UNROLL_M 4
108 #define QGEMM_DEFAULT_UNROLL_M 2
109 #define CGEMM_DEFAULT_UNROLL_M 4
110 #define ZGEMM_DEFAULT_UNROLL_M 2
111 #define XGEMM_DEFAULT_UNROLL_M 1
112 #endif
113
114 #define SGEMM_DEFAULT_P sgemm_p
115 #define DGEMM_DEFAULT_P dgemm_p
116 #define QGEMM_DEFAULT_P qgemm_p
117 #define CGEMM_DEFAULT_P cgemm_p
118 #define ZGEMM_DEFAULT_P zgemm_p
119 #define XGEMM_DEFAULT_P xgemm_p
120
121 #define SGEMM_DEFAULT_R sgemm_r
122 #define DGEMM_DEFAULT_R dgemm_r
123 #define QGEMM_DEFAULT_R qgemm_r
124 #define CGEMM_DEFAULT_R cgemm_r
125 #define ZGEMM_DEFAULT_R zgemm_r
126 #define XGEMM_DEFAULT_R xgemm_r
127
128 #ifdef ALLOC_HUGETLB
129
130 #define SGEMM_DEFAULT_Q 248
131 #define DGEMM_DEFAULT_Q 248
132 #define QGEMM_DEFAULT_Q 248
133 #define CGEMM_DEFAULT_Q 248
134 #define ZGEMM_DEFAULT_Q 248
135 #define XGEMM_DEFAULT_Q 248
136
137 #else
138
139 #define SGEMM_DEFAULT_Q 240
140 #define DGEMM_DEFAULT_Q 240
141 #define QGEMM_DEFAULT_Q 240
142 #define CGEMM_DEFAULT_Q 240
143 #define ZGEMM_DEFAULT_Q 240
144 #define XGEMM_DEFAULT_Q 240
145
146 #endif
147
148
149 #define SYMV_P  16
150 #define HAVE_EXCLUSIVE_CACHE
151
152 #endif
153
154 #if defined(BARCELONA) || defined(SHANGHAI) || defined(BOBCAT)
155
156 #define SNUMOPT         8
157 #define DNUMOPT         4
158
159 #define GEMM_DEFAULT_OFFSET_A  64
160 #define GEMM_DEFAULT_OFFSET_B 832
161 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x0fffUL
162
163 #define SGEMM_DEFAULT_UNROLL_N 4
164 #define DGEMM_DEFAULT_UNROLL_N 4
165 #define QGEMM_DEFAULT_UNROLL_N 2
166 #define CGEMM_DEFAULT_UNROLL_N 2
167 #define ZGEMM_DEFAULT_UNROLL_N 2
168 #define XGEMM_DEFAULT_UNROLL_N 1
169
170 #ifdef ARCH_X86
171 #define SGEMM_DEFAULT_UNROLL_M 4
172 #define DGEMM_DEFAULT_UNROLL_M 2
173 #define QGEMM_DEFAULT_UNROLL_M 2
174 #define CGEMM_DEFAULT_UNROLL_M 2
175 #define ZGEMM_DEFAULT_UNROLL_M 1
176 #define XGEMM_DEFAULT_UNROLL_M 1
177 #else
178 #define SGEMM_DEFAULT_UNROLL_M 8
179 #define DGEMM_DEFAULT_UNROLL_M 4
180 #define QGEMM_DEFAULT_UNROLL_M 2
181 #define CGEMM_DEFAULT_UNROLL_M 4
182 #define ZGEMM_DEFAULT_UNROLL_M 2
183 #define XGEMM_DEFAULT_UNROLL_M 1
184 #endif
185
186 #if 0
187 #define SGEMM_DEFAULT_P 496
188 #define DGEMM_DEFAULT_P 248
189 #define QGEMM_DEFAULT_P 124
190 #define CGEMM_DEFAULT_P 248
191 #define ZGEMM_DEFAULT_P 124
192 #define XGEMM_DEFAULT_P  62
193
194 #define SGEMM_DEFAULT_Q 248
195 #define DGEMM_DEFAULT_Q 248
196 #define QGEMM_DEFAULT_Q 248
197 #define CGEMM_DEFAULT_Q 248
198 #define ZGEMM_DEFAULT_Q 248
199 #define XGEMM_DEFAULT_Q 248
200
201 #else
202
203 #define SGEMM_DEFAULT_P 448
204 #define DGEMM_DEFAULT_P 224
205 #define QGEMM_DEFAULT_P 112
206 #define CGEMM_DEFAULT_P 224
207 #define ZGEMM_DEFAULT_P 112
208 #define XGEMM_DEFAULT_P  56
209
210 #define SGEMM_DEFAULT_Q 224
211 #define DGEMM_DEFAULT_Q 224
212 #define QGEMM_DEFAULT_Q 224
213 #define CGEMM_DEFAULT_Q 224
214 #define ZGEMM_DEFAULT_Q 224
215 #define XGEMM_DEFAULT_Q 224
216
217 #endif
218
219 #define SGEMM_DEFAULT_R sgemm_r
220 #define QGEMM_DEFAULT_R qgemm_r
221 #define DGEMM_DEFAULT_R dgemm_r
222 #define CGEMM_DEFAULT_R cgemm_r
223 #define ZGEMM_DEFAULT_R zgemm_r
224 #define XGEMM_DEFAULT_R xgemm_r
225
226 #define SYMV_P  16
227 #define HAVE_EXCLUSIVE_CACHE
228
229 #define GEMM_THREAD gemm_thread_mn
230
231 #endif
232
233
234 #ifdef BULLDOZER
235
236 #define SNUMOPT         8
237 #define DNUMOPT         4
238
239 #define GEMM_DEFAULT_OFFSET_A  64
240 #define GEMM_DEFAULT_OFFSET_B 832
241 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x0fffUL
242
243
244
245 #define QGEMM_DEFAULT_UNROLL_N 2
246 #define CGEMM_DEFAULT_UNROLL_N 2
247 #define ZGEMM_DEFAULT_UNROLL_N 2
248 #define XGEMM_DEFAULT_UNROLL_N 1
249
250 #ifdef ARCH_X86
251 #define SGEMM_DEFAULT_UNROLL_N 4
252 #define DGEMM_DEFAULT_UNROLL_N 4
253 #define SGEMM_DEFAULT_UNROLL_M 4
254 #define DGEMM_DEFAULT_UNROLL_M 2
255 #define QGEMM_DEFAULT_UNROLL_M 2
256 #define CGEMM_DEFAULT_UNROLL_M 2
257 #define ZGEMM_DEFAULT_UNROLL_M 1
258 #define XGEMM_DEFAULT_UNROLL_M 1
259 #else
260 #define SGEMM_DEFAULT_UNROLL_N 2
261 #define DGEMM_DEFAULT_UNROLL_N 2
262 #define SGEMM_DEFAULT_UNROLL_M 16
263 #define DGEMM_DEFAULT_UNROLL_M 8
264 #define QGEMM_DEFAULT_UNROLL_M 2
265 #define CGEMM_DEFAULT_UNROLL_M 4
266 #define ZGEMM_DEFAULT_UNROLL_M 2
267 #define XGEMM_DEFAULT_UNROLL_M 1
268 #define CGEMM3M_DEFAULT_UNROLL_N 4
269 #define CGEMM3M_DEFAULT_UNROLL_M 8
270 #define ZGEMM3M_DEFAULT_UNROLL_N 4
271 #define ZGEMM3M_DEFAULT_UNROLL_M 4
272
273 #define DGEMM_DEFAULT_UNROLL_MN 16
274 #define GEMV_UNROLL 8
275 #endif
276
277
278 #if defined(ARCH_X86_64)
279 #define SGEMM_DEFAULT_P 768
280 #define DGEMM_DEFAULT_P 384
281 #else
282 #define SGEMM_DEFAULT_P 448
283 #define DGEMM_DEFAULT_P 224
284 #endif
285
286 #define QGEMM_DEFAULT_P 112
287 #define CGEMM_DEFAULT_P 224
288 #define ZGEMM_DEFAULT_P 112
289 #define XGEMM_DEFAULT_P  56
290
291 #if defined(ARCH_X86_64)
292 #define SGEMM_DEFAULT_Q 168
293 #define DGEMM_DEFAULT_Q 168
294 #else
295 #define SGEMM_DEFAULT_Q 224
296 #define DGEMM_DEFAULT_Q 224
297 #endif
298
299 #define QGEMM_DEFAULT_Q 224
300 #define CGEMM_DEFAULT_Q 224
301 #define ZGEMM_DEFAULT_Q 224
302 #define XGEMM_DEFAULT_Q 224
303
304 #define CGEMM3M_DEFAULT_P 448
305 #define ZGEMM3M_DEFAULT_P 224
306 #define XGEMM3M_DEFAULT_P 112
307 #define CGEMM3M_DEFAULT_Q 224
308 #define ZGEMM3M_DEFAULT_Q 224
309 #define XGEMM3M_DEFAULT_Q 224
310 #define CGEMM3M_DEFAULT_R 12288
311 #define ZGEMM3M_DEFAULT_R 12288
312 #define XGEMM3M_DEFAULT_R 12288
313
314 #define SGEMM_DEFAULT_R sgemm_r
315 #define QGEMM_DEFAULT_R qgemm_r
316 #define DGEMM_DEFAULT_R dgemm_r
317 #define CGEMM_DEFAULT_R cgemm_r
318 #define ZGEMM_DEFAULT_R zgemm_r
319 #define XGEMM_DEFAULT_R xgemm_r
320
321 #define SYMV_P  16
322 #define HAVE_EXCLUSIVE_CACHE
323
324 #define GEMM_THREAD gemm_thread_mn
325
326 #endif
327
328 #ifdef PILEDRIVER
329 #define SNUMOPT         8
330 #define DNUMOPT         4
331
332 #define GEMM_DEFAULT_OFFSET_A  64
333 #define GEMM_DEFAULT_OFFSET_B 832
334 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x0fffUL
335
336
337
338 #define QGEMM_DEFAULT_UNROLL_N 2
339 #define CGEMM_DEFAULT_UNROLL_N 2
340 #define ZGEMM_DEFAULT_UNROLL_N 2
341 #define XGEMM_DEFAULT_UNROLL_N 1
342
343 #ifdef ARCH_X86
344 #define SGEMM_DEFAULT_UNROLL_N 4
345 #define DGEMM_DEFAULT_UNROLL_N 4
346 #define SGEMM_DEFAULT_UNROLL_M 4
347 #define DGEMM_DEFAULT_UNROLL_M 2
348 #define QGEMM_DEFAULT_UNROLL_M 2
349 #define CGEMM_DEFAULT_UNROLL_M 2
350 #define ZGEMM_DEFAULT_UNROLL_M 1
351 #define XGEMM_DEFAULT_UNROLL_M 1
352 #else
353 #define SGEMM_DEFAULT_UNROLL_N 2
354 #define DGEMM_DEFAULT_UNROLL_N 2
355 #define SGEMM_DEFAULT_UNROLL_M 16
356 #define DGEMM_DEFAULT_UNROLL_M 8
357 #define QGEMM_DEFAULT_UNROLL_M 2
358 #define CGEMM_DEFAULT_UNROLL_M 4
359 #define ZGEMM_DEFAULT_UNROLL_M 2
360 #define XGEMM_DEFAULT_UNROLL_M 1
361 #define CGEMM3M_DEFAULT_UNROLL_N 4
362 #define CGEMM3M_DEFAULT_UNROLL_M 8
363 #define ZGEMM3M_DEFAULT_UNROLL_N 4
364 #define ZGEMM3M_DEFAULT_UNROLL_M 4
365 #define GEMV_UNROLL 8
366 #endif
367
368 #if defined(ARCH_X86_64)
369 #define SGEMM_DEFAULT_P 768
370 #define DGEMM_DEFAULT_P 768
371 #define ZGEMM_DEFAULT_P 384
372 #define CGEMM_DEFAULT_P 768
373 #else
374 #define SGEMM_DEFAULT_P 448
375 #define DGEMM_DEFAULT_P 480
376 #define ZGEMM_DEFAULT_P 112
377 #define CGEMM_DEFAULT_P 224
378 #endif
379 #define QGEMM_DEFAULT_P 112
380 #define XGEMM_DEFAULT_P  56
381
382 #if defined(ARCH_X86_64)
383 #define SGEMM_DEFAULT_Q 192
384 #define DGEMM_DEFAULT_Q 168
385 #define ZGEMM_DEFAULT_Q 168
386 #define CGEMM_DEFAULT_Q 168
387 #else
388 #define SGEMM_DEFAULT_Q 224
389 #define DGEMM_DEFAULT_Q 224
390 #define ZGEMM_DEFAULT_Q 224
391 #define CGEMM_DEFAULT_Q 224
392 #endif
393 #define QGEMM_DEFAULT_Q 224
394 #define XGEMM_DEFAULT_Q 224
395
396 #define CGEMM3M_DEFAULT_P 448
397 #define ZGEMM3M_DEFAULT_P 224
398 #define XGEMM3M_DEFAULT_P 112
399 #define CGEMM3M_DEFAULT_Q 224
400 #define ZGEMM3M_DEFAULT_Q 224
401 #define XGEMM3M_DEFAULT_Q 224
402 #define CGEMM3M_DEFAULT_R 12288
403 #define ZGEMM3M_DEFAULT_R 12288
404 #define XGEMM3M_DEFAULT_R 12288
405
406 #define SGEMM_DEFAULT_R 12288
407 #define QGEMM_DEFAULT_R qgemm_r
408 #define DGEMM_DEFAULT_R 12288
409 #define CGEMM_DEFAULT_R cgemm_r
410 #define ZGEMM_DEFAULT_R zgemm_r
411 #define XGEMM_DEFAULT_R xgemm_r
412
413 #define SYMV_P  16
414 #define HAVE_EXCLUSIVE_CACHE
415
416 #define GEMM_THREAD gemm_thread_mn
417
418 #endif
419
420 #ifdef STEAMROLLER
421 #define SNUMOPT         8
422 #define DNUMOPT         4
423
424 #define GEMM_DEFAULT_OFFSET_A  64
425 #define GEMM_DEFAULT_OFFSET_B 832
426 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x0fffUL
427
428
429
430 #define QGEMM_DEFAULT_UNROLL_N 2
431 #define CGEMM_DEFAULT_UNROLL_N 2
432 #define ZGEMM_DEFAULT_UNROLL_N 2
433 #define XGEMM_DEFAULT_UNROLL_N 1
434
435 #ifdef ARCH_X86
436 #define SGEMM_DEFAULT_UNROLL_N 4
437 #define DGEMM_DEFAULT_UNROLL_N 4
438 #define SGEMM_DEFAULT_UNROLL_M 4
439 #define DGEMM_DEFAULT_UNROLL_M 2
440 #define QGEMM_DEFAULT_UNROLL_M 2
441 #define CGEMM_DEFAULT_UNROLL_M 2
442 #define ZGEMM_DEFAULT_UNROLL_M 1
443 #define XGEMM_DEFAULT_UNROLL_M 1
444 #else
445 #define SGEMM_DEFAULT_UNROLL_N 2
446 #define DGEMM_DEFAULT_UNROLL_N 2
447 #define SGEMM_DEFAULT_UNROLL_M 16
448 #define DGEMM_DEFAULT_UNROLL_M 8
449 #define QGEMM_DEFAULT_UNROLL_M 2
450 #define CGEMM_DEFAULT_UNROLL_M 4
451 #define ZGEMM_DEFAULT_UNROLL_M 2
452 #define XGEMM_DEFAULT_UNROLL_M 1
453 #define CGEMM3M_DEFAULT_UNROLL_N 4
454 #define CGEMM3M_DEFAULT_UNROLL_M 8
455 #define ZGEMM3M_DEFAULT_UNROLL_N 4
456 #define ZGEMM3M_DEFAULT_UNROLL_M 4
457 #define GEMV_UNROLL 8
458 #endif
459
460 #if defined(ARCH_X86_64)
461 #define SGEMM_DEFAULT_P 768
462 #define DGEMM_DEFAULT_P 576
463 #define ZGEMM_DEFAULT_P 288
464 #define CGEMM_DEFAULT_P 576
465 #else
466 #define SGEMM_DEFAULT_P 448
467 #define DGEMM_DEFAULT_P 480
468 #define ZGEMM_DEFAULT_P 112
469 #define CGEMM_DEFAULT_P 224
470 #endif
471 #define QGEMM_DEFAULT_P 112
472 #define XGEMM_DEFAULT_P  56
473
474 #if defined(ARCH_X86_64)
475 #define SGEMM_DEFAULT_Q 192
476 #define DGEMM_DEFAULT_Q 160
477 #define ZGEMM_DEFAULT_Q 160
478 #define CGEMM_DEFAULT_Q 160
479 #else
480 #define SGEMM_DEFAULT_Q 224
481 #define DGEMM_DEFAULT_Q 224
482 #define ZGEMM_DEFAULT_Q 224
483 #define CGEMM_DEFAULT_Q 224
484 #endif
485 #define QGEMM_DEFAULT_Q 224
486 #define XGEMM_DEFAULT_Q 224
487
488 #define CGEMM3M_DEFAULT_P 448
489 #define ZGEMM3M_DEFAULT_P 224
490 #define XGEMM3M_DEFAULT_P 112
491 #define CGEMM3M_DEFAULT_Q 224
492 #define ZGEMM3M_DEFAULT_Q 224
493 #define XGEMM3M_DEFAULT_Q 224
494 #define CGEMM3M_DEFAULT_R 12288
495 #define ZGEMM3M_DEFAULT_R 12288
496 #define XGEMM3M_DEFAULT_R 12288
497
498 #define SGEMM_DEFAULT_R 12288
499 #define QGEMM_DEFAULT_R qgemm_r
500 #define DGEMM_DEFAULT_R 12288
501 #define CGEMM_DEFAULT_R cgemm_r
502 #define ZGEMM_DEFAULT_R zgemm_r
503 #define XGEMM_DEFAULT_R xgemm_r
504
505 #define SYMV_P  16
506 #define HAVE_EXCLUSIVE_CACHE
507
508 #define GEMM_THREAD gemm_thread_mn
509
510 #endif
511
512
513 #ifdef EXCAVATOR
514 #define SNUMOPT         8
515 #define DNUMOPT         4
516
517 #define GEMM_DEFAULT_OFFSET_A  64
518 #define GEMM_DEFAULT_OFFSET_B 832
519 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x0fffUL
520
521
522
523 #define QGEMM_DEFAULT_UNROLL_N 2
524 #define CGEMM_DEFAULT_UNROLL_N 2
525 #define ZGEMM_DEFAULT_UNROLL_N 2
526 #define XGEMM_DEFAULT_UNROLL_N 1
527
528 #ifdef ARCH_X86
529 #define SGEMM_DEFAULT_UNROLL_N 4
530 #define DGEMM_DEFAULT_UNROLL_N 4
531 #define SGEMM_DEFAULT_UNROLL_M 4
532 #define DGEMM_DEFAULT_UNROLL_M 2
533 #define QGEMM_DEFAULT_UNROLL_M 2
534 #define CGEMM_DEFAULT_UNROLL_M 2
535 #define ZGEMM_DEFAULT_UNROLL_M 1
536 #define XGEMM_DEFAULT_UNROLL_M 1
537 #else
538 #define SGEMM_DEFAULT_UNROLL_N 2
539 #define DGEMM_DEFAULT_UNROLL_N 2
540 #define SGEMM_DEFAULT_UNROLL_M 16
541 #define DGEMM_DEFAULT_UNROLL_M 8
542 #define QGEMM_DEFAULT_UNROLL_M 2
543 #define CGEMM_DEFAULT_UNROLL_M 4
544 #define ZGEMM_DEFAULT_UNROLL_M 2
545 #define XGEMM_DEFAULT_UNROLL_M 1
546 #define CGEMM3M_DEFAULT_UNROLL_N 4
547 #define CGEMM3M_DEFAULT_UNROLL_M 8
548 #define ZGEMM3M_DEFAULT_UNROLL_N 4
549 #define ZGEMM3M_DEFAULT_UNROLL_M 4
550 #define GEMV_UNROLL 8
551 #endif
552
553 #if defined(ARCH_X86_64)
554 #define SGEMM_DEFAULT_P 768
555 #define DGEMM_DEFAULT_P 576
556 #define ZGEMM_DEFAULT_P 288
557 #define CGEMM_DEFAULT_P 576
558 #else
559 #define SGEMM_DEFAULT_P 448
560 #define DGEMM_DEFAULT_P 480
561 #define ZGEMM_DEFAULT_P 112
562 #define CGEMM_DEFAULT_P 224
563 #endif
564 #define QGEMM_DEFAULT_P 112
565 #define XGEMM_DEFAULT_P  56
566
567 #if defined(ARCH_X86_64)
568 #define SGEMM_DEFAULT_Q 192
569 #define DGEMM_DEFAULT_Q 160
570 #define ZGEMM_DEFAULT_Q 160
571 #define CGEMM_DEFAULT_Q 160
572 #else
573 #define SGEMM_DEFAULT_Q 224
574 #define DGEMM_DEFAULT_Q 224
575 #define ZGEMM_DEFAULT_Q 224
576 #define CGEMM_DEFAULT_Q 224
577 #endif
578 #define QGEMM_DEFAULT_Q 224
579 #define XGEMM_DEFAULT_Q 224
580
581 #define CGEMM3M_DEFAULT_P 448
582 #define ZGEMM3M_DEFAULT_P 224
583 #define XGEMM3M_DEFAULT_P 112
584 #define CGEMM3M_DEFAULT_Q 224
585 #define ZGEMM3M_DEFAULT_Q 224
586 #define XGEMM3M_DEFAULT_Q 224
587 #define CGEMM3M_DEFAULT_R 12288
588 #define ZGEMM3M_DEFAULT_R 12288
589 #define XGEMM3M_DEFAULT_R 12288
590
591 #define SGEMM_DEFAULT_R 12288
592 #define QGEMM_DEFAULT_R qgemm_r
593 #define DGEMM_DEFAULT_R 12288
594 #define CGEMM_DEFAULT_R cgemm_r
595 #define ZGEMM_DEFAULT_R zgemm_r
596 #define XGEMM_DEFAULT_R xgemm_r
597
598 #define SYMV_P  16
599 #define HAVE_EXCLUSIVE_CACHE
600
601 #define GEMM_THREAD gemm_thread_mn
602
603 #endif
604
605 #ifdef ZEN
606 #define SNUMOPT         16
607 #define DNUMOPT         8
608
609 #define GEMM_DEFAULT_OFFSET_A     0
610 #define GEMM_DEFAULT_OFFSET_B     0
611 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
612
613 #define SYMV_P  8
614
615 #define SWITCH_RATIO    16
616
617 #ifdef ARCH_X86
618
619 #define SGEMM_DEFAULT_UNROLL_M 4
620 #define DGEMM_DEFAULT_UNROLL_M 2
621 #define QGEMM_DEFAULT_UNROLL_M 2
622 #define CGEMM_DEFAULT_UNROLL_M 2
623 #define ZGEMM_DEFAULT_UNROLL_M 1
624 #define XGEMM_DEFAULT_UNROLL_M 1
625
626 #define SGEMM_DEFAULT_UNROLL_N 4
627 #define DGEMM_DEFAULT_UNROLL_N 4
628 #define QGEMM_DEFAULT_UNROLL_N 2
629 #define CGEMM_DEFAULT_UNROLL_N 2
630 #define ZGEMM_DEFAULT_UNROLL_N 2
631 #define XGEMM_DEFAULT_UNROLL_N 1
632
633 #else
634
635 #define SGEMM_DEFAULT_UNROLL_M 8
636 #define DGEMM_DEFAULT_UNROLL_M 4
637 #define QGEMM_DEFAULT_UNROLL_M 2
638 #define CGEMM_DEFAULT_UNROLL_M 8
639 #define ZGEMM_DEFAULT_UNROLL_M 4
640 #define XGEMM_DEFAULT_UNROLL_M 1
641
642 #define SGEMM_DEFAULT_UNROLL_N 4
643 #define DGEMM_DEFAULT_UNROLL_N 8
644 #define QGEMM_DEFAULT_UNROLL_N 2
645 #define CGEMM_DEFAULT_UNROLL_N 2
646 #define ZGEMM_DEFAULT_UNROLL_N 2
647 #define XGEMM_DEFAULT_UNROLL_N 1
648 /*
649 #define SGEMM_DEFAULT_UNROLL_MN 32
650 #define DGEMM_DEFAULT_UNROLL_MN 32
651 */
652 #endif
653
654 #ifdef ARCH_X86
655
656 #define SGEMM_DEFAULT_P 512
657 #define SGEMM_DEFAULT_R sgemm_r
658 #define DGEMM_DEFAULT_P 512
659 #define DGEMM_DEFAULT_R dgemm_r
660 #define QGEMM_DEFAULT_P 504
661 #define QGEMM_DEFAULT_R qgemm_r
662 #define CGEMM_DEFAULT_P 128
663 #define CGEMM_DEFAULT_R 1024
664 #define ZGEMM_DEFAULT_P 512
665 #define ZGEMM_DEFAULT_R zgemm_r
666 #define XGEMM_DEFAULT_P 252
667 #define XGEMM_DEFAULT_R xgemm_r
668 #define SGEMM_DEFAULT_Q 256
669 #define DGEMM_DEFAULT_Q 256
670 #define QGEMM_DEFAULT_Q 128
671 #define CGEMM_DEFAULT_Q 256
672 #define ZGEMM_DEFAULT_Q 192
673 #define XGEMM_DEFAULT_Q 128
674
675 #else
676
677 #define SGEMM_DEFAULT_P 320
678 #define DGEMM_DEFAULT_P 512
679 #define CGEMM_DEFAULT_P 256
680 #define ZGEMM_DEFAULT_P 192
681
682 #ifdef WINDOWS_ABI
683 #define SGEMM_DEFAULT_Q 320
684 #define DGEMM_DEFAULT_Q 128
685 #else
686 #define SGEMM_DEFAULT_Q 320
687 #define DGEMM_DEFAULT_Q 256
688 #endif
689 #define CGEMM_DEFAULT_Q 256
690 #define ZGEMM_DEFAULT_Q 192
691
692 #define SGEMM_DEFAULT_R sgemm_r
693 #define DGEMM_DEFAULT_R 13824
694 #define CGEMM_DEFAULT_R cgemm_r
695 #define ZGEMM_DEFAULT_R zgemm_r
696
697 #define QGEMM_DEFAULT_Q 128
698 #define QGEMM_DEFAULT_P 504
699 #define QGEMM_DEFAULT_R qgemm_r
700 #define XGEMM_DEFAULT_P 252
701 #define XGEMM_DEFAULT_R xgemm_r
702 #define XGEMM_DEFAULT_Q 128
703
704 #define CGEMM3M_DEFAULT_UNROLL_N 4
705 #define CGEMM3M_DEFAULT_UNROLL_M 8
706 #define ZGEMM3M_DEFAULT_UNROLL_N 4
707 #define ZGEMM3M_DEFAULT_UNROLL_M 4
708
709 #define CGEMM3M_DEFAULT_P 320
710 #define ZGEMM3M_DEFAULT_P 256
711 #define XGEMM3M_DEFAULT_P 112
712 #define CGEMM3M_DEFAULT_Q 320
713 #define ZGEMM3M_DEFAULT_Q 256
714 #define XGEMM3M_DEFAULT_Q 224
715 #define CGEMM3M_DEFAULT_R 12288
716 #define ZGEMM3M_DEFAULT_R 12288
717 #define XGEMM3M_DEFAULT_R 12288
718
719 #endif
720
721 #endif
722
723 #ifdef ATHLON
724
725 #define SNUMOPT         4
726 #define DNUMOPT         2
727
728 #define GEMM_DEFAULT_OFFSET_A   0
729 #define GEMM_DEFAULT_OFFSET_B 384
730 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x0ffffUL
731
732 #define SGEMM_DEFAULT_UNROLL_N 4
733 #define DGEMM_DEFAULT_UNROLL_N 4
734 #define QGEMM_DEFAULT_UNROLL_N 2
735 #define CGEMM_DEFAULT_UNROLL_N 2
736 #define ZGEMM_DEFAULT_UNROLL_N 2
737 #define XGEMM_DEFAULT_UNROLL_N 1
738
739 #define SGEMM_DEFAULT_UNROLL_M 2
740 #define DGEMM_DEFAULT_UNROLL_M 1
741 #define QGEMM_DEFAULT_UNROLL_M 2
742 #define CGEMM_DEFAULT_UNROLL_M 1
743 #define ZGEMM_DEFAULT_UNROLL_M 1
744 #define XGEMM_DEFAULT_UNROLL_M 1
745
746 #define SGEMM_DEFAULT_R sgemm_r
747 #define DGEMM_DEFAULT_R dgemm_r
748 #define QGEMM_DEFAULT_R qgemm_r
749 #define CGEMM_DEFAULT_R cgemm_r
750 #define ZGEMM_DEFAULT_R zgemm_r
751 #define XGEMM_DEFAULT_R xgemm_r
752
753 #define SGEMM_DEFAULT_P 208
754 #define DGEMM_DEFAULT_P 104
755 #define QGEMM_DEFAULT_P  56
756 #define CGEMM_DEFAULT_P 104
757 #define ZGEMM_DEFAULT_P  56
758 #define XGEMM_DEFAULT_P  28
759
760 #define SGEMM_DEFAULT_Q 208
761 #define DGEMM_DEFAULT_Q 208
762 #define QGEMM_DEFAULT_Q 208
763 #define CGEMM_DEFAULT_Q 208
764 #define ZGEMM_DEFAULT_Q 208
765 #define XGEMM_DEFAULT_Q 208
766
767 #define SYMV_P  16
768 #define HAVE_EXCLUSIVE_CACHE
769 #endif
770
771 #ifdef VIAC3
772
773 #define SNUMOPT         2
774 #define DNUMOPT         1
775
776 #define GEMM_DEFAULT_OFFSET_A   0
777 #define GEMM_DEFAULT_OFFSET_B 256
778 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x0ffffUL
779
780 #define SGEMM_DEFAULT_UNROLL_N 4
781 #define DGEMM_DEFAULT_UNROLL_N 4
782 #define QGEMM_DEFAULT_UNROLL_N 2
783 #define CGEMM_DEFAULT_UNROLL_N 2
784 #define ZGEMM_DEFAULT_UNROLL_N 2
785 #define XGEMM_DEFAULT_UNROLL_N 1
786
787 #define SGEMM_DEFAULT_UNROLL_M 2
788 #define DGEMM_DEFAULT_UNROLL_M 1
789 #define QGEMM_DEFAULT_UNROLL_M 2
790 #define CGEMM_DEFAULT_UNROLL_M 1
791 #define ZGEMM_DEFAULT_UNROLL_M 1
792 #define XGEMM_DEFAULT_UNROLL_M 1
793
794 #define SGEMM_DEFAULT_R sgemm_r
795 #define DGEMM_DEFAULT_R dgemm_r
796 #define QGEMM_DEFAULT_R qgemm_r
797 #define CGEMM_DEFAULT_R cgemm_r
798 #define ZGEMM_DEFAULT_R zgemm_r
799 #define XGEMM_DEFAULT_R xgemm_r
800
801 #define SGEMM_DEFAULT_P 128
802 #define DGEMM_DEFAULT_P 128
803 #define QGEMM_DEFAULT_P 128
804 #define CGEMM_DEFAULT_P 128
805 #define ZGEMM_DEFAULT_P 128
806 #define XGEMM_DEFAULT_P 128
807
808 #define SGEMM_DEFAULT_Q 512
809 #define DGEMM_DEFAULT_Q 256
810 #define QGEMM_DEFAULT_Q 256
811 #define CGEMM_DEFAULT_Q 256
812 #define ZGEMM_DEFAULT_Q 128
813 #define XGEMM_DEFAULT_Q 128
814
815 #define SYMV_P  16
816 #endif
817
818 #ifdef NANO
819
820 #define SNUMOPT         4
821 #define DNUMOPT         2
822
823 #define GEMM_DEFAULT_OFFSET_A  64
824 #define GEMM_DEFAULT_OFFSET_B 256
825 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x01ffffUL
826
827 #ifdef ARCH_X86
828 #define SGEMM_DEFAULT_UNROLL_N 4
829 #define DGEMM_DEFAULT_UNROLL_N 4
830 #define QGEMM_DEFAULT_UNROLL_N 2
831 #define CGEMM_DEFAULT_UNROLL_N 2
832 #define ZGEMM_DEFAULT_UNROLL_N 2
833 #define XGEMM_DEFAULT_UNROLL_N 1
834
835 #define SGEMM_DEFAULT_UNROLL_M 4
836 #define DGEMM_DEFAULT_UNROLL_M 2
837 #define QGEMM_DEFAULT_UNROLL_M 2
838 #define CGEMM_DEFAULT_UNROLL_M 2
839 #define ZGEMM_DEFAULT_UNROLL_M 1
840 #define XGEMM_DEFAULT_UNROLL_M 1
841 #else
842 #define SGEMM_DEFAULT_UNROLL_N 8
843 #define DGEMM_DEFAULT_UNROLL_N 4
844 #define QGEMM_DEFAULT_UNROLL_N 2
845 #define CGEMM_DEFAULT_UNROLL_N 4
846 #define ZGEMM_DEFAULT_UNROLL_N 2
847 #define XGEMM_DEFAULT_UNROLL_N 1
848
849 #define SGEMM_DEFAULT_UNROLL_M 4
850 #define DGEMM_DEFAULT_UNROLL_M 4
851 #define QGEMM_DEFAULT_UNROLL_M 2
852 #define CGEMM_DEFAULT_UNROLL_M 2
853 #define ZGEMM_DEFAULT_UNROLL_M 2
854 #define XGEMM_DEFAULT_UNROLL_M 1
855 #endif
856
857 #define SGEMM_DEFAULT_P 288
858 #define DGEMM_DEFAULT_P 288
859 #define QGEMM_DEFAULT_P 288
860 #define CGEMM_DEFAULT_P 288
861 #define ZGEMM_DEFAULT_P 288
862 #define XGEMM_DEFAULT_P 288
863
864 #define SGEMM_DEFAULT_R sgemm_r
865 #define DGEMM_DEFAULT_R dgemm_r
866 #define QGEMM_DEFAULT_R qgemm_r
867 #define CGEMM_DEFAULT_R cgemm_r
868 #define ZGEMM_DEFAULT_R zgemm_r
869 #define XGEMM_DEFAULT_R xgemm_r
870
871 #define SGEMM_DEFAULT_Q 256
872 #define DGEMM_DEFAULT_Q 128
873 #define QGEMM_DEFAULT_Q  64
874 #define CGEMM_DEFAULT_Q 128
875 #define ZGEMM_DEFAULT_Q  64
876 #define XGEMM_DEFAULT_Q  32
877
878 #define SYMV_P  16
879 #define HAVE_EXCLUSIVE_CACHE
880
881 #endif
882
883 #if defined(PENTIUM) || defined(PENTIUM2) || defined(PENTIUM3)
884
885 #ifdef HAVE_SSE
886 #define SNUMOPT         2
887 #else
888 #define SNUMOPT         1
889 #endif
890 #define DNUMOPT         1
891
892 #define GEMM_DEFAULT_OFFSET_A 0
893 #define GEMM_DEFAULT_OFFSET_B 0
894 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x0ffffUL
895
896 #ifdef HAVE_SSE
897 #define SGEMM_DEFAULT_UNROLL_M 8
898 #define CGEMM_DEFAULT_UNROLL_M 4
899 #else
900 #define SGEMM_DEFAULT_UNROLL_M 4
901 #define CGEMM_DEFAULT_UNROLL_M 2
902 #endif
903 #define DGEMM_DEFAULT_UNROLL_M 2
904 #define SGEMM_DEFAULT_UNROLL_N 2
905 #define DGEMM_DEFAULT_UNROLL_N 2
906 #define QGEMM_DEFAULT_UNROLL_M 2
907 #define QGEMM_DEFAULT_UNROLL_N 2
908 #define CGEMM_DEFAULT_UNROLL_N 1
909 #define ZGEMM_DEFAULT_UNROLL_M 1
910 #define ZGEMM_DEFAULT_UNROLL_N 1
911 #define XGEMM_DEFAULT_UNROLL_M 1
912 #define XGEMM_DEFAULT_UNROLL_N 1
913
914 #define SGEMM_DEFAULT_P sgemm_p
915 #define SGEMM_DEFAULT_Q 256
916 #define SGEMM_DEFAULT_R sgemm_r
917
918 #define DGEMM_DEFAULT_P dgemm_p
919 #define DGEMM_DEFAULT_Q 256
920 #define DGEMM_DEFAULT_R dgemm_r
921
922 #define QGEMM_DEFAULT_P qgemm_p
923 #define QGEMM_DEFAULT_Q 256
924 #define QGEMM_DEFAULT_R qgemm_r
925
926 #define CGEMM_DEFAULT_P cgemm_p
927 #define CGEMM_DEFAULT_Q 256
928 #define CGEMM_DEFAULT_R cgemm_r
929
930 #define ZGEMM_DEFAULT_P zgemm_p
931 #define ZGEMM_DEFAULT_Q 256
932 #define ZGEMM_DEFAULT_R zgemm_r
933
934 #define XGEMM_DEFAULT_P xgemm_p
935 #define XGEMM_DEFAULT_Q 256
936 #define XGEMM_DEFAULT_R xgemm_r
937
938 #define SYMV_P  4
939
940 #endif
941
942 #ifdef PENTIUMM
943
944 #define SNUMOPT         2
945 #define DNUMOPT         1
946
947 #define GEMM_DEFAULT_OFFSET_A 0
948 #define GEMM_DEFAULT_OFFSET_B 0
949 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x0ffffUL
950
951 #ifdef CORE_YONAH
952 #define SGEMM_DEFAULT_UNROLL_M 4
953 #define SGEMM_DEFAULT_UNROLL_N 4
954 #define DGEMM_DEFAULT_UNROLL_M 2
955 #define DGEMM_DEFAULT_UNROLL_N 4
956 #define QGEMM_DEFAULT_UNROLL_M 2
957 #define QGEMM_DEFAULT_UNROLL_N 2
958 #define CGEMM_DEFAULT_UNROLL_M 2
959 #define CGEMM_DEFAULT_UNROLL_N 2
960 #define ZGEMM_DEFAULT_UNROLL_M 1
961 #define ZGEMM_DEFAULT_UNROLL_N 2
962 #define XGEMM_DEFAULT_UNROLL_M 1
963 #define XGEMM_DEFAULT_UNROLL_N 1
964 #else
965 #define SGEMM_DEFAULT_UNROLL_M 8
966 #define SGEMM_DEFAULT_UNROLL_N 2
967 #define DGEMM_DEFAULT_UNROLL_M 2
968 #define DGEMM_DEFAULT_UNROLL_N 2
969 #define QGEMM_DEFAULT_UNROLL_M 2
970 #define QGEMM_DEFAULT_UNROLL_N 2
971 #define CGEMM_DEFAULT_UNROLL_M 4
972 #define CGEMM_DEFAULT_UNROLL_N 1
973 #define ZGEMM_DEFAULT_UNROLL_M 1
974 #define ZGEMM_DEFAULT_UNROLL_N 1
975 #define XGEMM_DEFAULT_UNROLL_M 1
976 #define XGEMM_DEFAULT_UNROLL_N 1
977
978 #endif
979
980 #define SGEMM_DEFAULT_P sgemm_p
981 #define SGEMM_DEFAULT_Q 256
982 #define SGEMM_DEFAULT_R sgemm_r
983
984 #define DGEMM_DEFAULT_P dgemm_p
985 #define DGEMM_DEFAULT_Q 256
986 #define DGEMM_DEFAULT_R dgemm_r
987
988 #define QGEMM_DEFAULT_P qgemm_p
989 #define QGEMM_DEFAULT_Q 256
990 #define QGEMM_DEFAULT_R qgemm_r
991
992 #define CGEMM_DEFAULT_P cgemm_p
993 #define CGEMM_DEFAULT_Q 256
994 #define CGEMM_DEFAULT_R cgemm_r
995
996 #define ZGEMM_DEFAULT_P zgemm_p
997 #define ZGEMM_DEFAULT_Q 256
998 #define ZGEMM_DEFAULT_R zgemm_r
999
1000 #define XGEMM_DEFAULT_P xgemm_p
1001 #define XGEMM_DEFAULT_Q 256
1002 #define XGEMM_DEFAULT_R xgemm_r
1003
1004 #define SYMV_P  4
1005 #endif
1006
1007 #ifdef CORE_NORTHWOOD
1008
1009 #define SNUMOPT         4
1010 #define DNUMOPT         2
1011
1012 #define GEMM_DEFAULT_OFFSET_A      0
1013 #define GEMM_DEFAULT_OFFSET_B     32
1014
1015 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x0ffffUL
1016
1017 #define SYMV_P  8
1018
1019 #define SGEMM_DEFAULT_UNROLL_M 8
1020 #define DGEMM_DEFAULT_UNROLL_M 4
1021 #define QGEMM_DEFAULT_UNROLL_M 2
1022 #define CGEMM_DEFAULT_UNROLL_M 4
1023 #define ZGEMM_DEFAULT_UNROLL_M 2
1024 #define XGEMM_DEFAULT_UNROLL_M 1
1025
1026 #define SGEMM_DEFAULT_UNROLL_N 2
1027 #define DGEMM_DEFAULT_UNROLL_N 2
1028 #define QGEMM_DEFAULT_UNROLL_N 2
1029 #define CGEMM_DEFAULT_UNROLL_N 1
1030 #define ZGEMM_DEFAULT_UNROLL_N 1
1031 #define XGEMM_DEFAULT_UNROLL_N 1
1032
1033 #define SGEMM_DEFAULT_P sgemm_p
1034 #define SGEMM_DEFAULT_R sgemm_r
1035
1036 #define DGEMM_DEFAULT_P dgemm_p
1037 #define DGEMM_DEFAULT_R dgemm_r
1038
1039 #define QGEMM_DEFAULT_P qgemm_p
1040 #define QGEMM_DEFAULT_R qgemm_r
1041
1042 #define CGEMM_DEFAULT_P cgemm_p
1043 #define CGEMM_DEFAULT_R cgemm_r
1044
1045 #define ZGEMM_DEFAULT_P zgemm_p
1046 #define ZGEMM_DEFAULT_R zgemm_r
1047
1048 #define XGEMM_DEFAULT_P xgemm_p
1049 #define XGEMM_DEFAULT_R xgemm_r
1050
1051 #define SGEMM_DEFAULT_Q 128
1052 #define DGEMM_DEFAULT_Q 128
1053 #define QGEMM_DEFAULT_Q 128
1054 #define CGEMM_DEFAULT_Q 128
1055 #define ZGEMM_DEFAULT_Q 128
1056 #define XGEMM_DEFAULT_Q 128
1057 #endif
1058
1059 #ifdef CORE_PRESCOTT
1060
1061 #define SNUMOPT         4
1062 #define DNUMOPT         2
1063
1064 #ifndef __64BIT__
1065 #define GEMM_DEFAULT_OFFSET_A    128
1066 #define GEMM_DEFAULT_OFFSET_B    192
1067 #else
1068 #define GEMM_DEFAULT_OFFSET_A      0
1069 #define GEMM_DEFAULT_OFFSET_B    256
1070 #endif
1071
1072 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x0ffffUL
1073
1074 #define SYMV_P  8
1075
1076 #ifdef ARCH_X86
1077 #define SGEMM_DEFAULT_UNROLL_M 4
1078 #define DGEMM_DEFAULT_UNROLL_M 2
1079 #define QGEMM_DEFAULT_UNROLL_M 2
1080 #define CGEMM_DEFAULT_UNROLL_M 2
1081 #define ZGEMM_DEFAULT_UNROLL_M 1
1082 #define XGEMM_DEFAULT_UNROLL_M 1
1083 #else
1084 #define SGEMM_DEFAULT_UNROLL_M 8
1085 #define DGEMM_DEFAULT_UNROLL_M 4
1086 #define QGEMM_DEFAULT_UNROLL_M 2
1087 #define CGEMM_DEFAULT_UNROLL_M 4
1088 #define ZGEMM_DEFAULT_UNROLL_M 2
1089 #define XGEMM_DEFAULT_UNROLL_M 1
1090 #endif
1091
1092 #define SGEMM_DEFAULT_UNROLL_N 4
1093 #define DGEMM_DEFAULT_UNROLL_N 4
1094 #define QGEMM_DEFAULT_UNROLL_N 2
1095 #define CGEMM_DEFAULT_UNROLL_N 2
1096 #define ZGEMM_DEFAULT_UNROLL_N 2
1097 #define XGEMM_DEFAULT_UNROLL_N 1
1098
1099 #define SGEMM_DEFAULT_P sgemm_p
1100 #define SGEMM_DEFAULT_R sgemm_r
1101
1102 #define DGEMM_DEFAULT_P dgemm_p
1103 #define DGEMM_DEFAULT_R dgemm_r
1104
1105 #define QGEMM_DEFAULT_P qgemm_p
1106 #define QGEMM_DEFAULT_R qgemm_r
1107
1108 #define CGEMM_DEFAULT_P cgemm_p
1109 #define CGEMM_DEFAULT_R cgemm_r
1110
1111 #define ZGEMM_DEFAULT_P zgemm_p
1112 #define ZGEMM_DEFAULT_R zgemm_r
1113
1114 #define XGEMM_DEFAULT_P xgemm_p
1115 #define XGEMM_DEFAULT_R xgemm_r
1116
1117 #define SGEMM_DEFAULT_Q 128
1118 #define DGEMM_DEFAULT_Q 128
1119 #define QGEMM_DEFAULT_Q 128
1120 #define CGEMM_DEFAULT_Q 128
1121 #define ZGEMM_DEFAULT_Q 128
1122 #define XGEMM_DEFAULT_Q 128
1123 #endif
1124
1125 #ifdef CORE2
1126
1127 #define SNUMOPT         8
1128 #define DNUMOPT         4
1129
1130 #define GEMM_DEFAULT_OFFSET_A    448
1131 #define GEMM_DEFAULT_OFFSET_B    128
1132 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
1133
1134 #define SYMV_P  8
1135
1136 #define SWITCH_RATIO    4
1137
1138 #ifdef ARCH_X86
1139 #define SGEMM_DEFAULT_UNROLL_M 8
1140 #define DGEMM_DEFAULT_UNROLL_M 4
1141 #define QGEMM_DEFAULT_UNROLL_M 2
1142 #define CGEMM_DEFAULT_UNROLL_M 4
1143 #define ZGEMM_DEFAULT_UNROLL_M 2
1144 #define XGEMM_DEFAULT_UNROLL_M 1
1145
1146 #define SGEMM_DEFAULT_UNROLL_N 2
1147 #define DGEMM_DEFAULT_UNROLL_N 2
1148 #define QGEMM_DEFAULT_UNROLL_N 2
1149 #define CGEMM_DEFAULT_UNROLL_N 1
1150 #define ZGEMM_DEFAULT_UNROLL_N 1
1151 #define XGEMM_DEFAULT_UNROLL_N 1
1152
1153 #define MASK(a, b) ((((a) + (b) - 1) / (b)) * (b))
1154
1155 #else
1156 #define SGEMM_DEFAULT_UNROLL_M 8
1157 #define DGEMM_DEFAULT_UNROLL_M 4
1158 #define QGEMM_DEFAULT_UNROLL_M 2
1159 #define CGEMM_DEFAULT_UNROLL_M 4
1160 #define ZGEMM_DEFAULT_UNROLL_M 2
1161 #define XGEMM_DEFAULT_UNROLL_M 1
1162
1163 #define SGEMM_DEFAULT_UNROLL_N 4
1164 #define DGEMM_DEFAULT_UNROLL_N 4
1165 #define QGEMM_DEFAULT_UNROLL_N 2
1166 #define CGEMM_DEFAULT_UNROLL_N 2
1167 #define ZGEMM_DEFAULT_UNROLL_N 2
1168 #define XGEMM_DEFAULT_UNROLL_N 1
1169 #endif
1170
1171 #define SGEMM_DEFAULT_P sgemm_p
1172 #define SGEMM_DEFAULT_R sgemm_r
1173
1174 #define DGEMM_DEFAULT_P dgemm_p
1175 #define DGEMM_DEFAULT_R dgemm_r
1176
1177 #define QGEMM_DEFAULT_P qgemm_p
1178 #define QGEMM_DEFAULT_R qgemm_r
1179
1180 #define CGEMM_DEFAULT_P cgemm_p
1181 #define CGEMM_DEFAULT_R cgemm_r
1182
1183 #define ZGEMM_DEFAULT_P zgemm_p
1184 #define ZGEMM_DEFAULT_R zgemm_r
1185
1186 #define XGEMM_DEFAULT_P xgemm_p
1187 #define XGEMM_DEFAULT_R xgemm_r
1188
1189 #define SGEMM_DEFAULT_Q 256
1190 #define DGEMM_DEFAULT_Q 256
1191 #define QGEMM_DEFAULT_Q 256
1192 #define CGEMM_DEFAULT_Q 256
1193 #define ZGEMM_DEFAULT_Q 256
1194 #define XGEMM_DEFAULT_Q 256
1195
1196 #endif
1197
1198 #ifdef PENRYN
1199
1200 #define SNUMOPT         8
1201 #define DNUMOPT         4
1202
1203 #define GEMM_DEFAULT_OFFSET_A   128
1204 #define GEMM_DEFAULT_OFFSET_B     0
1205 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
1206
1207 #define SYMV_P  8
1208
1209 #define SWITCH_RATIO    4
1210
1211 #ifdef ARCH_X86
1212 #define SGEMM_DEFAULT_UNROLL_M 4
1213 #define DGEMM_DEFAULT_UNROLL_M 2
1214 #define QGEMM_DEFAULT_UNROLL_M 2
1215 #define CGEMM_DEFAULT_UNROLL_M 2
1216 #define ZGEMM_DEFAULT_UNROLL_M 1
1217 #define XGEMM_DEFAULT_UNROLL_M 1
1218
1219 #define SGEMM_DEFAULT_UNROLL_N 4
1220 #define DGEMM_DEFAULT_UNROLL_N 4
1221 #define QGEMM_DEFAULT_UNROLL_N 2
1222 #define CGEMM_DEFAULT_UNROLL_N 2
1223 #define ZGEMM_DEFAULT_UNROLL_N 2
1224 #define XGEMM_DEFAULT_UNROLL_N 1
1225 #else
1226 #define SGEMM_DEFAULT_UNROLL_M 8
1227 #define DGEMM_DEFAULT_UNROLL_M 4
1228 #define QGEMM_DEFAULT_UNROLL_M 2
1229 #define CGEMM_DEFAULT_UNROLL_M 4
1230 #define ZGEMM_DEFAULT_UNROLL_M 2
1231 #define XGEMM_DEFAULT_UNROLL_M 1
1232
1233 #define SGEMM_DEFAULT_UNROLL_N 4
1234 #define DGEMM_DEFAULT_UNROLL_N 4
1235 #define QGEMM_DEFAULT_UNROLL_N 2
1236 #define CGEMM_DEFAULT_UNROLL_N 2
1237 #define ZGEMM_DEFAULT_UNROLL_N 2
1238 #define XGEMM_DEFAULT_UNROLL_N 1
1239 #endif
1240
1241 #define SGEMM_DEFAULT_P sgemm_p
1242 #define SGEMM_DEFAULT_R sgemm_r
1243
1244 #define DGEMM_DEFAULT_P dgemm_p
1245 #define DGEMM_DEFAULT_R dgemm_r
1246
1247 #define QGEMM_DEFAULT_P qgemm_p
1248 #define QGEMM_DEFAULT_R qgemm_r
1249
1250 #define CGEMM_DEFAULT_P cgemm_p
1251 #define CGEMM_DEFAULT_R cgemm_r
1252
1253 #define ZGEMM_DEFAULT_P zgemm_p
1254 #define ZGEMM_DEFAULT_R zgemm_r
1255
1256 #define XGEMM_DEFAULT_P xgemm_p
1257 #define XGEMM_DEFAULT_R xgemm_r
1258
1259 #define SGEMM_DEFAULT_Q 512
1260 #define DGEMM_DEFAULT_Q 256
1261 #define QGEMM_DEFAULT_Q 128
1262 #define CGEMM_DEFAULT_Q 512
1263 #define ZGEMM_DEFAULT_Q 256
1264 #define XGEMM_DEFAULT_Q 128
1265
1266 #define GETRF_FACTOR 0.75
1267 #endif
1268
1269 #ifdef DUNNINGTON
1270
1271 #define SNUMOPT         8
1272 #define DNUMOPT         4
1273
1274 #define GEMM_DEFAULT_OFFSET_A   128
1275 #define GEMM_DEFAULT_OFFSET_B     0
1276 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
1277
1278 #define SYMV_P  8
1279
1280 #define SWITCH_RATIO    4
1281
1282 #ifdef ARCH_X86
1283 #define SGEMM_DEFAULT_UNROLL_M 4
1284 #define DGEMM_DEFAULT_UNROLL_M 2
1285 #define QGEMM_DEFAULT_UNROLL_M 2
1286 #define CGEMM_DEFAULT_UNROLL_M 2
1287 #define ZGEMM_DEFAULT_UNROLL_M 1
1288 #define XGEMM_DEFAULT_UNROLL_M 1
1289
1290 #define SGEMM_DEFAULT_UNROLL_N 4
1291 #define DGEMM_DEFAULT_UNROLL_N 4
1292 #define QGEMM_DEFAULT_UNROLL_N 2
1293 #define CGEMM_DEFAULT_UNROLL_N 2
1294 #define ZGEMM_DEFAULT_UNROLL_N 2
1295 #define XGEMM_DEFAULT_UNROLL_N 1
1296 #else
1297 #define SGEMM_DEFAULT_UNROLL_M 8
1298 #define DGEMM_DEFAULT_UNROLL_M 4
1299 #define QGEMM_DEFAULT_UNROLL_M 2
1300 #define CGEMM_DEFAULT_UNROLL_M 4
1301 #define ZGEMM_DEFAULT_UNROLL_M 2
1302 #define XGEMM_DEFAULT_UNROLL_M 1
1303
1304 #define SGEMM_DEFAULT_UNROLL_N 4
1305 #define DGEMM_DEFAULT_UNROLL_N 4
1306 #define QGEMM_DEFAULT_UNROLL_N 2
1307 #define CGEMM_DEFAULT_UNROLL_N 2
1308 #define ZGEMM_DEFAULT_UNROLL_N 2
1309 #define XGEMM_DEFAULT_UNROLL_N 1
1310 #endif
1311
1312 #define SGEMM_DEFAULT_P sgemm_p
1313 #define SGEMM_DEFAULT_R sgemm_r
1314
1315 #define DGEMM_DEFAULT_P dgemm_p
1316 #define DGEMM_DEFAULT_R dgemm_r
1317
1318 #define QGEMM_DEFAULT_P qgemm_p
1319 #define QGEMM_DEFAULT_R qgemm_r
1320
1321 #define CGEMM_DEFAULT_P cgemm_p
1322 #define CGEMM_DEFAULT_R cgemm_r
1323
1324 #define ZGEMM_DEFAULT_P zgemm_p
1325 #define ZGEMM_DEFAULT_R zgemm_r
1326
1327 #define XGEMM_DEFAULT_P xgemm_p
1328 #define XGEMM_DEFAULT_R xgemm_r
1329
1330 #define SGEMM_DEFAULT_Q 768
1331 #define DGEMM_DEFAULT_Q 384
1332 #define QGEMM_DEFAULT_Q 192
1333 #define CGEMM_DEFAULT_Q 768
1334 #define ZGEMM_DEFAULT_Q 384
1335 #define XGEMM_DEFAULT_Q 192
1336
1337 #define GETRF_FACTOR 0.75
1338 #define GEMM_THREAD gemm_thread_mn
1339 #endif
1340
1341 #ifdef NEHALEM
1342
1343 #define SNUMOPT         8
1344 #define DNUMOPT         4
1345
1346 #define GEMM_DEFAULT_OFFSET_A    32
1347 #define GEMM_DEFAULT_OFFSET_B     0
1348 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
1349
1350 #define SYMV_P  8
1351
1352 #define SWITCH_RATIO    4
1353
1354 #ifdef ARCH_X86
1355 #define SGEMM_DEFAULT_UNROLL_M 4
1356 #define DGEMM_DEFAULT_UNROLL_M 2
1357 #define QGEMM_DEFAULT_UNROLL_M 2
1358 #define CGEMM_DEFAULT_UNROLL_M 2
1359 #define ZGEMM_DEFAULT_UNROLL_M 1
1360 #define XGEMM_DEFAULT_UNROLL_M 1
1361
1362 #define SGEMM_DEFAULT_UNROLL_N 4
1363 #define DGEMM_DEFAULT_UNROLL_N 4
1364 #define QGEMM_DEFAULT_UNROLL_N 2
1365 #define CGEMM_DEFAULT_UNROLL_N 2
1366 #define ZGEMM_DEFAULT_UNROLL_N 2
1367 #define XGEMM_DEFAULT_UNROLL_N 1
1368 #else
1369 #define SGEMM_DEFAULT_UNROLL_M 4
1370 #define DGEMM_DEFAULT_UNROLL_M 2
1371 #define QGEMM_DEFAULT_UNROLL_M 2
1372 #define CGEMM_DEFAULT_UNROLL_M 2
1373 #define ZGEMM_DEFAULT_UNROLL_M 1
1374 #define XGEMM_DEFAULT_UNROLL_M 1
1375
1376 #define SGEMM_DEFAULT_UNROLL_N 8
1377 #define DGEMM_DEFAULT_UNROLL_N 8
1378 #define QGEMM_DEFAULT_UNROLL_N 2
1379 #define CGEMM_DEFAULT_UNROLL_N 4
1380 #define ZGEMM_DEFAULT_UNROLL_N 4
1381 #define XGEMM_DEFAULT_UNROLL_N 1
1382 #endif
1383
1384 #define SGEMM_DEFAULT_P 504
1385 #define SGEMM_DEFAULT_R sgemm_r
1386
1387 #define DGEMM_DEFAULT_P 504
1388 #define DGEMM_DEFAULT_R dgemm_r
1389
1390 #define QGEMM_DEFAULT_P 504
1391 #define QGEMM_DEFAULT_R qgemm_r
1392
1393 #define CGEMM_DEFAULT_P 252
1394 #define CGEMM_DEFAULT_R cgemm_r
1395
1396 #define ZGEMM_DEFAULT_P 252
1397 #define ZGEMM_DEFAULT_R zgemm_r
1398
1399 #define XGEMM_DEFAULT_P 252
1400 #define XGEMM_DEFAULT_R xgemm_r
1401
1402 #define SGEMM_DEFAULT_Q 512
1403 #define DGEMM_DEFAULT_Q 256
1404 #define QGEMM_DEFAULT_Q 128
1405 #define CGEMM_DEFAULT_Q 512
1406 #define ZGEMM_DEFAULT_Q 256
1407 #define XGEMM_DEFAULT_Q 128
1408
1409 #define GETRF_FACTOR 0.72
1410
1411 #endif
1412
1413
1414 #ifdef SANDYBRIDGE
1415
1416 #define SNUMOPT         8
1417 #define DNUMOPT         4
1418
1419 #define GEMM_DEFAULT_OFFSET_A     0
1420 #define GEMM_DEFAULT_OFFSET_B     0
1421 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
1422
1423 #define SYMV_P  8
1424
1425 #define SWITCH_RATIO    4
1426
1427 #ifdef ARCH_X86
1428 #define SGEMM_DEFAULT_UNROLL_M 4
1429 #define DGEMM_DEFAULT_UNROLL_M 2
1430 #define QGEMM_DEFAULT_UNROLL_M 2
1431 #define CGEMM_DEFAULT_UNROLL_M 2
1432 #define ZGEMM_DEFAULT_UNROLL_M 1
1433 #define XGEMM_DEFAULT_UNROLL_M 1
1434
1435 #define SGEMM_DEFAULT_UNROLL_N 4
1436 #define DGEMM_DEFAULT_UNROLL_N 4
1437 #define QGEMM_DEFAULT_UNROLL_N 2
1438 #define CGEMM_DEFAULT_UNROLL_N 2
1439 #define ZGEMM_DEFAULT_UNROLL_N 2
1440 #define XGEMM_DEFAULT_UNROLL_N 1
1441 #else
1442 #define SGEMM_DEFAULT_UNROLL_M 16
1443 #define DGEMM_DEFAULT_UNROLL_M 8
1444 #define QGEMM_DEFAULT_UNROLL_M 2
1445 #define CGEMM_DEFAULT_UNROLL_M 8
1446 #define ZGEMM_DEFAULT_UNROLL_M 1
1447 #define XGEMM_DEFAULT_UNROLL_M 1
1448
1449 #define SGEMM_DEFAULT_UNROLL_N 4
1450 #define DGEMM_DEFAULT_UNROLL_N 4
1451 #define QGEMM_DEFAULT_UNROLL_N 2
1452 #define CGEMM_DEFAULT_UNROLL_N 2
1453 #define ZGEMM_DEFAULT_UNROLL_N 4
1454 #define XGEMM_DEFAULT_UNROLL_N 1
1455 #endif
1456
1457 #define SGEMM_DEFAULT_P 768
1458 #define SGEMM_DEFAULT_R sgemm_r
1459 /*#define SGEMM_DEFAULT_R 1024*/
1460
1461 #define DGEMM_DEFAULT_P 512
1462 #define DGEMM_DEFAULT_R dgemm_r
1463 /*#define DGEMM_DEFAULT_R 1024*/
1464
1465 #define QGEMM_DEFAULT_P 504
1466 #define QGEMM_DEFAULT_R qgemm_r
1467
1468 #define CGEMM_DEFAULT_P 768
1469 #define CGEMM_DEFAULT_R cgemm_r
1470 /*#define CGEMM_DEFAULT_R 1024*/
1471
1472 #define ZGEMM_DEFAULT_P 512
1473 #define ZGEMM_DEFAULT_R zgemm_r
1474 /*#define ZGEMM_DEFAULT_R 1024*/
1475
1476 #define XGEMM_DEFAULT_P 252
1477 #define XGEMM_DEFAULT_R xgemm_r
1478
1479 #define SGEMM_DEFAULT_Q 384
1480 #define DGEMM_DEFAULT_Q 256
1481 #define QGEMM_DEFAULT_Q 128
1482 #define CGEMM_DEFAULT_Q 512
1483 #define ZGEMM_DEFAULT_Q 192
1484 #define XGEMM_DEFAULT_Q 128
1485
1486 #define CGEMM3M_DEFAULT_UNROLL_N 8
1487 #define CGEMM3M_DEFAULT_UNROLL_M 4
1488 #define ZGEMM3M_DEFAULT_UNROLL_N 8
1489 #define ZGEMM3M_DEFAULT_UNROLL_M 2
1490
1491 #define CGEMM3M_DEFAULT_P 448
1492 #define ZGEMM3M_DEFAULT_P 224
1493 #define XGEMM3M_DEFAULT_P 112
1494 #define CGEMM3M_DEFAULT_Q 224
1495 #define ZGEMM3M_DEFAULT_Q 224
1496 #define XGEMM3M_DEFAULT_Q 224
1497 #define CGEMM3M_DEFAULT_R 12288
1498 #define ZGEMM3M_DEFAULT_R 12288
1499 #define XGEMM3M_DEFAULT_R 12288
1500
1501
1502
1503 #define GETRF_FACTOR 0.72
1504
1505 #endif
1506
1507 #ifdef HASWELL
1508
1509 #define SNUMOPT         16
1510 #define DNUMOPT         8
1511
1512 #define GEMM_DEFAULT_OFFSET_A     0
1513 #define GEMM_DEFAULT_OFFSET_B     0
1514 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
1515
1516 #define SYMV_P  8
1517
1518 #if defined(XDOUBLE) || defined(DOUBLE)
1519 #define SWITCH_RATIO            4
1520 #define GEMM_PREFERED_SIZE      4
1521 #else
1522 #define SWITCH_RATIO            8
1523 #define GEMM_PREFERED_SIZE      8
1524 #endif
1525
1526 #ifdef ARCH_X86
1527
1528 #define SGEMM_DEFAULT_UNROLL_M 4
1529 #define DGEMM_DEFAULT_UNROLL_M 2
1530 #define QGEMM_DEFAULT_UNROLL_M 2
1531 #define CGEMM_DEFAULT_UNROLL_M 2
1532 #define ZGEMM_DEFAULT_UNROLL_M 1
1533 #define XGEMM_DEFAULT_UNROLL_M 1
1534
1535 #define SGEMM_DEFAULT_UNROLL_N 4
1536 #define DGEMM_DEFAULT_UNROLL_N 4
1537 #define QGEMM_DEFAULT_UNROLL_N 2
1538 #define CGEMM_DEFAULT_UNROLL_N 2
1539 #define ZGEMM_DEFAULT_UNROLL_N 2
1540 #define XGEMM_DEFAULT_UNROLL_N 1
1541
1542 #else
1543
1544 #define SGEMM_DEFAULT_UNROLL_M 8
1545 #define DGEMM_DEFAULT_UNROLL_M 4
1546 #define QGEMM_DEFAULT_UNROLL_M 2
1547 #define CGEMM_DEFAULT_UNROLL_M 8
1548 #define ZGEMM_DEFAULT_UNROLL_M 4
1549 #define XGEMM_DEFAULT_UNROLL_M 1
1550
1551 #define SGEMM_DEFAULT_UNROLL_N 4
1552 #define DGEMM_DEFAULT_UNROLL_N 8
1553 #define QGEMM_DEFAULT_UNROLL_N 2
1554 #define CGEMM_DEFAULT_UNROLL_N 2
1555 #define ZGEMM_DEFAULT_UNROLL_N 2
1556 #define XGEMM_DEFAULT_UNROLL_N 1
1557 /*
1558 #define SGEMM_DEFAULT_UNROLL_MN 32
1559 #define DGEMM_DEFAULT_UNROLL_MN 32
1560 */
1561 #endif
1562
1563 #ifdef ARCH_X86
1564
1565 #define SGEMM_DEFAULT_P 512
1566 #define SGEMM_DEFAULT_R sgemm_r
1567 #define DGEMM_DEFAULT_P 512
1568 #define DGEMM_DEFAULT_R dgemm_r
1569 #define QGEMM_DEFAULT_P 504
1570 #define QGEMM_DEFAULT_R qgemm_r
1571 #define CGEMM_DEFAULT_P 128
1572 #define CGEMM_DEFAULT_R 1024
1573 #define ZGEMM_DEFAULT_P 512
1574 #define ZGEMM_DEFAULT_R zgemm_r
1575 #define XGEMM_DEFAULT_P 252
1576 #define XGEMM_DEFAULT_R xgemm_r
1577 #define SGEMM_DEFAULT_Q 256
1578 #define DGEMM_DEFAULT_Q 256
1579 #define QGEMM_DEFAULT_Q 128
1580 #define CGEMM_DEFAULT_Q 256
1581 #define ZGEMM_DEFAULT_Q 192
1582 #define XGEMM_DEFAULT_Q 128
1583
1584 #else
1585
1586 #define SGEMM_DEFAULT_P 320
1587 #define DGEMM_DEFAULT_P 512
1588 #define CGEMM_DEFAULT_P 256
1589 #define ZGEMM_DEFAULT_P 192
1590
1591 #ifdef WINDOWS_ABI
1592 #define SGEMM_DEFAULT_Q 320
1593 #define DGEMM_DEFAULT_Q 128
1594 #else
1595 #define SGEMM_DEFAULT_Q 320
1596 #define DGEMM_DEFAULT_Q 256
1597 #endif
1598 #define CGEMM_DEFAULT_Q 256
1599 #define ZGEMM_DEFAULT_Q 192
1600
1601 #define SGEMM_DEFAULT_R sgemm_r
1602 #define DGEMM_DEFAULT_R 13824
1603 #define CGEMM_DEFAULT_R cgemm_r
1604 #define ZGEMM_DEFAULT_R zgemm_r
1605
1606 #define QGEMM_DEFAULT_Q 128
1607 #define QGEMM_DEFAULT_P 504
1608 #define QGEMM_DEFAULT_R qgemm_r
1609 #define XGEMM_DEFAULT_P 252
1610 #define XGEMM_DEFAULT_R xgemm_r
1611 #define XGEMM_DEFAULT_Q 128
1612
1613 #define CGEMM3M_DEFAULT_UNROLL_N 4
1614 #define CGEMM3M_DEFAULT_UNROLL_M 8
1615 #define ZGEMM3M_DEFAULT_UNROLL_N 4
1616 #define ZGEMM3M_DEFAULT_UNROLL_M 4
1617
1618 #define CGEMM3M_DEFAULT_P 320
1619 #define ZGEMM3M_DEFAULT_P 256
1620 #define XGEMM3M_DEFAULT_P 112
1621 #define CGEMM3M_DEFAULT_Q 320
1622 #define ZGEMM3M_DEFAULT_Q 256
1623 #define XGEMM3M_DEFAULT_Q 224
1624 #define CGEMM3M_DEFAULT_R 12288
1625 #define ZGEMM3M_DEFAULT_R 12288
1626 #define XGEMM3M_DEFAULT_R 12288
1627
1628 #endif
1629
1630
1631 #endif
1632
1633 #ifdef SKYLAKEX
1634
1635 #define SNUMOPT         16
1636 #define DNUMOPT         8
1637
1638 #define GEMM_DEFAULT_OFFSET_A     0
1639 #define GEMM_DEFAULT_OFFSET_B     0
1640 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
1641
1642 #define SYMV_P  8
1643
1644 #if defined(XDOUBLE) || defined(DOUBLE)
1645 #define SWITCH_RATIO           8
1646 #define GEMM_PREFERED_SIZE     8
1647 #else
1648 #define SWITCH_RATIO           16
1649 #define GEMM_PREFERED_SIZE     16
1650 #endif
1651 #define USE_SGEMM_KERNEL_DIRECT 1
1652
1653 #ifdef ARCH_X86
1654
1655 #define SGEMM_DEFAULT_UNROLL_M 4
1656 #define DGEMM_DEFAULT_UNROLL_M 2
1657 #define QGEMM_DEFAULT_UNROLL_M 2
1658 #define CGEMM_DEFAULT_UNROLL_M 2
1659 #define ZGEMM_DEFAULT_UNROLL_M 1
1660 #define XGEMM_DEFAULT_UNROLL_M 1
1661
1662 #define SGEMM_DEFAULT_UNROLL_N 4
1663 #define DGEMM_DEFAULT_UNROLL_N 4
1664 #define QGEMM_DEFAULT_UNROLL_N 2
1665 #define CGEMM_DEFAULT_UNROLL_N 2
1666 #define ZGEMM_DEFAULT_UNROLL_N 2
1667 #define XGEMM_DEFAULT_UNROLL_N 1
1668
1669 #else
1670
1671 #define SGEMM_DEFAULT_UNROLL_M 16
1672 #ifndef DYNAMIC_ARCH
1673 #define DGEMM_DEFAULT_UNROLL_M 16
1674 #else
1675 #define DGEMM_DEFAULT_UNROLL_M 4
1676 #endif
1677 #define QGEMM_DEFAULT_UNROLL_M 2
1678 #define CGEMM_DEFAULT_UNROLL_M 8
1679 #define ZGEMM_DEFAULT_UNROLL_M 4
1680 #define XGEMM_DEFAULT_UNROLL_M 1
1681
1682 #define SGEMM_DEFAULT_UNROLL_N 4
1683 #ifndef DYNAMIC_ARCH
1684 #define DGEMM_DEFAULT_UNROLL_N 2
1685 #else
1686 #define DGEMM_DEFAULT_UNROLL_N 8
1687 #endif
1688 #define QGEMM_DEFAULT_UNROLL_N 2
1689 #define CGEMM_DEFAULT_UNROLL_N 2
1690 #define ZGEMM_DEFAULT_UNROLL_N 2
1691 #define XGEMM_DEFAULT_UNROLL_N 1
1692
1693 #define SGEMM_DEFAULT_UNROLL_MN 32
1694 #define DGEMM_DEFAULT_UNROLL_MN 32
1695 #endif
1696
1697 #ifdef ARCH_X86
1698
1699 #define SGEMM_DEFAULT_P 512
1700 #define SGEMM_DEFAULT_R sgemm_r
1701 #define DGEMM_DEFAULT_P 512
1702 #define DGEMM_DEFAULT_R dgemm_r
1703 #define QGEMM_DEFAULT_P 504
1704 #define QGEMM_DEFAULT_R qgemm_r
1705 #define CGEMM_DEFAULT_P 128
1706 #define CGEMM_DEFAULT_R 1024
1707 #define ZGEMM_DEFAULT_P 512
1708 #define ZGEMM_DEFAULT_R zgemm_r
1709 #define XGEMM_DEFAULT_P 252
1710 #define XGEMM_DEFAULT_R xgemm_r
1711 #define SGEMM_DEFAULT_Q 256
1712 #define DGEMM_DEFAULT_Q 256
1713 #define QGEMM_DEFAULT_Q 128
1714 #define CGEMM_DEFAULT_Q 256
1715 #define ZGEMM_DEFAULT_Q 192
1716 #define XGEMM_DEFAULT_Q 128
1717
1718 #else
1719
1720 #define SGEMM_DEFAULT_P 448
1721 #define DGEMM_DEFAULT_P 192
1722 #define CGEMM_DEFAULT_P 384
1723 #define ZGEMM_DEFAULT_P 256
1724
1725 #define SGEMM_DEFAULT_Q 448
1726 #define DGEMM_DEFAULT_Q 384
1727 #define CGEMM_DEFAULT_Q 192
1728 #define ZGEMM_DEFAULT_Q 128
1729
1730 #define SGEMM_DEFAULT_R sgemm_r
1731 #define DGEMM_DEFAULT_R 8640
1732 #define CGEMM_DEFAULT_R cgemm_r
1733 #define ZGEMM_DEFAULT_R zgemm_r
1734
1735 #define QGEMM_DEFAULT_Q 128
1736 #define QGEMM_DEFAULT_P 504
1737 #define QGEMM_DEFAULT_R qgemm_r
1738 #define XGEMM_DEFAULT_P 252
1739 #define XGEMM_DEFAULT_R xgemm_r
1740 #define XGEMM_DEFAULT_Q 128
1741
1742 #define CGEMM3M_DEFAULT_UNROLL_N 4
1743 #define CGEMM3M_DEFAULT_UNROLL_M 8
1744 #define ZGEMM3M_DEFAULT_UNROLL_N 4
1745 #define ZGEMM3M_DEFAULT_UNROLL_M 4
1746
1747 #define CGEMM3M_DEFAULT_P 320
1748 #define ZGEMM3M_DEFAULT_P 256
1749 #define XGEMM3M_DEFAULT_P 112
1750 #define CGEMM3M_DEFAULT_Q 320
1751 #define ZGEMM3M_DEFAULT_Q 256
1752 #define XGEMM3M_DEFAULT_Q 224
1753 #define CGEMM3M_DEFAULT_R 12288
1754 #define ZGEMM3M_DEFAULT_R 12288
1755 #define XGEMM3M_DEFAULT_R 12288
1756
1757 #endif
1758
1759
1760 #endif
1761
1762 #ifdef SAPPHIRERAPIDS
1763
1764 #define SNUMOPT         16
1765 #define DNUMOPT         8
1766
1767 #define GEMM_DEFAULT_OFFSET_A     0
1768 #define GEMM_DEFAULT_OFFSET_B     0
1769 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1770
1771 #define SYMV_P  8
1772
1773 #if defined(XDOUBLE) || defined(DOUBLE)
1774 #define SWITCH_RATIO           8
1775 #define GEMM_PREFERED_SIZE     8
1776 #else
1777 #define SWITCH_RATIO           16
1778 #define GEMM_PREFERED_SIZE     16
1779 #endif
1780 #define USE_SGEMM_KERNEL_DIRECT 1
1781
1782 #undef SBGEMM_DEFAULT_UNROLL_N
1783 #undef SBGEMM_DEFAULT_UNROLL_M
1784 #undef SBGEMM_DEFAULT_P
1785 #undef SBGEMM_DEFAULT_R
1786 #undef SBGEMM_DEFAULT_Q
1787 // FIXME: actually UNROLL_M = UNROLL_N = 16
1788 // If M and N is equal, OpenBLAS will reuse OCOPY as ICOPY.
1789 // But for AMX, they are not the same, set UNROLL_M = 32 to workaround
1790 #define SBGEMM_DEFAULT_UNROLL_N 16
1791 #define SBGEMM_DEFAULT_UNROLL_M 32
1792 #define SBGEMM_DEFAULT_P 256
1793 #define SBGEMM_DEFAULT_Q 1024
1794 #define SBGEMM_DEFAULT_R sbgemm_r
1795
1796 #ifdef ARCH_X86
1797
1798 #define SGEMM_DEFAULT_UNROLL_M 4
1799 #define DGEMM_DEFAULT_UNROLL_M 2
1800 #define QGEMM_DEFAULT_UNROLL_M 2
1801 #define CGEMM_DEFAULT_UNROLL_M 2
1802 #define ZGEMM_DEFAULT_UNROLL_M 1
1803 #define XGEMM_DEFAULT_UNROLL_M 1
1804
1805 #define SGEMM_DEFAULT_UNROLL_N 4
1806 #define DGEMM_DEFAULT_UNROLL_N 4
1807 #define QGEMM_DEFAULT_UNROLL_N 2
1808 #define CGEMM_DEFAULT_UNROLL_N 2
1809 #define ZGEMM_DEFAULT_UNROLL_N 2
1810 #define XGEMM_DEFAULT_UNROLL_N 1
1811
1812 #else
1813
1814 #define SGEMM_DEFAULT_UNROLL_M 16
1815 #define DGEMM_DEFAULT_UNROLL_M 16
1816 #define QGEMM_DEFAULT_UNROLL_M 2
1817 #define CGEMM_DEFAULT_UNROLL_M 8
1818 #define ZGEMM_DEFAULT_UNROLL_M 4
1819 #define XGEMM_DEFAULT_UNROLL_M 1
1820
1821 #define SGEMM_DEFAULT_UNROLL_N 4
1822 #define DGEMM_DEFAULT_UNROLL_N 2
1823 #define QGEMM_DEFAULT_UNROLL_N 2
1824 #define CGEMM_DEFAULT_UNROLL_N 2
1825 #define ZGEMM_DEFAULT_UNROLL_N 2
1826 #define XGEMM_DEFAULT_UNROLL_N 1
1827
1828 #define SGEMM_DEFAULT_UNROLL_MN 32
1829 #define DGEMM_DEFAULT_UNROLL_MN 32
1830 #endif
1831
1832 #ifdef ARCH_X86
1833
1834 #define SGEMM_DEFAULT_P 512
1835 #define SGEMM_DEFAULT_R sgemm_r
1836 #define DGEMM_DEFAULT_P 512
1837 #define DGEMM_DEFAULT_R dgemm_r
1838 #define QGEMM_DEFAULT_P 504
1839 #define QGEMM_DEFAULT_R qgemm_r
1840 #define CGEMM_DEFAULT_P 128
1841 #define CGEMM_DEFAULT_R 1024
1842 #define ZGEMM_DEFAULT_P 512
1843 #define ZGEMM_DEFAULT_R zgemm_r
1844 #define XGEMM_DEFAULT_P 252
1845 #define XGEMM_DEFAULT_R xgemm_r
1846 #define SGEMM_DEFAULT_Q 256
1847 #define DGEMM_DEFAULT_Q 256
1848 #define QGEMM_DEFAULT_Q 128
1849 #define CGEMM_DEFAULT_Q 256
1850 #define ZGEMM_DEFAULT_Q 192
1851 #define XGEMM_DEFAULT_Q 128
1852
1853 #else
1854
1855 #define SGEMM_DEFAULT_P 640
1856 #define DGEMM_DEFAULT_P 192
1857 #define CGEMM_DEFAULT_P 384
1858 #define ZGEMM_DEFAULT_P 256
1859
1860 #define SGEMM_DEFAULT_Q 320
1861 #define DGEMM_DEFAULT_Q 384
1862 #define CGEMM_DEFAULT_Q 192
1863 #define ZGEMM_DEFAULT_Q 128
1864
1865 #define SGEMM_DEFAULT_R sgemm_r
1866 #define DGEMM_DEFAULT_R 8640
1867 #define CGEMM_DEFAULT_R cgemm_r
1868 #define ZGEMM_DEFAULT_R zgemm_r
1869
1870 #define QGEMM_DEFAULT_Q 128
1871 #define QGEMM_DEFAULT_P 504
1872 #define QGEMM_DEFAULT_R qgemm_r
1873 #define XGEMM_DEFAULT_P 252
1874 #define XGEMM_DEFAULT_R xgemm_r
1875 #define XGEMM_DEFAULT_Q 128
1876
1877 #define CGEMM3M_DEFAULT_UNROLL_N 4
1878 #define CGEMM3M_DEFAULT_UNROLL_M 8
1879 #define ZGEMM3M_DEFAULT_UNROLL_N 4
1880 #define ZGEMM3M_DEFAULT_UNROLL_M 4
1881
1882 #define CGEMM3M_DEFAULT_P 320
1883 #define ZGEMM3M_DEFAULT_P 256
1884 #define XGEMM3M_DEFAULT_P 112
1885 #define CGEMM3M_DEFAULT_Q 320
1886 #define ZGEMM3M_DEFAULT_Q 256
1887 #define XGEMM3M_DEFAULT_Q 224
1888 #define CGEMM3M_DEFAULT_R 12288
1889 #define ZGEMM3M_DEFAULT_R 12288
1890 #define XGEMM3M_DEFAULT_R 12288
1891
1892 #endif
1893 #endif
1894
1895 #ifdef COOPERLAKE
1896
1897 #define SNUMOPT         16
1898 #define DNUMOPT         8
1899
1900 #define GEMM_DEFAULT_OFFSET_A     0
1901 #define GEMM_DEFAULT_OFFSET_B     0
1902 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1903
1904 #define SYMV_P  8
1905
1906 #if defined(XDOUBLE) || defined(DOUBLE)
1907 #define SWITCH_RATIO           8
1908 #define GEMM_PREFERED_SIZE     8
1909 #else
1910 #define SWITCH_RATIO           16
1911 #define GEMM_PREFERED_SIZE     16
1912 #endif
1913 #define USE_SGEMM_KERNEL_DIRECT 1
1914
1915 #undef SBGEMM_DEFAULT_UNROLL_N
1916 #undef SBGEMM_DEFAULT_UNROLL_M
1917 #undef SBGEMM_DEFAULT_P
1918 #undef SBGEMM_DEFAULT_R
1919 #undef SBGEMM_DEFAULT_Q
1920 #define SBGEMM_DEFAULT_UNROLL_N 4
1921 #define SBGEMM_DEFAULT_UNROLL_M 16
1922 #define SBGEMM_DEFAULT_P 384
1923 #define SBGEMM_DEFAULT_Q 768
1924 #define SBGEMM_DEFAULT_R sbgemm_r
1925
1926 #ifdef ARCH_X86
1927
1928 #define SGEMM_DEFAULT_UNROLL_M 4
1929 #define DGEMM_DEFAULT_UNROLL_M 2
1930 #define QGEMM_DEFAULT_UNROLL_M 2
1931 #define CGEMM_DEFAULT_UNROLL_M 2
1932 #define ZGEMM_DEFAULT_UNROLL_M 1
1933 #define XGEMM_DEFAULT_UNROLL_M 1
1934
1935 #define SGEMM_DEFAULT_UNROLL_N 4
1936 #define DGEMM_DEFAULT_UNROLL_N 4
1937 #define QGEMM_DEFAULT_UNROLL_N 2
1938 #define CGEMM_DEFAULT_UNROLL_N 2
1939 #define ZGEMM_DEFAULT_UNROLL_N 2
1940 #define XGEMM_DEFAULT_UNROLL_N 1
1941
1942 #else
1943
1944 #define SGEMM_DEFAULT_UNROLL_M 16
1945 #define DGEMM_DEFAULT_UNROLL_M 16
1946 #define QGEMM_DEFAULT_UNROLL_M 2
1947 #define CGEMM_DEFAULT_UNROLL_M 8
1948 #define ZGEMM_DEFAULT_UNROLL_M 4
1949 #define XGEMM_DEFAULT_UNROLL_M 1
1950
1951 #define SGEMM_DEFAULT_UNROLL_N 4
1952 #define DGEMM_DEFAULT_UNROLL_N 2
1953 #define QGEMM_DEFAULT_UNROLL_N 2
1954 #define CGEMM_DEFAULT_UNROLL_N 2
1955 #define ZGEMM_DEFAULT_UNROLL_N 2
1956 #define XGEMM_DEFAULT_UNROLL_N 1
1957
1958 #define SGEMM_DEFAULT_UNROLL_MN 32
1959 #define DGEMM_DEFAULT_UNROLL_MN 32
1960 #endif
1961
1962 #ifdef ARCH_X86
1963
1964 #define SGEMM_DEFAULT_P 512
1965 #define SGEMM_DEFAULT_R sgemm_r
1966 #define DGEMM_DEFAULT_P 512
1967 #define DGEMM_DEFAULT_R dgemm_r
1968 #define QGEMM_DEFAULT_P 504
1969 #define QGEMM_DEFAULT_R qgemm_r
1970 #define CGEMM_DEFAULT_P 128
1971 #define CGEMM_DEFAULT_R 1024
1972 #define ZGEMM_DEFAULT_P 512
1973 #define ZGEMM_DEFAULT_R zgemm_r
1974 #define XGEMM_DEFAULT_P 252
1975 #define XGEMM_DEFAULT_R xgemm_r
1976 #define SGEMM_DEFAULT_Q 256
1977 #define DGEMM_DEFAULT_Q 256
1978 #define QGEMM_DEFAULT_Q 128
1979 #define CGEMM_DEFAULT_Q 256
1980 #define ZGEMM_DEFAULT_Q 192
1981 #define XGEMM_DEFAULT_Q 128
1982
1983 #else
1984
1985 #define SGEMM_DEFAULT_P 640
1986 #define DGEMM_DEFAULT_P 192
1987 #define CGEMM_DEFAULT_P 384
1988 #define ZGEMM_DEFAULT_P 256
1989
1990 #define SGEMM_DEFAULT_Q 320
1991 #define DGEMM_DEFAULT_Q 384
1992 #define CGEMM_DEFAULT_Q 192
1993 #define ZGEMM_DEFAULT_Q 128
1994
1995 #define SGEMM_DEFAULT_R sgemm_r
1996 #define DGEMM_DEFAULT_R 8640
1997 #define CGEMM_DEFAULT_R cgemm_r
1998 #define ZGEMM_DEFAULT_R zgemm_r
1999
2000 #define QGEMM_DEFAULT_Q 128
2001 #define QGEMM_DEFAULT_P 504
2002 #define QGEMM_DEFAULT_R qgemm_r
2003 #define XGEMM_DEFAULT_P 252
2004 #define XGEMM_DEFAULT_R xgemm_r
2005 #define XGEMM_DEFAULT_Q 128
2006
2007 #define CGEMM3M_DEFAULT_UNROLL_N 4
2008 #define CGEMM3M_DEFAULT_UNROLL_M 8
2009 #define ZGEMM3M_DEFAULT_UNROLL_N 4
2010 #define ZGEMM3M_DEFAULT_UNROLL_M 4
2011
2012 #define CGEMM3M_DEFAULT_P 320
2013 #define ZGEMM3M_DEFAULT_P 256
2014 #define XGEMM3M_DEFAULT_P 112
2015 #define CGEMM3M_DEFAULT_Q 320
2016 #define ZGEMM3M_DEFAULT_Q 256
2017 #define XGEMM3M_DEFAULT_Q 224
2018 #define CGEMM3M_DEFAULT_R 12288
2019 #define ZGEMM3M_DEFAULT_R 12288
2020 #define XGEMM3M_DEFAULT_R 12288
2021
2022 #endif
2023 #endif
2024
2025
2026 #ifdef ATOM
2027
2028 #define SNUMOPT         2
2029 #define DNUMOPT         1
2030
2031 #define GEMM_DEFAULT_OFFSET_A     64
2032 #define GEMM_DEFAULT_OFFSET_B      0
2033 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x0ffffUL
2034
2035 #define SYMV_P  8
2036
2037 #ifdef ARCH_X86
2038 #define SGEMM_DEFAULT_UNROLL_M 4
2039 #define DGEMM_DEFAULT_UNROLL_M 2
2040 #define QGEMM_DEFAULT_UNROLL_M 2
2041 #define CGEMM_DEFAULT_UNROLL_M 2
2042 #define ZGEMM_DEFAULT_UNROLL_M 1
2043 #define XGEMM_DEFAULT_UNROLL_M 1
2044 #else
2045 #define SGEMM_DEFAULT_UNROLL_M 8
2046 #define DGEMM_DEFAULT_UNROLL_M 4
2047 #define QGEMM_DEFAULT_UNROLL_M 2
2048 #define CGEMM_DEFAULT_UNROLL_M 4
2049 #define ZGEMM_DEFAULT_UNROLL_M 2
2050 #define XGEMM_DEFAULT_UNROLL_M 1
2051 #endif
2052
2053 #define SGEMM_DEFAULT_UNROLL_N 4
2054 #define DGEMM_DEFAULT_UNROLL_N 2
2055 #define QGEMM_DEFAULT_UNROLL_N 2
2056 #define CGEMM_DEFAULT_UNROLL_N 2
2057 #define ZGEMM_DEFAULT_UNROLL_N 1
2058 #define XGEMM_DEFAULT_UNROLL_N 1
2059
2060 #define SGEMM_DEFAULT_P sgemm_p
2061 #define SGEMM_DEFAULT_R sgemm_r
2062
2063 #define DGEMM_DEFAULT_P dgemm_p
2064 #define DGEMM_DEFAULT_R dgemm_r
2065
2066 #define QGEMM_DEFAULT_P qgemm_p
2067 #define QGEMM_DEFAULT_R qgemm_r
2068
2069 #define CGEMM_DEFAULT_P cgemm_p
2070 #define CGEMM_DEFAULT_R cgemm_r
2071
2072 #define ZGEMM_DEFAULT_P zgemm_p
2073 #define ZGEMM_DEFAULT_R zgemm_r
2074
2075 #define XGEMM_DEFAULT_P xgemm_p
2076 #define XGEMM_DEFAULT_R xgemm_r
2077
2078 #define SGEMM_DEFAULT_Q 256
2079 #define DGEMM_DEFAULT_Q 256
2080 #define QGEMM_DEFAULT_Q 256
2081 #define CGEMM_DEFAULT_Q 256
2082 #define ZGEMM_DEFAULT_Q 256
2083 #define XGEMM_DEFAULT_Q 256
2084
2085 #endif
2086
2087
2088 #ifdef ITANIUM2
2089
2090 #define SNUMOPT         4
2091 #define DNUMOPT         4
2092
2093 #define GEMM_DEFAULT_OFFSET_A 0
2094 #define GEMM_DEFAULT_OFFSET_B 128
2095 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
2096
2097 #define SGEMM_DEFAULT_UNROLL_M 8
2098 #define SGEMM_DEFAULT_UNROLL_N 8
2099 #define DGEMM_DEFAULT_UNROLL_M 8
2100 #define DGEMM_DEFAULT_UNROLL_N 8
2101 #define QGEMM_DEFAULT_UNROLL_M 8
2102 #define QGEMM_DEFAULT_UNROLL_N 8
2103 #define CGEMM_DEFAULT_UNROLL_M 4
2104 #define CGEMM_DEFAULT_UNROLL_N 4
2105 #define ZGEMM_DEFAULT_UNROLL_M 4
2106 #define ZGEMM_DEFAULT_UNROLL_N 4
2107 #define XGEMM_DEFAULT_UNROLL_M 4
2108 #define XGEMM_DEFAULT_UNROLL_N 4
2109
2110 #define SGEMM_DEFAULT_P sgemm_p
2111 #define DGEMM_DEFAULT_P dgemm_p
2112 #define QGEMM_DEFAULT_P qgemm_p
2113 #define CGEMM_DEFAULT_P cgemm_p
2114 #define ZGEMM_DEFAULT_P zgemm_p
2115 #define XGEMM_DEFAULT_P xgemm_p
2116
2117 #define SGEMM_DEFAULT_Q 1024
2118 #define DGEMM_DEFAULT_Q 1024
2119 #define QGEMM_DEFAULT_Q 1024
2120 #define CGEMM_DEFAULT_Q 1024
2121 #define ZGEMM_DEFAULT_Q 1024
2122 #define XGEMM_DEFAULT_Q 1024
2123
2124 #define SGEMM_DEFAULT_R sgemm_r
2125 #define DGEMM_DEFAULT_R dgemm_r
2126 #define QGEMM_DEFAULT_R qgemm_r
2127 #define CGEMM_DEFAULT_R cgemm_r
2128 #define ZGEMM_DEFAULT_R zgemm_r
2129 #define XGEMM_DEFAULT_R xgemm_r
2130
2131 #define SYMV_P   16
2132
2133 #define GETRF_FACTOR 0.65
2134
2135 #endif
2136
2137 #if defined(EV4) || defined(EV5) || defined(EV6)
2138
2139 #ifdef EV4
2140 #define SNUMOPT         1
2141 #define DNUMOPT         1
2142 #else
2143 #define SNUMOPT         2
2144 #define DNUMOPT         2
2145 #endif
2146
2147 #define GEMM_DEFAULT_OFFSET_A 512
2148 #define GEMM_DEFAULT_OFFSET_B 512
2149 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x0ffffUL
2150
2151 #define SGEMM_DEFAULT_UNROLL_M 4
2152 #define SGEMM_DEFAULT_UNROLL_N 4
2153 #define DGEMM_DEFAULT_UNROLL_M 4
2154 #define DGEMM_DEFAULT_UNROLL_N 4
2155 #define CGEMM_DEFAULT_UNROLL_M 2
2156 #define CGEMM_DEFAULT_UNROLL_N 2
2157 #define ZGEMM_DEFAULT_UNROLL_M 2
2158 #define ZGEMM_DEFAULT_UNROLL_N 2
2159
2160 #define SYMV_P   8
2161
2162 #ifdef EV4
2163 #define SGEMM_DEFAULT_P  32
2164 #define SGEMM_DEFAULT_Q 112
2165 #define SGEMM_DEFAULT_R 256
2166
2167 #define DGEMM_DEFAULT_P  32
2168 #define DGEMM_DEFAULT_Q  56
2169 #define DGEMM_DEFAULT_R 256
2170
2171 #define CGEMM_DEFAULT_P  32
2172 #define CGEMM_DEFAULT_Q  64
2173 #define CGEMM_DEFAULT_R 240
2174
2175 #define ZGEMM_DEFAULT_P  32
2176 #define ZGEMM_DEFAULT_Q  32
2177 #define ZGEMM_DEFAULT_R 240
2178 #endif
2179
2180 #ifdef EV5
2181 #define SGEMM_DEFAULT_P  64
2182 #define SGEMM_DEFAULT_Q 256
2183
2184 #define DGEMM_DEFAULT_P  64
2185 #define DGEMM_DEFAULT_Q 128
2186
2187 #define CGEMM_DEFAULT_P  64
2188 #define CGEMM_DEFAULT_Q 128
2189
2190 #define ZGEMM_DEFAULT_P  64
2191 #define ZGEMM_DEFAULT_Q  64
2192 #endif
2193
2194 #ifdef EV6
2195 #define SGEMM_DEFAULT_P 256
2196 #define SGEMM_DEFAULT_Q 512
2197
2198 #define DGEMM_DEFAULT_P 256
2199 #define DGEMM_DEFAULT_Q 256
2200
2201 #define CGEMM_DEFAULT_P 256
2202 #define CGEMM_DEFAULT_Q 256
2203
2204 #define ZGEMM_DEFAULT_P 128
2205 #define ZGEMM_DEFAULT_Q 256
2206 #endif
2207
2208 #endif
2209
2210 #ifdef CELL
2211
2212 #define SNUMOPT         2
2213 #define DNUMOPT         2
2214
2215 #define GEMM_DEFAULT_OFFSET_A 0
2216 #define GEMM_DEFAULT_OFFSET_B 8192
2217 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x0ffffUL
2218
2219 #define SGEMM_DEFAULT_UNROLL_M 16
2220 #define SGEMM_DEFAULT_UNROLL_N 4
2221 #define DGEMM_DEFAULT_UNROLL_M 4
2222 #define DGEMM_DEFAULT_UNROLL_N 4
2223 #define CGEMM_DEFAULT_UNROLL_M 8
2224 #define CGEMM_DEFAULT_UNROLL_N 2
2225 #define ZGEMM_DEFAULT_UNROLL_M 2
2226 #define ZGEMM_DEFAULT_UNROLL_N 2
2227
2228 #define SGEMM_DEFAULT_P 128
2229 #define DGEMM_DEFAULT_P 128
2230 #define CGEMM_DEFAULT_P 128
2231 #define ZGEMM_DEFAULT_P 128
2232
2233 #define SGEMM_DEFAULT_Q  512
2234 #define DGEMM_DEFAULT_Q  256
2235 #define CGEMM_DEFAULT_Q  256
2236 #define ZGEMM_DEFAULT_Q  128
2237
2238 #define SYMV_P   4
2239 #endif
2240
2241 #ifdef PPCG4
2242 #define GEMM_DEFAULT_OFFSET_A    0
2243 #define GEMM_DEFAULT_OFFSET_B 1024
2244 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
2245
2246 #define SGEMM_DEFAULT_UNROLL_M 16
2247 #define SGEMM_DEFAULT_UNROLL_N 4
2248 #define DGEMM_DEFAULT_UNROLL_M 4
2249 #define DGEMM_DEFAULT_UNROLL_N 4
2250 #define CGEMM_DEFAULT_UNROLL_M 2
2251 #define CGEMM_DEFAULT_UNROLL_N 2
2252 #define ZGEMM_DEFAULT_UNROLL_M 2
2253 #define ZGEMM_DEFAULT_UNROLL_N 2
2254
2255 #define SGEMM_DEFAULT_P 256
2256 #define DGEMM_DEFAULT_P 128
2257 #define CGEMM_DEFAULT_P 128
2258 #define ZGEMM_DEFAULT_P  64
2259
2260 #define SGEMM_DEFAULT_Q 256
2261 #define DGEMM_DEFAULT_Q 256
2262 #define CGEMM_DEFAULT_Q 256
2263 #define ZGEMM_DEFAULT_Q 256
2264
2265 #define SYMV_P   4
2266 #endif
2267
2268 #ifdef PPC970
2269
2270 #define SNUMOPT         4
2271 #define DNUMOPT         4
2272
2273 #define GEMM_DEFAULT_OFFSET_A 2688
2274 #define GEMM_DEFAULT_OFFSET_B 3072
2275 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2276
2277 #if defined(__BYTE_ORDER__)&&(__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
2278 #define SGEMM_DEFAULT_UNROLL_M 4
2279 #else
2280 #define SGEMM_DEFAULT_UNROLL_M 16
2281 #endif
2282 #define SGEMM_DEFAULT_UNROLL_N 4
2283 #define DGEMM_DEFAULT_UNROLL_M 4
2284 #define DGEMM_DEFAULT_UNROLL_N 4
2285 #if defined(__BYTE_ORDER__)&&(__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
2286 #define CGEMM_DEFAULT_UNROLL_M 2
2287 #else
2288 #define CGEMM_DEFAULT_UNROLL_M 8
2289 #endif
2290 #define CGEMM_DEFAULT_UNROLL_N 2
2291 #define ZGEMM_DEFAULT_UNROLL_M 2
2292 #define ZGEMM_DEFAULT_UNROLL_N 2
2293
2294 #if defined(OS_LINUX) || defined(OS_DARWIN) || defined(OS_FREEBSD)
2295 #if L2_SIZE == 1024976
2296 #define SGEMM_DEFAULT_P 320
2297 #define DGEMM_DEFAULT_P 256
2298 #define CGEMM_DEFAULT_P 256
2299 #define ZGEMM_DEFAULT_P 256
2300 #else
2301 #define SGEMM_DEFAULT_P 176
2302 #define DGEMM_DEFAULT_P 176
2303 #define CGEMM_DEFAULT_P 176
2304 #define ZGEMM_DEFAULT_P 176
2305 #endif
2306 #endif
2307
2308 #define SGEMM_DEFAULT_Q 512
2309 #define DGEMM_DEFAULT_Q 256
2310 #define CGEMM_DEFAULT_Q 256
2311 #define ZGEMM_DEFAULT_Q 128
2312
2313 #define SYMV_P   4
2314
2315 #endif
2316
2317 #ifdef PPC440
2318
2319 #define SNUMOPT         2
2320 #define DNUMOPT         2
2321
2322 #define GEMM_DEFAULT_OFFSET_A (32 * 0)
2323 #define GEMM_DEFAULT_OFFSET_B (32 * 0)
2324 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
2325
2326 #define SGEMM_DEFAULT_UNROLL_M 4
2327 #define SGEMM_DEFAULT_UNROLL_N 4
2328 #define DGEMM_DEFAULT_UNROLL_M 4
2329 #define DGEMM_DEFAULT_UNROLL_N 4
2330 #define CGEMM_DEFAULT_UNROLL_M 2
2331 #define CGEMM_DEFAULT_UNROLL_N 2
2332 #define ZGEMM_DEFAULT_UNROLL_M 2
2333 #define ZGEMM_DEFAULT_UNROLL_N 2
2334
2335 #define SGEMM_DEFAULT_P 512
2336 #define DGEMM_DEFAULT_P 512
2337 #define CGEMM_DEFAULT_P 512
2338 #define ZGEMM_DEFAULT_P 512
2339
2340 #define SGEMM_DEFAULT_Q 1024
2341 #define DGEMM_DEFAULT_Q  512
2342 #define CGEMM_DEFAULT_Q  512
2343 #define ZGEMM_DEFAULT_Q  256
2344
2345 #define SGEMM_DEFAULT_R SGEMM_DEFAULT_P
2346 #define DGEMM_DEFAULT_R DGEMM_DEFAULT_P
2347 #define CGEMM_DEFAULT_R CGEMM_DEFAULT_P
2348 #define ZGEMM_DEFAULT_R ZGEMM_DEFAULT_P
2349
2350 #define SYMV_P   4
2351 #endif
2352
2353 #ifdef PPC440FP2
2354
2355 #define SNUMOPT         4
2356 #define DNUMOPT         4
2357
2358 #define GEMM_DEFAULT_OFFSET_A (32 * 0)
2359 #define GEMM_DEFAULT_OFFSET_B (32 * 0)
2360 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
2361
2362 #define SGEMM_DEFAULT_UNROLL_M 8
2363 #define SGEMM_DEFAULT_UNROLL_N 4
2364 #define DGEMM_DEFAULT_UNROLL_M 8
2365 #define DGEMM_DEFAULT_UNROLL_N 4
2366 #define CGEMM_DEFAULT_UNROLL_M 4
2367 #define CGEMM_DEFAULT_UNROLL_N 2
2368 #define ZGEMM_DEFAULT_UNROLL_M 4
2369 #define ZGEMM_DEFAULT_UNROLL_N 2
2370
2371 #define SGEMM_DEFAULT_P 128
2372 #define DGEMM_DEFAULT_P 128
2373 #define CGEMM_DEFAULT_P 128
2374 #define ZGEMM_DEFAULT_P 128
2375 #if 1
2376 #define SGEMM_DEFAULT_Q 4096
2377 #define DGEMM_DEFAULT_Q 3072
2378 #define CGEMM_DEFAULT_Q 2048
2379 #define ZGEMM_DEFAULT_Q 1024
2380 #else
2381 #define SGEMM_DEFAULT_Q  512
2382 #define DGEMM_DEFAULT_Q  256
2383 #define CGEMM_DEFAULT_Q  256
2384 #define ZGEMM_DEFAULT_Q  128
2385 #endif
2386
2387 #define SYMV_P   4
2388 #endif
2389
2390
2391
2392 #if defined(POWER3) || defined(POWER4) || defined(POWER5)
2393 #define GEMM_DEFAULT_OFFSET_A 0
2394 #define GEMM_DEFAULT_OFFSET_B 2048
2395 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
2396
2397 #define SGEMM_DEFAULT_UNROLL_M 4
2398 #define SGEMM_DEFAULT_UNROLL_N 4
2399 #define DGEMM_DEFAULT_UNROLL_M 4
2400 #define DGEMM_DEFAULT_UNROLL_N 4
2401 #define CGEMM_DEFAULT_UNROLL_M 2
2402 #define CGEMM_DEFAULT_UNROLL_N 2
2403 #define ZGEMM_DEFAULT_UNROLL_M 2
2404 #define ZGEMM_DEFAULT_UNROLL_N 2
2405
2406 #ifdef POWER3
2407
2408 #define SNUMOPT         4
2409 #define DNUMOPT         4
2410
2411 #define SGEMM_DEFAULT_P 256
2412 #define SGEMM_DEFAULT_Q 432
2413 #define SGEMM_DEFAULT_R 1012
2414
2415 #define DGEMM_DEFAULT_P 256
2416 #define DGEMM_DEFAULT_Q 216
2417 #define DGEMM_DEFAULT_R 1012
2418
2419 #define CGEMM_DEFAULT_P 256
2420 #define CGEMM_DEFAULT_Q 104
2421 #define CGEMM_DEFAULT_R 1012
2422    
2423 #define ZGEMM_DEFAULT_P 256
2424 #define ZGEMM_DEFAULT_Q 104
2425 #define ZGEMM_DEFAULT_R 1012
2426 #endif
2427
2428 #if defined(POWER4)
2429 #ifdef ALLOC_HUGETLB
2430 #define SGEMM_DEFAULT_P 184
2431 #define DGEMM_DEFAULT_P 184
2432 #define CGEMM_DEFAULT_P 184
2433 #define ZGEMM_DEFAULT_P 184
2434 #else
2435 #define SGEMM_DEFAULT_P 144
2436 #define DGEMM_DEFAULT_P 144
2437 #define CGEMM_DEFAULT_P 144
2438 #define ZGEMM_DEFAULT_P 144
2439 #endif
2440
2441 #define SGEMM_DEFAULT_Q 256
2442 #define CGEMM_DEFAULT_Q 256
2443 #define DGEMM_DEFAULT_Q 256
2444 #define ZGEMM_DEFAULT_Q 256
2445 #endif
2446
2447 #if defined(POWER5)
2448 #ifdef ALLOC_HUGETLB
2449 #define SGEMM_DEFAULT_P 512
2450 #define DGEMM_DEFAULT_P 256
2451 #define CGEMM_DEFAULT_P 256
2452 #define ZGEMM_DEFAULT_P 128
2453 #else
2454 #define SGEMM_DEFAULT_P 320
2455 #define DGEMM_DEFAULT_P 160
2456 #define CGEMM_DEFAULT_P 160
2457 #define ZGEMM_DEFAULT_P  80
2458 #endif
2459
2460 #define SGEMM_DEFAULT_Q 256
2461 #define CGEMM_DEFAULT_Q 256
2462 #define DGEMM_DEFAULT_Q 256
2463 #define ZGEMM_DEFAULT_Q 256
2464 #endif
2465
2466 #define SYMV_P   8
2467
2468 #endif
2469
2470 #if defined(POWER6)
2471
2472 #define SNUMOPT         4
2473 #define DNUMOPT         4
2474
2475 #define GEMM_DEFAULT_OFFSET_A  384
2476 #define GEMM_DEFAULT_OFFSET_B 1024
2477 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2478
2479 #define SGEMM_DEFAULT_UNROLL_M 4
2480 #define SGEMM_DEFAULT_UNROLL_N 4
2481 #define DGEMM_DEFAULT_UNROLL_M 4
2482 #define DGEMM_DEFAULT_UNROLL_N 4
2483 #define CGEMM_DEFAULT_UNROLL_M 2
2484 #define CGEMM_DEFAULT_UNROLL_N 4
2485 #define ZGEMM_DEFAULT_UNROLL_M 2
2486 #define ZGEMM_DEFAULT_UNROLL_N 4
2487
2488 #define SGEMM_DEFAULT_P  992
2489 #define DGEMM_DEFAULT_P  480
2490 #define CGEMM_DEFAULT_P  488
2491 #define ZGEMM_DEFAULT_P  248
2492
2493 #define SGEMM_DEFAULT_Q  504
2494 #define DGEMM_DEFAULT_Q  504
2495 #define CGEMM_DEFAULT_Q  400
2496 #define ZGEMM_DEFAULT_Q  400
2497
2498 #define SYMV_P   8
2499
2500 #endif
2501
2502 #if defined(POWER8)
2503
2504 #define SNUMOPT         16
2505 #define DNUMOPT         8
2506
2507 #define GEMM_DEFAULT_OFFSET_A 0 
2508 #define GEMM_DEFAULT_OFFSET_B 65536
2509
2510 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
2511 #if defined(__32BIT__)
2512 #warning using BINARY32==POWER6
2513 #define SGEMM_DEFAULT_UNROLL_M 4
2514 #define SGEMM_DEFAULT_UNROLL_N 4
2515 #define DGEMM_DEFAULT_UNROLL_M 4
2516 #define DGEMM_DEFAULT_UNROLL_N 4
2517 #define CGEMM_DEFAULT_UNROLL_M 2
2518 #define CGEMM_DEFAULT_UNROLL_N 4
2519 #define ZGEMM_DEFAULT_UNROLL_M 2
2520 #define ZGEMM_DEFAULT_UNROLL_N 4
2521 #else
2522 #define SGEMM_DEFAULT_UNROLL_M 16
2523 #define SGEMM_DEFAULT_UNROLL_N 8
2524 #define DGEMM_DEFAULT_UNROLL_M 16
2525 #define DGEMM_DEFAULT_UNROLL_N 4
2526 #define CGEMM_DEFAULT_UNROLL_M 8
2527 #define CGEMM_DEFAULT_UNROLL_N 4
2528 #define ZGEMM_DEFAULT_UNROLL_M 8
2529 #define ZGEMM_DEFAULT_UNROLL_N 2
2530 #endif
2531 #define SGEMM_DEFAULT_P  1280UL
2532 #define DGEMM_DEFAULT_P  640UL
2533 #define CGEMM_DEFAULT_P  640UL
2534 #define ZGEMM_DEFAULT_P  320UL
2535
2536 #define SGEMM_DEFAULT_Q  640UL
2537 #define DGEMM_DEFAULT_Q  720UL
2538 #define CGEMM_DEFAULT_Q  640UL
2539 #define ZGEMM_DEFAULT_Q  640UL
2540
2541 #if 0
2542 #define SGEMM_DEFAULT_R SGEMM_DEFAULT_P
2543 #define DGEMM_DEFAULT_R DGEMM_DEFAULT_P
2544 #define CGEMM_DEFAULT_R CGEMM_DEFAULT_P
2545 #define ZGEMM_DEFAULT_R ZGEMM_DEFAULT_P
2546 #endif
2547 #define SGEMM_DEFAULT_R 4096
2548 #define DGEMM_DEFAULT_R 4096
2549 #define CGEMM_DEFAULT_R 4096
2550 #define ZGEMM_DEFAULT_R 4096
2551
2552 #define SYMV_P   8
2553
2554 #endif
2555
2556 #if defined(POWER9)
2557
2558 #define SNUMOPT         16
2559 #define DNUMOPT         8
2560
2561 #define GEMM_DEFAULT_OFFSET_A 0 
2562 #define GEMM_DEFAULT_OFFSET_B 65536
2563 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
2564
2565 #define SWITCH_RATIO            16
2566 #define GEMM_PREFERED_SIZE      16
2567
2568 #define SGEMM_DEFAULT_UNROLL_M 16
2569 #define SGEMM_DEFAULT_UNROLL_N 8
2570 #define DGEMM_DEFAULT_UNROLL_M 16
2571 #define DGEMM_DEFAULT_UNROLL_N 4
2572 #define CGEMM_DEFAULT_UNROLL_M 8
2573 #define CGEMM_DEFAULT_UNROLL_N 4
2574 #define ZGEMM_DEFAULT_UNROLL_M 8
2575 #define ZGEMM_DEFAULT_UNROLL_N 2
2576
2577 #define SGEMM_DEFAULT_P 832
2578 #define DGEMM_DEFAULT_P  128
2579 #define CGEMM_DEFAULT_P  512
2580 #define ZGEMM_DEFAULT_P 256
2581
2582 #define SGEMM_DEFAULT_Q 1026
2583 #define DGEMM_DEFAULT_Q  384
2584 #define CGEMM_DEFAULT_Q  1026
2585 #define ZGEMM_DEFAULT_Q 1026
2586
2587 #define SGEMM_DEFAULT_R 4096
2588 #define DGEMM_DEFAULT_R 4096
2589 #define CGEMM_DEFAULT_R 4096
2590 #define ZGEMM_DEFAULT_R 4096
2591
2592 #define SYMV_P   8
2593
2594 #endif
2595
2596 #if defined(POWER10)
2597 #define SNUMOPT         16
2598 #define DNUMOPT         8
2599
2600 #define GEMM_DEFAULT_OFFSET_A 0
2601 #define GEMM_DEFAULT_OFFSET_B 65536
2602 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
2603
2604 #define SWITCH_RATIO            16
2605 #define GEMM_PREFERED_SIZE      16
2606
2607 #define SGEMM_DEFAULT_UNROLL_M 16
2608 #define SGEMM_DEFAULT_UNROLL_N 8
2609 #define DGEMM_DEFAULT_UNROLL_M 8
2610 #define DGEMM_DEFAULT_UNROLL_N 8
2611 #define CGEMM_DEFAULT_UNROLL_M 8
2612 #define CGEMM_DEFAULT_UNROLL_N 4
2613 #define ZGEMM_DEFAULT_UNROLL_M 8
2614 #define ZGEMM_DEFAULT_UNROLL_N 2
2615
2616 #define SGEMM_DEFAULT_P 512
2617 #define DGEMM_DEFAULT_P 384
2618 #define CGEMM_DEFAULT_P 512
2619 #define ZGEMM_DEFAULT_P 256
2620
2621 #define SGEMM_DEFAULT_Q 512
2622 #define DGEMM_DEFAULT_Q 512
2623 #define CGEMM_DEFAULT_Q 384
2624 #define ZGEMM_DEFAULT_Q 384 
2625
2626 #define SGEMM_DEFAULT_R 4096
2627 #define DGEMM_DEFAULT_R 4096
2628 #define CGEMM_DEFAULT_R 4096
2629 #define ZGEMM_DEFAULT_R 4096
2630
2631 #define SYMV_P   8
2632
2633 #undef SBGEMM_DEFAULT_UNROLL_N
2634 #undef SBGEMM_DEFAULT_UNROLL_M
2635 #undef SBGEMM_DEFAULT_P
2636 #undef SBGEMM_DEFAULT_R
2637 #undef SBGEMM_DEFAULT_Q
2638 #define SBGEMM_DEFAULT_UNROLL_M 16
2639 #define SBGEMM_DEFAULT_UNROLL_N 8
2640 #define SBGEMM_DEFAULT_P 832
2641 #define SBGEMM_DEFAULT_Q 1026
2642 #define SBGEMM_DEFAULT_R 4096
2643 #endif
2644
2645 #if defined(SPARC) && defined(V7)
2646
2647 #define SNUMOPT         4
2648 #define DNUMOPT         4
2649
2650 #define GEMM_DEFAULT_OFFSET_A 0
2651 #define GEMM_DEFAULT_OFFSET_B 2048
2652 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2653
2654 #define SGEMM_DEFAULT_UNROLL_M 2
2655 #define SGEMM_DEFAULT_UNROLL_N 8
2656 #define DGEMM_DEFAULT_UNROLL_M 2
2657 #define DGEMM_DEFAULT_UNROLL_N 8
2658 #define CGEMM_DEFAULT_UNROLL_M 1
2659 #define CGEMM_DEFAULT_UNROLL_N 4
2660 #define ZGEMM_DEFAULT_UNROLL_M 1
2661 #define ZGEMM_DEFAULT_UNROLL_N 4
2662
2663 #define SGEMM_DEFAULT_P  256
2664 #define DGEMM_DEFAULT_P  256
2665 #define CGEMM_DEFAULT_P  256
2666 #define ZGEMM_DEFAULT_P  256
2667
2668 #define SGEMM_DEFAULT_Q  512
2669 #define DGEMM_DEFAULT_Q  256
2670 #define CGEMM_DEFAULT_Q  256
2671 #define ZGEMM_DEFAULT_Q  128
2672
2673 #define SYMV_P   8
2674 #define GEMM_THREAD gemm_thread_mn
2675 #endif
2676
2677 #if (defined(SPARC) && defined(V9)) || defined(__sparc_v9__)
2678
2679 #define SNUMOPT         2
2680 #define DNUMOPT         2
2681
2682 #define GEMM_DEFAULT_OFFSET_A 0
2683 #define GEMM_DEFAULT_OFFSET_B 2048
2684 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2685
2686 #define SGEMM_DEFAULT_UNROLL_M 4
2687 #define SGEMM_DEFAULT_UNROLL_N 4
2688 #define DGEMM_DEFAULT_UNROLL_M 4
2689 #define DGEMM_DEFAULT_UNROLL_N 4
2690 #define CGEMM_DEFAULT_UNROLL_M 2
2691 #define CGEMM_DEFAULT_UNROLL_N 2
2692 #define ZGEMM_DEFAULT_UNROLL_M 2
2693 #define ZGEMM_DEFAULT_UNROLL_N 2
2694
2695 #define SGEMM_DEFAULT_P  512
2696 #define DGEMM_DEFAULT_P  512
2697 #define CGEMM_DEFAULT_P  512
2698 #define ZGEMM_DEFAULT_P  512
2699
2700 #define SGEMM_DEFAULT_Q 1024
2701 #define DGEMM_DEFAULT_Q  512
2702 #define CGEMM_DEFAULT_Q  512
2703 #define ZGEMM_DEFAULT_Q  256
2704
2705 #define SYMV_P   8
2706 #endif
2707
2708 #ifdef SICORTEX
2709
2710 #define SNUMOPT         2
2711 #define DNUMOPT         2
2712
2713 #define GEMM_DEFAULT_OFFSET_A 0
2714 #define GEMM_DEFAULT_OFFSET_B 0
2715 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
2716
2717 #define SGEMM_DEFAULT_UNROLL_M  2
2718 #define SGEMM_DEFAULT_UNROLL_N  8
2719 #define DGEMM_DEFAULT_UNROLL_M  2
2720 #define DGEMM_DEFAULT_UNROLL_N  8
2721 #define CGEMM_DEFAULT_UNROLL_M  1
2722 #define CGEMM_DEFAULT_UNROLL_N  4
2723 #define ZGEMM_DEFAULT_UNROLL_M  1
2724 #define ZGEMM_DEFAULT_UNROLL_N  4
2725
2726 #define SGEMM_DEFAULT_P 108
2727 #define DGEMM_DEFAULT_P 112
2728 #define CGEMM_DEFAULT_P 108
2729 #define ZGEMM_DEFAULT_P 112
2730
2731 #define SGEMM_DEFAULT_Q 288
2732 #define DGEMM_DEFAULT_Q 144
2733 #define CGEMM_DEFAULT_Q 144
2734 #define ZGEMM_DEFAULT_Q  72
2735
2736 #define SGEMM_DEFAULT_R 2000
2737 #define DGEMM_DEFAULT_R 2000
2738 #define CGEMM_DEFAULT_R 2000
2739 #define ZGEMM_DEFAULT_R 2000
2740
2741 #define SYMV_P  16
2742 #endif
2743
2744 #if defined(LOONGSON3R4)
2745 #define SNUMOPT         2
2746 #define DNUMOPT         2
2747
2748 #define GEMM_DEFAULT_OFFSET_A 0
2749 #define GEMM_DEFAULT_OFFSET_B 0
2750 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
2751
2752 #ifdef HAVE_MSA
2753 #define SGEMM_DEFAULT_UNROLL_M  8
2754 #define SGEMM_DEFAULT_UNROLL_N  8
2755
2756 #define DGEMM_DEFAULT_UNROLL_M  8
2757 #define DGEMM_DEFAULT_UNROLL_N  4
2758
2759 #define CGEMM_DEFAULT_UNROLL_M  8
2760 #define CGEMM_DEFAULT_UNROLL_N  4
2761
2762 #define ZGEMM_DEFAULT_UNROLL_M  4
2763 #define ZGEMM_DEFAULT_UNROLL_N  4
2764 #else
2765 #define SGEMM_DEFAULT_UNROLL_M  8
2766 #define SGEMM_DEFAULT_UNROLL_N  4
2767
2768 #define DGEMM_DEFAULT_UNROLL_M  4
2769 #define DGEMM_DEFAULT_UNROLL_N  4
2770
2771 #define CGEMM_DEFAULT_UNROLL_M  4
2772 #define CGEMM_DEFAULT_UNROLL_N  2
2773
2774 #define ZGEMM_DEFAULT_UNROLL_M  2
2775 #define ZGEMM_DEFAULT_UNROLL_N  2
2776 #endif
2777
2778 #define SGEMM_DEFAULT_P 64
2779 #define DGEMM_DEFAULT_P 44
2780 #define CGEMM_DEFAULT_P 64
2781 #define ZGEMM_DEFAULT_P 32
2782
2783 #define SGEMM_DEFAULT_Q 192
2784 #define DGEMM_DEFAULT_Q 92
2785 #define CGEMM_DEFAULT_Q 128
2786 #define ZGEMM_DEFAULT_Q 80
2787
2788 #define SGEMM_DEFAULT_R 640
2789 #define DGEMM_DEFAULT_R dgemm_r
2790 #define CGEMM_DEFAULT_R 640
2791 #define ZGEMM_DEFAULT_R 640
2792
2793 #define GEMM_OFFSET_A1  0x10000
2794 #define GEMM_OFFSET_B1  0x100000
2795
2796 #define SYMV_P  16
2797 #endif
2798
2799 #if defined(LOONGSON3R3)
2800 ////Copy from SICORTEX
2801 #define SNUMOPT         2
2802 #define DNUMOPT         2
2803
2804 #define GEMM_DEFAULT_OFFSET_A 0
2805 #define GEMM_DEFAULT_OFFSET_B 0
2806 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
2807
2808 #define SGEMM_DEFAULT_UNROLL_M  8
2809 #define SGEMM_DEFAULT_UNROLL_N  4
2810
2811 #define DGEMM_DEFAULT_UNROLL_M  4
2812 #define DGEMM_DEFAULT_UNROLL_N  4
2813
2814 #define CGEMM_DEFAULT_UNROLL_M  4
2815 #define CGEMM_DEFAULT_UNROLL_N  2
2816
2817 #define ZGEMM_DEFAULT_UNROLL_M  2
2818 #define ZGEMM_DEFAULT_UNROLL_N  2
2819
2820 #define SGEMM_DEFAULT_P 64
2821 #define DGEMM_DEFAULT_P 44
2822 #define CGEMM_DEFAULT_P 64
2823 #define ZGEMM_DEFAULT_P 32
2824
2825 #define SGEMM_DEFAULT_Q 192
2826 #define DGEMM_DEFAULT_Q 92
2827 #define CGEMM_DEFAULT_Q 128
2828 #define ZGEMM_DEFAULT_Q 80
2829
2830 #define SGEMM_DEFAULT_R 640
2831 #define DGEMM_DEFAULT_R dgemm_r
2832 #define CGEMM_DEFAULT_R 640
2833 #define ZGEMM_DEFAULT_R 640
2834
2835 #define GEMM_OFFSET_A1  0x10000
2836 #define GEMM_OFFSET_B1  0x100000
2837
2838 #define SYMV_P  16
2839 #endif
2840
2841 #if defined (LOONGSON3R5)
2842 #define SNUMOPT         2
2843 #define DNUMOPT         2
2844
2845 #define GEMM_DEFAULT_OFFSET_A 0
2846 #define GEMM_DEFAULT_OFFSET_B 0
2847 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
2848
2849 #define SGEMM_DEFAULT_UNROLL_N 8
2850 #define DGEMM_DEFAULT_UNROLL_N 8
2851 #define QGEMM_DEFAULT_UNROLL_N 2
2852 #define CGEMM_DEFAULT_UNROLL_N 4
2853 #define ZGEMM_DEFAULT_UNROLL_N 4
2854 #define XGEMM_DEFAULT_UNROLL_N 1
2855
2856 #define SGEMM_DEFAULT_UNROLL_M 2
2857 #define DGEMM_DEFAULT_UNROLL_M 2
2858 #define QGEMM_DEFAULT_UNROLL_M 2
2859 #define CGEMM_DEFAULT_UNROLL_M 1
2860 #define ZGEMM_DEFAULT_UNROLL_M 1
2861 #define XGEMM_DEFAULT_UNROLL_M 1
2862
2863 #define SGEMM_DEFAULT_P sgemm_p
2864 #define DGEMM_DEFAULT_P dgemm_p
2865 #define QGEMM_DEFAULT_P qgemm_p
2866 #define CGEMM_DEFAULT_P cgemm_p
2867 #define ZGEMM_DEFAULT_P zgemm_p
2868 #define XGEMM_DEFAULT_P xgemm_p
2869
2870 #define SGEMM_DEFAULT_R sgemm_r
2871 #define DGEMM_DEFAULT_R dgemm_r
2872 #define QGEMM_DEFAULT_R qgemm_r
2873 #define CGEMM_DEFAULT_R cgemm_r
2874 #define ZGEMM_DEFAULT_R zgemm_r
2875 #define XGEMM_DEFAULT_R xgemm_r
2876
2877 #define SGEMM_DEFAULT_Q 128
2878 #define DGEMM_DEFAULT_Q 128
2879 #define QGEMM_DEFAULT_Q 128
2880 #define CGEMM_DEFAULT_Q 128
2881 #define ZGEMM_DEFAULT_Q 128
2882 #define XGEMM_DEFAULT_Q 128
2883
2884 #define SYMV_P  16
2885 #endif
2886
2887 #if defined(P5600) || defined(MIPS1004K) || defined(MIPS24K) || defined(I6400) || defined(P6600) || defined(I6500)
2888 #define SNUMOPT  2
2889 #define DNUMOPT  2
2890
2891 #define GEMM_DEFAULT_OFFSET_A  0
2892 #define GEMM_DEFAULT_OFFSET_B  0
2893 #define GEMM_DEFAULT_ALIGN (BLASLONG) 0x03fffUL
2894
2895 #if defined(HAVE_MSA) && !defined(NO_MSA)
2896 #define SGEMM_DEFAULT_UNROLL_M  8
2897 #define SGEMM_DEFAULT_UNROLL_N  8
2898
2899 #define DGEMM_DEFAULT_UNROLL_M  8
2900 #define DGEMM_DEFAULT_UNROLL_N  4
2901
2902 #define CGEMM_DEFAULT_UNROLL_M  8
2903 #define CGEMM_DEFAULT_UNROLL_N  4
2904
2905 #define ZGEMM_DEFAULT_UNROLL_M  4
2906 #define ZGEMM_DEFAULT_UNROLL_N  4
2907 #else
2908 #define SGEMM_DEFAULT_UNROLL_M  2
2909 #define SGEMM_DEFAULT_UNROLL_N  2
2910
2911 #define DGEMM_DEFAULT_UNROLL_M  2
2912 #define DGEMM_DEFAULT_UNROLL_N  2
2913
2914 #define CGEMM_DEFAULT_UNROLL_M  2
2915 #define CGEMM_DEFAULT_UNROLL_N  2
2916
2917 #define ZGEMM_DEFAULT_UNROLL_M  2
2918 #define ZGEMM_DEFAULT_UNROLL_N  2
2919 #endif
2920
2921 #define SGEMM_DEFAULT_P  128
2922 #define DGEMM_DEFAULT_P  128
2923 #define CGEMM_DEFAULT_P  96
2924 #define ZGEMM_DEFAULT_P  64
2925
2926 #define SGEMM_DEFAULT_Q  240
2927 #define DGEMM_DEFAULT_Q  120
2928 #define CGEMM_DEFAULT_Q  120
2929 #define ZGEMM_DEFAULT_Q  120
2930
2931 #define SGEMM_DEFAULT_R  12288
2932 #define DGEMM_DEFAULT_R  8192
2933 #define CGEMM_DEFAULT_R  4096
2934 #define ZGEMM_DEFAULT_R  4096
2935
2936 #define SYMV_P  16
2937 #endif
2938
2939 #ifdef RISCV64_GENERIC
2940 #define GEMM_DEFAULT_OFFSET_A 0
2941 #define GEMM_DEFAULT_OFFSET_B 0
2942 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
2943
2944 #define SGEMM_DEFAULT_UNROLL_M  2
2945 #define SGEMM_DEFAULT_UNROLL_N  2
2946
2947 #define DGEMM_DEFAULT_UNROLL_M  2
2948 #define DGEMM_DEFAULT_UNROLL_N  2
2949
2950 #define CGEMM_DEFAULT_UNROLL_M  2
2951 #define CGEMM_DEFAULT_UNROLL_N  2
2952
2953 #define ZGEMM_DEFAULT_UNROLL_M  2
2954 #define ZGEMM_DEFAULT_UNROLL_N  2
2955
2956 #define SGEMM_DEFAULT_P 128
2957 #define DGEMM_DEFAULT_P 128
2958 #define CGEMM_DEFAULT_P 96
2959 #define ZGEMM_DEFAULT_P 64
2960
2961 #define SGEMM_DEFAULT_Q 240
2962 #define DGEMM_DEFAULT_Q 120
2963 #define CGEMM_DEFAULT_Q 120
2964 #define ZGEMM_DEFAULT_Q 120
2965
2966 #define SGEMM_DEFAULT_R 12288
2967 #define DGEMM_DEFAULT_R 8192
2968 #define CGEMM_DEFAULT_R 4096
2969 #define ZGEMM_DEFAULT_R 4096
2970
2971 #define SYMV_P  16
2972
2973 #define GEMM_DEFAULT_OFFSET_A 0
2974 #define GEMM_DEFAULT_OFFSET_B 0
2975
2976 #endif
2977
2978 #ifdef C910V
2979 #define GEMM_DEFAULT_OFFSET_A 0
2980 #define GEMM_DEFAULT_OFFSET_B 0
2981 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2982
2983 #define SGEMM_DEFAULT_UNROLL_M  16
2984 #define SGEMM_DEFAULT_UNROLL_N  4
2985
2986 #define DGEMM_DEFAULT_UNROLL_M  8
2987 #define DGEMM_DEFAULT_UNROLL_N  4
2988
2989 #define CGEMM_DEFAULT_UNROLL_M  2
2990 #define CGEMM_DEFAULT_UNROLL_N  2
2991
2992 #define ZGEMM_DEFAULT_UNROLL_M  2
2993 #define ZGEMM_DEFAULT_UNROLL_N  2
2994
2995 #define SGEMM_DEFAULT_P 160
2996 #define DGEMM_DEFAULT_P 160
2997 #define CGEMM_DEFAULT_P 96
2998 #define ZGEMM_DEFAULT_P 64
2999
3000 #define SGEMM_DEFAULT_Q 240
3001 #define DGEMM_DEFAULT_Q 128
3002 #define CGEMM_DEFAULT_Q 120
3003 #define ZGEMM_DEFAULT_Q 120
3004
3005 #define SGEMM_DEFAULT_R 12288
3006 #define DGEMM_DEFAULT_R 8192
3007 #define CGEMM_DEFAULT_R 4096
3008 #define ZGEMM_DEFAULT_R 4096
3009
3010 #define SYMV_P  16
3011
3012 #define GEMM_DEFAULT_OFFSET_A 0
3013 #define GEMM_DEFAULT_OFFSET_B 0
3014
3015 #endif
3016
3017 #ifdef ARMV7
3018 #define SNUMOPT         2
3019 #define DNUMOPT         2
3020
3021 #define GEMM_DEFAULT_OFFSET_A 0
3022 #define GEMM_DEFAULT_OFFSET_B 0
3023 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
3024
3025 #define SGEMM_DEFAULT_UNROLL_M  4
3026 #define SGEMM_DEFAULT_UNROLL_N  4
3027
3028 #define DGEMM_DEFAULT_UNROLL_M  4
3029 #define DGEMM_DEFAULT_UNROLL_N  4
3030
3031 #define CGEMM_DEFAULT_UNROLL_M  2
3032 #define CGEMM_DEFAULT_UNROLL_N  2
3033
3034 #define ZGEMM_DEFAULT_UNROLL_M  2
3035 #define ZGEMM_DEFAULT_UNROLL_N  2
3036
3037 #define SGEMM_DEFAULT_P 128
3038 #define DGEMM_DEFAULT_P 128
3039 #define CGEMM_DEFAULT_P 96
3040 #define ZGEMM_DEFAULT_P 64
3041
3042 #define SGEMM_DEFAULT_Q 240
3043 #define DGEMM_DEFAULT_Q 120
3044 #define CGEMM_DEFAULT_Q 120
3045 #define ZGEMM_DEFAULT_Q 120
3046
3047 #define SGEMM_DEFAULT_R 12288
3048 #define DGEMM_DEFAULT_R 8192
3049 #define CGEMM_DEFAULT_R 4096
3050 #define ZGEMM_DEFAULT_R 4096
3051
3052
3053
3054 #define SYMV_P  16
3055 #endif
3056
3057
3058 #if defined(ARMV6)
3059 #define SNUMOPT         2
3060 #define DNUMOPT         2
3061
3062 #define GEMM_DEFAULT_OFFSET_A 0
3063 #define GEMM_DEFAULT_OFFSET_B 0
3064 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
3065
3066 #define SGEMM_DEFAULT_UNROLL_M  4
3067 #define SGEMM_DEFAULT_UNROLL_N  2
3068
3069 #define DGEMM_DEFAULT_UNROLL_M  4
3070 #define DGEMM_DEFAULT_UNROLL_N  2
3071
3072 #define CGEMM_DEFAULT_UNROLL_M  2
3073 #define CGEMM_DEFAULT_UNROLL_N  2
3074
3075 #define ZGEMM_DEFAULT_UNROLL_M  2
3076 #define ZGEMM_DEFAULT_UNROLL_N  2
3077
3078 #define SGEMM_DEFAULT_P 128
3079 #define DGEMM_DEFAULT_P 128
3080 #define CGEMM_DEFAULT_P 96
3081 #define ZGEMM_DEFAULT_P 64
3082
3083 #define SGEMM_DEFAULT_Q 240
3084 #define DGEMM_DEFAULT_Q 120
3085 #define CGEMM_DEFAULT_Q 120
3086 #define ZGEMM_DEFAULT_Q 120
3087
3088 #define SGEMM_DEFAULT_R 12288
3089 #define DGEMM_DEFAULT_R 8192
3090 #define CGEMM_DEFAULT_R 4096
3091 #define ZGEMM_DEFAULT_R 4096
3092
3093
3094 #define SYMV_P  16
3095 #endif
3096
3097 /* Common ARMv8 parameters */
3098 #if defined(ARMV8)
3099
3100 #define SNUMOPT         2
3101 #define DNUMOPT         2
3102
3103 #define GEMM_DEFAULT_OFFSET_A 0
3104 #define GEMM_DEFAULT_OFFSET_B 0
3105 #ifdef _WIN64
3106 /* Use explicit casting for win64 as LLP64 datamodel is used */
3107 #define GEMM_DEFAULT_ALIGN (BLASULONG)0x03fffUL
3108 #else
3109 #define GEMM_DEFAULT_ALIGN 0x03fffUL
3110 #endif
3111
3112 #define SYMV_P  16
3113
3114 #if defined(CORTEXA57) || \
3115     defined(CORTEXA72) || defined(CORTEXA73) || \
3116     defined(FALKOR)    || defined(TSV110) || defined(EMAG8180) || defined(VORTEX)
3117
3118 #define SGEMM_DEFAULT_UNROLL_M  16
3119 #define SGEMM_DEFAULT_UNROLL_N  4
3120
3121 #define DGEMM_DEFAULT_UNROLL_M  8
3122 #define DGEMM_DEFAULT_UNROLL_N  4
3123
3124 #define CGEMM_DEFAULT_UNROLL_M  8
3125 #define CGEMM_DEFAULT_UNROLL_N  4
3126
3127 #define ZGEMM_DEFAULT_UNROLL_M  4
3128 #define ZGEMM_DEFAULT_UNROLL_N  4
3129
3130 /*FIXME: this should be using the cache size, but there is currently no easy way to
3131 query that on ARM. So if getarch counted more than 8 cores we simply assume the host
3132 is a big desktop or server with abundant cache rather than a phone or embedded device */ 
3133 #if NUM_CORES > 8 || defined(TSV110) || defined(EMAG8180) || defined(VORTEX)
3134   #define SGEMM_DEFAULT_P 512
3135   #define DGEMM_DEFAULT_P 256
3136   #define CGEMM_DEFAULT_P 256
3137   #define ZGEMM_DEFAULT_P 128
3138
3139   #define SGEMM_DEFAULT_Q 1024
3140   #define DGEMM_DEFAULT_Q 512
3141   #define CGEMM_DEFAULT_Q 512
3142   #define ZGEMM_DEFAULT_Q 512
3143 #else
3144   #define SGEMM_DEFAULT_P 128
3145   #define DGEMM_DEFAULT_P 160
3146   #define CGEMM_DEFAULT_P 128
3147   #define ZGEMM_DEFAULT_P 128
3148
3149   #define SGEMM_DEFAULT_Q 352
3150   #define DGEMM_DEFAULT_Q 128
3151   #define CGEMM_DEFAULT_Q 224
3152   #define ZGEMM_DEFAULT_Q 112
3153 #endif
3154
3155 #define SGEMM_DEFAULT_R 4096
3156 #define DGEMM_DEFAULT_R 4096
3157 #define CGEMM_DEFAULT_R 4096
3158 #define ZGEMM_DEFAULT_R 2048
3159
3160 #elif defined(CORTEXA53) || defined(CORTEXA55)
3161
3162 #define SGEMM_DEFAULT_UNROLL_M  8
3163 #define SGEMM_DEFAULT_UNROLL_N  8
3164
3165 #define DGEMM_DEFAULT_UNROLL_M  4
3166 #define DGEMM_DEFAULT_UNROLL_N  4
3167
3168 #define CGEMM_DEFAULT_UNROLL_M  8
3169 #define CGEMM_DEFAULT_UNROLL_N  4
3170
3171 #define ZGEMM_DEFAULT_UNROLL_M  4
3172 #define ZGEMM_DEFAULT_UNROLL_N  4
3173
3174 #define SGEMM_DEFAULT_P 256
3175 #define DGEMM_DEFAULT_P 160
3176 #define CGEMM_DEFAULT_P 128
3177 #define ZGEMM_DEFAULT_P 128
3178
3179 #define SGEMM_DEFAULT_Q 256
3180 #define DGEMM_DEFAULT_Q 128
3181 #define CGEMM_DEFAULT_Q 224
3182 #define ZGEMM_DEFAULT_Q 112
3183
3184 #define SGEMM_DEFAULT_R 4096
3185 #define DGEMM_DEFAULT_R 4096
3186 #define CGEMM_DEFAULT_R 4096
3187 #define ZGEMM_DEFAULT_R 2048
3188
3189 #elif defined(THUNDERX)
3190
3191 #define SGEMM_DEFAULT_UNROLL_M  4
3192 #define SGEMM_DEFAULT_UNROLL_N  4
3193
3194 #define DGEMM_DEFAULT_UNROLL_M  2
3195 #define DGEMM_DEFAULT_UNROLL_N  2
3196
3197 #define CGEMM_DEFAULT_UNROLL_M  2
3198 #define CGEMM_DEFAULT_UNROLL_N  2
3199
3200 #define ZGEMM_DEFAULT_UNROLL_M  2
3201 #define ZGEMM_DEFAULT_UNROLL_N  2
3202
3203 #define SGEMM_DEFAULT_P 128
3204 #define DGEMM_DEFAULT_P 128
3205 #define CGEMM_DEFAULT_P 96
3206 #define ZGEMM_DEFAULT_P 64
3207
3208 #define SGEMM_DEFAULT_Q 240
3209 #define DGEMM_DEFAULT_Q 120
3210 #define CGEMM_DEFAULT_Q 120
3211 #define ZGEMM_DEFAULT_Q 120
3212
3213 #define SGEMM_DEFAULT_R 12288
3214 #define DGEMM_DEFAULT_R 8192
3215 #define CGEMM_DEFAULT_R 4096
3216 #define ZGEMM_DEFAULT_R 4096
3217
3218 #elif defined(THUNDERX2T99)
3219
3220 #define SGEMM_DEFAULT_UNROLL_M  16
3221 #define SGEMM_DEFAULT_UNROLL_N  4
3222
3223 #define DGEMM_DEFAULT_UNROLL_M  8
3224 #define DGEMM_DEFAULT_UNROLL_N  4
3225
3226 #define CGEMM_DEFAULT_UNROLL_M  8
3227 #define CGEMM_DEFAULT_UNROLL_N  4
3228
3229 #define ZGEMM_DEFAULT_UNROLL_M  4
3230 #define ZGEMM_DEFAULT_UNROLL_N  4
3231
3232 #define SGEMM_DEFAULT_P 128
3233 #define DGEMM_DEFAULT_P 160
3234 #define CGEMM_DEFAULT_P 128
3235 #define ZGEMM_DEFAULT_P 128
3236
3237 #define SGEMM_DEFAULT_Q 352
3238 #define DGEMM_DEFAULT_Q 128
3239 #define CGEMM_DEFAULT_Q 224
3240 #define ZGEMM_DEFAULT_Q 112
3241
3242 #define SGEMM_DEFAULT_R 4096
3243 #define DGEMM_DEFAULT_R 4096
3244 #define CGEMM_DEFAULT_R 4096
3245 #define ZGEMM_DEFAULT_R 4096
3246
3247 #elif defined(THUNDERX3T110)
3248
3249 #define SGEMM_DEFAULT_UNROLL_M  16
3250 #define SGEMM_DEFAULT_UNROLL_N  4
3251
3252 #define DGEMM_DEFAULT_UNROLL_M  8
3253 #define DGEMM_DEFAULT_UNROLL_N  4
3254
3255 #define CGEMM_DEFAULT_UNROLL_M  8
3256 #define CGEMM_DEFAULT_UNROLL_N  4
3257
3258 #define ZGEMM_DEFAULT_UNROLL_M  4
3259 #define ZGEMM_DEFAULT_UNROLL_N  4
3260
3261 #define SGEMM_DEFAULT_P 128
3262 #define DGEMM_DEFAULT_P 320
3263 #define CGEMM_DEFAULT_P 128
3264 #define ZGEMM_DEFAULT_P 128
3265
3266 #define SGEMM_DEFAULT_Q 352
3267 #define DGEMM_DEFAULT_Q 128
3268 #define CGEMM_DEFAULT_Q 224
3269 #define ZGEMM_DEFAULT_Q 112
3270
3271 #define SGEMM_DEFAULT_R 4096
3272 #define DGEMM_DEFAULT_R 4096
3273 #define CGEMM_DEFAULT_R 4096
3274 #define ZGEMM_DEFAULT_R 4096
3275
3276 #elif defined(NEOVERSEN1)
3277
3278 #define SGEMM_DEFAULT_UNROLL_M  16
3279 #define SGEMM_DEFAULT_UNROLL_N  4
3280
3281 #define DGEMM_DEFAULT_UNROLL_M  8
3282 #define DGEMM_DEFAULT_UNROLL_N  4
3283
3284 #define CGEMM_DEFAULT_UNROLL_M  8
3285 #define CGEMM_DEFAULT_UNROLL_N  4
3286
3287 #define ZGEMM_DEFAULT_UNROLL_M  4
3288 #define ZGEMM_DEFAULT_UNROLL_N  4
3289
3290 #define SGEMM_DEFAULT_P 128
3291 #define DGEMM_DEFAULT_P 160
3292 #define CGEMM_DEFAULT_P 128
3293 #define ZGEMM_DEFAULT_P 128
3294
3295 #define SGEMM_DEFAULT_Q 352
3296 #define DGEMM_DEFAULT_Q 128
3297 #define CGEMM_DEFAULT_Q 224
3298 #define ZGEMM_DEFAULT_Q 112
3299
3300 #define SGEMM_DEFAULT_R 4096
3301 #define DGEMM_DEFAULT_R 4096
3302 #define CGEMM_DEFAULT_R 4096
3303 #define ZGEMM_DEFAULT_R 4096
3304
3305 #elif defined(ARMV8SVE) || defined(A64FX)
3306
3307 #define SGEMM_DEFAULT_UNROLL_M  16
3308 #define SGEMM_DEFAULT_UNROLL_N  4
3309
3310 /* When all BLAS3 routines are implemeted with SVE, DGEMM_DEFAULT_UNROLL_M should be "sve_vl".
3311 Until then, just keep it different than DGEMM_DEFAULT_UNROLL_N to keep copy routines in both directions seperated. */
3312 #define DGEMM_DEFAULT_UNROLL_M  2 
3313 #define DGEMM_DEFAULT_UNROLL_N  8
3314
3315 #define CGEMM_DEFAULT_UNROLL_M  8
3316 #define CGEMM_DEFAULT_UNROLL_N  4
3317
3318 #define ZGEMM_DEFAULT_UNROLL_M  4
3319 #define ZGEMM_DEFAULT_UNROLL_N  4
3320
3321 #define SGEMM_DEFAULT_P 128
3322 #define DGEMM_DEFAULT_P 160
3323 #define CGEMM_DEFAULT_P 128
3324 #define ZGEMM_DEFAULT_P 128
3325
3326 #define SGEMM_DEFAULT_Q 352
3327 #define DGEMM_DEFAULT_Q 128
3328 #define CGEMM_DEFAULT_Q 224
3329 #define ZGEMM_DEFAULT_Q 112
3330
3331 #define SGEMM_DEFAULT_R 4096
3332 #define DGEMM_DEFAULT_R 4096
3333 #define CGEMM_DEFAULT_R 4096
3334 #define ZGEMM_DEFAULT_R 4096
3335
3336 #else /* Other/undetected ARMv8 cores */
3337
3338 #define SGEMM_DEFAULT_UNROLL_M  16
3339 #define SGEMM_DEFAULT_UNROLL_N  4
3340
3341 #define DGEMM_DEFAULT_UNROLL_M  4
3342 #define DGEMM_DEFAULT_UNROLL_N  8
3343
3344 #define CGEMM_DEFAULT_UNROLL_M  8
3345 #define CGEMM_DEFAULT_UNROLL_N  4
3346
3347 #define ZGEMM_DEFAULT_UNROLL_M  4
3348 #define ZGEMM_DEFAULT_UNROLL_N  4
3349
3350 #define SGEMM_DEFAULT_P 128
3351 #define DGEMM_DEFAULT_P 160
3352 #define CGEMM_DEFAULT_P 128
3353 #define ZGEMM_DEFAULT_P 128
3354
3355 #define SGEMM_DEFAULT_Q 352
3356 #define DGEMM_DEFAULT_Q 128
3357 #define CGEMM_DEFAULT_Q 224
3358 #define ZGEMM_DEFAULT_Q 112
3359
3360 #define SGEMM_DEFAULT_R 4096
3361 #define DGEMM_DEFAULT_R 4096
3362 #define CGEMM_DEFAULT_R 4096
3363 #define ZGEMM_DEFAULT_R 4096
3364
3365 #endif /* Cores */
3366
3367
3368 #endif /* ARMv8 */
3369
3370 #if defined(ARMV5)
3371 #define SNUMOPT         2
3372 #define DNUMOPT         2
3373
3374 #define GEMM_DEFAULT_OFFSET_A 0
3375 #define GEMM_DEFAULT_OFFSET_B 0
3376 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
3377
3378 #define SGEMM_DEFAULT_UNROLL_M  2
3379 #define SGEMM_DEFAULT_UNROLL_N  2
3380
3381 #define DGEMM_DEFAULT_UNROLL_M  2
3382 #define DGEMM_DEFAULT_UNROLL_N  2
3383
3384 #define CGEMM_DEFAULT_UNROLL_M  2
3385 #define CGEMM_DEFAULT_UNROLL_N  2
3386
3387 #define ZGEMM_DEFAULT_UNROLL_M  2
3388 #define ZGEMM_DEFAULT_UNROLL_N  2
3389
3390 #define SGEMM_DEFAULT_P 128
3391 #define DGEMM_DEFAULT_P 128
3392 #define CGEMM_DEFAULT_P 96
3393 #define ZGEMM_DEFAULT_P 64
3394
3395 #define SGEMM_DEFAULT_Q 240
3396 #define DGEMM_DEFAULT_Q 120
3397 #define CGEMM_DEFAULT_Q 120
3398 #define ZGEMM_DEFAULT_Q 120
3399
3400 #define SGEMM_DEFAULT_R 12288
3401 #define DGEMM_DEFAULT_R 8192
3402 #define CGEMM_DEFAULT_R 4096
3403 #define ZGEMM_DEFAULT_R 4096
3404
3405
3406 #define SYMV_P  16
3407 #endif
3408
3409
3410
3411 #ifdef CORTEXA9
3412 #define SNUMOPT         2
3413 #define DNUMOPT         2
3414
3415 #define GEMM_DEFAULT_OFFSET_A 0
3416 #define GEMM_DEFAULT_OFFSET_B 0
3417 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
3418
3419 #define SGEMM_DEFAULT_UNROLL_M  4
3420 #define SGEMM_DEFAULT_UNROLL_N  4
3421
3422 #define DGEMM_DEFAULT_UNROLL_M  4
3423 #define DGEMM_DEFAULT_UNROLL_N  4
3424
3425 #define CGEMM_DEFAULT_UNROLL_M  2
3426 #define CGEMM_DEFAULT_UNROLL_N  2
3427
3428 #define ZGEMM_DEFAULT_UNROLL_M  2
3429 #define ZGEMM_DEFAULT_UNROLL_N  2
3430
3431 #define SGEMM_DEFAULT_P 128
3432 #define DGEMM_DEFAULT_P 128
3433 #define CGEMM_DEFAULT_P 96
3434 #define ZGEMM_DEFAULT_P 64
3435
3436 #define SGEMM_DEFAULT_Q 240
3437 #define DGEMM_DEFAULT_Q 120
3438 #define CGEMM_DEFAULT_Q 120
3439 #define ZGEMM_DEFAULT_Q 120
3440
3441 #define SGEMM_DEFAULT_R 12288
3442 #define DGEMM_DEFAULT_R 8192
3443 #define CGEMM_DEFAULT_R 4096
3444 #define ZGEMM_DEFAULT_R 4096
3445
3446
3447
3448 #define SYMV_P  16
3449 #endif
3450
3451
3452 #ifdef CORTEXA15
3453 #define SNUMOPT         2
3454 #define DNUMOPT         2
3455
3456 #define GEMM_DEFAULT_OFFSET_A 0
3457 #define GEMM_DEFAULT_OFFSET_B 0
3458 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
3459
3460 #define SGEMM_DEFAULT_UNROLL_M  4
3461 #define SGEMM_DEFAULT_UNROLL_N  4
3462
3463 #define DGEMM_DEFAULT_UNROLL_M  4
3464 #define DGEMM_DEFAULT_UNROLL_N  4
3465
3466 #define CGEMM_DEFAULT_UNROLL_M  2
3467 #define CGEMM_DEFAULT_UNROLL_N  2
3468
3469 #define ZGEMM_DEFAULT_UNROLL_M  2
3470 #define ZGEMM_DEFAULT_UNROLL_N  2
3471
3472 #define SGEMM_DEFAULT_P 128
3473 #define DGEMM_DEFAULT_P 128
3474 #define CGEMM_DEFAULT_P 96
3475 #define ZGEMM_DEFAULT_P 64
3476
3477 #define SGEMM_DEFAULT_Q 240
3478 #define DGEMM_DEFAULT_Q 120
3479 #define CGEMM_DEFAULT_Q 120
3480 #define ZGEMM_DEFAULT_Q 120
3481
3482 #define SGEMM_DEFAULT_R 12288
3483 #define DGEMM_DEFAULT_R 8192
3484 #define CGEMM_DEFAULT_R 4096
3485 #define ZGEMM_DEFAULT_R 4096
3486
3487
3488
3489 #define SYMV_P  16
3490 #endif
3491
3492
3493 #if defined(ZARCH_GENERIC)
3494 #define SNUMOPT         2
3495 #define DNUMOPT         2
3496
3497 #define GEMM_DEFAULT_OFFSET_A 0
3498 #define GEMM_DEFAULT_OFFSET_B 0
3499 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
3500
3501 #define SGEMM_DEFAULT_UNROLL_M  2
3502 #define SGEMM_DEFAULT_UNROLL_N  2
3503
3504 #define DGEMM_DEFAULT_UNROLL_M  2
3505 #define DGEMM_DEFAULT_UNROLL_N  2
3506
3507 #define CGEMM_DEFAULT_UNROLL_M  2
3508 #define CGEMM_DEFAULT_UNROLL_N  2
3509
3510 #define ZGEMM_DEFAULT_UNROLL_M  2
3511 #define ZGEMM_DEFAULT_UNROLL_N  2
3512
3513 #define SGEMM_DEFAULT_P 128
3514 #define DGEMM_DEFAULT_P 128
3515 #define CGEMM_DEFAULT_P 96
3516 #define ZGEMM_DEFAULT_P 64
3517
3518 #define SGEMM_DEFAULT_Q 240
3519 #define DGEMM_DEFAULT_Q 120
3520 #define CGEMM_DEFAULT_Q 120
3521 #define ZGEMM_DEFAULT_Q 120
3522
3523 #define SGEMM_DEFAULT_R 12288
3524 #define DGEMM_DEFAULT_R 8192
3525 #define CGEMM_DEFAULT_R 4096
3526 #define ZGEMM_DEFAULT_R 4096
3527
3528
3529 #define SYMV_P  16
3530 #endif
3531
3532 #if defined(Z13)
3533 #define SNUMOPT         2
3534 #define DNUMOPT         2
3535
3536 #define GEMM_DEFAULT_OFFSET_A 0
3537 #define GEMM_DEFAULT_OFFSET_B 0
3538 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x03fffUL
3539
3540 #define SGEMM_DEFAULT_UNROLL_M  8
3541 #define SGEMM_DEFAULT_UNROLL_N  4
3542
3543 #define DGEMM_DEFAULT_UNROLL_M  8
3544 #define DGEMM_DEFAULT_UNROLL_N  4
3545
3546 #define CGEMM_DEFAULT_UNROLL_M  4
3547 #define CGEMM_DEFAULT_UNROLL_N  4
3548
3549 #define ZGEMM_DEFAULT_UNROLL_M  4
3550 #define ZGEMM_DEFAULT_UNROLL_N  4
3551
3552 #define SGEMM_DEFAULT_P 456
3553 #define DGEMM_DEFAULT_P 320
3554 #define CGEMM_DEFAULT_P 480
3555 #define ZGEMM_DEFAULT_P 224
3556
3557 #define SGEMM_DEFAULT_Q 488
3558 #define DGEMM_DEFAULT_Q 384
3559 #define CGEMM_DEFAULT_Q 128
3560 #define ZGEMM_DEFAULT_Q 352
3561
3562 #define SGEMM_DEFAULT_R 8192
3563 #define DGEMM_DEFAULT_R 4096
3564 #define CGEMM_DEFAULT_R 4096
3565 #define ZGEMM_DEFAULT_R 2048
3566
3567
3568 #define SYMV_P  16
3569 #endif
3570
3571
3572 #if defined(Z14)
3573 #define SNUMOPT         2
3574 #define DNUMOPT         2
3575
3576 #define GEMM_DEFAULT_OFFSET_A 0
3577 #define GEMM_DEFAULT_OFFSET_B 0
3578 #define GEMM_DEFAULT_ALIGN 0x03fffUL
3579
3580 #define SGEMM_DEFAULT_UNROLL_M  16
3581 #define SGEMM_DEFAULT_UNROLL_N  4
3582
3583 #define DGEMM_DEFAULT_UNROLL_M  8
3584 #define DGEMM_DEFAULT_UNROLL_N  4
3585
3586 #define CGEMM_DEFAULT_UNROLL_M  4
3587 #define CGEMM_DEFAULT_UNROLL_N  4
3588
3589 #define ZGEMM_DEFAULT_UNROLL_M  4
3590 #define ZGEMM_DEFAULT_UNROLL_N  4
3591
3592 #define SGEMM_DEFAULT_P 480
3593 #define DGEMM_DEFAULT_P 320
3594 #define CGEMM_DEFAULT_P 480
3595 #define ZGEMM_DEFAULT_P 224
3596
3597 #define SGEMM_DEFAULT_Q 512
3598 #define DGEMM_DEFAULT_Q 384
3599 #define CGEMM_DEFAULT_Q 128
3600 #define ZGEMM_DEFAULT_Q 352
3601
3602 #define SGEMM_DEFAULT_R 8192
3603 #define DGEMM_DEFAULT_R 4096
3604 #define CGEMM_DEFAULT_R 4096
3605 #define ZGEMM_DEFAULT_R 2048
3606
3607
3608 #define SYMV_P  16
3609 #endif
3610
3611
3612
3613 #ifdef GENERIC
3614
3615 #define SNUMOPT         2
3616 #define DNUMOPT         2
3617
3618 #define GEMM_DEFAULT_OFFSET_A 0
3619 #define GEMM_DEFAULT_OFFSET_B 0
3620 #define GEMM_DEFAULT_ALIGN (BLASLONG)0x0ffffUL
3621
3622 #define SGEMM_DEFAULT_UNROLL_N 2
3623 #define DGEMM_DEFAULT_UNROLL_N 2
3624 #define QGEMM_DEFAULT_UNROLL_N 2
3625 #define CGEMM_DEFAULT_UNROLL_N 2
3626 #define ZGEMM_DEFAULT_UNROLL_N 2
3627 #define XGEMM_DEFAULT_UNROLL_N 1
3628
3629 #ifdef ARCH_X86
3630 #define SGEMM_DEFAULT_UNROLL_M 2
3631 #define DGEMM_DEFAULT_UNROLL_M 2
3632 #define QGEMM_DEFAULT_UNROLL_M 2
3633 #define CGEMM_DEFAULT_UNROLL_M 2
3634 #define ZGEMM_DEFAULT_UNROLL_M 2
3635 #define XGEMM_DEFAULT_UNROLL_M 1
3636 #else
3637 #define SGEMM_DEFAULT_UNROLL_M 2
3638 #define DGEMM_DEFAULT_UNROLL_M 2
3639 #define QGEMM_DEFAULT_UNROLL_M 2
3640 #define CGEMM_DEFAULT_UNROLL_M 2
3641 #define ZGEMM_DEFAULT_UNROLL_M 2
3642 #define XGEMM_DEFAULT_UNROLL_M 1
3643 #endif
3644
3645 #ifdef ARCH_MIPS
3646 #define SGEMM_DEFAULT_P  128
3647 #define DGEMM_DEFAULT_P  128
3648 #define CGEMM_DEFAULT_P  96
3649 #define ZGEMM_DEFAULT_P  64
3650 #define SGEMM_DEFAULT_Q  240
3651 #define DGEMM_DEFAULT_Q  120
3652 #define CGEMM_DEFAULT_Q  120
3653 #define ZGEMM_DEFAULT_Q  120
3654 #define SGEMM_DEFAULT_R  12288
3655 #define DGEMM_DEFAULT_R  8192
3656 #define CGEMM_DEFAULT_R  4096
3657 #define ZGEMM_DEFAULT_R  4096
3658 #else
3659 #define SGEMM_DEFAULT_P sgemm_p
3660 #define DGEMM_DEFAULT_P dgemm_p
3661 #define QGEMM_DEFAULT_P qgemm_p
3662 #define CGEMM_DEFAULT_P cgemm_p
3663 #define ZGEMM_DEFAULT_P zgemm_p
3664 #define XGEMM_DEFAULT_P xgemm_p
3665
3666 #define SGEMM_DEFAULT_R sgemm_r
3667 #define DGEMM_DEFAULT_R dgemm_r
3668 #define QGEMM_DEFAULT_R qgemm_r
3669 #define CGEMM_DEFAULT_R cgemm_r
3670 #define ZGEMM_DEFAULT_R zgemm_r
3671 #define XGEMM_DEFAULT_R xgemm_r
3672
3673 #define SGEMM_DEFAULT_Q 128
3674 #define DGEMM_DEFAULT_Q 128
3675 #define QGEMM_DEFAULT_Q 128
3676 #define CGEMM_DEFAULT_Q 128
3677 #define ZGEMM_DEFAULT_Q 128
3678 #define XGEMM_DEFAULT_Q 128
3679 #endif
3680
3681 #define SYMV_P  16
3682
3683 #endif
3684
3685 #ifndef QGEMM_DEFAULT_UNROLL_M
3686 #define QGEMM_DEFAULT_UNROLL_M 2
3687 #endif
3688
3689 #ifndef QGEMM_DEFAULT_UNROLL_N
3690 #define QGEMM_DEFAULT_UNROLL_N 2
3691 #endif
3692
3693 #ifndef XGEMM_DEFAULT_UNROLL_M
3694 #define XGEMM_DEFAULT_UNROLL_M 2
3695 #endif
3696
3697 #ifndef XGEMM_DEFAULT_UNROLL_N
3698 #define XGEMM_DEFAULT_UNROLL_N 2
3699 #endif
3700
3701 #ifndef HAVE_SSE2
3702 #define SHUFPD_0        shufps  $0x44,
3703 #define SHUFPD_1        shufps  $0x4e,
3704 #define SHUFPD_2        shufps  $0xe4,
3705 #define SHUFPD_3        shufps  $0xee,
3706 #endif
3707
3708 #ifndef SHUFPD_0
3709 #define SHUFPD_0        shufpd  $0,
3710 #endif
3711
3712 #ifndef SHUFPD_1
3713 #define SHUFPD_1        shufpd  $1,
3714 #endif
3715
3716 #ifndef SHUFPD_2
3717 #define SHUFPD_2        shufpd  $2,
3718 #endif
3719
3720 #ifndef SHUFPD_3
3721 #define SHUFPD_3        shufpd  $3,
3722 #endif
3723
3724 #ifndef SHUFPS_39
3725 #define SHUFPS_39       shufps  $0x39,
3726 #endif
3727
3728
3729 #endif