fix build error
[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 #ifdef OPTERON
76
77 #define SNUMOPT         4
78 #define DNUMOPT         2
79
80 #define GEMM_DEFAULT_OFFSET_A  64
81 #define GEMM_DEFAULT_OFFSET_B 256
82 #define GEMM_DEFAULT_ALIGN 0x01ffffUL
83
84 #define SGEMM_DEFAULT_UNROLL_N 4
85 #define DGEMM_DEFAULT_UNROLL_N 4
86 #define QGEMM_DEFAULT_UNROLL_N 2
87 #define CGEMM_DEFAULT_UNROLL_N 2
88 #define ZGEMM_DEFAULT_UNROLL_N 2
89 #define XGEMM_DEFAULT_UNROLL_N 1
90
91 #ifdef ARCH_X86
92 #define SGEMM_DEFAULT_UNROLL_M 4
93 #define DGEMM_DEFAULT_UNROLL_M 2
94 #define QGEMM_DEFAULT_UNROLL_M 2
95 #define CGEMM_DEFAULT_UNROLL_M 2
96 #define ZGEMM_DEFAULT_UNROLL_M 1
97 #define XGEMM_DEFAULT_UNROLL_M 1
98 #else
99 #define SGEMM_DEFAULT_UNROLL_M 8
100 #define DGEMM_DEFAULT_UNROLL_M 4
101 #define QGEMM_DEFAULT_UNROLL_M 2
102 #define CGEMM_DEFAULT_UNROLL_M 4
103 #define ZGEMM_DEFAULT_UNROLL_M 2
104 #define XGEMM_DEFAULT_UNROLL_M 1
105 #endif
106
107 #define SGEMM_DEFAULT_P sgemm_p
108 #define DGEMM_DEFAULT_P dgemm_p
109 #define QGEMM_DEFAULT_P qgemm_p
110 #define CGEMM_DEFAULT_P cgemm_p
111 #define ZGEMM_DEFAULT_P zgemm_p
112 #define XGEMM_DEFAULT_P xgemm_p
113
114 #define SGEMM_DEFAULT_R sgemm_r
115 #define DGEMM_DEFAULT_R dgemm_r
116 #define QGEMM_DEFAULT_R qgemm_r
117 #define CGEMM_DEFAULT_R cgemm_r
118 #define ZGEMM_DEFAULT_R zgemm_r
119 #define XGEMM_DEFAULT_R xgemm_r
120
121 #ifdef ALLOC_HUGETLB
122
123 #define SGEMM_DEFAULT_Q 248
124 #define DGEMM_DEFAULT_Q 248
125 #define QGEMM_DEFAULT_Q 248
126 #define CGEMM_DEFAULT_Q 248
127 #define ZGEMM_DEFAULT_Q 248
128 #define XGEMM_DEFAULT_Q 248
129
130 #else
131
132 #define SGEMM_DEFAULT_Q 240
133 #define DGEMM_DEFAULT_Q 240
134 #define QGEMM_DEFAULT_Q 240
135 #define CGEMM_DEFAULT_Q 240
136 #define ZGEMM_DEFAULT_Q 240
137 #define XGEMM_DEFAULT_Q 240
138
139 #endif
140
141
142 #define SYMV_P  16
143 #define HAVE_EXCLUSIVE_CACHE
144
145 #endif
146
147 #if defined(BARCELONA) || defined(SHANGHAI) || defined(BOBCAT)
148
149 #define SNUMOPT         8
150 #define DNUMOPT         4
151
152 #define GEMM_DEFAULT_OFFSET_A  64
153 #define GEMM_DEFAULT_OFFSET_B 832
154 #define GEMM_DEFAULT_ALIGN 0x0fffUL
155
156 #define SGEMM_DEFAULT_UNROLL_N 4
157 #define DGEMM_DEFAULT_UNROLL_N 4
158 #define QGEMM_DEFAULT_UNROLL_N 2
159 #define CGEMM_DEFAULT_UNROLL_N 2
160 #define ZGEMM_DEFAULT_UNROLL_N 2
161 #define XGEMM_DEFAULT_UNROLL_N 1
162
163 #ifdef ARCH_X86
164 #define SGEMM_DEFAULT_UNROLL_M 4
165 #define DGEMM_DEFAULT_UNROLL_M 2
166 #define QGEMM_DEFAULT_UNROLL_M 2
167 #define CGEMM_DEFAULT_UNROLL_M 2
168 #define ZGEMM_DEFAULT_UNROLL_M 1
169 #define XGEMM_DEFAULT_UNROLL_M 1
170 #else
171 #define SGEMM_DEFAULT_UNROLL_M 8
172 #define DGEMM_DEFAULT_UNROLL_M 4
173 #define QGEMM_DEFAULT_UNROLL_M 2
174 #define CGEMM_DEFAULT_UNROLL_M 4
175 #define ZGEMM_DEFAULT_UNROLL_M 2
176 #define XGEMM_DEFAULT_UNROLL_M 1
177 #endif
178
179 #if 0
180 #define SGEMM_DEFAULT_P 496
181 #define DGEMM_DEFAULT_P 248
182 #define QGEMM_DEFAULT_P 124
183 #define CGEMM_DEFAULT_P 248
184 #define ZGEMM_DEFAULT_P 124
185 #define XGEMM_DEFAULT_P  62
186
187 #define SGEMM_DEFAULT_Q 248
188 #define DGEMM_DEFAULT_Q 248
189 #define QGEMM_DEFAULT_Q 248
190 #define CGEMM_DEFAULT_Q 248
191 #define ZGEMM_DEFAULT_Q 248
192 #define XGEMM_DEFAULT_Q 248
193
194 #else
195
196 #define SGEMM_DEFAULT_P 448
197 #define DGEMM_DEFAULT_P 224
198 #define QGEMM_DEFAULT_P 112
199 #define CGEMM_DEFAULT_P 224
200 #define ZGEMM_DEFAULT_P 112
201 #define XGEMM_DEFAULT_P  56
202
203 #define SGEMM_DEFAULT_Q 224
204 #define DGEMM_DEFAULT_Q 224
205 #define QGEMM_DEFAULT_Q 224
206 #define CGEMM_DEFAULT_Q 224
207 #define ZGEMM_DEFAULT_Q 224
208 #define XGEMM_DEFAULT_Q 224
209
210 #endif
211
212 #define SGEMM_DEFAULT_R sgemm_r
213 #define QGEMM_DEFAULT_R qgemm_r
214 #define DGEMM_DEFAULT_R dgemm_r
215 #define CGEMM_DEFAULT_R cgemm_r
216 #define ZGEMM_DEFAULT_R zgemm_r
217 #define XGEMM_DEFAULT_R xgemm_r
218
219 #define SYMV_P  16
220 #define HAVE_EXCLUSIVE_CACHE
221
222 #define GEMM_THREAD gemm_thread_mn
223
224 #endif
225
226
227 #ifdef BULLDOZER
228
229 #define SNUMOPT         8
230 #define DNUMOPT         4
231
232 #define GEMM_DEFAULT_OFFSET_A  64
233 #define GEMM_DEFAULT_OFFSET_B 832
234 #define GEMM_DEFAULT_ALIGN 0x0fffUL
235
236
237
238 #define QGEMM_DEFAULT_UNROLL_N 2
239 #define CGEMM_DEFAULT_UNROLL_N 2
240 #define ZGEMM_DEFAULT_UNROLL_N 2
241 #define XGEMM_DEFAULT_UNROLL_N 1
242
243 #ifdef ARCH_X86
244 #define SGEMM_DEFAULT_UNROLL_N 4
245 #define DGEMM_DEFAULT_UNROLL_N 4
246 #define SGEMM_DEFAULT_UNROLL_M 4
247 #define DGEMM_DEFAULT_UNROLL_M 2
248 #define QGEMM_DEFAULT_UNROLL_M 2
249 #define CGEMM_DEFAULT_UNROLL_M 2
250 #define ZGEMM_DEFAULT_UNROLL_M 1
251 #define XGEMM_DEFAULT_UNROLL_M 1
252 #else
253 #define SGEMM_DEFAULT_UNROLL_N 2
254 #define DGEMM_DEFAULT_UNROLL_N 2
255 #define SGEMM_DEFAULT_UNROLL_M 16
256 #define DGEMM_DEFAULT_UNROLL_M 8
257 #define QGEMM_DEFAULT_UNROLL_M 2
258 #define CGEMM_DEFAULT_UNROLL_M 4
259 #define ZGEMM_DEFAULT_UNROLL_M 2
260 #define XGEMM_DEFAULT_UNROLL_M 1
261 #define CGEMM3M_DEFAULT_UNROLL_N 4
262 #define CGEMM3M_DEFAULT_UNROLL_M 8
263 #define ZGEMM3M_DEFAULT_UNROLL_N 4
264 #define ZGEMM3M_DEFAULT_UNROLL_M 4
265
266 #define DGEMM_DEFAULT_UNROLL_MN 16
267 #define GEMV_UNROLL 8
268 #endif
269
270
271 #if defined(ARCH_X86_64)
272 #define SGEMM_DEFAULT_P 768
273 #define DGEMM_DEFAULT_P 384
274 #else
275 #define SGEMM_DEFAULT_P 448
276 #define DGEMM_DEFAULT_P 224
277 #endif
278
279 #define QGEMM_DEFAULT_P 112
280 #define CGEMM_DEFAULT_P 224
281 #define ZGEMM_DEFAULT_P 112
282 #define XGEMM_DEFAULT_P  56
283
284 #if defined(ARCH_X86_64)
285 #define SGEMM_DEFAULT_Q 168
286 #define DGEMM_DEFAULT_Q 168
287 #else
288 #define SGEMM_DEFAULT_Q 224
289 #define DGEMM_DEFAULT_Q 224
290 #endif
291
292 #define QGEMM_DEFAULT_Q 224
293 #define CGEMM_DEFAULT_Q 224
294 #define ZGEMM_DEFAULT_Q 224
295 #define XGEMM_DEFAULT_Q 224
296
297 #define CGEMM3M_DEFAULT_P 448
298 #define ZGEMM3M_DEFAULT_P 224
299 #define XGEMM3M_DEFAULT_P 112
300 #define CGEMM3M_DEFAULT_Q 224
301 #define ZGEMM3M_DEFAULT_Q 224
302 #define XGEMM3M_DEFAULT_Q 224
303 #define CGEMM3M_DEFAULT_R 12288
304 #define ZGEMM3M_DEFAULT_R 12288
305 #define XGEMM3M_DEFAULT_R 12288
306
307 #define SGEMM_DEFAULT_R sgemm_r
308 #define QGEMM_DEFAULT_R qgemm_r
309 #define DGEMM_DEFAULT_R dgemm_r
310 #define CGEMM_DEFAULT_R cgemm_r
311 #define ZGEMM_DEFAULT_R zgemm_r
312 #define XGEMM_DEFAULT_R xgemm_r
313
314 #define SYMV_P  16
315 #define HAVE_EXCLUSIVE_CACHE
316
317 #define GEMM_THREAD gemm_thread_mn
318
319 #endif
320
321 #ifdef PILEDRIVER
322 #define SNUMOPT         8
323 #define DNUMOPT         4
324
325 #define GEMM_DEFAULT_OFFSET_A  64
326 #define GEMM_DEFAULT_OFFSET_B 832
327 #define GEMM_DEFAULT_ALIGN 0x0fffUL
328
329
330
331 #define QGEMM_DEFAULT_UNROLL_N 2
332 #define CGEMM_DEFAULT_UNROLL_N 2
333 #define ZGEMM_DEFAULT_UNROLL_N 2
334 #define XGEMM_DEFAULT_UNROLL_N 1
335
336 #ifdef ARCH_X86
337 #define SGEMM_DEFAULT_UNROLL_N 4
338 #define DGEMM_DEFAULT_UNROLL_N 4
339 #define SGEMM_DEFAULT_UNROLL_M 4
340 #define DGEMM_DEFAULT_UNROLL_M 2
341 #define QGEMM_DEFAULT_UNROLL_M 2
342 #define CGEMM_DEFAULT_UNROLL_M 2
343 #define ZGEMM_DEFAULT_UNROLL_M 1
344 #define XGEMM_DEFAULT_UNROLL_M 1
345 #else
346 #define SGEMM_DEFAULT_UNROLL_N 2
347 #define DGEMM_DEFAULT_UNROLL_N 2
348 #define SGEMM_DEFAULT_UNROLL_M 16
349 #define DGEMM_DEFAULT_UNROLL_M 8
350 #define QGEMM_DEFAULT_UNROLL_M 2
351 #define CGEMM_DEFAULT_UNROLL_M 4
352 #define ZGEMM_DEFAULT_UNROLL_M 2
353 #define XGEMM_DEFAULT_UNROLL_M 1
354 #define CGEMM3M_DEFAULT_UNROLL_N 4
355 #define CGEMM3M_DEFAULT_UNROLL_M 8
356 #define ZGEMM3M_DEFAULT_UNROLL_N 4
357 #define ZGEMM3M_DEFAULT_UNROLL_M 4
358 #define GEMV_UNROLL 8
359 #endif
360
361 #if defined(ARCH_X86_64)
362 #define SGEMM_DEFAULT_P 768
363 #define DGEMM_DEFAULT_P 768
364 #define ZGEMM_DEFAULT_P 384
365 #define CGEMM_DEFAULT_P 768
366 #else
367 #define SGEMM_DEFAULT_P 448
368 #define DGEMM_DEFAULT_P 480
369 #define ZGEMM_DEFAULT_P 112
370 #define CGEMM_DEFAULT_P 224
371 #endif
372 #define QGEMM_DEFAULT_P 112
373 #define XGEMM_DEFAULT_P  56
374
375 #if defined(ARCH_X86_64)
376 #define SGEMM_DEFAULT_Q 192
377 #define DGEMM_DEFAULT_Q 168
378 #define ZGEMM_DEFAULT_Q 168
379 #define CGEMM_DEFAULT_Q 168
380 #else
381 #define SGEMM_DEFAULT_Q 224
382 #define DGEMM_DEFAULT_Q 224
383 #define ZGEMM_DEFAULT_Q 224
384 #define CGEMM_DEFAULT_Q 224
385 #endif
386 #define QGEMM_DEFAULT_Q 224
387 #define XGEMM_DEFAULT_Q 224
388
389 #define CGEMM3M_DEFAULT_P 448
390 #define ZGEMM3M_DEFAULT_P 224
391 #define XGEMM3M_DEFAULT_P 112
392 #define CGEMM3M_DEFAULT_Q 224
393 #define ZGEMM3M_DEFAULT_Q 224
394 #define XGEMM3M_DEFAULT_Q 224
395 #define CGEMM3M_DEFAULT_R 12288
396 #define ZGEMM3M_DEFAULT_R 12288
397 #define XGEMM3M_DEFAULT_R 12288
398
399 #define SGEMM_DEFAULT_R 12288
400 #define QGEMM_DEFAULT_R qgemm_r
401 #define DGEMM_DEFAULT_R 12288
402 #define CGEMM_DEFAULT_R cgemm_r
403 #define ZGEMM_DEFAULT_R zgemm_r
404 #define XGEMM_DEFAULT_R xgemm_r
405
406 #define SYMV_P  16
407 #define HAVE_EXCLUSIVE_CACHE
408
409 #define GEMM_THREAD gemm_thread_mn
410
411 #endif
412
413 #ifdef STEAMROLLER
414 #define SNUMOPT         8
415 #define DNUMOPT         4
416
417 #define GEMM_DEFAULT_OFFSET_A  64
418 #define GEMM_DEFAULT_OFFSET_B 832
419 #define GEMM_DEFAULT_ALIGN 0x0fffUL
420
421
422
423 #define QGEMM_DEFAULT_UNROLL_N 2
424 #define CGEMM_DEFAULT_UNROLL_N 2
425 #define ZGEMM_DEFAULT_UNROLL_N 2
426 #define XGEMM_DEFAULT_UNROLL_N 1
427
428 #ifdef ARCH_X86
429 #define SGEMM_DEFAULT_UNROLL_N 4
430 #define DGEMM_DEFAULT_UNROLL_N 4
431 #define SGEMM_DEFAULT_UNROLL_M 4
432 #define DGEMM_DEFAULT_UNROLL_M 2
433 #define QGEMM_DEFAULT_UNROLL_M 2
434 #define CGEMM_DEFAULT_UNROLL_M 2
435 #define ZGEMM_DEFAULT_UNROLL_M 1
436 #define XGEMM_DEFAULT_UNROLL_M 1
437 #else
438 #define SGEMM_DEFAULT_UNROLL_N 2
439 #define DGEMM_DEFAULT_UNROLL_N 2
440 #define SGEMM_DEFAULT_UNROLL_M 16
441 #define DGEMM_DEFAULT_UNROLL_M 8
442 #define QGEMM_DEFAULT_UNROLL_M 2
443 #define CGEMM_DEFAULT_UNROLL_M 4
444 #define ZGEMM_DEFAULT_UNROLL_M 2
445 #define XGEMM_DEFAULT_UNROLL_M 1
446 #define CGEMM3M_DEFAULT_UNROLL_N 4
447 #define CGEMM3M_DEFAULT_UNROLL_M 8
448 #define ZGEMM3M_DEFAULT_UNROLL_N 4
449 #define ZGEMM3M_DEFAULT_UNROLL_M 4
450 #define GEMV_UNROLL 8
451 #endif
452
453 #if defined(ARCH_X86_64)
454 #define SGEMM_DEFAULT_P 768
455 #define DGEMM_DEFAULT_P 576
456 #define ZGEMM_DEFAULT_P 288
457 #define CGEMM_DEFAULT_P 576
458 #else
459 #define SGEMM_DEFAULT_P 448
460 #define DGEMM_DEFAULT_P 480
461 #define ZGEMM_DEFAULT_P 112
462 #define CGEMM_DEFAULT_P 224
463 #endif
464 #define QGEMM_DEFAULT_P 112
465 #define XGEMM_DEFAULT_P  56
466
467 #if defined(ARCH_X86_64)
468 #define SGEMM_DEFAULT_Q 192
469 #define DGEMM_DEFAULT_Q 160
470 #define ZGEMM_DEFAULT_Q 160
471 #define CGEMM_DEFAULT_Q 160
472 #else
473 #define SGEMM_DEFAULT_Q 224
474 #define DGEMM_DEFAULT_Q 224
475 #define ZGEMM_DEFAULT_Q 224
476 #define CGEMM_DEFAULT_Q 224
477 #endif
478 #define QGEMM_DEFAULT_Q 224
479 #define XGEMM_DEFAULT_Q 224
480
481 #define CGEMM3M_DEFAULT_P 448
482 #define ZGEMM3M_DEFAULT_P 224
483 #define XGEMM3M_DEFAULT_P 112
484 #define CGEMM3M_DEFAULT_Q 224
485 #define ZGEMM3M_DEFAULT_Q 224
486 #define XGEMM3M_DEFAULT_Q 224
487 #define CGEMM3M_DEFAULT_R 12288
488 #define ZGEMM3M_DEFAULT_R 12288
489 #define XGEMM3M_DEFAULT_R 12288
490
491 #define SGEMM_DEFAULT_R 12288
492 #define QGEMM_DEFAULT_R qgemm_r
493 #define DGEMM_DEFAULT_R 12288
494 #define CGEMM_DEFAULT_R cgemm_r
495 #define ZGEMM_DEFAULT_R zgemm_r
496 #define XGEMM_DEFAULT_R xgemm_r
497
498 #define SYMV_P  16
499 #define HAVE_EXCLUSIVE_CACHE
500
501 #define GEMM_THREAD gemm_thread_mn
502
503 #endif
504
505
506 #ifdef EXCAVATOR
507 #define SNUMOPT         8
508 #define DNUMOPT         4
509
510 #define GEMM_DEFAULT_OFFSET_A  64
511 #define GEMM_DEFAULT_OFFSET_B 832
512 #define GEMM_DEFAULT_ALIGN 0x0fffUL
513
514
515
516 #define QGEMM_DEFAULT_UNROLL_N 2
517 #define CGEMM_DEFAULT_UNROLL_N 2
518 #define ZGEMM_DEFAULT_UNROLL_N 2
519 #define XGEMM_DEFAULT_UNROLL_N 1
520
521 #ifdef ARCH_X86
522 #define SGEMM_DEFAULT_UNROLL_N 4
523 #define DGEMM_DEFAULT_UNROLL_N 4
524 #define SGEMM_DEFAULT_UNROLL_M 4
525 #define DGEMM_DEFAULT_UNROLL_M 2
526 #define QGEMM_DEFAULT_UNROLL_M 2
527 #define CGEMM_DEFAULT_UNROLL_M 2
528 #define ZGEMM_DEFAULT_UNROLL_M 1
529 #define XGEMM_DEFAULT_UNROLL_M 1
530 #else
531 #define SGEMM_DEFAULT_UNROLL_N 2
532 #define DGEMM_DEFAULT_UNROLL_N 2
533 #define SGEMM_DEFAULT_UNROLL_M 16
534 #define DGEMM_DEFAULT_UNROLL_M 8
535 #define QGEMM_DEFAULT_UNROLL_M 2
536 #define CGEMM_DEFAULT_UNROLL_M 4
537 #define ZGEMM_DEFAULT_UNROLL_M 2
538 #define XGEMM_DEFAULT_UNROLL_M 1
539 #define CGEMM3M_DEFAULT_UNROLL_N 4
540 #define CGEMM3M_DEFAULT_UNROLL_M 8
541 #define ZGEMM3M_DEFAULT_UNROLL_N 4
542 #define ZGEMM3M_DEFAULT_UNROLL_M 4
543 #define GEMV_UNROLL 8
544 #endif
545
546 #if defined(ARCH_X86_64)
547 #define SGEMM_DEFAULT_P 768
548 #define DGEMM_DEFAULT_P 576
549 #define ZGEMM_DEFAULT_P 288
550 #define CGEMM_DEFAULT_P 576
551 #else
552 #define SGEMM_DEFAULT_P 448
553 #define DGEMM_DEFAULT_P 480
554 #define ZGEMM_DEFAULT_P 112
555 #define CGEMM_DEFAULT_P 224
556 #endif
557 #define QGEMM_DEFAULT_P 112
558 #define XGEMM_DEFAULT_P  56
559
560 #if defined(ARCH_X86_64)
561 #define SGEMM_DEFAULT_Q 192
562 #define DGEMM_DEFAULT_Q 160
563 #define ZGEMM_DEFAULT_Q 160
564 #define CGEMM_DEFAULT_Q 160
565 #else
566 #define SGEMM_DEFAULT_Q 224
567 #define DGEMM_DEFAULT_Q 224
568 #define ZGEMM_DEFAULT_Q 224
569 #define CGEMM_DEFAULT_Q 224
570 #endif
571 #define QGEMM_DEFAULT_Q 224
572 #define XGEMM_DEFAULT_Q 224
573
574 #define CGEMM3M_DEFAULT_P 448
575 #define ZGEMM3M_DEFAULT_P 224
576 #define XGEMM3M_DEFAULT_P 112
577 #define CGEMM3M_DEFAULT_Q 224
578 #define ZGEMM3M_DEFAULT_Q 224
579 #define XGEMM3M_DEFAULT_Q 224
580 #define CGEMM3M_DEFAULT_R 12288
581 #define ZGEMM3M_DEFAULT_R 12288
582 #define XGEMM3M_DEFAULT_R 12288
583
584 #define SGEMM_DEFAULT_R 12288
585 #define QGEMM_DEFAULT_R qgemm_r
586 #define DGEMM_DEFAULT_R 12288
587 #define CGEMM_DEFAULT_R cgemm_r
588 #define ZGEMM_DEFAULT_R zgemm_r
589 #define XGEMM_DEFAULT_R xgemm_r
590
591 #define SYMV_P  16
592 #define HAVE_EXCLUSIVE_CACHE
593
594 #define GEMM_THREAD gemm_thread_mn
595
596 #endif
597
598 #ifdef ZEN
599 #define SNUMOPT         16
600 #define DNUMOPT         8
601
602 #define GEMM_DEFAULT_OFFSET_A     0
603 #define GEMM_DEFAULT_OFFSET_B     0
604 #define GEMM_DEFAULT_ALIGN 0x03fffUL
605
606 #define SYMV_P  8
607
608 #define SWITCH_RATIO    16
609
610 #ifdef ARCH_X86
611
612 #define SGEMM_DEFAULT_UNROLL_M 4
613 #define DGEMM_DEFAULT_UNROLL_M 2
614 #define QGEMM_DEFAULT_UNROLL_M 2
615 #define CGEMM_DEFAULT_UNROLL_M 2
616 #define ZGEMM_DEFAULT_UNROLL_M 1
617 #define XGEMM_DEFAULT_UNROLL_M 1
618
619 #define SGEMM_DEFAULT_UNROLL_N 4
620 #define DGEMM_DEFAULT_UNROLL_N 4
621 #define QGEMM_DEFAULT_UNROLL_N 2
622 #define CGEMM_DEFAULT_UNROLL_N 2
623 #define ZGEMM_DEFAULT_UNROLL_N 2
624 #define XGEMM_DEFAULT_UNROLL_N 1
625
626 #else
627
628 #define SGEMM_DEFAULT_UNROLL_M 16
629 #define DGEMM_DEFAULT_UNROLL_M 4
630 #define QGEMM_DEFAULT_UNROLL_M 2
631 #define CGEMM_DEFAULT_UNROLL_M 8
632 #define ZGEMM_DEFAULT_UNROLL_M 4
633 #define XGEMM_DEFAULT_UNROLL_M 1
634
635 #define SGEMM_DEFAULT_UNROLL_N 4
636 #define DGEMM_DEFAULT_UNROLL_N 8
637 #define QGEMM_DEFAULT_UNROLL_N 2
638 #define CGEMM_DEFAULT_UNROLL_N 2
639 #define ZGEMM_DEFAULT_UNROLL_N 2
640 #define XGEMM_DEFAULT_UNROLL_N 1
641
642 #define SGEMM_DEFAULT_UNROLL_MN 32
643 #define DGEMM_DEFAULT_UNROLL_MN 32
644 #endif
645
646 #ifdef ARCH_X86
647
648 #define SGEMM_DEFAULT_P 512
649 #define SGEMM_DEFAULT_R sgemm_r
650 #define DGEMM_DEFAULT_P 512
651 #define DGEMM_DEFAULT_R dgemm_r
652 #define QGEMM_DEFAULT_P 504
653 #define QGEMM_DEFAULT_R qgemm_r
654 #define CGEMM_DEFAULT_P 128
655 #define CGEMM_DEFAULT_R 1024
656 #define ZGEMM_DEFAULT_P 512
657 #define ZGEMM_DEFAULT_R zgemm_r
658 #define XGEMM_DEFAULT_P 252
659 #define XGEMM_DEFAULT_R xgemm_r
660 #define SGEMM_DEFAULT_Q 256
661 #define DGEMM_DEFAULT_Q 256
662 #define QGEMM_DEFAULT_Q 128
663 #define CGEMM_DEFAULT_Q 256
664 #define ZGEMM_DEFAULT_Q 192
665 #define XGEMM_DEFAULT_Q 128
666
667 #else
668
669 #define SGEMM_DEFAULT_P 768
670 #define DGEMM_DEFAULT_P 512
671 #define CGEMM_DEFAULT_P 384
672 #define ZGEMM_DEFAULT_P 256
673
674 #ifdef WINDOWS_ABI
675 #define SGEMM_DEFAULT_Q 320
676 #define DGEMM_DEFAULT_Q 128
677 #else
678 #define SGEMM_DEFAULT_Q 384
679 #define DGEMM_DEFAULT_Q 256
680 #endif
681 #define CGEMM_DEFAULT_Q 192
682 #define ZGEMM_DEFAULT_Q 128
683
684 #define SGEMM_DEFAULT_R sgemm_r
685 #define DGEMM_DEFAULT_R 13824
686 #define CGEMM_DEFAULT_R cgemm_r
687 #define ZGEMM_DEFAULT_R zgemm_r
688
689 #define QGEMM_DEFAULT_Q 128
690 #define QGEMM_DEFAULT_P 504
691 #define QGEMM_DEFAULT_R qgemm_r
692 #define XGEMM_DEFAULT_P 252
693 #define XGEMM_DEFAULT_R xgemm_r
694 #define XGEMM_DEFAULT_Q 128
695
696 #define CGEMM3M_DEFAULT_UNROLL_N 8
697 #define CGEMM3M_DEFAULT_UNROLL_M 4
698 #define ZGEMM3M_DEFAULT_UNROLL_N 8
699 #define ZGEMM3M_DEFAULT_UNROLL_M 2
700
701 #define CGEMM3M_DEFAULT_P 448
702 #define ZGEMM3M_DEFAULT_P 224
703 #define XGEMM3M_DEFAULT_P 112
704 #define CGEMM3M_DEFAULT_Q 224
705 #define ZGEMM3M_DEFAULT_Q 224
706 #define XGEMM3M_DEFAULT_Q 224
707 #define CGEMM3M_DEFAULT_R 12288
708 #define ZGEMM3M_DEFAULT_R 12288
709 #define XGEMM3M_DEFAULT_R 12288
710
711 #endif
712
713 #endif
714
715 #ifdef ATHLON
716
717 #define SNUMOPT         4
718 #define DNUMOPT         2
719
720 #define GEMM_DEFAULT_OFFSET_A   0
721 #define GEMM_DEFAULT_OFFSET_B 384
722 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
723
724 #define SGEMM_DEFAULT_UNROLL_N 4
725 #define DGEMM_DEFAULT_UNROLL_N 4
726 #define QGEMM_DEFAULT_UNROLL_N 2
727 #define CGEMM_DEFAULT_UNROLL_N 2
728 #define ZGEMM_DEFAULT_UNROLL_N 2
729 #define XGEMM_DEFAULT_UNROLL_N 1
730
731 #define SGEMM_DEFAULT_UNROLL_M 2
732 #define DGEMM_DEFAULT_UNROLL_M 1
733 #define QGEMM_DEFAULT_UNROLL_M 2
734 #define CGEMM_DEFAULT_UNROLL_M 1
735 #define ZGEMM_DEFAULT_UNROLL_M 1
736 #define XGEMM_DEFAULT_UNROLL_M 1
737
738 #define SGEMM_DEFAULT_R sgemm_r
739 #define DGEMM_DEFAULT_R dgemm_r
740 #define QGEMM_DEFAULT_R qgemm_r
741 #define CGEMM_DEFAULT_R cgemm_r
742 #define ZGEMM_DEFAULT_R zgemm_r
743 #define XGEMM_DEFAULT_R xgemm_r
744
745 #define SGEMM_DEFAULT_P 208
746 #define DGEMM_DEFAULT_P 104
747 #define QGEMM_DEFAULT_P  56
748 #define CGEMM_DEFAULT_P 104
749 #define ZGEMM_DEFAULT_P  56
750 #define XGEMM_DEFAULT_P  28
751
752 #define SGEMM_DEFAULT_Q 208
753 #define DGEMM_DEFAULT_Q 208
754 #define QGEMM_DEFAULT_Q 208
755 #define CGEMM_DEFAULT_Q 208
756 #define ZGEMM_DEFAULT_Q 208
757 #define XGEMM_DEFAULT_Q 208
758
759 #define SYMV_P  16
760 #define HAVE_EXCLUSIVE_CACHE
761 #endif
762
763 #ifdef VIAC3
764
765 #define SNUMOPT         2
766 #define DNUMOPT         1
767
768 #define GEMM_DEFAULT_OFFSET_A   0
769 #define GEMM_DEFAULT_OFFSET_B 256
770 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
771
772 #define SGEMM_DEFAULT_UNROLL_N 4
773 #define DGEMM_DEFAULT_UNROLL_N 4
774 #define QGEMM_DEFAULT_UNROLL_N 2
775 #define CGEMM_DEFAULT_UNROLL_N 2
776 #define ZGEMM_DEFAULT_UNROLL_N 2
777 #define XGEMM_DEFAULT_UNROLL_N 1
778
779 #define SGEMM_DEFAULT_UNROLL_M 2
780 #define DGEMM_DEFAULT_UNROLL_M 1
781 #define QGEMM_DEFAULT_UNROLL_M 2
782 #define CGEMM_DEFAULT_UNROLL_M 1
783 #define ZGEMM_DEFAULT_UNROLL_M 1
784 #define XGEMM_DEFAULT_UNROLL_M 1
785
786 #define SGEMM_DEFAULT_R sgemm_r
787 #define DGEMM_DEFAULT_R dgemm_r
788 #define QGEMM_DEFAULT_R qgemm_r
789 #define CGEMM_DEFAULT_R cgemm_r
790 #define ZGEMM_DEFAULT_R zgemm_r
791 #define XGEMM_DEFAULT_R xgemm_r
792
793 #define SGEMM_DEFAULT_P 128
794 #define DGEMM_DEFAULT_P 128
795 #define QGEMM_DEFAULT_P 128
796 #define CGEMM_DEFAULT_P 128
797 #define ZGEMM_DEFAULT_P 128
798 #define XGEMM_DEFAULT_P 128
799
800 #define SGEMM_DEFAULT_Q 512
801 #define DGEMM_DEFAULT_Q 256
802 #define QGEMM_DEFAULT_Q 256
803 #define CGEMM_DEFAULT_Q 256
804 #define ZGEMM_DEFAULT_Q 128
805 #define XGEMM_DEFAULT_Q 128
806
807 #define SYMV_P  16
808 #endif
809
810 #ifdef NANO
811
812 #define SNUMOPT         4
813 #define DNUMOPT         2
814
815 #define GEMM_DEFAULT_OFFSET_A  64
816 #define GEMM_DEFAULT_OFFSET_B 256
817 #define GEMM_DEFAULT_ALIGN 0x01ffffUL
818
819 #ifdef ARCH_X86
820 #define SGEMM_DEFAULT_UNROLL_N 4
821 #define DGEMM_DEFAULT_UNROLL_N 4
822 #define QGEMM_DEFAULT_UNROLL_N 2
823 #define CGEMM_DEFAULT_UNROLL_N 2
824 #define ZGEMM_DEFAULT_UNROLL_N 2
825 #define XGEMM_DEFAULT_UNROLL_N 1
826
827 #define SGEMM_DEFAULT_UNROLL_M 4
828 #define DGEMM_DEFAULT_UNROLL_M 2
829 #define QGEMM_DEFAULT_UNROLL_M 2
830 #define CGEMM_DEFAULT_UNROLL_M 2
831 #define ZGEMM_DEFAULT_UNROLL_M 1
832 #define XGEMM_DEFAULT_UNROLL_M 1
833 #else
834 #define SGEMM_DEFAULT_UNROLL_N 8
835 #define DGEMM_DEFAULT_UNROLL_N 4
836 #define QGEMM_DEFAULT_UNROLL_N 2
837 #define CGEMM_DEFAULT_UNROLL_N 4
838 #define ZGEMM_DEFAULT_UNROLL_N 2
839 #define XGEMM_DEFAULT_UNROLL_N 1
840
841 #define SGEMM_DEFAULT_UNROLL_M 4
842 #define DGEMM_DEFAULT_UNROLL_M 4
843 #define QGEMM_DEFAULT_UNROLL_M 2
844 #define CGEMM_DEFAULT_UNROLL_M 2
845 #define ZGEMM_DEFAULT_UNROLL_M 2
846 #define XGEMM_DEFAULT_UNROLL_M 1
847 #endif
848
849 #define SGEMM_DEFAULT_P 288
850 #define DGEMM_DEFAULT_P 288
851 #define QGEMM_DEFAULT_P 288
852 #define CGEMM_DEFAULT_P 288
853 #define ZGEMM_DEFAULT_P 288
854 #define XGEMM_DEFAULT_P 288
855
856 #define SGEMM_DEFAULT_R sgemm_r
857 #define DGEMM_DEFAULT_R dgemm_r
858 #define QGEMM_DEFAULT_R qgemm_r
859 #define CGEMM_DEFAULT_R cgemm_r
860 #define ZGEMM_DEFAULT_R zgemm_r
861 #define XGEMM_DEFAULT_R xgemm_r
862
863 #define SGEMM_DEFAULT_Q 256
864 #define DGEMM_DEFAULT_Q 128
865 #define QGEMM_DEFAULT_Q  64
866 #define CGEMM_DEFAULT_Q 128
867 #define ZGEMM_DEFAULT_Q  64
868 #define XGEMM_DEFAULT_Q  32
869
870 #define SYMV_P  16
871 #define HAVE_EXCLUSIVE_CACHE
872
873 #endif
874
875 #if defined(PENTIUM) || defined(PENTIUM2) || defined(PENTIUM3)
876
877 #ifdef HAVE_SSE
878 #define SNUMOPT         2
879 #else
880 #define SNUMOPT         1
881 #endif
882 #define DNUMOPT         1
883
884 #define GEMM_DEFAULT_OFFSET_A 0
885 #define GEMM_DEFAULT_OFFSET_B 0
886 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
887
888 #ifdef HAVE_SSE
889 #define SGEMM_DEFAULT_UNROLL_M 8
890 #define CGEMM_DEFAULT_UNROLL_M 4
891 #else
892 #define SGEMM_DEFAULT_UNROLL_M 4
893 #define CGEMM_DEFAULT_UNROLL_M 2
894 #endif
895 #define DGEMM_DEFAULT_UNROLL_M 2
896 #define SGEMM_DEFAULT_UNROLL_N 2
897 #define DGEMM_DEFAULT_UNROLL_N 2
898 #define QGEMM_DEFAULT_UNROLL_M 2
899 #define QGEMM_DEFAULT_UNROLL_N 2
900 #define CGEMM_DEFAULT_UNROLL_N 1
901 #define ZGEMM_DEFAULT_UNROLL_M 1
902 #define ZGEMM_DEFAULT_UNROLL_N 1
903 #define XGEMM_DEFAULT_UNROLL_M 1
904 #define XGEMM_DEFAULT_UNROLL_N 1
905
906 #define SGEMM_DEFAULT_P sgemm_p
907 #define SGEMM_DEFAULT_Q 256
908 #define SGEMM_DEFAULT_R sgemm_r
909
910 #define DGEMM_DEFAULT_P dgemm_p
911 #define DGEMM_DEFAULT_Q 256
912 #define DGEMM_DEFAULT_R dgemm_r
913
914 #define QGEMM_DEFAULT_P qgemm_p
915 #define QGEMM_DEFAULT_Q 256
916 #define QGEMM_DEFAULT_R qgemm_r
917
918 #define CGEMM_DEFAULT_P cgemm_p
919 #define CGEMM_DEFAULT_Q 256
920 #define CGEMM_DEFAULT_R cgemm_r
921
922 #define ZGEMM_DEFAULT_P zgemm_p
923 #define ZGEMM_DEFAULT_Q 256
924 #define ZGEMM_DEFAULT_R zgemm_r
925
926 #define XGEMM_DEFAULT_P xgemm_p
927 #define XGEMM_DEFAULT_Q 256
928 #define XGEMM_DEFAULT_R xgemm_r
929
930 #define SYMV_P  4
931
932 #endif
933
934 #ifdef PENTIUMM
935
936 #define SNUMOPT         2
937 #define DNUMOPT         1
938
939 #define GEMM_DEFAULT_OFFSET_A 0
940 #define GEMM_DEFAULT_OFFSET_B 0
941 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
942
943 #ifdef CORE_YONAH
944 #define SGEMM_DEFAULT_UNROLL_M 4
945 #define SGEMM_DEFAULT_UNROLL_N 4
946 #define DGEMM_DEFAULT_UNROLL_M 2
947 #define DGEMM_DEFAULT_UNROLL_N 4
948 #define QGEMM_DEFAULT_UNROLL_M 2
949 #define QGEMM_DEFAULT_UNROLL_N 2
950 #define CGEMM_DEFAULT_UNROLL_M 2
951 #define CGEMM_DEFAULT_UNROLL_N 2
952 #define ZGEMM_DEFAULT_UNROLL_M 1
953 #define ZGEMM_DEFAULT_UNROLL_N 2
954 #define XGEMM_DEFAULT_UNROLL_M 1
955 #define XGEMM_DEFAULT_UNROLL_N 1
956 #else
957 #define SGEMM_DEFAULT_UNROLL_M 8
958 #define SGEMM_DEFAULT_UNROLL_N 2
959 #define DGEMM_DEFAULT_UNROLL_M 2
960 #define DGEMM_DEFAULT_UNROLL_N 2
961 #define QGEMM_DEFAULT_UNROLL_M 2
962 #define QGEMM_DEFAULT_UNROLL_N 2
963 #define CGEMM_DEFAULT_UNROLL_M 4
964 #define CGEMM_DEFAULT_UNROLL_N 1
965 #define ZGEMM_DEFAULT_UNROLL_M 1
966 #define ZGEMM_DEFAULT_UNROLL_N 1
967 #define XGEMM_DEFAULT_UNROLL_M 1
968 #define XGEMM_DEFAULT_UNROLL_N 1
969
970 #endif
971
972 #define SGEMM_DEFAULT_P sgemm_p
973 #define SGEMM_DEFAULT_Q 256
974 #define SGEMM_DEFAULT_R sgemm_r
975
976 #define DGEMM_DEFAULT_P dgemm_p
977 #define DGEMM_DEFAULT_Q 256
978 #define DGEMM_DEFAULT_R dgemm_r
979
980 #define QGEMM_DEFAULT_P qgemm_p
981 #define QGEMM_DEFAULT_Q 256
982 #define QGEMM_DEFAULT_R qgemm_r
983
984 #define CGEMM_DEFAULT_P cgemm_p
985 #define CGEMM_DEFAULT_Q 256
986 #define CGEMM_DEFAULT_R cgemm_r
987
988 #define ZGEMM_DEFAULT_P zgemm_p
989 #define ZGEMM_DEFAULT_Q 256
990 #define ZGEMM_DEFAULT_R zgemm_r
991
992 #define XGEMM_DEFAULT_P xgemm_p
993 #define XGEMM_DEFAULT_Q 256
994 #define XGEMM_DEFAULT_R xgemm_r
995
996 #define SYMV_P  4
997 #endif
998
999 #ifdef CORE_NORTHWOOD
1000
1001 #define SNUMOPT         4
1002 #define DNUMOPT         2
1003
1004 #define GEMM_DEFAULT_OFFSET_A      0
1005 #define GEMM_DEFAULT_OFFSET_B     32
1006
1007 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
1008
1009 #define SYMV_P  8
1010
1011 #define SGEMM_DEFAULT_UNROLL_M 8
1012 #define DGEMM_DEFAULT_UNROLL_M 4
1013 #define QGEMM_DEFAULT_UNROLL_M 2
1014 #define CGEMM_DEFAULT_UNROLL_M 4
1015 #define ZGEMM_DEFAULT_UNROLL_M 2
1016 #define XGEMM_DEFAULT_UNROLL_M 1
1017
1018 #define SGEMM_DEFAULT_UNROLL_N 2
1019 #define DGEMM_DEFAULT_UNROLL_N 2
1020 #define QGEMM_DEFAULT_UNROLL_N 2
1021 #define CGEMM_DEFAULT_UNROLL_N 1
1022 #define ZGEMM_DEFAULT_UNROLL_N 1
1023 #define XGEMM_DEFAULT_UNROLL_N 1
1024
1025 #define SGEMM_DEFAULT_P sgemm_p
1026 #define SGEMM_DEFAULT_R sgemm_r
1027
1028 #define DGEMM_DEFAULT_P dgemm_p
1029 #define DGEMM_DEFAULT_R dgemm_r
1030
1031 #define QGEMM_DEFAULT_P qgemm_p
1032 #define QGEMM_DEFAULT_R qgemm_r
1033
1034 #define CGEMM_DEFAULT_P cgemm_p
1035 #define CGEMM_DEFAULT_R cgemm_r
1036
1037 #define ZGEMM_DEFAULT_P zgemm_p
1038 #define ZGEMM_DEFAULT_R zgemm_r
1039
1040 #define XGEMM_DEFAULT_P xgemm_p
1041 #define XGEMM_DEFAULT_R xgemm_r
1042
1043 #define SGEMM_DEFAULT_Q 128
1044 #define DGEMM_DEFAULT_Q 128
1045 #define QGEMM_DEFAULT_Q 128
1046 #define CGEMM_DEFAULT_Q 128
1047 #define ZGEMM_DEFAULT_Q 128
1048 #define XGEMM_DEFAULT_Q 128
1049 #endif
1050
1051 #ifdef CORE_PRESCOTT
1052
1053 #define SNUMOPT         4
1054 #define DNUMOPT         2
1055
1056 #ifndef __64BIT__
1057 #define GEMM_DEFAULT_OFFSET_A    128
1058 #define GEMM_DEFAULT_OFFSET_B    192
1059 #else
1060 #define GEMM_DEFAULT_OFFSET_A      0
1061 #define GEMM_DEFAULT_OFFSET_B    256
1062 #endif
1063
1064 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
1065
1066 #define SYMV_P  8
1067
1068 #ifdef ARCH_X86
1069 #define SGEMM_DEFAULT_UNROLL_M 4
1070 #define DGEMM_DEFAULT_UNROLL_M 2
1071 #define QGEMM_DEFAULT_UNROLL_M 2
1072 #define CGEMM_DEFAULT_UNROLL_M 2
1073 #define ZGEMM_DEFAULT_UNROLL_M 1
1074 #define XGEMM_DEFAULT_UNROLL_M 1
1075 #else
1076 #define SGEMM_DEFAULT_UNROLL_M 8
1077 #define DGEMM_DEFAULT_UNROLL_M 4
1078 #define QGEMM_DEFAULT_UNROLL_M 2
1079 #define CGEMM_DEFAULT_UNROLL_M 4
1080 #define ZGEMM_DEFAULT_UNROLL_M 2
1081 #define XGEMM_DEFAULT_UNROLL_M 1
1082 #endif
1083
1084 #define SGEMM_DEFAULT_UNROLL_N 4
1085 #define DGEMM_DEFAULT_UNROLL_N 4
1086 #define QGEMM_DEFAULT_UNROLL_N 2
1087 #define CGEMM_DEFAULT_UNROLL_N 2
1088 #define ZGEMM_DEFAULT_UNROLL_N 2
1089 #define XGEMM_DEFAULT_UNROLL_N 1
1090
1091 #define SGEMM_DEFAULT_P sgemm_p
1092 #define SGEMM_DEFAULT_R sgemm_r
1093
1094 #define DGEMM_DEFAULT_P dgemm_p
1095 #define DGEMM_DEFAULT_R dgemm_r
1096
1097 #define QGEMM_DEFAULT_P qgemm_p
1098 #define QGEMM_DEFAULT_R qgemm_r
1099
1100 #define CGEMM_DEFAULT_P cgemm_p
1101 #define CGEMM_DEFAULT_R cgemm_r
1102
1103 #define ZGEMM_DEFAULT_P zgemm_p
1104 #define ZGEMM_DEFAULT_R zgemm_r
1105
1106 #define XGEMM_DEFAULT_P xgemm_p
1107 #define XGEMM_DEFAULT_R xgemm_r
1108
1109 #define SGEMM_DEFAULT_Q 128
1110 #define DGEMM_DEFAULT_Q 128
1111 #define QGEMM_DEFAULT_Q 128
1112 #define CGEMM_DEFAULT_Q 128
1113 #define ZGEMM_DEFAULT_Q 128
1114 #define XGEMM_DEFAULT_Q 128
1115 #endif
1116
1117 #ifdef CORE2
1118
1119 #define SNUMOPT         8
1120 #define DNUMOPT         4
1121
1122 #define GEMM_DEFAULT_OFFSET_A    448
1123 #define GEMM_DEFAULT_OFFSET_B    128
1124 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1125
1126 #define SYMV_P  8
1127
1128 #define SWITCH_RATIO    4
1129
1130 #ifdef ARCH_X86
1131 #define SGEMM_DEFAULT_UNROLL_M 8
1132 #define DGEMM_DEFAULT_UNROLL_M 4
1133 #define QGEMM_DEFAULT_UNROLL_M 2
1134 #define CGEMM_DEFAULT_UNROLL_M 4
1135 #define ZGEMM_DEFAULT_UNROLL_M 2
1136 #define XGEMM_DEFAULT_UNROLL_M 1
1137
1138 #define SGEMM_DEFAULT_UNROLL_N 2
1139 #define DGEMM_DEFAULT_UNROLL_N 2
1140 #define QGEMM_DEFAULT_UNROLL_N 2
1141 #define CGEMM_DEFAULT_UNROLL_N 1
1142 #define ZGEMM_DEFAULT_UNROLL_N 1
1143 #define XGEMM_DEFAULT_UNROLL_N 1
1144
1145 #define MASK(a, b) ((((a) + (b) - 1) / (b)) * (b))
1146
1147 #else
1148 #define SGEMM_DEFAULT_UNROLL_M 8
1149 #define DGEMM_DEFAULT_UNROLL_M 4
1150 #define QGEMM_DEFAULT_UNROLL_M 2
1151 #define CGEMM_DEFAULT_UNROLL_M 4
1152 #define ZGEMM_DEFAULT_UNROLL_M 2
1153 #define XGEMM_DEFAULT_UNROLL_M 1
1154
1155 #define SGEMM_DEFAULT_UNROLL_N 4
1156 #define DGEMM_DEFAULT_UNROLL_N 4
1157 #define QGEMM_DEFAULT_UNROLL_N 2
1158 #define CGEMM_DEFAULT_UNROLL_N 2
1159 #define ZGEMM_DEFAULT_UNROLL_N 2
1160 #define XGEMM_DEFAULT_UNROLL_N 1
1161 #endif
1162
1163 #define SGEMM_DEFAULT_P sgemm_p
1164 #define SGEMM_DEFAULT_R sgemm_r
1165
1166 #define DGEMM_DEFAULT_P dgemm_p
1167 #define DGEMM_DEFAULT_R dgemm_r
1168
1169 #define QGEMM_DEFAULT_P qgemm_p
1170 #define QGEMM_DEFAULT_R qgemm_r
1171
1172 #define CGEMM_DEFAULT_P cgemm_p
1173 #define CGEMM_DEFAULT_R cgemm_r
1174
1175 #define ZGEMM_DEFAULT_P zgemm_p
1176 #define ZGEMM_DEFAULT_R zgemm_r
1177
1178 #define XGEMM_DEFAULT_P xgemm_p
1179 #define XGEMM_DEFAULT_R xgemm_r
1180
1181 #define SGEMM_DEFAULT_Q 256
1182 #define DGEMM_DEFAULT_Q 256
1183 #define QGEMM_DEFAULT_Q 256
1184 #define CGEMM_DEFAULT_Q 256
1185 #define ZGEMM_DEFAULT_Q 256
1186 #define XGEMM_DEFAULT_Q 256
1187
1188 #endif
1189
1190 #ifdef PENRYN
1191
1192 #define SNUMOPT         8
1193 #define DNUMOPT         4
1194
1195 #define GEMM_DEFAULT_OFFSET_A   128
1196 #define GEMM_DEFAULT_OFFSET_B     0
1197 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1198
1199 #define SYMV_P  8
1200
1201 #define SWITCH_RATIO    4
1202
1203 #ifdef ARCH_X86
1204 #define SGEMM_DEFAULT_UNROLL_M 4
1205 #define DGEMM_DEFAULT_UNROLL_M 2
1206 #define QGEMM_DEFAULT_UNROLL_M 2
1207 #define CGEMM_DEFAULT_UNROLL_M 2
1208 #define ZGEMM_DEFAULT_UNROLL_M 1
1209 #define XGEMM_DEFAULT_UNROLL_M 1
1210
1211 #define SGEMM_DEFAULT_UNROLL_N 4
1212 #define DGEMM_DEFAULT_UNROLL_N 4
1213 #define QGEMM_DEFAULT_UNROLL_N 2
1214 #define CGEMM_DEFAULT_UNROLL_N 2
1215 #define ZGEMM_DEFAULT_UNROLL_N 2
1216 #define XGEMM_DEFAULT_UNROLL_N 1
1217 #else
1218 #define SGEMM_DEFAULT_UNROLL_M 8
1219 #define DGEMM_DEFAULT_UNROLL_M 4
1220 #define QGEMM_DEFAULT_UNROLL_M 2
1221 #define CGEMM_DEFAULT_UNROLL_M 4
1222 #define ZGEMM_DEFAULT_UNROLL_M 2
1223 #define XGEMM_DEFAULT_UNROLL_M 1
1224
1225 #define SGEMM_DEFAULT_UNROLL_N 4
1226 #define DGEMM_DEFAULT_UNROLL_N 4
1227 #define QGEMM_DEFAULT_UNROLL_N 2
1228 #define CGEMM_DEFAULT_UNROLL_N 2
1229 #define ZGEMM_DEFAULT_UNROLL_N 2
1230 #define XGEMM_DEFAULT_UNROLL_N 1
1231 #endif
1232
1233 #define SGEMM_DEFAULT_P sgemm_p
1234 #define SGEMM_DEFAULT_R sgemm_r
1235
1236 #define DGEMM_DEFAULT_P dgemm_p
1237 #define DGEMM_DEFAULT_R dgemm_r
1238
1239 #define QGEMM_DEFAULT_P qgemm_p
1240 #define QGEMM_DEFAULT_R qgemm_r
1241
1242 #define CGEMM_DEFAULT_P cgemm_p
1243 #define CGEMM_DEFAULT_R cgemm_r
1244
1245 #define ZGEMM_DEFAULT_P zgemm_p
1246 #define ZGEMM_DEFAULT_R zgemm_r
1247
1248 #define XGEMM_DEFAULT_P xgemm_p
1249 #define XGEMM_DEFAULT_R xgemm_r
1250
1251 #define SGEMM_DEFAULT_Q 512
1252 #define DGEMM_DEFAULT_Q 256
1253 #define QGEMM_DEFAULT_Q 128
1254 #define CGEMM_DEFAULT_Q 512
1255 #define ZGEMM_DEFAULT_Q 256
1256 #define XGEMM_DEFAULT_Q 128
1257
1258 #define GETRF_FACTOR 0.75
1259 #endif
1260
1261 #ifdef DUNNINGTON
1262
1263 #define SNUMOPT         8
1264 #define DNUMOPT         4
1265
1266 #define GEMM_DEFAULT_OFFSET_A   128
1267 #define GEMM_DEFAULT_OFFSET_B     0
1268 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1269
1270 #define SYMV_P  8
1271
1272 #define SWITCH_RATIO    4
1273
1274 #ifdef ARCH_X86
1275 #define SGEMM_DEFAULT_UNROLL_M 4
1276 #define DGEMM_DEFAULT_UNROLL_M 2
1277 #define QGEMM_DEFAULT_UNROLL_M 2
1278 #define CGEMM_DEFAULT_UNROLL_M 2
1279 #define ZGEMM_DEFAULT_UNROLL_M 1
1280 #define XGEMM_DEFAULT_UNROLL_M 1
1281
1282 #define SGEMM_DEFAULT_UNROLL_N 4
1283 #define DGEMM_DEFAULT_UNROLL_N 4
1284 #define QGEMM_DEFAULT_UNROLL_N 2
1285 #define CGEMM_DEFAULT_UNROLL_N 2
1286 #define ZGEMM_DEFAULT_UNROLL_N 2
1287 #define XGEMM_DEFAULT_UNROLL_N 1
1288 #else
1289 #define SGEMM_DEFAULT_UNROLL_M 8
1290 #define DGEMM_DEFAULT_UNROLL_M 4
1291 #define QGEMM_DEFAULT_UNROLL_M 2
1292 #define CGEMM_DEFAULT_UNROLL_M 4
1293 #define ZGEMM_DEFAULT_UNROLL_M 2
1294 #define XGEMM_DEFAULT_UNROLL_M 1
1295
1296 #define SGEMM_DEFAULT_UNROLL_N 4
1297 #define DGEMM_DEFAULT_UNROLL_N 4
1298 #define QGEMM_DEFAULT_UNROLL_N 2
1299 #define CGEMM_DEFAULT_UNROLL_N 2
1300 #define ZGEMM_DEFAULT_UNROLL_N 2
1301 #define XGEMM_DEFAULT_UNROLL_N 1
1302 #endif
1303
1304 #define SGEMM_DEFAULT_P sgemm_p
1305 #define SGEMM_DEFAULT_R sgemm_r
1306
1307 #define DGEMM_DEFAULT_P dgemm_p
1308 #define DGEMM_DEFAULT_R dgemm_r
1309
1310 #define QGEMM_DEFAULT_P qgemm_p
1311 #define QGEMM_DEFAULT_R qgemm_r
1312
1313 #define CGEMM_DEFAULT_P cgemm_p
1314 #define CGEMM_DEFAULT_R cgemm_r
1315
1316 #define ZGEMM_DEFAULT_P zgemm_p
1317 #define ZGEMM_DEFAULT_R zgemm_r
1318
1319 #define XGEMM_DEFAULT_P xgemm_p
1320 #define XGEMM_DEFAULT_R xgemm_r
1321
1322 #define SGEMM_DEFAULT_Q 768
1323 #define DGEMM_DEFAULT_Q 384
1324 #define QGEMM_DEFAULT_Q 192
1325 #define CGEMM_DEFAULT_Q 768
1326 #define ZGEMM_DEFAULT_Q 384
1327 #define XGEMM_DEFAULT_Q 192
1328
1329 #define GETRF_FACTOR 0.75
1330 #define GEMM_THREAD gemm_thread_mn
1331 #endif
1332
1333 #ifdef NEHALEM
1334
1335 #define SNUMOPT         8
1336 #define DNUMOPT         4
1337
1338 #define GEMM_DEFAULT_OFFSET_A    32
1339 #define GEMM_DEFAULT_OFFSET_B     0
1340 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1341
1342 #define SYMV_P  8
1343
1344 #define SWITCH_RATIO    4
1345
1346 #ifdef ARCH_X86
1347 #define SGEMM_DEFAULT_UNROLL_M 4
1348 #define DGEMM_DEFAULT_UNROLL_M 2
1349 #define QGEMM_DEFAULT_UNROLL_M 2
1350 #define CGEMM_DEFAULT_UNROLL_M 2
1351 #define ZGEMM_DEFAULT_UNROLL_M 1
1352 #define XGEMM_DEFAULT_UNROLL_M 1
1353
1354 #define SGEMM_DEFAULT_UNROLL_N 4
1355 #define DGEMM_DEFAULT_UNROLL_N 4
1356 #define QGEMM_DEFAULT_UNROLL_N 2
1357 #define CGEMM_DEFAULT_UNROLL_N 2
1358 #define ZGEMM_DEFAULT_UNROLL_N 2
1359 #define XGEMM_DEFAULT_UNROLL_N 1
1360 #else
1361 #define SGEMM_DEFAULT_UNROLL_M 4
1362 #define DGEMM_DEFAULT_UNROLL_M 2
1363 #define QGEMM_DEFAULT_UNROLL_M 2
1364 #define CGEMM_DEFAULT_UNROLL_M 2
1365 #define ZGEMM_DEFAULT_UNROLL_M 1
1366 #define XGEMM_DEFAULT_UNROLL_M 1
1367
1368 #define SGEMM_DEFAULT_UNROLL_N 8
1369 #define DGEMM_DEFAULT_UNROLL_N 8
1370 #define QGEMM_DEFAULT_UNROLL_N 2
1371 #define CGEMM_DEFAULT_UNROLL_N 4
1372 #define ZGEMM_DEFAULT_UNROLL_N 4
1373 #define XGEMM_DEFAULT_UNROLL_N 1
1374 #endif
1375
1376 #define SGEMM_DEFAULT_P 504
1377 #define SGEMM_DEFAULT_R sgemm_r
1378
1379 #define DGEMM_DEFAULT_P 504
1380 #define DGEMM_DEFAULT_R dgemm_r
1381
1382 #define QGEMM_DEFAULT_P 504
1383 #define QGEMM_DEFAULT_R qgemm_r
1384
1385 #define CGEMM_DEFAULT_P 252
1386 #define CGEMM_DEFAULT_R cgemm_r
1387
1388 #define ZGEMM_DEFAULT_P 252
1389 #define ZGEMM_DEFAULT_R zgemm_r
1390
1391 #define XGEMM_DEFAULT_P 252
1392 #define XGEMM_DEFAULT_R xgemm_r
1393
1394 #define SGEMM_DEFAULT_Q 512
1395 #define DGEMM_DEFAULT_Q 256
1396 #define QGEMM_DEFAULT_Q 128
1397 #define CGEMM_DEFAULT_Q 512
1398 #define ZGEMM_DEFAULT_Q 256
1399 #define XGEMM_DEFAULT_Q 128
1400
1401 #define GETRF_FACTOR 0.72
1402
1403 #endif
1404
1405
1406 #ifdef SANDYBRIDGE
1407
1408 #define SNUMOPT         8
1409 #define DNUMOPT         4
1410
1411 #define GEMM_DEFAULT_OFFSET_A     0
1412 #define GEMM_DEFAULT_OFFSET_B     0
1413 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1414
1415 #define SYMV_P  8
1416
1417 #define SWITCH_RATIO    4
1418
1419 #ifdef ARCH_X86
1420 #define SGEMM_DEFAULT_UNROLL_M 4
1421 #define DGEMM_DEFAULT_UNROLL_M 2
1422 #define QGEMM_DEFAULT_UNROLL_M 2
1423 #define CGEMM_DEFAULT_UNROLL_M 2
1424 #define ZGEMM_DEFAULT_UNROLL_M 1
1425 #define XGEMM_DEFAULT_UNROLL_M 1
1426
1427 #define SGEMM_DEFAULT_UNROLL_N 4
1428 #define DGEMM_DEFAULT_UNROLL_N 4
1429 #define QGEMM_DEFAULT_UNROLL_N 2
1430 #define CGEMM_DEFAULT_UNROLL_N 2
1431 #define ZGEMM_DEFAULT_UNROLL_N 2
1432 #define XGEMM_DEFAULT_UNROLL_N 1
1433 #else
1434 #define SGEMM_DEFAULT_UNROLL_M 16
1435 #define DGEMM_DEFAULT_UNROLL_M 8
1436 #define QGEMM_DEFAULT_UNROLL_M 2
1437 #define CGEMM_DEFAULT_UNROLL_M 8
1438 #define ZGEMM_DEFAULT_UNROLL_M 1
1439 #define XGEMM_DEFAULT_UNROLL_M 1
1440
1441 #define SGEMM_DEFAULT_UNROLL_N 4
1442 #define DGEMM_DEFAULT_UNROLL_N 4
1443 #define QGEMM_DEFAULT_UNROLL_N 2
1444 #define CGEMM_DEFAULT_UNROLL_N 2
1445 #define ZGEMM_DEFAULT_UNROLL_N 4
1446 #define XGEMM_DEFAULT_UNROLL_N 1
1447 #endif
1448
1449 #define SGEMM_DEFAULT_P 768
1450 #define SGEMM_DEFAULT_R sgemm_r
1451 //#define SGEMM_DEFAULT_R 1024
1452
1453 #define DGEMM_DEFAULT_P 512
1454 #define DGEMM_DEFAULT_R dgemm_r
1455 //#define DGEMM_DEFAULT_R 1024
1456
1457 #define QGEMM_DEFAULT_P 504
1458 #define QGEMM_DEFAULT_R qgemm_r
1459
1460 #define CGEMM_DEFAULT_P 768
1461 #define CGEMM_DEFAULT_R cgemm_r
1462 //#define CGEMM_DEFAULT_R 1024
1463
1464 #define ZGEMM_DEFAULT_P 512
1465 #define ZGEMM_DEFAULT_R zgemm_r
1466 //#define ZGEMM_DEFAULT_R 1024
1467
1468 #define XGEMM_DEFAULT_P 252
1469 #define XGEMM_DEFAULT_R xgemm_r
1470
1471 #define SGEMM_DEFAULT_Q 384
1472 #define DGEMM_DEFAULT_Q 256
1473 #define QGEMM_DEFAULT_Q 128
1474 #define CGEMM_DEFAULT_Q 512
1475 #define ZGEMM_DEFAULT_Q 192
1476 #define XGEMM_DEFAULT_Q 128
1477
1478 #define CGEMM3M_DEFAULT_UNROLL_N 8
1479 #define CGEMM3M_DEFAULT_UNROLL_M 4
1480 #define ZGEMM3M_DEFAULT_UNROLL_N 8
1481 #define ZGEMM3M_DEFAULT_UNROLL_M 2
1482
1483 #define CGEMM3M_DEFAULT_P 448
1484 #define ZGEMM3M_DEFAULT_P 224
1485 #define XGEMM3M_DEFAULT_P 112
1486 #define CGEMM3M_DEFAULT_Q 224
1487 #define ZGEMM3M_DEFAULT_Q 224
1488 #define XGEMM3M_DEFAULT_Q 224
1489 #define CGEMM3M_DEFAULT_R 12288
1490 #define ZGEMM3M_DEFAULT_R 12288
1491 #define XGEMM3M_DEFAULT_R 12288
1492
1493
1494
1495 #define GETRF_FACTOR 0.72
1496
1497 #endif
1498
1499 #ifdef HASWELL
1500
1501 #define SNUMOPT         16
1502 #define DNUMOPT         8
1503
1504 #define GEMM_DEFAULT_OFFSET_A     0
1505 #define GEMM_DEFAULT_OFFSET_B     0
1506 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1507
1508 #define SYMV_P  8
1509
1510 #define SWITCH_RATIO    32
1511 #define GEMM_PREFERED_SIZE      16
1512
1513 #ifdef ARCH_X86
1514
1515 #define SGEMM_DEFAULT_UNROLL_M 4
1516 #define DGEMM_DEFAULT_UNROLL_M 2
1517 #define QGEMM_DEFAULT_UNROLL_M 2
1518 #define CGEMM_DEFAULT_UNROLL_M 2
1519 #define ZGEMM_DEFAULT_UNROLL_M 1
1520 #define XGEMM_DEFAULT_UNROLL_M 1
1521
1522 #define SGEMM_DEFAULT_UNROLL_N 4
1523 #define DGEMM_DEFAULT_UNROLL_N 4
1524 #define QGEMM_DEFAULT_UNROLL_N 2
1525 #define CGEMM_DEFAULT_UNROLL_N 2
1526 #define ZGEMM_DEFAULT_UNROLL_N 2
1527 #define XGEMM_DEFAULT_UNROLL_N 1
1528
1529 #else
1530
1531 #define SGEMM_DEFAULT_UNROLL_M 16
1532 #define DGEMM_DEFAULT_UNROLL_M 4
1533 #define QGEMM_DEFAULT_UNROLL_M 2
1534 #define CGEMM_DEFAULT_UNROLL_M 8
1535 #define ZGEMM_DEFAULT_UNROLL_M 4
1536 #define XGEMM_DEFAULT_UNROLL_M 1
1537
1538 #define SGEMM_DEFAULT_UNROLL_N 4
1539 #define DGEMM_DEFAULT_UNROLL_N 8
1540 #define QGEMM_DEFAULT_UNROLL_N 2
1541 #define CGEMM_DEFAULT_UNROLL_N 2
1542 #define ZGEMM_DEFAULT_UNROLL_N 2
1543 #define XGEMM_DEFAULT_UNROLL_N 1
1544
1545 #define SGEMM_DEFAULT_UNROLL_MN 32
1546 #define DGEMM_DEFAULT_UNROLL_MN 32
1547 #endif
1548
1549 #ifdef ARCH_X86
1550
1551 #define SGEMM_DEFAULT_P 512
1552 #define SGEMM_DEFAULT_R sgemm_r
1553 #define DGEMM_DEFAULT_P 512
1554 #define DGEMM_DEFAULT_R dgemm_r
1555 #define QGEMM_DEFAULT_P 504
1556 #define QGEMM_DEFAULT_R qgemm_r
1557 #define CGEMM_DEFAULT_P 128
1558 #define CGEMM_DEFAULT_R 1024
1559 #define ZGEMM_DEFAULT_P 512
1560 #define ZGEMM_DEFAULT_R zgemm_r
1561 #define XGEMM_DEFAULT_P 252
1562 #define XGEMM_DEFAULT_R xgemm_r
1563 #define SGEMM_DEFAULT_Q 256
1564 #define DGEMM_DEFAULT_Q 256
1565 #define QGEMM_DEFAULT_Q 128
1566 #define CGEMM_DEFAULT_Q 256
1567 #define ZGEMM_DEFAULT_Q 192
1568 #define XGEMM_DEFAULT_Q 128
1569
1570 #else
1571
1572 #define SGEMM_DEFAULT_P 768
1573 #define DGEMM_DEFAULT_P 512
1574 #define CGEMM_DEFAULT_P 384
1575 #define ZGEMM_DEFAULT_P 256
1576
1577 #ifdef WINDOWS_ABI
1578 #define SGEMM_DEFAULT_Q 320
1579 #define DGEMM_DEFAULT_Q 128
1580 #else
1581 #define SGEMM_DEFAULT_Q 384
1582 #define DGEMM_DEFAULT_Q 256
1583 #endif
1584 #define CGEMM_DEFAULT_Q 192
1585 #define ZGEMM_DEFAULT_Q 128
1586
1587 #define SGEMM_DEFAULT_R sgemm_r
1588 #define DGEMM_DEFAULT_R 13824
1589 #define CGEMM_DEFAULT_R cgemm_r
1590 #define ZGEMM_DEFAULT_R zgemm_r
1591
1592 #define QGEMM_DEFAULT_Q 128
1593 #define QGEMM_DEFAULT_P 504
1594 #define QGEMM_DEFAULT_R qgemm_r
1595 #define XGEMM_DEFAULT_P 252
1596 #define XGEMM_DEFAULT_R xgemm_r
1597 #define XGEMM_DEFAULT_Q 128
1598
1599 #define CGEMM3M_DEFAULT_UNROLL_N 8
1600 #define CGEMM3M_DEFAULT_UNROLL_M 4
1601 #define ZGEMM3M_DEFAULT_UNROLL_N 8
1602 #define ZGEMM3M_DEFAULT_UNROLL_M 2
1603
1604 #define CGEMM3M_DEFAULT_P 448
1605 #define ZGEMM3M_DEFAULT_P 224
1606 #define XGEMM3M_DEFAULT_P 112
1607 #define CGEMM3M_DEFAULT_Q 224
1608 #define ZGEMM3M_DEFAULT_Q 224
1609 #define XGEMM3M_DEFAULT_Q 224
1610 #define CGEMM3M_DEFAULT_R 12288
1611 #define ZGEMM3M_DEFAULT_R 12288
1612 #define XGEMM3M_DEFAULT_R 12288
1613
1614 #endif
1615
1616
1617 #endif
1618
1619 #ifdef SKYLAKEX
1620
1621 #define SNUMOPT         16
1622 #define DNUMOPT         8
1623
1624 #define GEMM_DEFAULT_OFFSET_A     0
1625 #define GEMM_DEFAULT_OFFSET_B     0
1626 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1627
1628 #define SYMV_P  8
1629
1630 #define SWITCH_RATIO    32
1631 #define GEMM_PREFERED_SIZE      32
1632 #define USE_SGEMM_KERNEL_DIRECT 1
1633
1634 #ifdef ARCH_X86
1635
1636 #define SGEMM_DEFAULT_UNROLL_M 4
1637 #define DGEMM_DEFAULT_UNROLL_M 2
1638 #define QGEMM_DEFAULT_UNROLL_M 2
1639 #define CGEMM_DEFAULT_UNROLL_M 2
1640 #define ZGEMM_DEFAULT_UNROLL_M 1
1641 #define XGEMM_DEFAULT_UNROLL_M 1
1642
1643 #define SGEMM_DEFAULT_UNROLL_N 4
1644 #define DGEMM_DEFAULT_UNROLL_N 4
1645 #define QGEMM_DEFAULT_UNROLL_N 2
1646 #define CGEMM_DEFAULT_UNROLL_N 2
1647 #define ZGEMM_DEFAULT_UNROLL_N 2
1648 #define XGEMM_DEFAULT_UNROLL_N 1
1649
1650 #else
1651
1652 #define SGEMM_DEFAULT_UNROLL_M 16
1653 #define DGEMM_DEFAULT_UNROLL_M 4
1654 #define QGEMM_DEFAULT_UNROLL_M 2
1655 #define CGEMM_DEFAULT_UNROLL_M 8
1656 #define ZGEMM_DEFAULT_UNROLL_M 4
1657 #define XGEMM_DEFAULT_UNROLL_M 1
1658
1659 #define SGEMM_DEFAULT_UNROLL_N 4
1660 #define DGEMM_DEFAULT_UNROLL_N 8
1661 #define QGEMM_DEFAULT_UNROLL_N 2
1662 #define CGEMM_DEFAULT_UNROLL_N 2
1663 #define ZGEMM_DEFAULT_UNROLL_N 2
1664 #define XGEMM_DEFAULT_UNROLL_N 1
1665
1666 #define SGEMM_DEFAULT_UNROLL_MN 32
1667 #define DGEMM_DEFAULT_UNROLL_MN 32
1668 #endif
1669
1670 #ifdef ARCH_X86
1671
1672 #define SGEMM_DEFAULT_P 512
1673 #define SGEMM_DEFAULT_R sgemm_r
1674 #define DGEMM_DEFAULT_P 512
1675 #define DGEMM_DEFAULT_R dgemm_r
1676 #define QGEMM_DEFAULT_P 504
1677 #define QGEMM_DEFAULT_R qgemm_r
1678 #define CGEMM_DEFAULT_P 128
1679 #define CGEMM_DEFAULT_R 1024
1680 #define ZGEMM_DEFAULT_P 512
1681 #define ZGEMM_DEFAULT_R zgemm_r
1682 #define XGEMM_DEFAULT_P 252
1683 #define XGEMM_DEFAULT_R xgemm_r
1684 #define SGEMM_DEFAULT_Q 256
1685 #define DGEMM_DEFAULT_Q 256
1686 #define QGEMM_DEFAULT_Q 128
1687 #define CGEMM_DEFAULT_Q 256
1688 #define ZGEMM_DEFAULT_Q 192
1689 #define XGEMM_DEFAULT_Q 128
1690
1691 #else
1692
1693 #define SGEMM_DEFAULT_P 768
1694 #define DGEMM_DEFAULT_P 512
1695 #define CGEMM_DEFAULT_P 384
1696 #define ZGEMM_DEFAULT_P 256
1697
1698 #ifdef WINDOWS_ABI
1699 #define SGEMM_DEFAULT_Q 320
1700 #define DGEMM_DEFAULT_Q 128
1701 #else
1702 #define SGEMM_DEFAULT_Q 384
1703 #define DGEMM_DEFAULT_Q 256
1704 #endif
1705 #define CGEMM_DEFAULT_Q 192
1706 #define ZGEMM_DEFAULT_Q 128
1707
1708 #define SGEMM_DEFAULT_R sgemm_r
1709 #define DGEMM_DEFAULT_R 13824
1710 #define CGEMM_DEFAULT_R cgemm_r
1711 #define ZGEMM_DEFAULT_R zgemm_r
1712
1713 #define QGEMM_DEFAULT_Q 128
1714 #define QGEMM_DEFAULT_P 504
1715 #define QGEMM_DEFAULT_R qgemm_r
1716 #define XGEMM_DEFAULT_P 252
1717 #define XGEMM_DEFAULT_R xgemm_r
1718 #define XGEMM_DEFAULT_Q 128
1719
1720 #define CGEMM3M_DEFAULT_UNROLL_N 8
1721 #define CGEMM3M_DEFAULT_UNROLL_M 4
1722 #define ZGEMM3M_DEFAULT_UNROLL_N 8
1723 #define ZGEMM3M_DEFAULT_UNROLL_M 2
1724
1725 #define CGEMM3M_DEFAULT_P 448
1726 #define ZGEMM3M_DEFAULT_P 224
1727 #define XGEMM3M_DEFAULT_P 112
1728 #define CGEMM3M_DEFAULT_Q 224
1729 #define ZGEMM3M_DEFAULT_Q 224
1730 #define XGEMM3M_DEFAULT_Q 224
1731 #define CGEMM3M_DEFAULT_R 12288
1732 #define ZGEMM3M_DEFAULT_R 12288
1733 #define XGEMM3M_DEFAULT_R 12288
1734
1735 #endif
1736
1737
1738 #endif
1739
1740
1741
1742 #ifdef ATOM
1743
1744 #define SNUMOPT         2
1745 #define DNUMOPT         1
1746
1747 #define GEMM_DEFAULT_OFFSET_A     64
1748 #define GEMM_DEFAULT_OFFSET_B      0
1749 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
1750
1751 #define SYMV_P  8
1752
1753 #ifdef ARCH_X86
1754 #define SGEMM_DEFAULT_UNROLL_M 4
1755 #define DGEMM_DEFAULT_UNROLL_M 2
1756 #define QGEMM_DEFAULT_UNROLL_M 2
1757 #define CGEMM_DEFAULT_UNROLL_M 2
1758 #define ZGEMM_DEFAULT_UNROLL_M 1
1759 #define XGEMM_DEFAULT_UNROLL_M 1
1760 #else
1761 #define SGEMM_DEFAULT_UNROLL_M 8
1762 #define DGEMM_DEFAULT_UNROLL_M 4
1763 #define QGEMM_DEFAULT_UNROLL_M 2
1764 #define CGEMM_DEFAULT_UNROLL_M 4
1765 #define ZGEMM_DEFAULT_UNROLL_M 2
1766 #define XGEMM_DEFAULT_UNROLL_M 1
1767 #endif
1768
1769 #define SGEMM_DEFAULT_UNROLL_N 4
1770 #define DGEMM_DEFAULT_UNROLL_N 2
1771 #define QGEMM_DEFAULT_UNROLL_N 2
1772 #define CGEMM_DEFAULT_UNROLL_N 2
1773 #define ZGEMM_DEFAULT_UNROLL_N 1
1774 #define XGEMM_DEFAULT_UNROLL_N 1
1775
1776 #define SGEMM_DEFAULT_P sgemm_p
1777 #define SGEMM_DEFAULT_R sgemm_r
1778
1779 #define DGEMM_DEFAULT_P dgemm_p
1780 #define DGEMM_DEFAULT_R dgemm_r
1781
1782 #define QGEMM_DEFAULT_P qgemm_p
1783 #define QGEMM_DEFAULT_R qgemm_r
1784
1785 #define CGEMM_DEFAULT_P cgemm_p
1786 #define CGEMM_DEFAULT_R cgemm_r
1787
1788 #define ZGEMM_DEFAULT_P zgemm_p
1789 #define ZGEMM_DEFAULT_R zgemm_r
1790
1791 #define XGEMM_DEFAULT_P xgemm_p
1792 #define XGEMM_DEFAULT_R xgemm_r
1793
1794 #define SGEMM_DEFAULT_Q 256
1795 #define DGEMM_DEFAULT_Q 256
1796 #define QGEMM_DEFAULT_Q 256
1797 #define CGEMM_DEFAULT_Q 256
1798 #define ZGEMM_DEFAULT_Q 256
1799 #define XGEMM_DEFAULT_Q 256
1800
1801 #endif
1802
1803
1804 #ifdef ITANIUM2
1805
1806 #define SNUMOPT         4
1807 #define DNUMOPT         4
1808
1809 #define GEMM_DEFAULT_OFFSET_A 0
1810 #define GEMM_DEFAULT_OFFSET_B 128
1811 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1812
1813 #define SGEMM_DEFAULT_UNROLL_M 8
1814 #define SGEMM_DEFAULT_UNROLL_N 8
1815 #define DGEMM_DEFAULT_UNROLL_M 8
1816 #define DGEMM_DEFAULT_UNROLL_N 8
1817 #define QGEMM_DEFAULT_UNROLL_M 8
1818 #define QGEMM_DEFAULT_UNROLL_N 8
1819 #define CGEMM_DEFAULT_UNROLL_M 4
1820 #define CGEMM_DEFAULT_UNROLL_N 4
1821 #define ZGEMM_DEFAULT_UNROLL_M 4
1822 #define ZGEMM_DEFAULT_UNROLL_N 4
1823 #define XGEMM_DEFAULT_UNROLL_M 4
1824 #define XGEMM_DEFAULT_UNROLL_N 4
1825
1826 #define SGEMM_DEFAULT_P sgemm_p
1827 #define DGEMM_DEFAULT_P dgemm_p
1828 #define QGEMM_DEFAULT_P qgemm_p
1829 #define CGEMM_DEFAULT_P cgemm_p
1830 #define ZGEMM_DEFAULT_P zgemm_p
1831 #define XGEMM_DEFAULT_P xgemm_p
1832
1833 #define SGEMM_DEFAULT_Q 1024
1834 #define DGEMM_DEFAULT_Q 1024
1835 #define QGEMM_DEFAULT_Q 1024
1836 #define CGEMM_DEFAULT_Q 1024
1837 #define ZGEMM_DEFAULT_Q 1024
1838 #define XGEMM_DEFAULT_Q 1024
1839
1840 #define SGEMM_DEFAULT_R sgemm_r
1841 #define DGEMM_DEFAULT_R dgemm_r
1842 #define QGEMM_DEFAULT_R qgemm_r
1843 #define CGEMM_DEFAULT_R cgemm_r
1844 #define ZGEMM_DEFAULT_R zgemm_r
1845 #define XGEMM_DEFAULT_R xgemm_r
1846
1847 #define SYMV_P   16
1848
1849 #define GETRF_FACTOR 0.65
1850
1851 #endif
1852
1853 #if defined(EV4) || defined(EV5) || defined(EV6)
1854
1855 #ifdef EV4
1856 #define SNUMOPT         1
1857 #define DNUMOPT         1
1858 #else
1859 #define SNUMOPT         2
1860 #define DNUMOPT         2
1861 #endif
1862
1863 #define GEMM_DEFAULT_OFFSET_A 512
1864 #define GEMM_DEFAULT_OFFSET_B 512
1865 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
1866
1867 #define SGEMM_DEFAULT_UNROLL_M 4
1868 #define SGEMM_DEFAULT_UNROLL_N 4
1869 #define DGEMM_DEFAULT_UNROLL_M 4
1870 #define DGEMM_DEFAULT_UNROLL_N 4
1871 #define CGEMM_DEFAULT_UNROLL_M 2
1872 #define CGEMM_DEFAULT_UNROLL_N 2
1873 #define ZGEMM_DEFAULT_UNROLL_M 2
1874 #define ZGEMM_DEFAULT_UNROLL_N 2
1875
1876 #define SYMV_P   8
1877
1878 #ifdef EV4
1879 #define SGEMM_DEFAULT_P  32
1880 #define SGEMM_DEFAULT_Q 112
1881 #define SGEMM_DEFAULT_R 256
1882
1883 #define DGEMM_DEFAULT_P  32
1884 #define DGEMM_DEFAULT_Q  56
1885 #define DGEMM_DEFAULT_R 256
1886
1887 #define CGEMM_DEFAULT_P  32
1888 #define CGEMM_DEFAULT_Q  64
1889 #define CGEMM_DEFAULT_R 240
1890
1891 #define ZGEMM_DEFAULT_P  32
1892 #define ZGEMM_DEFAULT_Q  32
1893 #define ZGEMM_DEFAULT_R 240
1894 #endif
1895
1896 #ifdef EV5
1897 #define SGEMM_DEFAULT_P  64
1898 #define SGEMM_DEFAULT_Q 256
1899
1900 #define DGEMM_DEFAULT_P  64
1901 #define DGEMM_DEFAULT_Q 128
1902
1903 #define CGEMM_DEFAULT_P  64
1904 #define CGEMM_DEFAULT_Q 128
1905
1906 #define ZGEMM_DEFAULT_P  64
1907 #define ZGEMM_DEFAULT_Q  64
1908 #endif
1909
1910 #ifdef EV6
1911 #define SGEMM_DEFAULT_P 256
1912 #define SGEMM_DEFAULT_Q 512
1913
1914 #define DGEMM_DEFAULT_P 256
1915 #define DGEMM_DEFAULT_Q 256
1916
1917 #define CGEMM_DEFAULT_P 256
1918 #define CGEMM_DEFAULT_Q 256
1919
1920 #define ZGEMM_DEFAULT_P 128
1921 #define ZGEMM_DEFAULT_Q 256
1922 #endif
1923
1924 #endif
1925
1926 #ifdef CELL
1927
1928 #define SNUMOPT         2
1929 #define DNUMOPT         2
1930
1931 #define GEMM_DEFAULT_OFFSET_A 0
1932 #define GEMM_DEFAULT_OFFSET_B 8192
1933 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
1934
1935 #define SGEMM_DEFAULT_UNROLL_M 16
1936 #define SGEMM_DEFAULT_UNROLL_N 4
1937 #define DGEMM_DEFAULT_UNROLL_M 4
1938 #define DGEMM_DEFAULT_UNROLL_N 4
1939 #define CGEMM_DEFAULT_UNROLL_M 8
1940 #define CGEMM_DEFAULT_UNROLL_N 2
1941 #define ZGEMM_DEFAULT_UNROLL_M 2
1942 #define ZGEMM_DEFAULT_UNROLL_N 2
1943
1944 #define SGEMM_DEFAULT_P 128
1945 #define DGEMM_DEFAULT_P 128
1946 #define CGEMM_DEFAULT_P 128
1947 #define ZGEMM_DEFAULT_P 128
1948
1949 #define SGEMM_DEFAULT_Q  512
1950 #define DGEMM_DEFAULT_Q  256
1951 #define CGEMM_DEFAULT_Q  256
1952 #define ZGEMM_DEFAULT_Q  128
1953
1954 #define SYMV_P   4
1955 #endif
1956
1957 #ifdef PPCG4
1958 #define GEMM_DEFAULT_OFFSET_A    0
1959 #define GEMM_DEFAULT_OFFSET_B 1024
1960 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
1961
1962 #define SGEMM_DEFAULT_UNROLL_M 16
1963 #define SGEMM_DEFAULT_UNROLL_N 4
1964 #define DGEMM_DEFAULT_UNROLL_M 4
1965 #define DGEMM_DEFAULT_UNROLL_N 4
1966 #define CGEMM_DEFAULT_UNROLL_M 8
1967 #define CGEMM_DEFAULT_UNROLL_N 2
1968 #define ZGEMM_DEFAULT_UNROLL_M 2
1969 #define ZGEMM_DEFAULT_UNROLL_N 2
1970
1971 #define SGEMM_DEFAULT_P 256
1972 #define DGEMM_DEFAULT_P 128
1973 #define CGEMM_DEFAULT_P 128
1974 #define ZGEMM_DEFAULT_P  64
1975
1976 #define SGEMM_DEFAULT_Q 256
1977 #define DGEMM_DEFAULT_Q 256
1978 #define CGEMM_DEFAULT_Q 256
1979 #define ZGEMM_DEFAULT_Q 256
1980
1981 #define SYMV_P   4
1982 #endif
1983
1984 #ifdef PPC970
1985
1986 #define SNUMOPT         4
1987 #define DNUMOPT         4
1988
1989 #define GEMM_DEFAULT_OFFSET_A 2688
1990 #define GEMM_DEFAULT_OFFSET_B 3072
1991 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1992
1993 #define SGEMM_DEFAULT_UNROLL_M 16
1994 #define SGEMM_DEFAULT_UNROLL_N 4
1995 #define DGEMM_DEFAULT_UNROLL_M 4
1996 #define DGEMM_DEFAULT_UNROLL_N 4
1997 #define CGEMM_DEFAULT_UNROLL_M 8
1998 #define CGEMM_DEFAULT_UNROLL_N 2
1999 #define ZGEMM_DEFAULT_UNROLL_M 2
2000 #define ZGEMM_DEFAULT_UNROLL_N 2
2001
2002 #if defined(OS_LINUX) || defined(OS_DARWIN) || defined(OS_FREEBSD)
2003 #if L2_SIZE == 1024976
2004 #define SGEMM_DEFAULT_P 320
2005 #define DGEMM_DEFAULT_P 256
2006 #define CGEMM_DEFAULT_P 256
2007 #define ZGEMM_DEFAULT_P 256
2008 #else
2009 #define SGEMM_DEFAULT_P 176
2010 #define DGEMM_DEFAULT_P 176
2011 #define CGEMM_DEFAULT_P 176
2012 #define ZGEMM_DEFAULT_P 176
2013 #endif
2014 #endif
2015
2016 #define SGEMM_DEFAULT_Q 512
2017 #define DGEMM_DEFAULT_Q 256
2018 #define CGEMM_DEFAULT_Q 256
2019 #define ZGEMM_DEFAULT_Q 128
2020
2021 #define SYMV_P   4
2022
2023 #endif
2024
2025 #ifdef PPC440
2026
2027 #define SNUMOPT         2
2028 #define DNUMOPT         2
2029
2030 #define GEMM_DEFAULT_OFFSET_A (32 * 0)
2031 #define GEMM_DEFAULT_OFFSET_B (32 * 0)
2032 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
2033
2034 #define SGEMM_DEFAULT_UNROLL_M 4
2035 #define SGEMM_DEFAULT_UNROLL_N 4
2036 #define DGEMM_DEFAULT_UNROLL_M 4
2037 #define DGEMM_DEFAULT_UNROLL_N 4
2038 #define CGEMM_DEFAULT_UNROLL_M 2
2039 #define CGEMM_DEFAULT_UNROLL_N 2
2040 #define ZGEMM_DEFAULT_UNROLL_M 2
2041 #define ZGEMM_DEFAULT_UNROLL_N 2
2042
2043 #define SGEMM_DEFAULT_P 512
2044 #define DGEMM_DEFAULT_P 512
2045 #define CGEMM_DEFAULT_P 512
2046 #define ZGEMM_DEFAULT_P 512
2047
2048 #define SGEMM_DEFAULT_Q 1024
2049 #define DGEMM_DEFAULT_Q  512
2050 #define CGEMM_DEFAULT_Q  512
2051 #define ZGEMM_DEFAULT_Q  256
2052
2053 #define SGEMM_DEFAULT_R SGEMM_DEFAULT_P
2054 #define DGEMM_DEFAULT_R DGEMM_DEFAULT_P
2055 #define CGEMM_DEFAULT_R CGEMM_DEFAULT_P
2056 #define ZGEMM_DEFAULT_R ZGEMM_DEFAULT_P
2057
2058 #define SYMV_P   4
2059 #endif
2060
2061 #ifdef PPC440FP2
2062
2063 #define SNUMOPT         4
2064 #define DNUMOPT         4
2065
2066 #define GEMM_DEFAULT_OFFSET_A (32 * 0)
2067 #define GEMM_DEFAULT_OFFSET_B (32 * 0)
2068 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
2069
2070 #define SGEMM_DEFAULT_UNROLL_M 8
2071 #define SGEMM_DEFAULT_UNROLL_N 4
2072 #define DGEMM_DEFAULT_UNROLL_M 8
2073 #define DGEMM_DEFAULT_UNROLL_N 4
2074 #define CGEMM_DEFAULT_UNROLL_M 4
2075 #define CGEMM_DEFAULT_UNROLL_N 2
2076 #define ZGEMM_DEFAULT_UNROLL_M 4
2077 #define ZGEMM_DEFAULT_UNROLL_N 2
2078
2079 #define SGEMM_DEFAULT_P 128
2080 #define DGEMM_DEFAULT_P 128
2081 #define CGEMM_DEFAULT_P 128
2082 #define ZGEMM_DEFAULT_P 128
2083 #if 1
2084 #define SGEMM_DEFAULT_Q 4096
2085 #define DGEMM_DEFAULT_Q 3072
2086 #define CGEMM_DEFAULT_Q 2048
2087 #define ZGEMM_DEFAULT_Q 1024
2088 #else
2089 #define SGEMM_DEFAULT_Q  512
2090 #define DGEMM_DEFAULT_Q  256
2091 #define CGEMM_DEFAULT_Q  256
2092 #define ZGEMM_DEFAULT_Q  128
2093 #endif
2094
2095 #define SYMV_P   4
2096 #endif
2097
2098
2099
2100 #if defined(POWER3) || defined(POWER4) || defined(POWER5)
2101 #define GEMM_DEFAULT_OFFSET_A 0
2102 #define GEMM_DEFAULT_OFFSET_B 2048
2103 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
2104
2105 #define SGEMM_DEFAULT_UNROLL_M 4
2106 #define SGEMM_DEFAULT_UNROLL_N 4
2107 #define DGEMM_DEFAULT_UNROLL_M 4
2108 #define DGEMM_DEFAULT_UNROLL_N 4
2109 #define CGEMM_DEFAULT_UNROLL_M 2
2110 #define CGEMM_DEFAULT_UNROLL_N 2
2111 #define ZGEMM_DEFAULT_UNROLL_M 2
2112 #define ZGEMM_DEFAULT_UNROLL_N 2
2113
2114 #ifdef POWER3
2115
2116 #define SNUMOPT         4
2117 #define DNUMOPT         4
2118
2119 #define SGEMM_DEFAULT_P 256
2120 #define SGEMM_DEFAULT_Q 432
2121 #define SGEMM_DEFAULT_R 1012
2122
2123 #define DGEMM_DEFAULT_P 256
2124 #define DGEMM_DEFAULT_Q 216
2125 #define DGEMM_DEFAULT_R 1012
2126
2127 #define ZGEMM_DEFAULT_P 256
2128 #define ZGEMM_DEFAULT_Q 104
2129 #define ZGEMM_DEFAULT_R 1012
2130 #endif
2131
2132 #if defined(POWER4)
2133 #ifdef ALLOC_HUGETLB
2134 #define SGEMM_DEFAULT_P 184
2135 #define DGEMM_DEFAULT_P 184
2136 #define CGEMM_DEFAULT_P 184
2137 #define ZGEMM_DEFAULT_P 184
2138 #else
2139 #define SGEMM_DEFAULT_P 144
2140 #define DGEMM_DEFAULT_P 144
2141 #define CGEMM_DEFAULT_P 144
2142 #define ZGEMM_DEFAULT_P 144
2143 #endif
2144 #endif
2145
2146 #if defined(POWER5)
2147 #ifdef ALLOC_HUGETLB
2148 #define SGEMM_DEFAULT_P 512
2149 #define DGEMM_DEFAULT_P 256
2150 #define CGEMM_DEFAULT_P 256
2151 #define ZGEMM_DEFAULT_P 128
2152 #else
2153 #define SGEMM_DEFAULT_P 320
2154 #define DGEMM_DEFAULT_P 160
2155 #define CGEMM_DEFAULT_P 160
2156 #define ZGEMM_DEFAULT_P  80
2157 #endif
2158
2159 #define SGEMM_DEFAULT_Q 256
2160 #define CGEMM_DEFAULT_Q 256
2161 #define DGEMM_DEFAULT_Q 256
2162 #define ZGEMM_DEFAULT_Q 256
2163 #endif
2164
2165 #define SYMV_P   8
2166
2167 #endif
2168
2169 #if defined(POWER6)
2170
2171 #define SNUMOPT         4
2172 #define DNUMOPT         4
2173
2174 #define GEMM_DEFAULT_OFFSET_A  384
2175 #define GEMM_DEFAULT_OFFSET_B 1024
2176 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2177
2178 #define SGEMM_DEFAULT_UNROLL_M 4
2179 #define SGEMM_DEFAULT_UNROLL_N 4
2180 #define DGEMM_DEFAULT_UNROLL_M 4
2181 #define DGEMM_DEFAULT_UNROLL_N 4
2182 #define CGEMM_DEFAULT_UNROLL_M 2
2183 #define CGEMM_DEFAULT_UNROLL_N 4
2184 #define ZGEMM_DEFAULT_UNROLL_M 2
2185 #define ZGEMM_DEFAULT_UNROLL_N 4
2186
2187 #define SGEMM_DEFAULT_P  992
2188 #define DGEMM_DEFAULT_P  480
2189 #define CGEMM_DEFAULT_P  488
2190 #define ZGEMM_DEFAULT_P  248
2191
2192 #define SGEMM_DEFAULT_Q  504
2193 #define DGEMM_DEFAULT_Q  504
2194 #define CGEMM_DEFAULT_Q  400
2195 #define ZGEMM_DEFAULT_Q  400
2196
2197 #define SYMV_P   8
2198
2199 #endif
2200
2201 #if defined(POWER8)
2202
2203 #define SNUMOPT         16
2204 #define DNUMOPT         8
2205
2206 #define GEMM_DEFAULT_OFFSET_A 0 
2207 #define GEMM_DEFAULT_OFFSET_B 65536
2208 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
2209
2210 #define SGEMM_DEFAULT_UNROLL_M 16
2211 #define SGEMM_DEFAULT_UNROLL_N 8
2212 #define DGEMM_DEFAULT_UNROLL_M 16
2213 #define DGEMM_DEFAULT_UNROLL_N 4
2214 #define CGEMM_DEFAULT_UNROLL_M 8
2215 #define CGEMM_DEFAULT_UNROLL_N 4
2216 #define ZGEMM_DEFAULT_UNROLL_M 8
2217 #define ZGEMM_DEFAULT_UNROLL_N 2
2218
2219 #define SGEMM_DEFAULT_P  1280
2220 #define DGEMM_DEFAULT_P  640
2221 #define CGEMM_DEFAULT_P  640
2222 #define ZGEMM_DEFAULT_P  320
2223
2224 #define SGEMM_DEFAULT_Q  640
2225 #define DGEMM_DEFAULT_Q  720
2226 #define CGEMM_DEFAULT_Q  640
2227 #define ZGEMM_DEFAULT_Q  640
2228
2229 #define SYMV_P   8
2230
2231 #endif
2232
2233 #if defined(POWER9)
2234
2235 #define SNUMOPT         16
2236 #define DNUMOPT         8
2237
2238 #define GEMM_DEFAULT_OFFSET_A 0 
2239 #define GEMM_DEFAULT_OFFSET_B 65536
2240 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
2241
2242 #define SGEMM_DEFAULT_UNROLL_M 16
2243 #define SGEMM_DEFAULT_UNROLL_N 8
2244 #define DGEMM_DEFAULT_UNROLL_M 16
2245 #define DGEMM_DEFAULT_UNROLL_N 4
2246 #define CGEMM_DEFAULT_UNROLL_M 8
2247 #define CGEMM_DEFAULT_UNROLL_N 4
2248 #define ZGEMM_DEFAULT_UNROLL_M 8
2249 #define ZGEMM_DEFAULT_UNROLL_N 2
2250
2251 #define SGEMM_DEFAULT_P 832
2252 #define DGEMM_DEFAULT_P  128
2253 #define CGEMM_DEFAULT_P  512
2254 #define ZGEMM_DEFAULT_P 256
2255
2256 #define SGEMM_DEFAULT_Q 1026
2257 #define DGEMM_DEFAULT_Q  384
2258 #define CGEMM_DEFAULT_Q  1026
2259 #define ZGEMM_DEFAULT_Q 1026
2260
2261 #define SYMV_P   8
2262
2263 #endif
2264
2265 #if defined(SPARC) && defined(V7)
2266
2267 #define SNUMOPT         4
2268 #define DNUMOPT         4
2269
2270 #define GEMM_DEFAULT_OFFSET_A 0
2271 #define GEMM_DEFAULT_OFFSET_B 2048
2272 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2273
2274 #define SGEMM_DEFAULT_UNROLL_M 2
2275 #define SGEMM_DEFAULT_UNROLL_N 8
2276 #define DGEMM_DEFAULT_UNROLL_M 2
2277 #define DGEMM_DEFAULT_UNROLL_N 8
2278 #define CGEMM_DEFAULT_UNROLL_M 1
2279 #define CGEMM_DEFAULT_UNROLL_N 4
2280 #define ZGEMM_DEFAULT_UNROLL_M 1
2281 #define ZGEMM_DEFAULT_UNROLL_N 4
2282
2283 #define SGEMM_DEFAULT_P  256
2284 #define DGEMM_DEFAULT_P  256
2285 #define CGEMM_DEFAULT_P  256
2286 #define ZGEMM_DEFAULT_P  256
2287
2288 #define SGEMM_DEFAULT_Q  512
2289 #define DGEMM_DEFAULT_Q  256
2290 #define CGEMM_DEFAULT_Q  256
2291 #define ZGEMM_DEFAULT_Q  128
2292
2293 #define SYMV_P   8
2294 #define GEMM_THREAD gemm_thread_mn
2295 #endif
2296
2297 #if (defined(SPARC) && defined(V9)) || defined(__sparc_v9__)
2298
2299 #define SNUMOPT         2
2300 #define DNUMOPT         2
2301
2302 #define GEMM_DEFAULT_OFFSET_A 0
2303 #define GEMM_DEFAULT_OFFSET_B 2048
2304 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2305
2306 #define SGEMM_DEFAULT_UNROLL_M 4
2307 #define SGEMM_DEFAULT_UNROLL_N 4
2308 #define DGEMM_DEFAULT_UNROLL_M 4
2309 #define DGEMM_DEFAULT_UNROLL_N 4
2310 #define CGEMM_DEFAULT_UNROLL_M 2
2311 #define CGEMM_DEFAULT_UNROLL_N 2
2312 #define ZGEMM_DEFAULT_UNROLL_M 2
2313 #define ZGEMM_DEFAULT_UNROLL_N 2
2314
2315 #define SGEMM_DEFAULT_P  512
2316 #define DGEMM_DEFAULT_P  512
2317 #define CGEMM_DEFAULT_P  512
2318 #define ZGEMM_DEFAULT_P  512
2319
2320 #define SGEMM_DEFAULT_Q 1024
2321 #define DGEMM_DEFAULT_Q  512
2322 #define CGEMM_DEFAULT_Q  512
2323 #define ZGEMM_DEFAULT_Q  256
2324
2325 #define SYMV_P   8
2326 #endif
2327
2328 #ifdef SICORTEX
2329
2330 #define SNUMOPT         2
2331 #define DNUMOPT         2
2332
2333 #define GEMM_DEFAULT_OFFSET_A 0
2334 #define GEMM_DEFAULT_OFFSET_B 0
2335 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2336
2337 #define SGEMM_DEFAULT_UNROLL_M  2
2338 #define SGEMM_DEFAULT_UNROLL_N  8
2339 #define DGEMM_DEFAULT_UNROLL_M  2
2340 #define DGEMM_DEFAULT_UNROLL_N  8
2341 #define CGEMM_DEFAULT_UNROLL_M  1
2342 #define CGEMM_DEFAULT_UNROLL_N  4
2343 #define ZGEMM_DEFAULT_UNROLL_M  1
2344 #define ZGEMM_DEFAULT_UNROLL_N  4
2345
2346 #define SGEMM_DEFAULT_P 108
2347 #define DGEMM_DEFAULT_P 112
2348 #define CGEMM_DEFAULT_P 108
2349 #define ZGEMM_DEFAULT_P 112
2350
2351 #define SGEMM_DEFAULT_Q 288
2352 #define DGEMM_DEFAULT_Q 144
2353 #define CGEMM_DEFAULT_Q 144
2354 #define ZGEMM_DEFAULT_Q  72
2355
2356 #define SGEMM_DEFAULT_R 2000
2357 #define DGEMM_DEFAULT_R 2000
2358 #define CGEMM_DEFAULT_R 2000
2359 #define ZGEMM_DEFAULT_R 2000
2360
2361 #define SYMV_P  16
2362 #endif
2363
2364 #ifdef LOONGSON3A
2365 ////Copy from SICORTEX
2366 #define SNUMOPT         2
2367 #define DNUMOPT         2
2368
2369 #define GEMM_DEFAULT_OFFSET_A 0
2370 #define GEMM_DEFAULT_OFFSET_B 0
2371 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2372
2373 #define SGEMM_DEFAULT_UNROLL_M  8
2374 #define SGEMM_DEFAULT_UNROLL_N  4
2375
2376 #define DGEMM_DEFAULT_UNROLL_M  4
2377 #define DGEMM_DEFAULT_UNROLL_N  4
2378
2379 #define CGEMM_DEFAULT_UNROLL_M  4
2380 #define CGEMM_DEFAULT_UNROLL_N  2
2381
2382 #define ZGEMM_DEFAULT_UNROLL_M  2
2383 #define ZGEMM_DEFAULT_UNROLL_N  2
2384
2385 #define SGEMM_DEFAULT_P 64
2386 #define DGEMM_DEFAULT_P 44
2387 #define CGEMM_DEFAULT_P 64
2388 #define ZGEMM_DEFAULT_P 32
2389
2390 #define SGEMM_DEFAULT_Q 192
2391 #define DGEMM_DEFAULT_Q 92
2392 #define CGEMM_DEFAULT_Q 128
2393 #define ZGEMM_DEFAULT_Q 80
2394
2395 #define SGEMM_DEFAULT_R 640
2396 #define DGEMM_DEFAULT_R dgemm_r
2397 #define CGEMM_DEFAULT_R 640
2398 #define ZGEMM_DEFAULT_R 640
2399
2400 #define GEMM_OFFSET_A1  0x10000
2401 #define GEMM_OFFSET_B1  0x100000
2402
2403 #define SYMV_P  16
2404 #endif
2405
2406 #ifdef LOONGSON3B
2407 #define SNUMOPT         2
2408 #define DNUMOPT         2
2409
2410 #define GEMM_DEFAULT_OFFSET_A 0
2411 #define GEMM_DEFAULT_OFFSET_B 0
2412 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2413
2414 #define SGEMM_DEFAULT_UNROLL_M  2
2415 #define SGEMM_DEFAULT_UNROLL_N  2
2416
2417 #define DGEMM_DEFAULT_UNROLL_M  2
2418 #define DGEMM_DEFAULT_UNROLL_N  2
2419
2420 #define CGEMM_DEFAULT_UNROLL_M  2
2421 #define CGEMM_DEFAULT_UNROLL_N  2
2422
2423 #define ZGEMM_DEFAULT_UNROLL_M  2
2424 #define ZGEMM_DEFAULT_UNROLL_N  2
2425
2426 #define SGEMM_DEFAULT_P 64
2427 #define DGEMM_DEFAULT_P 24
2428 #define CGEMM_DEFAULT_P 24
2429 #define ZGEMM_DEFAULT_P 20
2430
2431 #define SGEMM_DEFAULT_Q 192
2432 #define DGEMM_DEFAULT_Q 128
2433 #define CGEMM_DEFAULT_Q 128
2434 #define ZGEMM_DEFAULT_Q 64
2435
2436 #define SGEMM_DEFAULT_R 512
2437 #define DGEMM_DEFAULT_R 512
2438 #define CGEMM_DEFAULT_R 512
2439 #define ZGEMM_DEFAULT_R 512
2440
2441 #define GEMM_OFFSET_A1  0x10000
2442 #define GEMM_OFFSET_B1  0x100000
2443
2444 #define SYMV_P  16
2445 #endif
2446
2447 #if defined(P5600) || defined(MIPS1004K) || defined(I6400) || defined(P6600) || defined(I6500)
2448 #define SNUMOPT  2
2449 #define DNUMOPT  2
2450
2451 #define GEMM_DEFAULT_OFFSET_A  0
2452 #define GEMM_DEFAULT_OFFSET_B  0
2453 #define GEMM_DEFAULT_ALIGN  0x03fffUL
2454
2455 #ifdef HAVE_MSA
2456 #define SGEMM_DEFAULT_UNROLL_M  8
2457 #define SGEMM_DEFAULT_UNROLL_N  8
2458
2459 #define DGEMM_DEFAULT_UNROLL_M  8
2460 #define DGEMM_DEFAULT_UNROLL_N  4
2461
2462 #define CGEMM_DEFAULT_UNROLL_M  8
2463 #define CGEMM_DEFAULT_UNROLL_N  4
2464
2465 #define ZGEMM_DEFAULT_UNROLL_M  4
2466 #define ZGEMM_DEFAULT_UNROLL_N  4
2467 #else
2468 #define SGEMM_DEFAULT_UNROLL_M  2
2469 #define SGEMM_DEFAULT_UNROLL_N  2
2470
2471 #define DGEMM_DEFAULT_UNROLL_M  2
2472 #define DGEMM_DEFAULT_UNROLL_N  2
2473
2474 #define CGEMM_DEFAULT_UNROLL_M  2
2475 #define CGEMM_DEFAULT_UNROLL_N  2
2476
2477 #define ZGEMM_DEFAULT_UNROLL_M  2
2478 #define ZGEMM_DEFAULT_UNROLL_N  2
2479 #endif
2480
2481 #define SGEMM_DEFAULT_P  128
2482 #define DGEMM_DEFAULT_P  128
2483 #define CGEMM_DEFAULT_P  96
2484 #define ZGEMM_DEFAULT_P  64
2485
2486 #define SGEMM_DEFAULT_Q  240
2487 #define DGEMM_DEFAULT_Q  120
2488 #define CGEMM_DEFAULT_Q  120
2489 #define ZGEMM_DEFAULT_Q  120
2490
2491 #define SGEMM_DEFAULT_R  12288
2492 #define DGEMM_DEFAULT_R  8192
2493 #define CGEMM_DEFAULT_R  4096
2494 #define ZGEMM_DEFAULT_R  4096
2495
2496 #define SYMV_P  16
2497 #endif
2498
2499 #ifdef ARMV7
2500 #define SNUMOPT         2
2501 #define DNUMOPT         2
2502
2503 #define GEMM_DEFAULT_OFFSET_A 0
2504 #define GEMM_DEFAULT_OFFSET_B 0
2505 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2506
2507 #define SGEMM_DEFAULT_UNROLL_M  4
2508 #define SGEMM_DEFAULT_UNROLL_N  4
2509
2510 #define DGEMM_DEFAULT_UNROLL_M  4
2511 #define DGEMM_DEFAULT_UNROLL_N  4
2512
2513 #define CGEMM_DEFAULT_UNROLL_M  2
2514 #define CGEMM_DEFAULT_UNROLL_N  2
2515
2516 #define ZGEMM_DEFAULT_UNROLL_M  2
2517 #define ZGEMM_DEFAULT_UNROLL_N  2
2518
2519 #define SGEMM_DEFAULT_P 128
2520 #define DGEMM_DEFAULT_P 128
2521 #define CGEMM_DEFAULT_P 96
2522 #define ZGEMM_DEFAULT_P 64
2523
2524 #define SGEMM_DEFAULT_Q 240
2525 #define DGEMM_DEFAULT_Q 120
2526 #define CGEMM_DEFAULT_Q 120
2527 #define ZGEMM_DEFAULT_Q 120
2528
2529 #define SGEMM_DEFAULT_R 12288
2530 #define DGEMM_DEFAULT_R 8192
2531 #define CGEMM_DEFAULT_R 4096
2532 #define ZGEMM_DEFAULT_R 4096
2533
2534
2535
2536 #define SYMV_P  16
2537 #endif
2538
2539
2540 #if defined(ARMV6)
2541 #define SNUMOPT         2
2542 #define DNUMOPT         2
2543
2544 #define GEMM_DEFAULT_OFFSET_A 0
2545 #define GEMM_DEFAULT_OFFSET_B 0
2546 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2547
2548 #define SGEMM_DEFAULT_UNROLL_M  4
2549 #define SGEMM_DEFAULT_UNROLL_N  2
2550
2551 #define DGEMM_DEFAULT_UNROLL_M  4
2552 #define DGEMM_DEFAULT_UNROLL_N  2
2553
2554 #define CGEMM_DEFAULT_UNROLL_M  2
2555 #define CGEMM_DEFAULT_UNROLL_N  2
2556
2557 #define ZGEMM_DEFAULT_UNROLL_M  2
2558 #define ZGEMM_DEFAULT_UNROLL_N  2
2559
2560 #define SGEMM_DEFAULT_P 128
2561 #define DGEMM_DEFAULT_P 128
2562 #define CGEMM_DEFAULT_P 96
2563 #define ZGEMM_DEFAULT_P 64
2564
2565 #define SGEMM_DEFAULT_Q 240
2566 #define DGEMM_DEFAULT_Q 120
2567 #define CGEMM_DEFAULT_Q 120
2568 #define ZGEMM_DEFAULT_Q 120
2569
2570 #define SGEMM_DEFAULT_R 12288
2571 #define DGEMM_DEFAULT_R 8192
2572 #define CGEMM_DEFAULT_R 4096
2573 #define ZGEMM_DEFAULT_R 4096
2574
2575
2576 #define SYMV_P  16
2577 #endif
2578
2579 // Common ARMv8 parameters
2580 #if defined(ARMV8)
2581
2582 #define SNUMOPT         2
2583 #define DNUMOPT         2
2584
2585 #define GEMM_DEFAULT_OFFSET_A 0
2586 #define GEMM_DEFAULT_OFFSET_B 0
2587 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2588
2589 #define SYMV_P  16
2590
2591 // Darwin / Cross
2592 #if defined(OS_DARWIN) && defined(CROSS)
2593
2594 #define SGEMM_DEFAULT_UNROLL_M  2
2595 #define SGEMM_DEFAULT_UNROLL_N  2
2596
2597 #define DGEMM_DEFAULT_UNROLL_M  2
2598 #define DGEMM_DEFAULT_UNROLL_N  2
2599
2600 #define CGEMM_DEFAULT_UNROLL_M  2
2601 #define CGEMM_DEFAULT_UNROLL_N  2
2602
2603 #define ZGEMM_DEFAULT_UNROLL_M  2
2604 #define ZGEMM_DEFAULT_UNROLL_N  2
2605
2606 #define SGEMM_DEFAULT_P 128
2607 #define DGEMM_DEFAULT_P 128
2608 #define CGEMM_DEFAULT_P 96
2609 #define ZGEMM_DEFAULT_P 64
2610
2611 #define SGEMM_DEFAULT_Q 240
2612 #define DGEMM_DEFAULT_Q 120
2613 #define CGEMM_DEFAULT_Q 120
2614 #define ZGEMM_DEFAULT_Q 120
2615
2616 #define SGEMM_DEFAULT_R 12288
2617 #define DGEMM_DEFAULT_R 8192
2618 #define CGEMM_DEFAULT_R 4096
2619 #define ZGEMM_DEFAULT_R 4096
2620
2621 #else // Linux / Native
2622
2623 #if defined(CORTEXA53) || defined(CORTEXA57) || \
2624     defined(CORTEXA72) || defined(CORTEXA73) || \
2625     defined(FALKOR)    || defined(TSV110)
2626
2627 #define SGEMM_DEFAULT_UNROLL_M  16
2628 #define SGEMM_DEFAULT_UNROLL_N  4
2629
2630 #define DGEMM_DEFAULT_UNROLL_M  8
2631 #define DGEMM_DEFAULT_UNROLL_N  4
2632
2633 #define CGEMM_DEFAULT_UNROLL_M  8
2634 #define CGEMM_DEFAULT_UNROLL_N  4
2635
2636 #define ZGEMM_DEFAULT_UNROLL_M  4
2637 #define ZGEMM_DEFAULT_UNROLL_N  4
2638
2639 #define SGEMM_DEFAULT_P 512
2640 #define DGEMM_DEFAULT_P 256
2641 #define CGEMM_DEFAULT_P 256
2642 #define ZGEMM_DEFAULT_P 128
2643
2644 #define SGEMM_DEFAULT_Q 1024
2645 #define DGEMM_DEFAULT_Q 512
2646 #define CGEMM_DEFAULT_Q 512
2647 #define ZGEMM_DEFAULT_Q 512
2648
2649 #define SGEMM_DEFAULT_R 4096
2650 #define DGEMM_DEFAULT_R 4096
2651 #define CGEMM_DEFAULT_R 4096
2652 #define ZGEMM_DEFAULT_R 2048
2653
2654 #elif defined(THUNDERX)
2655
2656 #define SGEMM_DEFAULT_UNROLL_M  4
2657 #define SGEMM_DEFAULT_UNROLL_N  4
2658
2659 #define DGEMM_DEFAULT_UNROLL_M  2
2660 #define DGEMM_DEFAULT_UNROLL_N  2
2661
2662 #define CGEMM_DEFAULT_UNROLL_M  2
2663 #define CGEMM_DEFAULT_UNROLL_N  2
2664
2665 #define ZGEMM_DEFAULT_UNROLL_M  2
2666 #define ZGEMM_DEFAULT_UNROLL_N  2
2667
2668 #define SGEMM_DEFAULT_P 128
2669 #define DGEMM_DEFAULT_P 128
2670 #define CGEMM_DEFAULT_P 96
2671 #define ZGEMM_DEFAULT_P 64
2672
2673 #define SGEMM_DEFAULT_Q 240
2674 #define DGEMM_DEFAULT_Q 120
2675 #define CGEMM_DEFAULT_Q 120
2676 #define ZGEMM_DEFAULT_Q 120
2677
2678 #define SGEMM_DEFAULT_R 12288
2679 #define DGEMM_DEFAULT_R 8192
2680 #define CGEMM_DEFAULT_R 4096
2681 #define ZGEMM_DEFAULT_R 4096
2682
2683 #elif defined(THUNDERX2T99)
2684
2685 #define SGEMM_DEFAULT_UNROLL_M  16
2686 #define SGEMM_DEFAULT_UNROLL_N  4
2687
2688 #define DGEMM_DEFAULT_UNROLL_M  8
2689 #define DGEMM_DEFAULT_UNROLL_N  4
2690
2691 #define CGEMM_DEFAULT_UNROLL_M  8
2692 #define CGEMM_DEFAULT_UNROLL_N  4
2693
2694 #define ZGEMM_DEFAULT_UNROLL_M  4
2695 #define ZGEMM_DEFAULT_UNROLL_N  4
2696
2697 #define SGEMM_DEFAULT_P 128
2698 #define DGEMM_DEFAULT_P 160
2699 #define CGEMM_DEFAULT_P 128
2700 #define ZGEMM_DEFAULT_P 128
2701
2702 #define SGEMM_DEFAULT_Q 352
2703 #define DGEMM_DEFAULT_Q 128
2704 #define CGEMM_DEFAULT_Q 224
2705 #define ZGEMM_DEFAULT_Q 112
2706
2707 #define SGEMM_DEFAULT_R 4096
2708 #define DGEMM_DEFAULT_R 4096
2709 #define CGEMM_DEFAULT_R 4096
2710 #define ZGEMM_DEFAULT_R 4096
2711
2712 #else // Other/undetected ARMv8 cores
2713
2714 #define SGEMM_DEFAULT_UNROLL_M  16
2715 #define SGEMM_DEFAULT_UNROLL_N  4
2716
2717 #define DGEMM_DEFAULT_UNROLL_M  8
2718 #define DGEMM_DEFAULT_UNROLL_N  4
2719
2720 #define CGEMM_DEFAULT_UNROLL_M  8
2721 #define CGEMM_DEFAULT_UNROLL_N  4
2722
2723 #define ZGEMM_DEFAULT_UNROLL_M  4
2724 #define ZGEMM_DEFAULT_UNROLL_N  4
2725
2726 #define SGEMM_DEFAULT_P 128
2727 #define DGEMM_DEFAULT_P 160
2728 #define CGEMM_DEFAULT_P 128
2729 #define ZGEMM_DEFAULT_P 128
2730
2731 #define SGEMM_DEFAULT_Q 352
2732 #define DGEMM_DEFAULT_Q 128
2733 #define CGEMM_DEFAULT_Q 224
2734 #define ZGEMM_DEFAULT_Q 112
2735
2736 #define SGEMM_DEFAULT_R 4096
2737 #define DGEMM_DEFAULT_R 4096
2738 #define CGEMM_DEFAULT_R 4096
2739 #define ZGEMM_DEFAULT_R 4096
2740
2741 #endif // Cores
2742
2743 #endif // Linux / Darwin
2744
2745 #endif // ARMv8
2746
2747 #if defined(ARMV5)
2748 #define SNUMOPT         2
2749 #define DNUMOPT         2
2750
2751 #define GEMM_DEFAULT_OFFSET_A 0
2752 #define GEMM_DEFAULT_OFFSET_B 0
2753 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2754
2755 #define SGEMM_DEFAULT_UNROLL_M  2
2756 #define SGEMM_DEFAULT_UNROLL_N  2
2757
2758 #define DGEMM_DEFAULT_UNROLL_M  2
2759 #define DGEMM_DEFAULT_UNROLL_N  2
2760
2761 #define CGEMM_DEFAULT_UNROLL_M  2
2762 #define CGEMM_DEFAULT_UNROLL_N  2
2763
2764 #define ZGEMM_DEFAULT_UNROLL_M  2
2765 #define ZGEMM_DEFAULT_UNROLL_N  2
2766
2767 #define SGEMM_DEFAULT_P 128
2768 #define DGEMM_DEFAULT_P 128
2769 #define CGEMM_DEFAULT_P 96
2770 #define ZGEMM_DEFAULT_P 64
2771
2772 #define SGEMM_DEFAULT_Q 240
2773 #define DGEMM_DEFAULT_Q 120
2774 #define CGEMM_DEFAULT_Q 120
2775 #define ZGEMM_DEFAULT_Q 120
2776
2777 #define SGEMM_DEFAULT_R 12288
2778 #define DGEMM_DEFAULT_R 8192
2779 #define CGEMM_DEFAULT_R 4096
2780 #define ZGEMM_DEFAULT_R 4096
2781
2782
2783 #define SYMV_P  16
2784 #endif
2785
2786
2787
2788 #ifdef CORTEXA9
2789 #define SNUMOPT         2
2790 #define DNUMOPT         2
2791
2792 #define GEMM_DEFAULT_OFFSET_A 0
2793 #define GEMM_DEFAULT_OFFSET_B 0
2794 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2795
2796 #define SGEMM_DEFAULT_UNROLL_M  4
2797 #define SGEMM_DEFAULT_UNROLL_N  4
2798
2799 #define DGEMM_DEFAULT_UNROLL_M  4
2800 #define DGEMM_DEFAULT_UNROLL_N  4
2801
2802 #define CGEMM_DEFAULT_UNROLL_M  2
2803 #define CGEMM_DEFAULT_UNROLL_N  2
2804
2805 #define ZGEMM_DEFAULT_UNROLL_M  2
2806 #define ZGEMM_DEFAULT_UNROLL_N  2
2807
2808 #define SGEMM_DEFAULT_P 128
2809 #define DGEMM_DEFAULT_P 128
2810 #define CGEMM_DEFAULT_P 96
2811 #define ZGEMM_DEFAULT_P 64
2812
2813 #define SGEMM_DEFAULT_Q 240
2814 #define DGEMM_DEFAULT_Q 120
2815 #define CGEMM_DEFAULT_Q 120
2816 #define ZGEMM_DEFAULT_Q 120
2817
2818 #define SGEMM_DEFAULT_R 12288
2819 #define DGEMM_DEFAULT_R 8192
2820 #define CGEMM_DEFAULT_R 4096
2821 #define ZGEMM_DEFAULT_R 4096
2822
2823
2824
2825 #define SYMV_P  16
2826 #endif
2827
2828
2829 #ifdef CORTEXA15
2830 #define SNUMOPT         2
2831 #define DNUMOPT         2
2832
2833 #define GEMM_DEFAULT_OFFSET_A 0
2834 #define GEMM_DEFAULT_OFFSET_B 0
2835 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2836
2837 #define SGEMM_DEFAULT_UNROLL_M  4
2838 #define SGEMM_DEFAULT_UNROLL_N  4
2839
2840 #define DGEMM_DEFAULT_UNROLL_M  4
2841 #define DGEMM_DEFAULT_UNROLL_N  4
2842
2843 #define CGEMM_DEFAULT_UNROLL_M  2
2844 #define CGEMM_DEFAULT_UNROLL_N  2
2845
2846 #define ZGEMM_DEFAULT_UNROLL_M  2
2847 #define ZGEMM_DEFAULT_UNROLL_N  2
2848
2849 #define SGEMM_DEFAULT_P 128
2850 #define DGEMM_DEFAULT_P 128
2851 #define CGEMM_DEFAULT_P 96
2852 #define ZGEMM_DEFAULT_P 64
2853
2854 #define SGEMM_DEFAULT_Q 240
2855 #define DGEMM_DEFAULT_Q 120
2856 #define CGEMM_DEFAULT_Q 120
2857 #define ZGEMM_DEFAULT_Q 120
2858
2859 #define SGEMM_DEFAULT_R 12288
2860 #define DGEMM_DEFAULT_R 8192
2861 #define CGEMM_DEFAULT_R 4096
2862 #define ZGEMM_DEFAULT_R 4096
2863
2864
2865
2866 #define SYMV_P  16
2867 #endif
2868
2869
2870 #if defined(ZARCH_GENERIC)
2871 #define SNUMOPT         2
2872 #define DNUMOPT         2
2873
2874 #define GEMM_DEFAULT_OFFSET_A 0
2875 #define GEMM_DEFAULT_OFFSET_B 0
2876 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2877
2878 #define SGEMM_DEFAULT_UNROLL_M  2
2879 #define SGEMM_DEFAULT_UNROLL_N  2
2880
2881 #define DGEMM_DEFAULT_UNROLL_M  2
2882 #define DGEMM_DEFAULT_UNROLL_N  2
2883
2884 #define CGEMM_DEFAULT_UNROLL_M  2
2885 #define CGEMM_DEFAULT_UNROLL_N  2
2886
2887 #define ZGEMM_DEFAULT_UNROLL_M  2
2888 #define ZGEMM_DEFAULT_UNROLL_N  2
2889
2890 #define SGEMM_DEFAULT_P 128
2891 #define DGEMM_DEFAULT_P 128
2892 #define CGEMM_DEFAULT_P 96
2893 #define ZGEMM_DEFAULT_P 64
2894
2895 #define SGEMM_DEFAULT_Q 240
2896 #define DGEMM_DEFAULT_Q 120
2897 #define CGEMM_DEFAULT_Q 120
2898 #define ZGEMM_DEFAULT_Q 120
2899
2900 #define SGEMM_DEFAULT_R 12288
2901 #define DGEMM_DEFAULT_R 8192
2902 #define CGEMM_DEFAULT_R 4096
2903 #define ZGEMM_DEFAULT_R 4096
2904
2905
2906 #define SYMV_P  16
2907 #endif
2908
2909 #if defined(Z13)
2910 #define SNUMOPT         2
2911 #define DNUMOPT         2
2912
2913 #define GEMM_DEFAULT_OFFSET_A 0
2914 #define GEMM_DEFAULT_OFFSET_B 0
2915 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2916
2917 #define SGEMM_DEFAULT_UNROLL_M  8
2918 #define SGEMM_DEFAULT_UNROLL_N  4
2919
2920 #define DGEMM_DEFAULT_UNROLL_M  8
2921 #define DGEMM_DEFAULT_UNROLL_N  4
2922
2923 #define CGEMM_DEFAULT_UNROLL_M  4
2924 #define CGEMM_DEFAULT_UNROLL_N  4
2925
2926 #define ZGEMM_DEFAULT_UNROLL_M  4
2927 #define ZGEMM_DEFAULT_UNROLL_N  4
2928
2929 #define SGEMM_DEFAULT_P 456
2930 #define DGEMM_DEFAULT_P 320
2931 #define CGEMM_DEFAULT_P 480
2932 #define ZGEMM_DEFAULT_P 224
2933
2934 #define SGEMM_DEFAULT_Q 488
2935 #define DGEMM_DEFAULT_Q 384
2936 #define CGEMM_DEFAULT_Q 128
2937 #define ZGEMM_DEFAULT_Q 352
2938
2939 #define SGEMM_DEFAULT_R 8192
2940 #define DGEMM_DEFAULT_R 4096
2941 #define CGEMM_DEFAULT_R 4096
2942 #define ZGEMM_DEFAULT_R 2048
2943
2944
2945 #define SYMV_P  16
2946 #endif
2947
2948
2949 #if defined(Z14)
2950 #define SNUMOPT         2
2951 #define DNUMOPT         2
2952
2953 #define GEMM_DEFAULT_OFFSET_A 0
2954 #define GEMM_DEFAULT_OFFSET_B 0
2955 #define GEMM_DEFAULT_ALIGN 0x03fffUL
2956
2957 #define SGEMM_DEFAULT_UNROLL_M  8
2958 #define SGEMM_DEFAULT_UNROLL_N  4
2959
2960 #define DGEMM_DEFAULT_UNROLL_M  8
2961 #define DGEMM_DEFAULT_UNROLL_N  4
2962
2963 #define CGEMM_DEFAULT_UNROLL_M  4
2964 #define CGEMM_DEFAULT_UNROLL_N  4
2965
2966 #define ZGEMM_DEFAULT_UNROLL_M  4
2967 #define ZGEMM_DEFAULT_UNROLL_N  4
2968
2969 #define SGEMM_DEFAULT_P 456
2970 #define DGEMM_DEFAULT_P 320
2971 #define CGEMM_DEFAULT_P 480
2972 #define ZGEMM_DEFAULT_P 224
2973
2974 #define SGEMM_DEFAULT_Q 488
2975 #define DGEMM_DEFAULT_Q 384
2976 #define CGEMM_DEFAULT_Q 128
2977 #define ZGEMM_DEFAULT_Q 352
2978
2979 #define SGEMM_DEFAULT_R 8192
2980 #define DGEMM_DEFAULT_R 4096
2981 #define CGEMM_DEFAULT_R 4096
2982 #define ZGEMM_DEFAULT_R 2048
2983
2984
2985 #define SYMV_P  16
2986 #endif
2987
2988
2989
2990 #ifdef GENERIC
2991
2992 #define SNUMOPT         2
2993 #define DNUMOPT         2
2994
2995 #define GEMM_DEFAULT_OFFSET_A 0
2996 #define GEMM_DEFAULT_OFFSET_B 0
2997 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
2998
2999 #define SGEMM_DEFAULT_UNROLL_N 2
3000 #define DGEMM_DEFAULT_UNROLL_N 2
3001 #define QGEMM_DEFAULT_UNROLL_N 2
3002 #define CGEMM_DEFAULT_UNROLL_N 2
3003 #define ZGEMM_DEFAULT_UNROLL_N 2
3004 #define XGEMM_DEFAULT_UNROLL_N 1
3005
3006 #ifdef ARCH_X86
3007 #define SGEMM_DEFAULT_UNROLL_M 2
3008 #define DGEMM_DEFAULT_UNROLL_M 2
3009 #define QGEMM_DEFAULT_UNROLL_M 2
3010 #define CGEMM_DEFAULT_UNROLL_M 2
3011 #define ZGEMM_DEFAULT_UNROLL_M 2
3012 #define XGEMM_DEFAULT_UNROLL_M 1
3013 #else
3014 #define SGEMM_DEFAULT_UNROLL_M 2
3015 #define DGEMM_DEFAULT_UNROLL_M 2
3016 #define QGEMM_DEFAULT_UNROLL_M 2
3017 #define CGEMM_DEFAULT_UNROLL_M 2
3018 #define ZGEMM_DEFAULT_UNROLL_M 2
3019 #define XGEMM_DEFAULT_UNROLL_M 1
3020 #endif
3021
3022 #define SGEMM_DEFAULT_P sgemm_p
3023 #define DGEMM_DEFAULT_P dgemm_p
3024 #define QGEMM_DEFAULT_P qgemm_p
3025 #define CGEMM_DEFAULT_P cgemm_p
3026 #define ZGEMM_DEFAULT_P zgemm_p
3027 #define XGEMM_DEFAULT_P xgemm_p
3028
3029 #define SGEMM_DEFAULT_R sgemm_r
3030 #define DGEMM_DEFAULT_R dgemm_r
3031 #define QGEMM_DEFAULT_R qgemm_r
3032 #define CGEMM_DEFAULT_R cgemm_r
3033 #define ZGEMM_DEFAULT_R zgemm_r
3034 #define XGEMM_DEFAULT_R xgemm_r
3035
3036 #define SGEMM_DEFAULT_Q 128
3037 #define DGEMM_DEFAULT_Q 128
3038 #define QGEMM_DEFAULT_Q 128
3039 #define CGEMM_DEFAULT_Q 128
3040 #define ZGEMM_DEFAULT_Q 128
3041 #define XGEMM_DEFAULT_Q 128
3042
3043 #define SYMV_P  16
3044
3045 #endif
3046
3047 #ifndef QGEMM_DEFAULT_UNROLL_M
3048 #define QGEMM_DEFAULT_UNROLL_M 2
3049 #endif
3050
3051 #ifndef QGEMM_DEFAULT_UNROLL_N
3052 #define QGEMM_DEFAULT_UNROLL_N 2
3053 #endif
3054
3055 #ifndef XGEMM_DEFAULT_UNROLL_M
3056 #define XGEMM_DEFAULT_UNROLL_M 2
3057 #endif
3058
3059 #ifndef XGEMM_DEFAULT_UNROLL_N
3060 #define XGEMM_DEFAULT_UNROLL_N 2
3061 #endif
3062
3063 #ifndef HAVE_SSE2
3064 #define SHUFPD_0        shufps  $0x44,
3065 #define SHUFPD_1        shufps  $0x4e,
3066 #define SHUFPD_2        shufps  $0xe4,
3067 #define SHUFPD_3        shufps  $0xee,
3068 #endif
3069
3070 #ifndef SHUFPD_0
3071 #define SHUFPD_0        shufpd  $0,
3072 #endif
3073
3074 #ifndef SHUFPD_1
3075 #define SHUFPD_1        shufpd  $1,
3076 #endif
3077
3078 #ifndef SHUFPD_2
3079 #define SHUFPD_2        shufpd  $2,
3080 #endif
3081
3082 #ifndef SHUFPD_3
3083 #define SHUFPD_3        shufpd  $3,
3084 #endif
3085
3086 #ifndef SHUFPS_39
3087 #define SHUFPS_39       shufps  $0x39,
3088 #endif
3089
3090
3091 #endif