7e72ab03fd6f40d0537c6bc55296a2f33695d9d5
[platform/upstream/openblas.git] / param.h
1 /*****************************************************************************
2 Copyright (c) 2011,2012 Lab of Parallel Software and Computational Science,ISCAS
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 ISCAS nor the names of its contributors may 
17       be used to endorse or promote products derived from this software 
18       without specific prior written permission.
19
20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
25 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
26 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
27 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
28 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
29 USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31 **********************************************************************************/
32
33 /*********************************************************************/
34 /* Copyright 2009, 2010 The University of Texas at Austin.           */
35 /* All rights reserved.                                              */
36 /*                                                                   */
37 /* Redistribution and use in source and binary forms, with or        */
38 /* without modification, are permitted provided that the following   */
39 /* conditions are met:                                               */
40 /*                                                                   */
41 /*   1. Redistributions of source code must retain the above         */
42 /*      copyright notice, this list of conditions and the following  */
43 /*      disclaimer.                                                  */
44 /*                                                                   */
45 /*   2. Redistributions in binary form must reproduce the above      */
46 /*      copyright notice, this list of conditions and the following  */
47 /*      disclaimer in the documentation and/or other materials       */
48 /*      provided with the distribution.                              */
49 /*                                                                   */
50 /*    THIS  SOFTWARE IS PROVIDED  BY THE  UNIVERSITY OF  TEXAS AT    */
51 /*    AUSTIN  ``AS IS''  AND ANY  EXPRESS OR  IMPLIED WARRANTIES,    */
52 /*    INCLUDING, BUT  NOT LIMITED  TO, THE IMPLIED  WARRANTIES OF    */
53 /*    MERCHANTABILITY  AND FITNESS FOR  A PARTICULAR  PURPOSE ARE    */
54 /*    DISCLAIMED.  IN  NO EVENT SHALL THE UNIVERSITY  OF TEXAS AT    */
55 /*    AUSTIN OR CONTRIBUTORS BE  LIABLE FOR ANY DIRECT, INDIRECT,    */
56 /*    INCIDENTAL,  SPECIAL, EXEMPLARY,  OR  CONSEQUENTIAL DAMAGES    */
57 /*    (INCLUDING, BUT  NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE    */
58 /*    GOODS  OR  SERVICES; LOSS  OF  USE,  DATA,  OR PROFITS;  OR    */
59 /*    BUSINESS INTERRUPTION) HOWEVER CAUSED  AND ON ANY THEORY OF    */
60 /*    LIABILITY, WHETHER  IN CONTRACT, STRICT  LIABILITY, OR TORT    */
61 /*    (INCLUDING NEGLIGENCE OR OTHERWISE)  ARISING IN ANY WAY OUT    */
62 /*    OF  THE  USE OF  THIS  SOFTWARE,  EVEN  IF ADVISED  OF  THE    */
63 /*    POSSIBILITY OF SUCH DAMAGE.                                    */
64 /*                                                                   */
65 /* The views and conclusions contained in the software and           */
66 /* documentation are those of the authors and should not be          */
67 /* interpreted as representing official policies, either expressed   */
68 /* or implied, of The University of Texas at Austin.                 */
69 /*********************************************************************/
70
71 #ifndef PARAM_H
72 #define PARAM_H
73
74 #ifdef OPTERON
75
76 #define SNUMOPT         4
77 #define DNUMOPT         2
78
79 #define GEMM_DEFAULT_OFFSET_A  64
80 #define GEMM_DEFAULT_OFFSET_B 256
81 #define GEMM_DEFAULT_ALIGN 0x01ffffUL
82
83 #define SGEMM_DEFAULT_UNROLL_N 4
84 #define DGEMM_DEFAULT_UNROLL_N 4
85 #define QGEMM_DEFAULT_UNROLL_N 2
86 #define CGEMM_DEFAULT_UNROLL_N 2
87 #define ZGEMM_DEFAULT_UNROLL_N 2
88 #define XGEMM_DEFAULT_UNROLL_N 1
89
90 #ifdef ARCH_X86
91 #define SGEMM_DEFAULT_UNROLL_M 4
92 #define DGEMM_DEFAULT_UNROLL_M 2
93 #define QGEMM_DEFAULT_UNROLL_M 2
94 #define CGEMM_DEFAULT_UNROLL_M 2
95 #define ZGEMM_DEFAULT_UNROLL_M 1
96 #define XGEMM_DEFAULT_UNROLL_M 1
97 #else
98 #define SGEMM_DEFAULT_UNROLL_M 8
99 #define DGEMM_DEFAULT_UNROLL_M 4
100 #define QGEMM_DEFAULT_UNROLL_M 2
101 #define CGEMM_DEFAULT_UNROLL_M 4
102 #define ZGEMM_DEFAULT_UNROLL_M 2
103 #define XGEMM_DEFAULT_UNROLL_M 1
104 #endif
105
106 #define SGEMM_DEFAULT_P sgemm_p
107 #define DGEMM_DEFAULT_P dgemm_p
108 #define QGEMM_DEFAULT_P qgemm_p
109 #define CGEMM_DEFAULT_P cgemm_p
110 #define ZGEMM_DEFAULT_P zgemm_p
111 #define XGEMM_DEFAULT_P xgemm_p
112
113 #define SGEMM_DEFAULT_R sgemm_r
114 #define DGEMM_DEFAULT_R dgemm_r
115 #define QGEMM_DEFAULT_R qgemm_r
116 #define CGEMM_DEFAULT_R cgemm_r
117 #define ZGEMM_DEFAULT_R zgemm_r
118 #define XGEMM_DEFAULT_R xgemm_r
119
120 #ifdef ALLOC_HUGETLB
121
122 #define SGEMM_DEFAULT_Q 248
123 #define DGEMM_DEFAULT_Q 248
124 #define QGEMM_DEFAULT_Q 248
125 #define CGEMM_DEFAULT_Q 248
126 #define ZGEMM_DEFAULT_Q 248
127 #define XGEMM_DEFAULT_Q 248
128
129 #else
130
131 #define SGEMM_DEFAULT_Q 240
132 #define DGEMM_DEFAULT_Q 240
133 #define QGEMM_DEFAULT_Q 240
134 #define CGEMM_DEFAULT_Q 240
135 #define ZGEMM_DEFAULT_Q 240
136 #define XGEMM_DEFAULT_Q 240
137
138 #endif
139
140
141 #define SYMV_P  16
142 #define HAVE_EXCLUSIVE_CACHE
143
144 #endif
145
146 #if defined(BARCELONA) || defined(SHANGHAI) || defined(BOBCAT)
147
148 #define SNUMOPT         8
149 #define DNUMOPT         4
150
151 #define GEMM_DEFAULT_OFFSET_A  64
152 #define GEMM_DEFAULT_OFFSET_B 832
153 #define GEMM_DEFAULT_ALIGN 0x0fffUL
154
155 #define SGEMM_DEFAULT_UNROLL_N 4
156 #define DGEMM_DEFAULT_UNROLL_N 4
157 #define QGEMM_DEFAULT_UNROLL_N 2
158 #define CGEMM_DEFAULT_UNROLL_N 2
159 #define ZGEMM_DEFAULT_UNROLL_N 2
160 #define XGEMM_DEFAULT_UNROLL_N 1
161
162 #ifdef ARCH_X86
163 #define SGEMM_DEFAULT_UNROLL_M 4
164 #define DGEMM_DEFAULT_UNROLL_M 2
165 #define QGEMM_DEFAULT_UNROLL_M 2
166 #define CGEMM_DEFAULT_UNROLL_M 2
167 #define ZGEMM_DEFAULT_UNROLL_M 1
168 #define XGEMM_DEFAULT_UNROLL_M 1
169 #else
170 #define SGEMM_DEFAULT_UNROLL_M 8
171 #define DGEMM_DEFAULT_UNROLL_M 4
172 #define QGEMM_DEFAULT_UNROLL_M 2
173 #define CGEMM_DEFAULT_UNROLL_M 4
174 #define ZGEMM_DEFAULT_UNROLL_M 2
175 #define XGEMM_DEFAULT_UNROLL_M 1
176 #endif
177
178 #if 0
179 #define SGEMM_DEFAULT_P 496
180 #define DGEMM_DEFAULT_P 248
181 #define QGEMM_DEFAULT_P 124
182 #define CGEMM_DEFAULT_P 248
183 #define ZGEMM_DEFAULT_P 124
184 #define XGEMM_DEFAULT_P  62
185
186 #define SGEMM_DEFAULT_Q 248
187 #define DGEMM_DEFAULT_Q 248
188 #define QGEMM_DEFAULT_Q 248
189 #define CGEMM_DEFAULT_Q 248
190 #define ZGEMM_DEFAULT_Q 248
191 #define XGEMM_DEFAULT_Q 248
192
193 #else
194
195 #define SGEMM_DEFAULT_P 448
196 #define DGEMM_DEFAULT_P 224
197 #define QGEMM_DEFAULT_P 112
198 #define CGEMM_DEFAULT_P 224
199 #define ZGEMM_DEFAULT_P 112 
200 #define XGEMM_DEFAULT_P  56
201
202 #define SGEMM_DEFAULT_Q 224
203 #define DGEMM_DEFAULT_Q 224
204 #define QGEMM_DEFAULT_Q 224
205 #define CGEMM_DEFAULT_Q 224
206 #define ZGEMM_DEFAULT_Q 224
207 #define XGEMM_DEFAULT_Q 224
208
209 #endif
210
211 #define SGEMM_DEFAULT_R sgemm_r
212 #define QGEMM_DEFAULT_R qgemm_r
213 #define DGEMM_DEFAULT_R dgemm_r
214 #define CGEMM_DEFAULT_R cgemm_r
215 #define ZGEMM_DEFAULT_R zgemm_r
216 #define XGEMM_DEFAULT_R xgemm_r
217
218 #define SYMV_P  16
219 #define HAVE_EXCLUSIVE_CACHE
220
221 #define GEMM_THREAD gemm_thread_mn
222
223 #endif
224
225
226 #ifdef BULLDOZER
227
228 #define SNUMOPT         8
229 #define DNUMOPT         4
230
231 #define GEMM_DEFAULT_OFFSET_A  64
232 #define GEMM_DEFAULT_OFFSET_B 832
233 #define GEMM_DEFAULT_ALIGN 0x0fffUL
234
235
236
237 #define QGEMM_DEFAULT_UNROLL_N 2
238 #define CGEMM_DEFAULT_UNROLL_N 2
239 #define ZGEMM_DEFAULT_UNROLL_N 2
240 #define XGEMM_DEFAULT_UNROLL_N 1
241
242 #ifdef ARCH_X86
243 #define SGEMM_DEFAULT_UNROLL_N 4
244 #define DGEMM_DEFAULT_UNROLL_N 4
245 #define SGEMM_DEFAULT_UNROLL_M 4
246 #define DGEMM_DEFAULT_UNROLL_M 2
247 #define QGEMM_DEFAULT_UNROLL_M 2
248 #define CGEMM_DEFAULT_UNROLL_M 2
249 #define ZGEMM_DEFAULT_UNROLL_M 1
250 #define XGEMM_DEFAULT_UNROLL_M 1
251 #else
252 #define SGEMM_DEFAULT_UNROLL_N 2
253 #define DGEMM_DEFAULT_UNROLL_N 2
254 #define SGEMM_DEFAULT_UNROLL_M 16
255 #define DGEMM_DEFAULT_UNROLL_M 8
256 #define QGEMM_DEFAULT_UNROLL_M 2
257 #define CGEMM_DEFAULT_UNROLL_M 4
258 #define ZGEMM_DEFAULT_UNROLL_M 2
259 #define XGEMM_DEFAULT_UNROLL_M 1
260 #define CGEMM3M_DEFAULT_UNROLL_N 4
261 #define CGEMM3M_DEFAULT_UNROLL_M 8
262 #define ZGEMM3M_DEFAULT_UNROLL_N 4
263 #define ZGEMM3M_DEFAULT_UNROLL_M 4
264 #define GEMV_UNROLL 8
265 #endif
266
267
268 #if defined(ARCH_X86_64)
269 #define SGEMM_DEFAULT_P 768
270 #define DGEMM_DEFAULT_P 384
271 #else
272 #define SGEMM_DEFAULT_P 448
273 #define DGEMM_DEFAULT_P 224
274 #endif
275 #define QGEMM_DEFAULT_P 112
276 #define CGEMM_DEFAULT_P 224
277 #define ZGEMM_DEFAULT_P 112 
278 #define XGEMM_DEFAULT_P  56
279
280 #if defined(ARCH_X86_64)
281 #define SGEMM_DEFAULT_Q 168
282 #define DGEMM_DEFAULT_Q 168
283 #else
284 #define SGEMM_DEFAULT_Q 224
285 #define DGEMM_DEFAULT_Q 224
286 #endif
287 #define QGEMM_DEFAULT_Q 224
288 #define CGEMM_DEFAULT_Q 224
289 #define ZGEMM_DEFAULT_Q 224
290 #define XGEMM_DEFAULT_Q 224
291
292 #define SGEMM_DEFAULT_R sgemm_r
293 #define QGEMM_DEFAULT_R qgemm_r
294 #define DGEMM_DEFAULT_R dgemm_r
295 #define CGEMM_DEFAULT_R cgemm_r
296 #define ZGEMM_DEFAULT_R zgemm_r
297 #define XGEMM_DEFAULT_R xgemm_r
298
299 #define SYMV_P  16
300 #define HAVE_EXCLUSIVE_CACHE
301
302 #define GEMM_THREAD gemm_thread_mn
303
304 #endif
305
306 #ifdef ATHLON
307
308 #define SNUMOPT         4
309 #define DNUMOPT         2
310
311 #define GEMM_DEFAULT_OFFSET_A   0
312 #define GEMM_DEFAULT_OFFSET_B 384
313 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
314
315 #define SGEMM_DEFAULT_UNROLL_N 4
316 #define DGEMM_DEFAULT_UNROLL_N 4
317 #define QGEMM_DEFAULT_UNROLL_N 2
318 #define CGEMM_DEFAULT_UNROLL_N 2
319 #define ZGEMM_DEFAULT_UNROLL_N 2
320 #define XGEMM_DEFAULT_UNROLL_N 1
321
322 #define SGEMM_DEFAULT_UNROLL_M 2
323 #define DGEMM_DEFAULT_UNROLL_M 1
324 #define QGEMM_DEFAULT_UNROLL_M 2
325 #define CGEMM_DEFAULT_UNROLL_M 1
326 #define ZGEMM_DEFAULT_UNROLL_M 1
327 #define XGEMM_DEFAULT_UNROLL_M 1
328
329 #define SGEMM_DEFAULT_R sgemm_r
330 #define DGEMM_DEFAULT_R dgemm_r
331 #define QGEMM_DEFAULT_R qgemm_r
332 #define CGEMM_DEFAULT_R cgemm_r
333 #define ZGEMM_DEFAULT_R zgemm_r
334 #define XGEMM_DEFAULT_R xgemm_r
335
336 #define SGEMM_DEFAULT_P 208
337 #define DGEMM_DEFAULT_P 104
338 #define QGEMM_DEFAULT_P  56
339 #define CGEMM_DEFAULT_P 104
340 #define ZGEMM_DEFAULT_P  56
341 #define XGEMM_DEFAULT_P  28
342
343 #define SGEMM_DEFAULT_Q 208
344 #define DGEMM_DEFAULT_Q 208
345 #define QGEMM_DEFAULT_Q 208
346 #define CGEMM_DEFAULT_Q 208
347 #define ZGEMM_DEFAULT_Q 208
348 #define XGEMM_DEFAULT_Q 208
349
350 #define SYMV_P  16
351 #define HAVE_EXCLUSIVE_CACHE
352 #endif
353
354 #ifdef VIAC3
355
356 #define SNUMOPT         2
357 #define DNUMOPT         1
358
359 #define GEMM_DEFAULT_OFFSET_A   0
360 #define GEMM_DEFAULT_OFFSET_B 256
361 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
362
363 #define SGEMM_DEFAULT_UNROLL_N 4
364 #define DGEMM_DEFAULT_UNROLL_N 4
365 #define QGEMM_DEFAULT_UNROLL_N 2
366 #define CGEMM_DEFAULT_UNROLL_N 2
367 #define ZGEMM_DEFAULT_UNROLL_N 2
368 #define XGEMM_DEFAULT_UNROLL_N 1
369
370 #define SGEMM_DEFAULT_UNROLL_M 2
371 #define DGEMM_DEFAULT_UNROLL_M 1
372 #define QGEMM_DEFAULT_UNROLL_M 2
373 #define CGEMM_DEFAULT_UNROLL_M 1
374 #define ZGEMM_DEFAULT_UNROLL_M 1
375 #define XGEMM_DEFAULT_UNROLL_M 1
376
377 #define SGEMM_DEFAULT_R sgemm_r
378 #define DGEMM_DEFAULT_R dgemm_r
379 #define QGEMM_DEFAULT_R qgemm_r
380 #define CGEMM_DEFAULT_R cgemm_r
381 #define ZGEMM_DEFAULT_R zgemm_r
382 #define XGEMM_DEFAULT_R xgemm_r
383
384 #define SGEMM_DEFAULT_P 128
385 #define DGEMM_DEFAULT_P 128
386 #define QGEMM_DEFAULT_P 128
387 #define CGEMM_DEFAULT_P 128
388 #define ZGEMM_DEFAULT_P 128
389 #define XGEMM_DEFAULT_P 128
390
391 #define SGEMM_DEFAULT_Q 512
392 #define DGEMM_DEFAULT_Q 256
393 #define QGEMM_DEFAULT_Q 256
394 #define CGEMM_DEFAULT_Q 256
395 #define ZGEMM_DEFAULT_Q 128
396 #define XGEMM_DEFAULT_Q 128
397
398 #define SYMV_P  16
399 #endif
400
401 #ifdef NANO
402
403 #define SNUMOPT         4
404 #define DNUMOPT         2
405
406 #define GEMM_DEFAULT_OFFSET_A  64
407 #define GEMM_DEFAULT_OFFSET_B 256
408 #define GEMM_DEFAULT_ALIGN 0x01ffffUL
409
410 #ifdef ARCH_X86
411 #define SGEMM_DEFAULT_UNROLL_N 4
412 #define DGEMM_DEFAULT_UNROLL_N 4
413 #define QGEMM_DEFAULT_UNROLL_N 2
414 #define CGEMM_DEFAULT_UNROLL_N 2
415 #define ZGEMM_DEFAULT_UNROLL_N 2
416 #define XGEMM_DEFAULT_UNROLL_N 1
417
418 #define SGEMM_DEFAULT_UNROLL_M 4
419 #define DGEMM_DEFAULT_UNROLL_M 2
420 #define QGEMM_DEFAULT_UNROLL_M 2
421 #define CGEMM_DEFAULT_UNROLL_M 2
422 #define ZGEMM_DEFAULT_UNROLL_M 1
423 #define XGEMM_DEFAULT_UNROLL_M 1
424 #else
425 #define SGEMM_DEFAULT_UNROLL_N 8
426 #define DGEMM_DEFAULT_UNROLL_N 4
427 #define QGEMM_DEFAULT_UNROLL_N 2
428 #define CGEMM_DEFAULT_UNROLL_N 4
429 #define ZGEMM_DEFAULT_UNROLL_N 2
430 #define XGEMM_DEFAULT_UNROLL_N 1
431
432 #define SGEMM_DEFAULT_UNROLL_M 4
433 #define DGEMM_DEFAULT_UNROLL_M 4
434 #define QGEMM_DEFAULT_UNROLL_M 2
435 #define CGEMM_DEFAULT_UNROLL_M 2
436 #define ZGEMM_DEFAULT_UNROLL_M 2
437 #define XGEMM_DEFAULT_UNROLL_M 1
438 #endif
439
440 #define SGEMM_DEFAULT_P 288
441 #define DGEMM_DEFAULT_P 288
442 #define QGEMM_DEFAULT_P 288
443 #define CGEMM_DEFAULT_P 288
444 #define ZGEMM_DEFAULT_P 288
445 #define XGEMM_DEFAULT_P 288
446
447 #define SGEMM_DEFAULT_R sgemm_r
448 #define DGEMM_DEFAULT_R dgemm_r
449 #define QGEMM_DEFAULT_R qgemm_r
450 #define CGEMM_DEFAULT_R cgemm_r
451 #define ZGEMM_DEFAULT_R zgemm_r
452 #define XGEMM_DEFAULT_R xgemm_r
453
454 #define SGEMM_DEFAULT_Q 256
455 #define DGEMM_DEFAULT_Q 128
456 #define QGEMM_DEFAULT_Q  64
457 #define CGEMM_DEFAULT_Q 128
458 #define ZGEMM_DEFAULT_Q  64
459 #define XGEMM_DEFAULT_Q  32
460
461 #define SYMV_P  16
462 #define HAVE_EXCLUSIVE_CACHE
463
464 #endif
465
466 #if defined(PENTIUM) || defined(PENTIUM2) || defined(PENTIUM3)
467
468 #ifdef HAVE_SSE
469 #define SNUMOPT         2
470 #else
471 #define SNUMOPT         1
472 #endif
473 #define DNUMOPT         1
474
475 #define GEMM_DEFAULT_OFFSET_A 0
476 #define GEMM_DEFAULT_OFFSET_B 0
477 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
478
479 #ifdef HAVE_SSE
480 #define SGEMM_DEFAULT_UNROLL_M 8
481 #define CGEMM_DEFAULT_UNROLL_M 4
482 #else
483 #define SGEMM_DEFAULT_UNROLL_M 4
484 #define CGEMM_DEFAULT_UNROLL_M 2
485 #endif
486 #define DGEMM_DEFAULT_UNROLL_M 2
487 #define SGEMM_DEFAULT_UNROLL_N 2
488 #define DGEMM_DEFAULT_UNROLL_N 2
489 #define QGEMM_DEFAULT_UNROLL_M 2
490 #define QGEMM_DEFAULT_UNROLL_N 2
491 #define CGEMM_DEFAULT_UNROLL_N 1
492 #define ZGEMM_DEFAULT_UNROLL_M 1
493 #define ZGEMM_DEFAULT_UNROLL_N 1
494 #define XGEMM_DEFAULT_UNROLL_M 1
495 #define XGEMM_DEFAULT_UNROLL_N 1
496
497 #define SGEMM_DEFAULT_P sgemm_p
498 #define SGEMM_DEFAULT_Q 256
499 #define SGEMM_DEFAULT_R sgemm_r
500
501 #define DGEMM_DEFAULT_P dgemm_p
502 #define DGEMM_DEFAULT_Q 256
503 #define DGEMM_DEFAULT_R dgemm_r
504
505 #define QGEMM_DEFAULT_P qgemm_p
506 #define QGEMM_DEFAULT_Q 256
507 #define QGEMM_DEFAULT_R qgemm_r
508
509 #define CGEMM_DEFAULT_P cgemm_p
510 #define CGEMM_DEFAULT_Q 256
511 #define CGEMM_DEFAULT_R cgemm_r
512
513 #define ZGEMM_DEFAULT_P zgemm_p
514 #define ZGEMM_DEFAULT_Q 256
515 #define ZGEMM_DEFAULT_R zgemm_r
516
517 #define XGEMM_DEFAULT_P xgemm_p
518 #define XGEMM_DEFAULT_Q 256
519 #define XGEMM_DEFAULT_R xgemm_r
520
521 #define SYMV_P  4
522
523 #endif
524
525 #ifdef PENTIUMM
526
527 #define SNUMOPT         2
528 #define DNUMOPT         1
529
530 #define GEMM_DEFAULT_OFFSET_A 0
531 #define GEMM_DEFAULT_OFFSET_B 0
532 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
533
534 #ifdef CORE_YONAH
535 #define SGEMM_DEFAULT_UNROLL_M 4
536 #define SGEMM_DEFAULT_UNROLL_N 4
537 #define DGEMM_DEFAULT_UNROLL_M 2
538 #define DGEMM_DEFAULT_UNROLL_N 4
539 #define QGEMM_DEFAULT_UNROLL_M 2
540 #define QGEMM_DEFAULT_UNROLL_N 2
541 #define CGEMM_DEFAULT_UNROLL_M 2
542 #define CGEMM_DEFAULT_UNROLL_N 2
543 #define ZGEMM_DEFAULT_UNROLL_M 1
544 #define ZGEMM_DEFAULT_UNROLL_N 2
545 #define XGEMM_DEFAULT_UNROLL_M 1
546 #define XGEMM_DEFAULT_UNROLL_N 1
547 #else
548 #define SGEMM_DEFAULT_UNROLL_M 8
549 #define SGEMM_DEFAULT_UNROLL_N 2
550 #define DGEMM_DEFAULT_UNROLL_M 2
551 #define DGEMM_DEFAULT_UNROLL_N 2
552 #define QGEMM_DEFAULT_UNROLL_M 2
553 #define QGEMM_DEFAULT_UNROLL_N 2
554 #define CGEMM_DEFAULT_UNROLL_M 4
555 #define CGEMM_DEFAULT_UNROLL_N 1
556 #define ZGEMM_DEFAULT_UNROLL_M 1
557 #define ZGEMM_DEFAULT_UNROLL_N 1
558 #define XGEMM_DEFAULT_UNROLL_M 1
559 #define XGEMM_DEFAULT_UNROLL_N 1
560
561 #endif
562
563 #define SGEMM_DEFAULT_P sgemm_p
564 #define SGEMM_DEFAULT_Q 256
565 #define SGEMM_DEFAULT_R sgemm_r
566
567 #define DGEMM_DEFAULT_P dgemm_p
568 #define DGEMM_DEFAULT_Q 256
569 #define DGEMM_DEFAULT_R dgemm_r
570
571 #define QGEMM_DEFAULT_P qgemm_p
572 #define QGEMM_DEFAULT_Q 256
573 #define QGEMM_DEFAULT_R qgemm_r
574
575 #define CGEMM_DEFAULT_P cgemm_p
576 #define CGEMM_DEFAULT_Q 256
577 #define CGEMM_DEFAULT_R cgemm_r
578
579 #define ZGEMM_DEFAULT_P zgemm_p
580 #define ZGEMM_DEFAULT_Q 256
581 #define ZGEMM_DEFAULT_R zgemm_r
582
583 #define XGEMM_DEFAULT_P xgemm_p
584 #define XGEMM_DEFAULT_Q 256
585 #define XGEMM_DEFAULT_R xgemm_r
586
587 #define SYMV_P  4
588 #endif
589
590 #ifdef CORE_NORTHWOOD
591
592 #define SNUMOPT         4
593 #define DNUMOPT         2
594
595 #define GEMM_DEFAULT_OFFSET_A      0
596 #define GEMM_DEFAULT_OFFSET_B     32
597
598 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
599
600 #define SYMV_P  8
601
602 #define SGEMM_DEFAULT_UNROLL_M 8
603 #define DGEMM_DEFAULT_UNROLL_M 4
604 #define QGEMM_DEFAULT_UNROLL_M 2
605 #define CGEMM_DEFAULT_UNROLL_M 4
606 #define ZGEMM_DEFAULT_UNROLL_M 2
607 #define XGEMM_DEFAULT_UNROLL_M 1
608
609 #define SGEMM_DEFAULT_UNROLL_N 2
610 #define DGEMM_DEFAULT_UNROLL_N 2
611 #define QGEMM_DEFAULT_UNROLL_N 2
612 #define CGEMM_DEFAULT_UNROLL_N 1
613 #define ZGEMM_DEFAULT_UNROLL_N 1
614 #define XGEMM_DEFAULT_UNROLL_N 1
615
616 #define SGEMM_DEFAULT_P sgemm_p
617 #define SGEMM_DEFAULT_R sgemm_r
618
619 #define DGEMM_DEFAULT_P dgemm_p
620 #define DGEMM_DEFAULT_R dgemm_r
621
622 #define QGEMM_DEFAULT_P qgemm_p
623 #define QGEMM_DEFAULT_R qgemm_r
624
625 #define CGEMM_DEFAULT_P cgemm_p
626 #define CGEMM_DEFAULT_R cgemm_r
627
628 #define ZGEMM_DEFAULT_P zgemm_p
629 #define ZGEMM_DEFAULT_R zgemm_r
630
631 #define XGEMM_DEFAULT_P xgemm_p
632 #define XGEMM_DEFAULT_R xgemm_r
633
634 #define SGEMM_DEFAULT_Q 128
635 #define DGEMM_DEFAULT_Q 128
636 #define QGEMM_DEFAULT_Q 128
637 #define CGEMM_DEFAULT_Q 128
638 #define ZGEMM_DEFAULT_Q 128
639 #define XGEMM_DEFAULT_Q 128
640 #endif
641
642 #ifdef CORE_PRESCOTT
643
644 #define SNUMOPT         4
645 #define DNUMOPT         2
646
647 #ifndef __64BIT__
648 #define GEMM_DEFAULT_OFFSET_A    128
649 #define GEMM_DEFAULT_OFFSET_B    192
650 #else
651 #define GEMM_DEFAULT_OFFSET_A      0
652 #define GEMM_DEFAULT_OFFSET_B    256
653 #endif
654
655 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
656
657 #define SYMV_P  8
658
659 #ifdef ARCH_X86
660 #define SGEMM_DEFAULT_UNROLL_M 4
661 #define DGEMM_DEFAULT_UNROLL_M 2
662 #define QGEMM_DEFAULT_UNROLL_M 2
663 #define CGEMM_DEFAULT_UNROLL_M 2
664 #define ZGEMM_DEFAULT_UNROLL_M 1
665 #define XGEMM_DEFAULT_UNROLL_M 1
666 #else
667 #define SGEMM_DEFAULT_UNROLL_M 8
668 #define DGEMM_DEFAULT_UNROLL_M 4
669 #define QGEMM_DEFAULT_UNROLL_M 2
670 #define CGEMM_DEFAULT_UNROLL_M 4
671 #define ZGEMM_DEFAULT_UNROLL_M 2
672 #define XGEMM_DEFAULT_UNROLL_M 1
673 #endif
674
675 #define SGEMM_DEFAULT_UNROLL_N 4
676 #define DGEMM_DEFAULT_UNROLL_N 4
677 #define QGEMM_DEFAULT_UNROLL_N 2
678 #define CGEMM_DEFAULT_UNROLL_N 2
679 #define ZGEMM_DEFAULT_UNROLL_N 2
680 #define XGEMM_DEFAULT_UNROLL_N 1
681
682 #define SGEMM_DEFAULT_P sgemm_p
683 #define SGEMM_DEFAULT_R sgemm_r
684
685 #define DGEMM_DEFAULT_P dgemm_p
686 #define DGEMM_DEFAULT_R dgemm_r
687
688 #define QGEMM_DEFAULT_P qgemm_p
689 #define QGEMM_DEFAULT_R qgemm_r
690
691 #define CGEMM_DEFAULT_P cgemm_p
692 #define CGEMM_DEFAULT_R cgemm_r
693
694 #define ZGEMM_DEFAULT_P zgemm_p
695 #define ZGEMM_DEFAULT_R zgemm_r
696
697 #define XGEMM_DEFAULT_P xgemm_p
698 #define XGEMM_DEFAULT_R xgemm_r
699
700 #define SGEMM_DEFAULT_Q 128
701 #define DGEMM_DEFAULT_Q 128
702 #define QGEMM_DEFAULT_Q 128
703 #define CGEMM_DEFAULT_Q 128
704 #define ZGEMM_DEFAULT_Q 128
705 #define XGEMM_DEFAULT_Q 128
706 #endif
707
708 #ifdef CORE2
709
710 #define SNUMOPT         8
711 #define DNUMOPT         4
712
713 #define GEMM_DEFAULT_OFFSET_A    448
714 #define GEMM_DEFAULT_OFFSET_B    128
715 #define GEMM_DEFAULT_ALIGN 0x03fffUL
716
717 #define SYMV_P  8
718
719 #define SWITCH_RATIO    4
720
721 #ifdef ARCH_X86
722 #define SGEMM_DEFAULT_UNROLL_M 8
723 #define DGEMM_DEFAULT_UNROLL_M 4
724 #define QGEMM_DEFAULT_UNROLL_M 2
725 #define CGEMM_DEFAULT_UNROLL_M 4
726 #define ZGEMM_DEFAULT_UNROLL_M 2
727 #define XGEMM_DEFAULT_UNROLL_M 1
728
729 #define SGEMM_DEFAULT_UNROLL_N 2
730 #define DGEMM_DEFAULT_UNROLL_N 2
731 #define QGEMM_DEFAULT_UNROLL_N 2
732 #define CGEMM_DEFAULT_UNROLL_N 1
733 #define ZGEMM_DEFAULT_UNROLL_N 1
734 #define XGEMM_DEFAULT_UNROLL_N 1
735
736 #define MASK(a, b) ((((a) + (b) - 1) / (b)) * (b))
737
738 #else
739 #define SGEMM_DEFAULT_UNROLL_M 8
740 #define DGEMM_DEFAULT_UNROLL_M 4
741 #define QGEMM_DEFAULT_UNROLL_M 2
742 #define CGEMM_DEFAULT_UNROLL_M 4
743 #define ZGEMM_DEFAULT_UNROLL_M 2
744 #define XGEMM_DEFAULT_UNROLL_M 1
745
746 #define SGEMM_DEFAULT_UNROLL_N 4
747 #define DGEMM_DEFAULT_UNROLL_N 4
748 #define QGEMM_DEFAULT_UNROLL_N 2
749 #define CGEMM_DEFAULT_UNROLL_N 2
750 #define ZGEMM_DEFAULT_UNROLL_N 2
751 #define XGEMM_DEFAULT_UNROLL_N 1
752 #endif
753
754 #define SGEMM_DEFAULT_P sgemm_p
755 #define SGEMM_DEFAULT_R sgemm_r
756
757 #define DGEMM_DEFAULT_P dgemm_p
758 #define DGEMM_DEFAULT_R dgemm_r
759
760 #define QGEMM_DEFAULT_P qgemm_p
761 #define QGEMM_DEFAULT_R qgemm_r
762
763 #define CGEMM_DEFAULT_P cgemm_p
764 #define CGEMM_DEFAULT_R cgemm_r
765
766 #define ZGEMM_DEFAULT_P zgemm_p
767 #define ZGEMM_DEFAULT_R zgemm_r
768
769 #define XGEMM_DEFAULT_P xgemm_p
770 #define XGEMM_DEFAULT_R xgemm_r
771
772 #define SGEMM_DEFAULT_Q 256
773 #define DGEMM_DEFAULT_Q 256
774 #define QGEMM_DEFAULT_Q 256
775 #define CGEMM_DEFAULT_Q 256
776 #define ZGEMM_DEFAULT_Q 256
777 #define XGEMM_DEFAULT_Q 256
778
779 #endif
780
781 #ifdef PENRYN
782
783 #define SNUMOPT         8
784 #define DNUMOPT         4
785
786 #define GEMM_DEFAULT_OFFSET_A   128
787 #define GEMM_DEFAULT_OFFSET_B     0
788 #define GEMM_DEFAULT_ALIGN 0x03fffUL
789
790 #define SYMV_P  8
791
792 #define SWITCH_RATIO    4
793
794 #ifdef ARCH_X86
795 #define SGEMM_DEFAULT_UNROLL_M 4
796 #define DGEMM_DEFAULT_UNROLL_M 2
797 #define QGEMM_DEFAULT_UNROLL_M 2
798 #define CGEMM_DEFAULT_UNROLL_M 2
799 #define ZGEMM_DEFAULT_UNROLL_M 1
800 #define XGEMM_DEFAULT_UNROLL_M 1
801
802 #define SGEMM_DEFAULT_UNROLL_N 4
803 #define DGEMM_DEFAULT_UNROLL_N 4
804 #define QGEMM_DEFAULT_UNROLL_N 2
805 #define CGEMM_DEFAULT_UNROLL_N 2
806 #define ZGEMM_DEFAULT_UNROLL_N 2
807 #define XGEMM_DEFAULT_UNROLL_N 1
808 #else
809 #define SGEMM_DEFAULT_UNROLL_M 8
810 #define DGEMM_DEFAULT_UNROLL_M 4
811 #define QGEMM_DEFAULT_UNROLL_M 2
812 #define CGEMM_DEFAULT_UNROLL_M 4
813 #define ZGEMM_DEFAULT_UNROLL_M 2
814 #define XGEMM_DEFAULT_UNROLL_M 1
815
816 #define SGEMM_DEFAULT_UNROLL_N 4
817 #define DGEMM_DEFAULT_UNROLL_N 4
818 #define QGEMM_DEFAULT_UNROLL_N 2
819 #define CGEMM_DEFAULT_UNROLL_N 2
820 #define ZGEMM_DEFAULT_UNROLL_N 2
821 #define XGEMM_DEFAULT_UNROLL_N 1
822 #endif
823
824 #define SGEMM_DEFAULT_P sgemm_p
825 #define SGEMM_DEFAULT_R sgemm_r
826
827 #define DGEMM_DEFAULT_P dgemm_p
828 #define DGEMM_DEFAULT_R dgemm_r
829
830 #define QGEMM_DEFAULT_P qgemm_p
831 #define QGEMM_DEFAULT_R qgemm_r
832
833 #define CGEMM_DEFAULT_P cgemm_p
834 #define CGEMM_DEFAULT_R cgemm_r
835
836 #define ZGEMM_DEFAULT_P zgemm_p
837 #define ZGEMM_DEFAULT_R zgemm_r
838
839 #define XGEMM_DEFAULT_P xgemm_p
840 #define XGEMM_DEFAULT_R xgemm_r
841
842 #define SGEMM_DEFAULT_Q 512
843 #define DGEMM_DEFAULT_Q 256
844 #define QGEMM_DEFAULT_Q 128
845 #define CGEMM_DEFAULT_Q 512
846 #define ZGEMM_DEFAULT_Q 256
847 #define XGEMM_DEFAULT_Q 128
848
849 #define GETRF_FACTOR 0.75
850 #endif
851
852 #ifdef DUNNINGTON
853
854 #define SNUMOPT         8
855 #define DNUMOPT         4
856
857 #define GEMM_DEFAULT_OFFSET_A   128
858 #define GEMM_DEFAULT_OFFSET_B     0
859 #define GEMM_DEFAULT_ALIGN 0x03fffUL
860
861 #define SYMV_P  8
862
863 #define SWITCH_RATIO    4
864
865 #ifdef ARCH_X86
866 #define SGEMM_DEFAULT_UNROLL_M 4
867 #define DGEMM_DEFAULT_UNROLL_M 2
868 #define QGEMM_DEFAULT_UNROLL_M 2
869 #define CGEMM_DEFAULT_UNROLL_M 2
870 #define ZGEMM_DEFAULT_UNROLL_M 1
871 #define XGEMM_DEFAULT_UNROLL_M 1
872
873 #define SGEMM_DEFAULT_UNROLL_N 4
874 #define DGEMM_DEFAULT_UNROLL_N 4
875 #define QGEMM_DEFAULT_UNROLL_N 2
876 #define CGEMM_DEFAULT_UNROLL_N 2
877 #define ZGEMM_DEFAULT_UNROLL_N 2
878 #define XGEMM_DEFAULT_UNROLL_N 1
879 #else
880 #define SGEMM_DEFAULT_UNROLL_M 8
881 #define DGEMM_DEFAULT_UNROLL_M 4
882 #define QGEMM_DEFAULT_UNROLL_M 2
883 #define CGEMM_DEFAULT_UNROLL_M 4
884 #define ZGEMM_DEFAULT_UNROLL_M 2
885 #define XGEMM_DEFAULT_UNROLL_M 1
886
887 #define SGEMM_DEFAULT_UNROLL_N 4
888 #define DGEMM_DEFAULT_UNROLL_N 4
889 #define QGEMM_DEFAULT_UNROLL_N 2
890 #define CGEMM_DEFAULT_UNROLL_N 2
891 #define ZGEMM_DEFAULT_UNROLL_N 2
892 #define XGEMM_DEFAULT_UNROLL_N 1
893 #endif
894
895 #define SGEMM_DEFAULT_P sgemm_p
896 #define SGEMM_DEFAULT_R sgemm_r
897
898 #define DGEMM_DEFAULT_P dgemm_p
899 #define DGEMM_DEFAULT_R dgemm_r
900
901 #define QGEMM_DEFAULT_P qgemm_p
902 #define QGEMM_DEFAULT_R qgemm_r
903
904 #define CGEMM_DEFAULT_P cgemm_p
905 #define CGEMM_DEFAULT_R cgemm_r
906
907 #define ZGEMM_DEFAULT_P zgemm_p
908 #define ZGEMM_DEFAULT_R zgemm_r
909
910 #define XGEMM_DEFAULT_P xgemm_p
911 #define XGEMM_DEFAULT_R xgemm_r
912
913 #define SGEMM_DEFAULT_Q 768
914 #define DGEMM_DEFAULT_Q 384
915 #define QGEMM_DEFAULT_Q 192
916 #define CGEMM_DEFAULT_Q 768
917 #define ZGEMM_DEFAULT_Q 384
918 #define XGEMM_DEFAULT_Q 192
919
920 #define GETRF_FACTOR 0.75
921 #define GEMM_THREAD gemm_thread_mn
922 #endif
923
924 #ifdef NEHALEM
925
926 #define SNUMOPT         8
927 #define DNUMOPT         4
928
929 #define GEMM_DEFAULT_OFFSET_A    32
930 #define GEMM_DEFAULT_OFFSET_B     0
931 #define GEMM_DEFAULT_ALIGN 0x03fffUL
932
933 #define SYMV_P  8
934
935 #define SWITCH_RATIO    4
936
937 #ifdef ARCH_X86
938 #define SGEMM_DEFAULT_UNROLL_M 4
939 #define DGEMM_DEFAULT_UNROLL_M 2
940 #define QGEMM_DEFAULT_UNROLL_M 2
941 #define CGEMM_DEFAULT_UNROLL_M 2
942 #define ZGEMM_DEFAULT_UNROLL_M 1
943 #define XGEMM_DEFAULT_UNROLL_M 1
944
945 #define SGEMM_DEFAULT_UNROLL_N 4
946 #define DGEMM_DEFAULT_UNROLL_N 4
947 #define QGEMM_DEFAULT_UNROLL_N 2
948 #define CGEMM_DEFAULT_UNROLL_N 2
949 #define ZGEMM_DEFAULT_UNROLL_N 2
950 #define XGEMM_DEFAULT_UNROLL_N 1
951 #else
952 #define SGEMM_DEFAULT_UNROLL_M 4
953 #define DGEMM_DEFAULT_UNROLL_M 2
954 #define QGEMM_DEFAULT_UNROLL_M 2
955 #define CGEMM_DEFAULT_UNROLL_M 2
956 #define ZGEMM_DEFAULT_UNROLL_M 1
957 #define XGEMM_DEFAULT_UNROLL_M 1
958
959 #define SGEMM_DEFAULT_UNROLL_N 8
960 #define DGEMM_DEFAULT_UNROLL_N 8
961 #define QGEMM_DEFAULT_UNROLL_N 2
962 #define CGEMM_DEFAULT_UNROLL_N 4
963 #define ZGEMM_DEFAULT_UNROLL_N 4
964 #define XGEMM_DEFAULT_UNROLL_N 1
965 #endif
966
967 #define SGEMM_DEFAULT_P 504
968 #define SGEMM_DEFAULT_R sgemm_r
969
970 #define DGEMM_DEFAULT_P 504
971 #define DGEMM_DEFAULT_R dgemm_r
972
973 #define QGEMM_DEFAULT_P 504
974 #define QGEMM_DEFAULT_R qgemm_r
975
976 #define CGEMM_DEFAULT_P 252
977 #define CGEMM_DEFAULT_R cgemm_r
978
979 #define ZGEMM_DEFAULT_P 252
980 #define ZGEMM_DEFAULT_R zgemm_r
981
982 #define XGEMM_DEFAULT_P 252
983 #define XGEMM_DEFAULT_R xgemm_r
984
985 #define SGEMM_DEFAULT_Q 512
986 #define DGEMM_DEFAULT_Q 256
987 #define QGEMM_DEFAULT_Q 128
988 #define CGEMM_DEFAULT_Q 512
989 #define ZGEMM_DEFAULT_Q 256
990 #define XGEMM_DEFAULT_Q 128
991
992 #define GETRF_FACTOR 0.72
993
994 #endif
995
996
997 #ifdef SANDYBRIDGE
998
999 #define SNUMOPT         8
1000 #define DNUMOPT         4
1001
1002 #define GEMM_DEFAULT_OFFSET_A     0
1003 #define GEMM_DEFAULT_OFFSET_B     0
1004 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1005
1006 #define SYMV_P  8
1007
1008 #define SWITCH_RATIO    4
1009
1010 #ifdef ARCH_X86
1011 #define SGEMM_DEFAULT_UNROLL_M 4
1012 #define DGEMM_DEFAULT_UNROLL_M 2
1013 #define QGEMM_DEFAULT_UNROLL_M 2
1014 #define CGEMM_DEFAULT_UNROLL_M 2
1015 #define ZGEMM_DEFAULT_UNROLL_M 1
1016 #define XGEMM_DEFAULT_UNROLL_M 1
1017
1018 #define SGEMM_DEFAULT_UNROLL_N 4
1019 #define DGEMM_DEFAULT_UNROLL_N 4
1020 #define QGEMM_DEFAULT_UNROLL_N 2
1021 #define CGEMM_DEFAULT_UNROLL_N 2
1022 #define ZGEMM_DEFAULT_UNROLL_N 2
1023 #define XGEMM_DEFAULT_UNROLL_N 1
1024 #else
1025 #define SGEMM_DEFAULT_UNROLL_M 8
1026 #define DGEMM_DEFAULT_UNROLL_M 8
1027 #define QGEMM_DEFAULT_UNROLL_M 2
1028 #define CGEMM_DEFAULT_UNROLL_M 8
1029 #define ZGEMM_DEFAULT_UNROLL_M 4
1030 #define XGEMM_DEFAULT_UNROLL_M 1
1031
1032 #define SGEMM_DEFAULT_UNROLL_N 8
1033 #define DGEMM_DEFAULT_UNROLL_N 4
1034 #define QGEMM_DEFAULT_UNROLL_N 2
1035 #define CGEMM_DEFAULT_UNROLL_N 4
1036 #define ZGEMM_DEFAULT_UNROLL_N 4
1037 #define XGEMM_DEFAULT_UNROLL_N 1
1038 #endif
1039
1040 #define SGEMM_DEFAULT_P 512
1041 #define SGEMM_DEFAULT_R sgemm_r
1042 //#define SGEMM_DEFAULT_R 1024
1043
1044 #define DGEMM_DEFAULT_P 512
1045 #define DGEMM_DEFAULT_R dgemm_r
1046 //#define DGEMM_DEFAULT_R 1024
1047
1048 #define QGEMM_DEFAULT_P 504
1049 #define QGEMM_DEFAULT_R qgemm_r
1050
1051 #define CGEMM_DEFAULT_P 128
1052 //#define CGEMM_DEFAULT_R cgemm_r
1053 #define CGEMM_DEFAULT_R 1024
1054
1055 #define ZGEMM_DEFAULT_P 512
1056 #define ZGEMM_DEFAULT_R zgemm_r
1057 //#define ZGEMM_DEFAULT_R 1024
1058
1059 #define XGEMM_DEFAULT_P 252
1060 #define XGEMM_DEFAULT_R xgemm_r
1061
1062 #define SGEMM_DEFAULT_Q 256
1063 #define DGEMM_DEFAULT_Q 256
1064 #define QGEMM_DEFAULT_Q 128
1065 #define CGEMM_DEFAULT_Q 256 
1066 #define ZGEMM_DEFAULT_Q 192
1067 #define XGEMM_DEFAULT_Q 128
1068
1069 #define GETRF_FACTOR 0.72
1070
1071 #endif
1072
1073
1074
1075 #ifdef ATOM
1076
1077 #define SNUMOPT         2
1078 #define DNUMOPT         1
1079
1080 #define GEMM_DEFAULT_OFFSET_A     64
1081 #define GEMM_DEFAULT_OFFSET_B      0
1082 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
1083
1084 #define SYMV_P  8
1085
1086 #ifdef ARCH_X86
1087 #define SGEMM_DEFAULT_UNROLL_M 4
1088 #define DGEMM_DEFAULT_UNROLL_M 2
1089 #define QGEMM_DEFAULT_UNROLL_M 2
1090 #define CGEMM_DEFAULT_UNROLL_M 2
1091 #define ZGEMM_DEFAULT_UNROLL_M 1
1092 #define XGEMM_DEFAULT_UNROLL_M 1
1093 #else
1094 #define SGEMM_DEFAULT_UNROLL_M 8
1095 #define DGEMM_DEFAULT_UNROLL_M 4
1096 #define QGEMM_DEFAULT_UNROLL_M 2
1097 #define CGEMM_DEFAULT_UNROLL_M 4
1098 #define ZGEMM_DEFAULT_UNROLL_M 2
1099 #define XGEMM_DEFAULT_UNROLL_M 1
1100 #endif
1101
1102 #define SGEMM_DEFAULT_UNROLL_N 4
1103 #define DGEMM_DEFAULT_UNROLL_N 2
1104 #define QGEMM_DEFAULT_UNROLL_N 2
1105 #define CGEMM_DEFAULT_UNROLL_N 2
1106 #define ZGEMM_DEFAULT_UNROLL_N 1
1107 #define XGEMM_DEFAULT_UNROLL_N 1
1108
1109 #define SGEMM_DEFAULT_P sgemm_p
1110 #define SGEMM_DEFAULT_R sgemm_r
1111
1112 #define DGEMM_DEFAULT_P dgemm_p
1113 #define DGEMM_DEFAULT_R dgemm_r
1114
1115 #define QGEMM_DEFAULT_P qgemm_p
1116 #define QGEMM_DEFAULT_R qgemm_r
1117
1118 #define CGEMM_DEFAULT_P cgemm_p
1119 #define CGEMM_DEFAULT_R cgemm_r
1120
1121 #define ZGEMM_DEFAULT_P zgemm_p
1122 #define ZGEMM_DEFAULT_R zgemm_r
1123
1124 #define XGEMM_DEFAULT_P xgemm_p
1125 #define XGEMM_DEFAULT_R xgemm_r
1126
1127 #define SGEMM_DEFAULT_Q 256
1128 #define DGEMM_DEFAULT_Q 256
1129 #define QGEMM_DEFAULT_Q 256
1130 #define CGEMM_DEFAULT_Q 256
1131 #define ZGEMM_DEFAULT_Q 256
1132 #define XGEMM_DEFAULT_Q 256
1133
1134 #endif
1135
1136
1137 #ifdef ITANIUM2
1138
1139 #define SNUMOPT         4
1140 #define DNUMOPT         4
1141
1142 #define GEMM_DEFAULT_OFFSET_A 0
1143 #define GEMM_DEFAULT_OFFSET_B 128
1144 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1145
1146 #define SGEMM_DEFAULT_UNROLL_M 8
1147 #define SGEMM_DEFAULT_UNROLL_N 8
1148 #define DGEMM_DEFAULT_UNROLL_M 8
1149 #define DGEMM_DEFAULT_UNROLL_N 8
1150 #define QGEMM_DEFAULT_UNROLL_M 8
1151 #define QGEMM_DEFAULT_UNROLL_N 8
1152 #define CGEMM_DEFAULT_UNROLL_M 4
1153 #define CGEMM_DEFAULT_UNROLL_N 4
1154 #define ZGEMM_DEFAULT_UNROLL_M 4
1155 #define ZGEMM_DEFAULT_UNROLL_N 4
1156 #define XGEMM_DEFAULT_UNROLL_M 4
1157 #define XGEMM_DEFAULT_UNROLL_N 4
1158
1159 #define SGEMM_DEFAULT_P sgemm_p
1160 #define DGEMM_DEFAULT_P dgemm_p
1161 #define QGEMM_DEFAULT_P qgemm_p
1162 #define CGEMM_DEFAULT_P cgemm_p
1163 #define ZGEMM_DEFAULT_P zgemm_p
1164 #define XGEMM_DEFAULT_P xgemm_p
1165
1166 #define SGEMM_DEFAULT_Q 1024
1167 #define DGEMM_DEFAULT_Q 1024
1168 #define QGEMM_DEFAULT_Q 1024
1169 #define CGEMM_DEFAULT_Q 1024
1170 #define ZGEMM_DEFAULT_Q 1024
1171 #define XGEMM_DEFAULT_Q 1024
1172
1173 #define SGEMM_DEFAULT_R sgemm_r
1174 #define DGEMM_DEFAULT_R dgemm_r
1175 #define QGEMM_DEFAULT_R qgemm_r
1176 #define CGEMM_DEFAULT_R cgemm_r
1177 #define ZGEMM_DEFAULT_R zgemm_r
1178 #define XGEMM_DEFAULT_R xgemm_r
1179
1180 #define SYMV_P   16
1181
1182 #define GETRF_FACTOR 0.65
1183
1184 #endif
1185
1186 #if defined(EV4) || defined(EV5) || defined(EV6)
1187
1188 #ifdef EV4
1189 #define SNUMOPT         1
1190 #define DNUMOPT         1
1191 #else
1192 #define SNUMOPT         2
1193 #define DNUMOPT         2
1194 #endif
1195
1196 #define GEMM_DEFAULT_OFFSET_A 512
1197 #define GEMM_DEFAULT_OFFSET_B 512
1198 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
1199
1200 #define SGEMM_DEFAULT_UNROLL_M 4
1201 #define SGEMM_DEFAULT_UNROLL_N 4
1202 #define DGEMM_DEFAULT_UNROLL_M 4
1203 #define DGEMM_DEFAULT_UNROLL_N 4
1204 #define CGEMM_DEFAULT_UNROLL_M 2
1205 #define CGEMM_DEFAULT_UNROLL_N 2
1206 #define ZGEMM_DEFAULT_UNROLL_M 2
1207 #define ZGEMM_DEFAULT_UNROLL_N 2
1208
1209 #define SYMV_P   8
1210
1211 #ifdef EV4
1212 #define SGEMM_DEFAULT_P  32
1213 #define SGEMM_DEFAULT_Q 112
1214 #define SGEMM_DEFAULT_R 256
1215
1216 #define DGEMM_DEFAULT_P  32
1217 #define DGEMM_DEFAULT_Q  56
1218 #define DGEMM_DEFAULT_R 256
1219
1220 #define CGEMM_DEFAULT_P  32
1221 #define CGEMM_DEFAULT_Q  64
1222 #define CGEMM_DEFAULT_R 240
1223
1224 #define ZGEMM_DEFAULT_P  32
1225 #define ZGEMM_DEFAULT_Q  32
1226 #define ZGEMM_DEFAULT_R 240
1227 #endif
1228
1229 #ifdef EV5
1230 #define SGEMM_DEFAULT_P  64
1231 #define SGEMM_DEFAULT_Q 256
1232
1233 #define DGEMM_DEFAULT_P  64
1234 #define DGEMM_DEFAULT_Q 128
1235
1236 #define CGEMM_DEFAULT_P  64
1237 #define CGEMM_DEFAULT_Q 128
1238
1239 #define ZGEMM_DEFAULT_P  64
1240 #define ZGEMM_DEFAULT_Q  64
1241 #endif
1242
1243 #ifdef EV6
1244 #define SGEMM_DEFAULT_P 256
1245 #define SGEMM_DEFAULT_Q 512
1246
1247 #define DGEMM_DEFAULT_P 256
1248 #define DGEMM_DEFAULT_Q 256
1249
1250 #define CGEMM_DEFAULT_P 256
1251 #define CGEMM_DEFAULT_Q 256
1252
1253 #define ZGEMM_DEFAULT_P 128
1254 #define ZGEMM_DEFAULT_Q 256
1255 #endif
1256
1257 #endif
1258
1259 #ifdef CELL
1260
1261 #define SNUMOPT         2
1262 #define DNUMOPT         2
1263
1264 #define GEMM_DEFAULT_OFFSET_A 0
1265 #define GEMM_DEFAULT_OFFSET_B 8192
1266 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
1267
1268 #define SGEMM_DEFAULT_UNROLL_M 16
1269 #define SGEMM_DEFAULT_UNROLL_N 4
1270 #define DGEMM_DEFAULT_UNROLL_M 4
1271 #define DGEMM_DEFAULT_UNROLL_N 4
1272 #define CGEMM_DEFAULT_UNROLL_M 8
1273 #define CGEMM_DEFAULT_UNROLL_N 2
1274 #define ZGEMM_DEFAULT_UNROLL_M 2
1275 #define ZGEMM_DEFAULT_UNROLL_N 2
1276
1277 #define SGEMM_DEFAULT_P 128
1278 #define DGEMM_DEFAULT_P 128
1279 #define CGEMM_DEFAULT_P 128
1280 #define ZGEMM_DEFAULT_P 128
1281
1282 #define SGEMM_DEFAULT_Q  512
1283 #define DGEMM_DEFAULT_Q  256
1284 #define CGEMM_DEFAULT_Q  256
1285 #define ZGEMM_DEFAULT_Q  128
1286
1287 #define SYMV_P   4
1288 #endif
1289
1290 #ifdef PPCG4
1291 #define GEMM_DEFAULT_OFFSET_A    0
1292 #define GEMM_DEFAULT_OFFSET_B 1024
1293 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
1294
1295 #define SGEMM_DEFAULT_UNROLL_M 16
1296 #define SGEMM_DEFAULT_UNROLL_N 4
1297 #define DGEMM_DEFAULT_UNROLL_M 4
1298 #define DGEMM_DEFAULT_UNROLL_N 4
1299 #define CGEMM_DEFAULT_UNROLL_M 8
1300 #define CGEMM_DEFAULT_UNROLL_N 2
1301 #define ZGEMM_DEFAULT_UNROLL_M 2
1302 #define ZGEMM_DEFAULT_UNROLL_N 2
1303
1304 #define SGEMM_DEFAULT_P 256
1305 #define DGEMM_DEFAULT_P 128
1306 #define CGEMM_DEFAULT_P 128
1307 #define ZGEMM_DEFAULT_P  64
1308
1309 #define SGEMM_DEFAULT_Q 256
1310 #define DGEMM_DEFAULT_Q 256
1311 #define CGEMM_DEFAULT_Q 256
1312 #define ZGEMM_DEFAULT_Q 256
1313
1314 #define SYMV_P   4
1315 #endif
1316
1317 #ifdef PPC970
1318
1319 #define SNUMOPT         4
1320 #define DNUMOPT         4
1321
1322 #define GEMM_DEFAULT_OFFSET_A 2688
1323 #define GEMM_DEFAULT_OFFSET_B 3072
1324 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1325
1326 #define SGEMM_DEFAULT_UNROLL_M 16
1327 #define SGEMM_DEFAULT_UNROLL_N 4
1328 #define DGEMM_DEFAULT_UNROLL_M 4
1329 #define DGEMM_DEFAULT_UNROLL_N 4
1330 #define CGEMM_DEFAULT_UNROLL_M 8
1331 #define CGEMM_DEFAULT_UNROLL_N 2
1332 #define ZGEMM_DEFAULT_UNROLL_M 2
1333 #define ZGEMM_DEFAULT_UNROLL_N 2
1334
1335 #ifdef OS_LINUX
1336 #if L2_SIZE == 1024976
1337 #define SGEMM_DEFAULT_P 320
1338 #define DGEMM_DEFAULT_P 256
1339 #define CGEMM_DEFAULT_P 256
1340 #define ZGEMM_DEFAULT_P 256
1341 #else
1342 #define SGEMM_DEFAULT_P 176
1343 #define DGEMM_DEFAULT_P 176
1344 #define CGEMM_DEFAULT_P 176
1345 #define ZGEMM_DEFAULT_P 176
1346 #endif
1347 #endif
1348
1349 #define SGEMM_DEFAULT_Q 512
1350 #define DGEMM_DEFAULT_Q 256
1351 #define CGEMM_DEFAULT_Q 256
1352 #define ZGEMM_DEFAULT_Q 128
1353
1354 #define SYMV_P   4
1355
1356 #endif
1357
1358 #ifdef PPC440
1359
1360 #define SNUMOPT         2
1361 #define DNUMOPT         2
1362
1363 #define GEMM_DEFAULT_OFFSET_A (32 * 0)
1364 #define GEMM_DEFAULT_OFFSET_B (32 * 0)
1365 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
1366
1367 #define SGEMM_DEFAULT_UNROLL_M 4
1368 #define SGEMM_DEFAULT_UNROLL_N 4
1369 #define DGEMM_DEFAULT_UNROLL_M 4
1370 #define DGEMM_DEFAULT_UNROLL_N 4
1371 #define CGEMM_DEFAULT_UNROLL_M 2
1372 #define CGEMM_DEFAULT_UNROLL_N 2
1373 #define ZGEMM_DEFAULT_UNROLL_M 2
1374 #define ZGEMM_DEFAULT_UNROLL_N 2
1375
1376 #define SGEMM_DEFAULT_P 512
1377 #define DGEMM_DEFAULT_P 512
1378 #define CGEMM_DEFAULT_P 512
1379 #define ZGEMM_DEFAULT_P 512
1380
1381 #define SGEMM_DEFAULT_Q 1024
1382 #define DGEMM_DEFAULT_Q  512
1383 #define CGEMM_DEFAULT_Q  512
1384 #define ZGEMM_DEFAULT_Q  256
1385
1386 #define SGEMM_DEFAULT_R SGEMM_DEFAULT_P
1387 #define DGEMM_DEFAULT_R DGEMM_DEFAULT_P
1388 #define CGEMM_DEFAULT_R CGEMM_DEFAULT_P
1389 #define ZGEMM_DEFAULT_R ZGEMM_DEFAULT_P
1390
1391 #define SYMV_P   4
1392 #endif
1393
1394 #ifdef PPC440FP2
1395
1396 #define SNUMOPT         4
1397 #define DNUMOPT         4
1398
1399 #define GEMM_DEFAULT_OFFSET_A (32 * 0)
1400 #define GEMM_DEFAULT_OFFSET_B (32 * 0)
1401 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
1402
1403 #define SGEMM_DEFAULT_UNROLL_M 8
1404 #define SGEMM_DEFAULT_UNROLL_N 4
1405 #define DGEMM_DEFAULT_UNROLL_M 8
1406 #define DGEMM_DEFAULT_UNROLL_N 4
1407 #define CGEMM_DEFAULT_UNROLL_M 4
1408 #define CGEMM_DEFAULT_UNROLL_N 2
1409 #define ZGEMM_DEFAULT_UNROLL_M 4
1410 #define ZGEMM_DEFAULT_UNROLL_N 2
1411
1412 #define SGEMM_DEFAULT_P 128
1413 #define DGEMM_DEFAULT_P 128
1414 #define CGEMM_DEFAULT_P 128
1415 #define ZGEMM_DEFAULT_P 128
1416 #if 1
1417 #define SGEMM_DEFAULT_Q 4096
1418 #define DGEMM_DEFAULT_Q 3072
1419 #define CGEMM_DEFAULT_Q 2048
1420 #define ZGEMM_DEFAULT_Q 1024
1421 #else
1422 #define SGEMM_DEFAULT_Q  512
1423 #define DGEMM_DEFAULT_Q  256
1424 #define CGEMM_DEFAULT_Q  256
1425 #define ZGEMM_DEFAULT_Q  128
1426 #endif
1427
1428 #define SYMV_P   4
1429 #endif
1430
1431
1432
1433 #if defined(POWER3) || defined(POWER4) || defined(POWER5)
1434 #define GEMM_DEFAULT_OFFSET_A 0
1435 #define GEMM_DEFAULT_OFFSET_B 2048
1436 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
1437
1438 #define SGEMM_DEFAULT_UNROLL_M 4
1439 #define SGEMM_DEFAULT_UNROLL_N 4
1440 #define DGEMM_DEFAULT_UNROLL_M 4
1441 #define DGEMM_DEFAULT_UNROLL_N 4
1442 #define CGEMM_DEFAULT_UNROLL_M 2
1443 #define CGEMM_DEFAULT_UNROLL_N 2
1444 #define ZGEMM_DEFAULT_UNROLL_M 2
1445 #define ZGEMM_DEFAULT_UNROLL_N 2
1446
1447 #ifdef POWER3
1448
1449 #define SNUMOPT         4
1450 #define DNUMOPT         4
1451
1452 #define SGEMM_DEFAULT_P 256
1453 #define SGEMM_DEFAULT_Q 432
1454 #define SGEMM_DEFAULT_R 1012
1455
1456 #define DGEMM_DEFAULT_P 256
1457 #define DGEMM_DEFAULT_Q 216
1458 #define DGEMM_DEFAULT_R 1012
1459
1460 #define ZGEMM_DEFAULT_P 256
1461 #define ZGEMM_DEFAULT_Q 104
1462 #define ZGEMM_DEFAULT_R 1012
1463 #endif
1464
1465 #if defined(POWER4)
1466 #ifdef ALLOC_HUGETLB
1467 #define SGEMM_DEFAULT_P 184
1468 #define DGEMM_DEFAULT_P 184
1469 #define CGEMM_DEFAULT_P 184
1470 #define ZGEMM_DEFAULT_P 184
1471 #else
1472 #define SGEMM_DEFAULT_P 144
1473 #define DGEMM_DEFAULT_P 144
1474 #define CGEMM_DEFAULT_P 144
1475 #define ZGEMM_DEFAULT_P 144
1476 #endif
1477 #endif
1478
1479 #if defined(POWER5)
1480 #ifdef ALLOC_HUGETLB
1481 #define SGEMM_DEFAULT_P 512
1482 #define DGEMM_DEFAULT_P 256
1483 #define CGEMM_DEFAULT_P 256
1484 #define ZGEMM_DEFAULT_P 128
1485 #else
1486 #define SGEMM_DEFAULT_P 320
1487 #define DGEMM_DEFAULT_P 160
1488 #define CGEMM_DEFAULT_P 160
1489 #define ZGEMM_DEFAULT_P  80
1490 #endif
1491
1492 #define SGEMM_DEFAULT_Q 256
1493 #define CGEMM_DEFAULT_Q 256
1494 #define DGEMM_DEFAULT_Q 256
1495 #define ZGEMM_DEFAULT_Q 256
1496 #endif
1497
1498 #define SYMV_P   8
1499
1500 #endif
1501
1502 #if defined(POWER6)
1503
1504 #define SNUMOPT         4
1505 #define DNUMOPT         4
1506
1507 #define GEMM_DEFAULT_OFFSET_A  384
1508 #define GEMM_DEFAULT_OFFSET_B 1024
1509 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1510
1511 #define SGEMM_DEFAULT_UNROLL_M 4
1512 #define SGEMM_DEFAULT_UNROLL_N 4
1513 #define DGEMM_DEFAULT_UNROLL_M 4
1514 #define DGEMM_DEFAULT_UNROLL_N 4
1515 #define CGEMM_DEFAULT_UNROLL_M 2
1516 #define CGEMM_DEFAULT_UNROLL_N 4
1517 #define ZGEMM_DEFAULT_UNROLL_M 2
1518 #define ZGEMM_DEFAULT_UNROLL_N 4
1519
1520 #define SGEMM_DEFAULT_P  992
1521 #define DGEMM_DEFAULT_P  480
1522 #define CGEMM_DEFAULT_P  488
1523 #define ZGEMM_DEFAULT_P  248
1524
1525 #define SGEMM_DEFAULT_Q  504
1526 #define DGEMM_DEFAULT_Q  504
1527 #define CGEMM_DEFAULT_Q  400
1528 #define ZGEMM_DEFAULT_Q  400
1529
1530 #define SYMV_P   8
1531
1532 #endif
1533
1534 #if defined(SPARC) && defined(V7)
1535
1536 #define SNUMOPT         4
1537 #define DNUMOPT         4
1538
1539 #define GEMM_DEFAULT_OFFSET_A 0
1540 #define GEMM_DEFAULT_OFFSET_B 2048
1541 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1542
1543 #define SGEMM_DEFAULT_UNROLL_M 2
1544 #define SGEMM_DEFAULT_UNROLL_N 8
1545 #define DGEMM_DEFAULT_UNROLL_M 2
1546 #define DGEMM_DEFAULT_UNROLL_N 8
1547 #define CGEMM_DEFAULT_UNROLL_M 1
1548 #define CGEMM_DEFAULT_UNROLL_N 4
1549 #define ZGEMM_DEFAULT_UNROLL_M 1
1550 #define ZGEMM_DEFAULT_UNROLL_N 4
1551
1552 #define SGEMM_DEFAULT_P  256
1553 #define DGEMM_DEFAULT_P  256
1554 #define CGEMM_DEFAULT_P  256
1555 #define ZGEMM_DEFAULT_P  256
1556
1557 #define SGEMM_DEFAULT_Q  512
1558 #define DGEMM_DEFAULT_Q  256
1559 #define CGEMM_DEFAULT_Q  256
1560 #define ZGEMM_DEFAULT_Q  128
1561
1562 #define SYMV_P   8
1563 #define GEMM_THREAD gemm_thread_mn
1564 #endif
1565
1566 #if (defined(SPARC) && defined(V9)) || defined(__sparc_v9__)
1567
1568 #define SNUMOPT         2
1569 #define DNUMOPT         2
1570
1571 #define GEMM_DEFAULT_OFFSET_A 0
1572 #define GEMM_DEFAULT_OFFSET_B 2048
1573 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1574
1575 #define SGEMM_DEFAULT_UNROLL_M 4
1576 #define SGEMM_DEFAULT_UNROLL_N 4
1577 #define DGEMM_DEFAULT_UNROLL_M 4
1578 #define DGEMM_DEFAULT_UNROLL_N 4
1579 #define CGEMM_DEFAULT_UNROLL_M 2
1580 #define CGEMM_DEFAULT_UNROLL_N 2
1581 #define ZGEMM_DEFAULT_UNROLL_M 2
1582 #define ZGEMM_DEFAULT_UNROLL_N 2
1583
1584 #define SGEMM_DEFAULT_P  512
1585 #define DGEMM_DEFAULT_P  512
1586 #define CGEMM_DEFAULT_P  512
1587 #define ZGEMM_DEFAULT_P  512
1588
1589 #define SGEMM_DEFAULT_Q 1024
1590 #define DGEMM_DEFAULT_Q  512
1591 #define CGEMM_DEFAULT_Q  512
1592 #define ZGEMM_DEFAULT_Q  256
1593
1594 #define SYMV_P   8
1595 #endif
1596
1597 #ifdef SICORTEX
1598
1599 #define SNUMOPT         2
1600 #define DNUMOPT         2
1601
1602 #define GEMM_DEFAULT_OFFSET_A 0
1603 #define GEMM_DEFAULT_OFFSET_B 0
1604 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1605
1606 #define SGEMM_DEFAULT_UNROLL_M  2
1607 #define SGEMM_DEFAULT_UNROLL_N  8
1608 #define DGEMM_DEFAULT_UNROLL_M  2
1609 #define DGEMM_DEFAULT_UNROLL_N  8
1610 #define CGEMM_DEFAULT_UNROLL_M  1
1611 #define CGEMM_DEFAULT_UNROLL_N  4
1612 #define ZGEMM_DEFAULT_UNROLL_M  1
1613 #define ZGEMM_DEFAULT_UNROLL_N  4
1614
1615 #define SGEMM_DEFAULT_P 108
1616 #define DGEMM_DEFAULT_P 112
1617 #define CGEMM_DEFAULT_P 108
1618 #define ZGEMM_DEFAULT_P 112
1619
1620 #define SGEMM_DEFAULT_Q 288
1621 #define DGEMM_DEFAULT_Q 144
1622 #define CGEMM_DEFAULT_Q 144
1623 #define ZGEMM_DEFAULT_Q  72
1624
1625 #define SGEMM_DEFAULT_R 2000
1626 #define DGEMM_DEFAULT_R 2000
1627 #define CGEMM_DEFAULT_R 2000
1628 #define ZGEMM_DEFAULT_R 2000
1629
1630 #define SYMV_P  16
1631 #endif
1632
1633 #ifdef LOONGSON3A 
1634 ////Copy from SICORTEX
1635 #define SNUMOPT         2
1636 #define DNUMOPT         2
1637
1638 #define GEMM_DEFAULT_OFFSET_A 0
1639 #define GEMM_DEFAULT_OFFSET_B 0
1640 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1641
1642 #define SGEMM_DEFAULT_UNROLL_M  8
1643 #define SGEMM_DEFAULT_UNROLL_N  4
1644
1645 #define DGEMM_DEFAULT_UNROLL_M  4
1646 #define DGEMM_DEFAULT_UNROLL_N  4
1647
1648 #define CGEMM_DEFAULT_UNROLL_M  4
1649 #define CGEMM_DEFAULT_UNROLL_N  2
1650
1651 #define ZGEMM_DEFAULT_UNROLL_M  2
1652 #define ZGEMM_DEFAULT_UNROLL_N  2
1653
1654 #define SGEMM_DEFAULT_P 64
1655 #define DGEMM_DEFAULT_P 44 
1656 #define CGEMM_DEFAULT_P 64
1657 #define ZGEMM_DEFAULT_P 32
1658
1659 #define SGEMM_DEFAULT_Q 192
1660 #define DGEMM_DEFAULT_Q 92
1661 #define CGEMM_DEFAULT_Q 128
1662 #define ZGEMM_DEFAULT_Q 80
1663
1664 #define SGEMM_DEFAULT_R 640 
1665 #define DGEMM_DEFAULT_R dgemm_r 
1666 #define CGEMM_DEFAULT_R 640
1667 #define ZGEMM_DEFAULT_R 640
1668
1669 #define GEMM_OFFSET_A1  0x10000
1670 #define GEMM_OFFSET_B1  0x100000
1671
1672 #define SYMV_P  16
1673 #endif
1674
1675 #ifdef LOONGSON3B
1676 #define SNUMOPT         2
1677 #define DNUMOPT         2
1678
1679 #define GEMM_DEFAULT_OFFSET_A 0
1680 #define GEMM_DEFAULT_OFFSET_B 0
1681 #define GEMM_DEFAULT_ALIGN 0x03fffUL
1682
1683 #define SGEMM_DEFAULT_UNROLL_M  2
1684 #define SGEMM_DEFAULT_UNROLL_N  2
1685
1686 #define DGEMM_DEFAULT_UNROLL_M  2
1687 #define DGEMM_DEFAULT_UNROLL_N  2
1688
1689 #define CGEMM_DEFAULT_UNROLL_M  2
1690 #define CGEMM_DEFAULT_UNROLL_N  2
1691
1692 #define ZGEMM_DEFAULT_UNROLL_M  2
1693 #define ZGEMM_DEFAULT_UNROLL_N  2
1694
1695 #define SGEMM_DEFAULT_P 64
1696 #define DGEMM_DEFAULT_P 24
1697 #define CGEMM_DEFAULT_P 24
1698 #define ZGEMM_DEFAULT_P 20
1699
1700 #define SGEMM_DEFAULT_Q 192
1701 #define DGEMM_DEFAULT_Q 128
1702 #define CGEMM_DEFAULT_Q 128
1703 #define ZGEMM_DEFAULT_Q 64
1704
1705 #define SGEMM_DEFAULT_R 512
1706 #define DGEMM_DEFAULT_R 512 
1707 #define CGEMM_DEFAULT_R 512
1708 #define ZGEMM_DEFAULT_R 512
1709
1710 #define GEMM_OFFSET_A1  0x10000
1711 #define GEMM_OFFSET_B1  0x100000
1712
1713 #define SYMV_P  16
1714 #endif
1715
1716 #ifdef GENERIC
1717
1718 #define SNUMOPT         2
1719 #define DNUMOPT         2
1720
1721 #define GEMM_DEFAULT_OFFSET_A 0
1722 #define GEMM_DEFAULT_OFFSET_B 0
1723 #define GEMM_DEFAULT_ALIGN 0x0ffffUL
1724
1725 #define SGEMM_DEFAULT_UNROLL_N 4
1726 #define DGEMM_DEFAULT_UNROLL_N 4
1727 #define QGEMM_DEFAULT_UNROLL_N 2
1728 #define CGEMM_DEFAULT_UNROLL_N 2
1729 #define ZGEMM_DEFAULT_UNROLL_N 2
1730 #define XGEMM_DEFAULT_UNROLL_N 1
1731
1732 #ifdef ARCH_X86
1733 #define SGEMM_DEFAULT_UNROLL_M 4
1734 #define DGEMM_DEFAULT_UNROLL_M 2
1735 #define QGEMM_DEFAULT_UNROLL_M 2
1736 #define CGEMM_DEFAULT_UNROLL_M 2
1737 #define ZGEMM_DEFAULT_UNROLL_M 1
1738 #define XGEMM_DEFAULT_UNROLL_M 1
1739 #else
1740 #define SGEMM_DEFAULT_UNROLL_M 8
1741 #define DGEMM_DEFAULT_UNROLL_M 4
1742 #define QGEMM_DEFAULT_UNROLL_M 2
1743 #define CGEMM_DEFAULT_UNROLL_M 4
1744 #define ZGEMM_DEFAULT_UNROLL_M 2
1745 #define XGEMM_DEFAULT_UNROLL_M 1
1746 #endif
1747
1748 #define SGEMM_DEFAULT_P sgemm_p
1749 #define DGEMM_DEFAULT_P dgemm_p
1750 #define QGEMM_DEFAULT_P qgemm_p
1751 #define CGEMM_DEFAULT_P cgemm_p
1752 #define ZGEMM_DEFAULT_P zgemm_p
1753 #define XGEMM_DEFAULT_P xgemm_p
1754
1755 #define SGEMM_DEFAULT_R sgemm_r
1756 #define DGEMM_DEFAULT_R dgemm_r
1757 #define QGEMM_DEFAULT_R qgemm_r
1758 #define CGEMM_DEFAULT_R cgemm_r
1759 #define ZGEMM_DEFAULT_R zgemm_r
1760 #define XGEMM_DEFAULT_R xgemm_r
1761
1762 #define SGEMM_DEFAULT_Q 128
1763 #define DGEMM_DEFAULT_Q 128
1764 #define QGEMM_DEFAULT_Q 128
1765 #define CGEMM_DEFAULT_Q 128
1766 #define ZGEMM_DEFAULT_Q 128
1767 #define XGEMM_DEFAULT_Q 128
1768
1769 #define SYMV_P  16
1770
1771 #endif
1772
1773 #ifndef QGEMM_DEFAULT_UNROLL_M
1774 #define QGEMM_DEFAULT_UNROLL_M 2
1775 #endif
1776
1777 #ifndef QGEMM_DEFAULT_UNROLL_N
1778 #define QGEMM_DEFAULT_UNROLL_N 2
1779 #endif
1780
1781 #ifndef XGEMM_DEFAULT_UNROLL_M
1782 #define XGEMM_DEFAULT_UNROLL_M 2
1783 #endif
1784
1785 #ifndef XGEMM_DEFAULT_UNROLL_N
1786 #define XGEMM_DEFAULT_UNROLL_N 2
1787 #endif
1788
1789 #ifndef HAVE_SSE2
1790 #define SHUFPD_0        shufps  $0x44,
1791 #define SHUFPD_1        shufps  $0x4e,
1792 #define SHUFPD_2        shufps  $0xe4,
1793 #define SHUFPD_3        shufps  $0xee,
1794 #endif
1795
1796 #ifndef SHUFPD_0
1797 #define SHUFPD_0        shufpd  $0,
1798 #endif
1799
1800 #ifndef SHUFPD_1
1801 #define SHUFPD_1        shufpd  $1,
1802 #endif
1803
1804 #ifndef SHUFPD_2
1805 #define SHUFPD_2        shufpd  $2,
1806 #endif
1807
1808 #ifndef SHUFPD_3
1809 #define SHUFPD_3        shufpd  $3,
1810 #endif
1811
1812 #ifndef SHUFPS_39
1813 #define SHUFPS_39       shufps  $0x39,
1814 #endif
1815
1816
1817 #endif