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