]>
Commit | Line | Data |
---|---|---|
1d5cf7fc | 1 | `/* Implementation of the MATMUL intrinsic |
a5544970 | 2 | Copyright (C) 2002-2019 Free Software Foundation, Inc. |
1d5cf7fc TK |
3 | Contributed by Thomas Koenig <tkoenig@gcc.gnu.org>. |
4 | ||
5 | This file is part of the GNU Fortran runtime library (libgfortran). | |
6 | ||
7 | Libgfortran is free software; you can redistribute it and/or | |
8 | modify it under the terms of the GNU General Public | |
9 | License as published by the Free Software Foundation; either | |
10 | version 3 of the License, or (at your option) any later version. | |
11 | ||
12 | Libgfortran is distributed in the hope that it will be useful, | |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | GNU General Public License for more details. | |
16 | ||
17 | Under Section 7 of GPL version 3, you are granted additional | |
18 | permissions described in the GCC Runtime Library Exception, version | |
19 | 3.1, as published by the Free Software Foundation. | |
20 | ||
21 | You should have received a copy of the GNU General Public License and | |
22 | a copy of the GCC Runtime Library Exception along with this program; | |
23 | see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
24 | <http://www.gnu.org/licenses/>. */ | |
25 | ||
26 | #include "libgfortran.h" | |
27 | #include <string.h> | |
28 | #include <assert.h>' | |
29 | ||
30 | include(iparm.m4)dnl | |
31 | ||
32 | /* These are the specific versions of matmul with -mprefer-avx128. */ | |
33 | ||
34 | `#if defined (HAVE_'rtype_name`) | |
35 | ||
36 | /* Prototype for the BLAS ?gemm subroutine, a pointer to which can be | |
37 | passed to us by the front-end, in which case we call it for large | |
38 | matrices. */ | |
39 | ||
40 | typedef void (*blas_call)(const char *, const char *, const int *, const int *, | |
41 | const int *, const 'rtype_name` *, const 'rtype_name` *, | |
42 | const int *, const 'rtype_name` *, const int *, | |
43 | const 'rtype_name` *, 'rtype_name` *, const int *, | |
44 | int, int); | |
45 | ||
46 | #if defined(HAVE_AVX) && defined(HAVE_FMA3) && defined(HAVE_AVX128) | |
47 | 'define(`matmul_name',`matmul_'rtype_code`_avx128_fma3')dnl | |
48 | `void | |
49 | 'matmul_name` ('rtype` * const restrict retarray, | |
50 | 'rtype` * const restrict a, 'rtype` * const restrict b, int try_blas, | |
51 | int blas_limit, blas_call gemm) __attribute__((__target__("avx,fma"))); | |
52 | internal_proto('matmul_name`); | |
53 | 'include(matmul_internal.m4)dnl | |
54 | `#endif | |
55 | ||
56 | #if defined(HAVE_AVX) && defined(HAVE_FMA4) && defined(HAVE_AVX128) | |
57 | 'define(`matmul_name',`matmul_'rtype_code`_avx128_fma4')dnl | |
58 | `void | |
59 | 'matmul_name` ('rtype` * const restrict retarray, | |
60 | 'rtype` * const restrict a, 'rtype` * const restrict b, int try_blas, | |
61 | int blas_limit, blas_call gemm) __attribute__((__target__("avx,fma4"))); | |
62 | internal_proto('matmul_name`); | |
63 | 'include(matmul_internal.m4)dnl | |
64 | `#endif | |
65 | ||
66 | #endif | |
67 | ' |