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