Compare commits
364 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d51868190e | ||
|
|
9b5be29886 | ||
|
|
768d2042d4 | ||
|
|
91eaea364b | ||
|
|
a136426624 | ||
|
|
2f0d2ce1ea | ||
|
|
0f6e79f918 | ||
|
|
ea74f331f4 | ||
|
|
53eaf41901 | ||
|
|
9423f980f6 | ||
|
|
c6156b2ef2 | ||
|
|
034a5b2083 | ||
|
|
27d4234d4d | ||
|
|
aae75b2461 | ||
|
|
a74ac84981 | ||
|
|
402d6e91db | ||
|
|
6d2c6b5c74 | ||
|
|
1b5a267cdd | ||
|
|
4a1575e748 | ||
|
|
339fef2649 | ||
|
|
b3254eecaf | ||
|
|
d910404f00 | ||
|
|
1cae4114a8 | ||
|
|
91ca041cc2 | ||
|
|
d2385f0d52 | ||
|
|
ec2dadde9b | ||
|
|
d56292e2e4 | ||
|
|
ffe70b1fdc | ||
|
|
ecbc85b954 | ||
|
|
9e38dbb658 | ||
|
|
d844901062 | ||
|
|
eab79631c3 | ||
|
|
d13aa79d26 | ||
|
|
dfaa489224 | ||
|
|
9fbf437177 | ||
|
|
38ce786754 | ||
|
|
2594728eb7 | ||
|
|
cc7876f660 | ||
|
|
51e5983599 | ||
|
|
65ebab0688 | ||
|
|
7594216412 | ||
|
|
fac07b0687 | ||
|
|
3169f524e4 | ||
|
|
d4833f1801 | ||
|
|
fe8b841c82 | ||
|
|
9b1b01a478 | ||
|
|
2a625447ea | ||
|
|
be18cd47f6 | ||
|
|
8191efc420 | ||
|
|
39dc69db4a | ||
|
|
04d51536a4 | ||
|
|
c947ab85dc | ||
|
|
0b6e13b689 | ||
|
|
e09dc279a2 | ||
|
|
1596ced242 | ||
|
|
4be4db590c | ||
|
|
5c648a8984 | ||
|
|
7581e2e9cb | ||
|
|
c44dc4dd3c | ||
|
|
ac7735e01f | ||
|
|
271ceeba15 | ||
|
|
71eecaaf37 | ||
|
|
9d3fae15a8 | ||
|
|
2d3c884294 | ||
|
|
d54a061713 | ||
|
|
86afb47e83 | ||
|
|
42a4dff056 | ||
|
|
5bc322a66c | ||
|
|
dec7ad0dfd | ||
|
|
274304bd03 | ||
|
|
5007a534c4 | ||
|
|
a537d7d8d7 | ||
|
|
b42145834f | ||
|
|
3d5e792c72 | ||
|
|
a9bd12da2c | ||
|
|
697e198e8a | ||
|
|
36b0f7fe1d | ||
|
|
d2b20c5c51 | ||
|
|
fd1d9fdb22 | ||
|
|
fe5f46c330 | ||
|
|
e25de3d182 | ||
|
|
25c6050593 | ||
|
|
12e02a00e0 | ||
|
|
29a3196f56 | ||
|
|
8776a73773 | ||
|
|
7e84acd3e8 | ||
|
|
33d3ab6e09 | ||
|
|
9a0f978929 | ||
|
|
7f210587f0 | ||
|
|
9f0a3a35b3 | ||
|
|
dbae93110b | ||
|
|
19cd5c64a2 | ||
|
|
9adf87495e | ||
|
|
440db4cdda | ||
|
|
cd93cae5a7 | ||
|
|
8565afb3c2 | ||
|
|
5bf7cf8d67 | ||
|
|
29a005c635 | ||
|
|
f1be3a168a | ||
|
|
410afda9b4 | ||
|
|
bf04544902 | ||
|
|
86283c0be1 | ||
|
|
f27cabfd08 | ||
|
|
23dd474cd0 | ||
|
|
f1b452e160 | ||
|
|
3dabd7e6e6 | ||
|
|
6f4a0ebe38 | ||
|
|
5048a80032 | ||
|
|
6e679266f8 | ||
|
|
f1db386211 | ||
|
|
6da558d2ab | ||
|
|
a2942456ef | ||
|
|
f750103336 | ||
|
|
00f33c0134 | ||
|
|
5b36cc0f47 | ||
|
|
c8f1aeb154 | ||
|
|
8fa93be06e | ||
|
|
1e8128f41c | ||
|
|
6d8095bcb9 | ||
|
|
2f5fdd2000 | ||
|
|
80a2e901b1 | ||
|
|
73770e60b8 | ||
|
|
ac50bccbd2 | ||
|
|
82015beaef | ||
|
|
6216ab8a7e | ||
|
|
370e3834a9 | ||
|
|
95aedfa0ff | ||
|
|
cba97daf3c | ||
|
|
5400a9f4e4 | ||
|
|
e31186efd4 | ||
|
|
2b801a00a5 | ||
|
|
b3eab8fcb7 | ||
|
|
6d9d70c55c | ||
|
|
dfd1064d7b | ||
|
|
02bc36ac79 | ||
|
|
5118a7f4d1 | ||
|
|
e172b70ea2 | ||
|
|
1cf4b974b2 | ||
|
|
7bccff1512 | ||
|
|
afe44b0241 | ||
|
|
a77c71eaf5 | ||
|
|
b2219b3478 | ||
|
|
f5a0038bad | ||
|
|
c937090121 | ||
|
|
fe8c5666f9 | ||
|
|
f6b50057e2 | ||
|
|
2840d56aeb | ||
|
|
2d49db2f5b | ||
|
|
04391e6d9c | ||
|
|
85484a42df | ||
|
|
3983011f0b | ||
|
|
2a1515c9dd | ||
|
|
31f51e78bc | ||
|
|
beffee7d91 | ||
|
|
a35f4343fa | ||
|
|
ce5626a384 | ||
|
|
e0b968c3a7 | ||
|
|
93f1074dd4 | ||
|
|
1c63180bb6 | ||
|
|
22a8fcc4b7 | ||
|
|
9965d48005 | ||
|
|
4a474ea7dc | ||
|
|
69ce737cc5 | ||
|
|
d13788d1b4 | ||
|
|
70411af888 | ||
|
|
16eb780e13 | ||
|
|
a746724e84 | ||
|
|
3f7b0cd994 | ||
|
|
cc6db2ecfe | ||
|
|
3175be4b3d | ||
|
|
a29e6592da | ||
|
|
212463dce9 | ||
|
|
037bd82bef | ||
|
|
eae4cfa3f6 | ||
|
|
6c4a7d0828 | ||
|
|
fe98de2f68 | ||
|
|
db389b5915 | ||
|
|
52f587db7f | ||
|
|
067e8417fd | ||
|
|
a82da3d069 | ||
|
|
1569bf14f8 | ||
|
|
df554aebd2 | ||
|
|
eae6920f2d | ||
|
|
c92ae012a6 | ||
|
|
f51a849d91 | ||
|
|
44ef70420c | ||
|
|
d488b1b1aa | ||
|
|
4070d9a123 | ||
|
|
0b90c0ec64 | ||
|
|
2b8ab8f55b | ||
|
|
1cb9579cd0 | ||
|
|
2638370844 | ||
|
|
89637f87c8 | ||
|
|
c0b1e41bec | ||
|
|
49faee1a51 | ||
|
|
c0159d44a3 | ||
|
|
c17a850c1c | ||
|
|
099853fff6 | ||
|
|
44d23881b5 | ||
|
|
2905042c6a | ||
|
|
32fb6b9bb2 | ||
|
|
673e453b3f | ||
|
|
143cca4dd5 | ||
|
|
aaeb8eaecd | ||
|
|
8aeec32ea0 | ||
|
|
87fc9de572 | ||
|
|
564aa60fec | ||
|
|
f645665dd6 | ||
|
|
e45a347cd2 | ||
|
|
99727ac013 | ||
|
|
6e0a2fbc0c | ||
|
|
0a22f99c58 | ||
|
|
79ba52115d | ||
|
|
835293cc1a | ||
|
|
b736aa8110 | ||
|
|
ae521ecc3e | ||
|
|
36adfe8d64 | ||
|
|
a07cc39571 | ||
|
|
cff70a666d | ||
|
|
b5c2ac4fd6 | ||
|
|
749f45ffc8 | ||
|
|
534c5ec919 | ||
|
|
bd2da90e13 | ||
|
|
84bd0aabaa | ||
|
|
5b504d6c23 | ||
|
|
72b1edaf1b | ||
|
|
a2930664f4 | ||
|
|
6e0db36373 | ||
|
|
1e1250b703 | ||
|
|
23186d9f21 | ||
|
|
e6ebbfd314 | ||
|
|
4471c77905 | ||
|
|
9f0fb6e662 | ||
|
|
f26b7a08aa | ||
|
|
63f14189e3 | ||
|
|
e39384432b | ||
|
|
c5437149c0 | ||
|
|
6f5b395009 | ||
|
|
d4f9571818 | ||
|
|
937d838619 | ||
|
|
a8f9b6a665 | ||
|
|
6209c8fc44 | ||
|
|
238ceb4ac0 | ||
|
|
77b572fa0b | ||
|
|
f69f89b846 | ||
|
|
c77032b0cc | ||
|
|
1b3b9e841d | ||
|
|
b67252c2e4 | ||
|
|
c69e73b868 | ||
|
|
b51e2ba1ee | ||
|
|
9c0a834f98 | ||
|
|
2a7503e563 | ||
|
|
fd0c388681 | ||
|
|
61a9582987 | ||
|
|
b681064c6c | ||
|
|
e80e285928 | ||
|
|
2ed0f6ab60 | ||
|
|
5448643557 | ||
|
|
824c3c4df3 | ||
|
|
c19a488af2 | ||
|
|
32d2ca3035 | ||
|
|
6df39ad9e7 | ||
|
|
3a96e4cbcb | ||
|
|
6f008abcef | ||
|
|
3eb5af1955 | ||
|
|
fbb75e58b1 | ||
|
|
f54f5bac9e | ||
|
|
5d3312142a | ||
|
|
886cbaf4e4 | ||
|
|
0c4074e10b | ||
|
|
cc522aa21d | ||
|
|
9c78fad721 | ||
|
|
6028232ad1 | ||
|
|
feb9a3889a | ||
|
|
32dbeb636d | ||
|
|
57944538b6 | ||
|
|
3ce2c62b0b | ||
|
|
50464997a3 | ||
|
|
8e7cad1650 | ||
|
|
590e6aeafc | ||
|
|
88ef307cef | ||
|
|
6e8501c8a1 | ||
|
|
fa916a0fac | ||
|
|
fb298b34ae | ||
|
|
16012767f4 | ||
|
|
bcbac31b47 | ||
|
|
8dc0c72583 | ||
|
|
89405a1a0b | ||
|
|
4f2b12b8a8 | ||
|
|
646e168d26 | ||
|
|
93dbbe1fb8 | ||
|
|
a135f5d9ed | ||
|
|
d0b6299b13 | ||
|
|
9e58dd509e | ||
|
|
7c8227101b | ||
|
|
f67fa62851 | ||
|
|
cd1d473ba0 | ||
|
|
56f160134d | ||
|
|
0ded1fcc1c | ||
|
|
a789b588cd | ||
|
|
8eaa04acbb | ||
|
|
d854b30ae6 | ||
|
|
d65bbec99b | ||
|
|
e4c39c7c26 | ||
|
|
ba800f0883 | ||
|
|
25491e42f9 | ||
|
|
960b0c88a7 | ||
|
|
65ffead0cf | ||
|
|
f2fb8c7035 | ||
|
|
9f59f384d8 | ||
|
|
23965f164c | ||
|
|
6a72840945 | ||
|
|
947457fb7c | ||
|
|
79120bf9a0 | ||
|
|
acb11905d5 | ||
|
|
109500178c | ||
|
|
e50a664865 | ||
|
|
357078b93e | ||
|
|
731220f870 | ||
|
|
69aa6c8fb1 | ||
|
|
60b263f3d2 | ||
|
|
7ac306e0da | ||
|
|
4cb454cdf2 | ||
|
|
19ad2fb128 | ||
|
|
5d96e4f224 | ||
|
|
6821677489 | ||
|
|
dbbda55e67 | ||
|
|
6c34a7f43c | ||
|
|
3326f3152c | ||
|
|
7641f6e253 | ||
|
|
48bdc1ad3b | ||
|
|
3ad29452d1 | ||
|
|
6e3f6f25a5 | ||
|
|
990efcab6e | ||
|
|
75a5dc3975 | ||
|
|
986d542acb | ||
|
|
6958c1a1aa | ||
|
|
a068d54981 | ||
|
|
d692ee07f7 | ||
|
|
1a57717b1a | ||
|
|
6b01d58712 | ||
|
|
35b943f17f | ||
|
|
e029242870 | ||
|
|
7a9b94b519 | ||
|
|
66b919d99f | ||
|
|
f4846afbad | ||
|
|
53588bc786 | ||
|
|
b47f13ee4c | ||
|
|
309f90e563 | ||
|
|
773c01f496 | ||
|
|
d831b2ff8b | ||
|
|
724ae159ce | ||
|
|
2c9a203bd1 | ||
|
|
f300ce3df5 | ||
|
|
e2c7c75715 | ||
|
|
66e64131ed | ||
|
|
5900b1462e | ||
|
|
9405f26f4b | ||
|
|
6ae2f868fd | ||
|
|
a1ead62f28 | ||
|
|
0133580148 | ||
|
|
274246651d | ||
|
|
299b5a44dc | ||
|
|
d48cff8cf1 |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -4,12 +4,16 @@
|
||||
*.dylib
|
||||
*.def
|
||||
*.o
|
||||
*.out
|
||||
lapack-3.1.1
|
||||
lapack-3.1.1.tgz
|
||||
lapack-3.4.1
|
||||
lapack-3.4.1.tgz
|
||||
lapack-3.4.2
|
||||
lapack-3.4.2.tgz
|
||||
lapack-netlib/make.inc
|
||||
lapack-netlib/lapacke/include/lapacke_mangling.h
|
||||
lapack-netlib/TESTING/testing_results.txt
|
||||
*.so
|
||||
*.a
|
||||
.svn
|
||||
|
||||
24
.travis.yml
Normal file
24
.travis.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
language: c
|
||||
compiler:
|
||||
- gcc
|
||||
|
||||
env:
|
||||
- TARGET_BOX=LINUX64 BTYPE="BINARY=64"
|
||||
- TARGET_BOX=LINUX64 BTYPE="BINARY=64 USE_OPENMP=1"
|
||||
- TARGET_BOX=LINUX64 BTYPE="BINARY=64 INTERFACE64=1"
|
||||
- TARGET_BOX=LINUX32 BTYPE="BINARY=32"
|
||||
- TARGET_BOX=WIN64 BTYPE="BINARY=64 HOSTCC=gcc CC=x86_64-w64-mingw32-gcc FC=x86_64-w64-mingw32-gfortran"
|
||||
|
||||
before_install:
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install -qq gfortran
|
||||
- if [[ "$TARGET_BOX" == "WIN64" ]]; then sudo apt-get install -qq binutils-mingw-w64-x86-64 gcc-mingw-w64-x86-64 gfortran-mingw-w64-x86-64; fi
|
||||
- if [[ "$TARGET_BOX" == "LINUX32" ]]; then sudo apt-get install -qq gcc-multilib gfortran-multilib; fi
|
||||
|
||||
script: make QUIET_MAKE=1 DYNAMIC_ARCH=1 TARGET=NEHALEM NUM_THREADS=32 $BTYPE
|
||||
|
||||
# whitelist
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- develop
|
||||
39
BACKERS.md
Normal file
39
BACKERS.md
Normal file
@@ -0,0 +1,39 @@
|
||||
Thank you for the support.
|
||||
|
||||
### [2013.8] [Testbed for OpenBLAS project](https://www.bountysource.com/fundraisers/443-testbed-for-openblas-project)
|
||||
|
||||
https://www.bountysource.com/fundraisers/443-testbed-for-openblas-project/pledges
|
||||
|
||||
In chronological order:
|
||||
|
||||
* aeberspaecher
|
||||
* fmolina
|
||||
* saullocastro
|
||||
* xianyi
|
||||
* cuda
|
||||
* carter
|
||||
* StefanKarpinski
|
||||
* staticfloat
|
||||
* sebastien-villemot
|
||||
* JeffBezanson
|
||||
* ihnorton
|
||||
* simonp0420
|
||||
* andrioni
|
||||
* Tim Holy
|
||||
* ivarne
|
||||
* johnmyleswhite
|
||||
* traz
|
||||
* Jean-Francis Roy
|
||||
* bkalpert
|
||||
* Anirban
|
||||
* pgermain
|
||||
* alexandre.lacoste.18
|
||||
* foges
|
||||
* ssam
|
||||
* WestleyArgentum
|
||||
* daniebmariani
|
||||
* pjpuglia
|
||||
* albarrentine
|
||||
* Alexander Vogt
|
||||
|
||||
|
||||
90
CONTRIBUTORS.md
Normal file
90
CONTRIBUTORS.md
Normal file
@@ -0,0 +1,90 @@
|
||||
# Contributions to the OpenBLAS project
|
||||
|
||||
## Creator & Maintainer
|
||||
|
||||
* Zhang Xianyi <traits.zhang@gmail.com>
|
||||
|
||||
## Active Developers
|
||||
|
||||
* Wang Qian <traz0824@gmail.com>
|
||||
* Optimize BLAS3 on ICT Loongson 3A.
|
||||
* Optimize BLAS3 on Intel Sandy Bridge.
|
||||
|
||||
* Zaheer Chothia <zaheer.chothia@gmail.com>
|
||||
* Improve the compatibility about complex number
|
||||
* Build LAPACKE: C interface to LAPACK
|
||||
* Improve the windows build.
|
||||
|
||||
## Previous Developers
|
||||
|
||||
* Chen Shaohu <huhumartinwar@gmail.com>
|
||||
* Optimize GEMV on the Loongson 3A processor.
|
||||
|
||||
* Luo Wen
|
||||
* Intern. Test Level-2 BLAS.
|
||||
|
||||
## Contributors
|
||||
|
||||
In chronological order:
|
||||
|
||||
* pipping <http://page.mi.fu-berlin.de/pipping>
|
||||
* [2011-06-11] Make USE_OPENMP=0 disable openmp.
|
||||
|
||||
* Stefan Karpinski <stefan@karpinski.org>
|
||||
* [2011-12-28] Fix a bug about SystemStubs on Mac OS X.
|
||||
|
||||
* Alexander Eberspächer <https://github.com/aeberspaecher>
|
||||
* [2012-05-02] Add note on patch for segfaults on Linux kernel 2.6.32.
|
||||
|
||||
* Mike Nolta <mike@nolta.net>
|
||||
* [2012-05-19] Fix building bug on FreeBSD and NetBSD.
|
||||
|
||||
* Sylvestre Ledru <https://github.com/sylvestre>
|
||||
* [2012-07-01] Improve the detection of sparc. Fix building bug under
|
||||
Hurd and kfreebsd.
|
||||
|
||||
* Jameson Nash <https://github.com/vtjnash>
|
||||
* [2012-08-20] Provide support for passing CFLAGS, FFLAGS, PFLAGS, FPFLAGS to
|
||||
make on the command line.
|
||||
|
||||
* Alexander Nasonov <alnsn@yandex.ru>
|
||||
* [2012-11-10] Fix NetBSD build.
|
||||
|
||||
* Sébastien Villemot <sebastien@debian.org>
|
||||
* [2012-11-14] Fix compilation with TARGET=GENERIC. Patch applied to Debian package.
|
||||
|
||||
* Werner Saar <wernsaar@googlemail.com>
|
||||
* [2013-03-04] Optimize AVX and FMA4 DGEMM on AMD Bulldozer
|
||||
* [2013-04-27] Optimize AVX and FMA4 TRSM on AMD Bulldozer
|
||||
* [2013-06-09] Optimize AVX and FMA4 SGEMM on AMD Bulldozer
|
||||
* [2013-06-11] Optimize AVX and FMA4 ZGEMM on AMD Bulldozer
|
||||
* [2013-06-12] Optimize AVX and FMA4 CGEMM on AMD Bulldozer
|
||||
* [2013-06-16] Optimize dgemv_n kernel on AMD Bulldozer
|
||||
* [2013-06-20] Optimize ddot, daxpy kernel on AMD Bulldozer
|
||||
* [2013-06-21] Optimize dcopy kernel on AMD Bulldozer
|
||||
|
||||
* Kang-Che Sung <Explorer09@gmail.com>
|
||||
* [2013-05-17] Fix typo in the document. Re-order the architecture list in getarch.c.
|
||||
|
||||
* Kenneth Hoste <kenneth.hoste@gmail.com>
|
||||
* [2013-05-22] Adjust Makefile about downloading LAPACK source files.
|
||||
|
||||
* Lei WANG <https://github.com/wlbksy>
|
||||
* [2013-05-22] Fix a bug about wget.
|
||||
|
||||
* Dan Luu <http://www.linkedin.com/in/danluu>
|
||||
* [2013-06-30] Add Intel Haswell support (using sandybridge optimizations).
|
||||
|
||||
* grisuthedragon <https://github.com/grisuthedragon>
|
||||
* [2013-07-11] create openblas_get_parallel to retrieve information which parallelization
|
||||
model is used by OpenBLAS.
|
||||
|
||||
* Sébastien Fabbro <bicatali@gentoo.org>
|
||||
* [2013-07-24] Modify makefile to respect user's LDFLAGS
|
||||
* [2013-07-24] Add stack markings for GNU as arch-independent for assembler files
|
||||
|
||||
* carlkl <https://github.com/carlkl>
|
||||
* [2013-12-13] Fixed LAPACKE building bug on Windows
|
||||
|
||||
* [Your name or handle] <[email or website]>
|
||||
* [Date] [Brief summary of your changes]
|
||||
@@ -1,4 +1,48 @@
|
||||
OpenBLAS ChangeLog
|
||||
====================================================================
|
||||
Version 0.2.8
|
||||
01-Aug-2013
|
||||
common:
|
||||
* Support Open64 5.0. (#266)
|
||||
* Add executable stack markings. (#262, Thank Sébastien Fabbro)
|
||||
* Respect user's LDFLAGS (Thank Sébastien Fabbro)
|
||||
|
||||
x86/x86-64:
|
||||
* Rollback bulldozer and piledriver kernels to barcelona kernels (#263)
|
||||
We will fix the compuational error bug in bulldozer and piledriver kernels.
|
||||
|
||||
====================================================================
|
||||
Version 0.2.7
|
||||
20-Jul-2013
|
||||
common:
|
||||
* Support LSB (Linux Standard Base) 4.1.
|
||||
e.g. make CC=lsbcc
|
||||
* Include LAPACK 3.4.2 source codes to the repo.
|
||||
Avoid downloading at compile time.
|
||||
* Add NO_PARALLEL_MAKE flag to disable parallel make.
|
||||
* Create openblas_get_parallel to retrieve information which
|
||||
parallelization model is used by OpenBLAS. (Thank grisuthedragon)
|
||||
* Detect LLVM/Clang compiler. The default compiler is Clang on Mac OS X.
|
||||
* Change LIBSUFFIX from .lib to .a on windows.
|
||||
* A walk round for dtrti_U single thread bug. Replace it with LAPACK codes. (#191)
|
||||
|
||||
x86/x86-64:
|
||||
* Optimize c/zgemm, trsm, dgemv_n, ddot, daxpy, dcopy on
|
||||
AMD Bulldozer. (Thank Werner Saar)
|
||||
* Add Intel Haswell support (using Sandybridge optimizations).
|
||||
(Thank Dan Luu)
|
||||
* Add AMD Piledriver support (using Bulldozer optimizations).
|
||||
* Fix the computational error in zgemm avx kernel on
|
||||
Sandybridge. (#237)
|
||||
* Fix the overflow bug in gemv.
|
||||
* Fix the overflow bug in multi-threaded BLAS3, getrf when NUM_THREADS
|
||||
is very large.(#214, #221, #246).
|
||||
MIPS64:
|
||||
* Support loongcc (Open64 based) compiler for ICT Loongson 3A/B.
|
||||
|
||||
Power:
|
||||
* Support Power7 by old Power6 kernels. (#220)
|
||||
|
||||
====================================================================
|
||||
Version 0.2.6
|
||||
2-Mar-2013
|
||||
|
||||
111
Makefile
111
Makefile
@@ -15,10 +15,6 @@ ifdef SANITY_CHECK
|
||||
BLASDIRS += reference
|
||||
endif
|
||||
|
||||
ifndef PREFIX
|
||||
PREFIX = /opt/OpenBLAS
|
||||
endif
|
||||
|
||||
SUBDIRS = $(BLASDIRS)
|
||||
ifneq ($(NO_LAPACK), 1)
|
||||
SUBDIRS += lapack
|
||||
@@ -31,7 +27,7 @@ SUBDIRS_ALL = $(SUBDIRS) test ctest utest exports benchmark ../laswp ../bench
|
||||
|
||||
all :: libs netlib tests shared
|
||||
@echo
|
||||
@echo " OpenBLAS build complete."
|
||||
@echo " OpenBLAS build complete. ($(LIB_COMPONENTS))"
|
||||
@echo
|
||||
@echo " OS ... $(OSNAME) "
|
||||
@echo " Architecture ... $(ARCH) "
|
||||
@@ -44,7 +40,9 @@ ifdef INTERFACE64
|
||||
@echo " Use 64 bits int (equivalent to \"-i8\" in Fortran) "
|
||||
endif
|
||||
@echo " C compiler ... $(C_COMPILER) (command line : $(CC))"
|
||||
ifndef NOFORTRAN
|
||||
@echo " Fortran compiler ... $(F_COMPILER) (command line : $(FC))"
|
||||
endif
|
||||
ifneq ($(OSNAME), AIX)
|
||||
@echo -n " Library Name ... $(LIBNAME)"
|
||||
else
|
||||
@@ -82,27 +80,27 @@ endif
|
||||
shared :
|
||||
ifndef NO_SHARED
|
||||
ifeq ($(OSNAME), Linux)
|
||||
$(MAKE) -C exports so
|
||||
-ln -fs $(LIBSONAME) $(LIBPREFIX).so
|
||||
-ln -fs $(LIBSONAME) $(LIBPREFIX).so.$(MAJOR_VERSION)
|
||||
@$(MAKE) -C exports so
|
||||
@-ln -fs $(LIBSONAME) $(LIBPREFIX).so
|
||||
@-ln -fs $(LIBSONAME) $(LIBPREFIX).so.$(MAJOR_VERSION)
|
||||
endif
|
||||
ifeq ($(OSNAME), FreeBSD)
|
||||
$(MAKE) -C exports so
|
||||
-ln -fs $(LIBSONAME) $(LIBPREFIX).so
|
||||
@$(MAKE) -C exports so
|
||||
@-ln -fs $(LIBSONAME) $(LIBPREFIX).so
|
||||
endif
|
||||
ifeq ($(OSNAME), NetBSD)
|
||||
$(MAKE) -C exports so
|
||||
-ln -fs $(LIBSONAME) $(LIBPREFIX).so
|
||||
@$(MAKE) -C exports so
|
||||
@-ln -fs $(LIBSONAME) $(LIBPREFIX).so
|
||||
endif
|
||||
ifeq ($(OSNAME), Darwin)
|
||||
$(MAKE) -C exports dyn
|
||||
-ln -fs $(LIBDYNNAME) $(LIBPREFIX).dylib
|
||||
@$(MAKE) -C exports dyn
|
||||
@-ln -fs $(LIBDYNNAME) $(LIBPREFIX).dylib
|
||||
endif
|
||||
ifeq ($(OSNAME), WINNT)
|
||||
$(MAKE) -C exports dll
|
||||
@$(MAKE) -C exports dll
|
||||
endif
|
||||
ifeq ($(OSNAME), CYGWIN_NT)
|
||||
$(MAKE) -C exports dll
|
||||
@$(MAKE) -C exports dll
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -131,30 +129,33 @@ endif
|
||||
ifeq ($(NOFORTRAN), 1)
|
||||
$(error OpenBLAS: Detecting fortran compiler failed. Please install fortran compiler, e.g. gfortran, ifort, openf90.)
|
||||
endif
|
||||
-ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
|
||||
for d in $(SUBDIRS) ; \
|
||||
@-ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
|
||||
@for d in $(SUBDIRS) ; \
|
||||
do if test -d $$d; then \
|
||||
$(MAKE) -C $$d $(@F) || exit 1 ; \
|
||||
fi; \
|
||||
done
|
||||
#Save the config files for installation
|
||||
cp Makefile.conf Makefile.conf_last
|
||||
cp config.h config_last.h
|
||||
@cp Makefile.conf Makefile.conf_last
|
||||
@cp config.h config_last.h
|
||||
ifdef QUAD_PRECISION
|
||||
echo "#define QUAD_PRECISION">> config_last.h
|
||||
@echo "#define QUAD_PRECISION">> config_last.h
|
||||
endif
|
||||
ifeq ($(EXPRECISION), 1)
|
||||
echo "#define EXPRECISION">> config_last.h
|
||||
@echo "#define EXPRECISION">> config_last.h
|
||||
endif
|
||||
##
|
||||
ifeq ($(DYNAMIC_ARCH), 1)
|
||||
$(MAKE) -C kernel commonlibs || exit 1
|
||||
for d in $(DYNAMIC_CORE) ; \
|
||||
@$(MAKE) -C kernel commonlibs || exit 1
|
||||
@for d in $(DYNAMIC_CORE) ; \
|
||||
do $(MAKE) GOTOBLAS_MAKEFILE= -C kernel TARGET_CORE=$$d kernel || exit 1 ;\
|
||||
done
|
||||
echo DYNAMIC_ARCH=1 >> Makefile.conf_last
|
||||
@echo DYNAMIC_ARCH=1 >> Makefile.conf_last
|
||||
endif
|
||||
touch lib.grd
|
||||
ifdef USE_THREAD
|
||||
@echo USE_THREAD=$(USE_THREAD) >> Makefile.conf_last
|
||||
endif
|
||||
@touch lib.grd
|
||||
|
||||
prof : prof_blas prof_lapack
|
||||
|
||||
@@ -203,32 +204,28 @@ ifeq ($(NO_LAPACK), 1)
|
||||
netlib :
|
||||
|
||||
else
|
||||
netlib : lapack-3.4.2 patch.for_lapack-3.4.2 $(NETLIB_LAPACK_DIR)/make.inc
|
||||
netlib : lapack_prebuild
|
||||
ifndef NOFORTRAN
|
||||
-@$(MAKE) -C $(NETLIB_LAPACK_DIR) lapacklib
|
||||
@$(MAKE) -C $(NETLIB_LAPACK_DIR) lapacklib
|
||||
endif
|
||||
ifndef NO_LAPACKE
|
||||
-@$(MAKE) -C $(NETLIB_LAPACK_DIR) lapackelib
|
||||
@$(MAKE) -C $(NETLIB_LAPACK_DIR) lapackelib
|
||||
endif
|
||||
endif
|
||||
|
||||
prof_lapack : lapack-3.4.2 $(NETLIB_LAPACK_DIR)/make.inc
|
||||
-@$(MAKE) -C $(NETLIB_LAPACK_DIR) lapack_prof
|
||||
prof_lapack : lapack_prebuild
|
||||
@$(MAKE) -C $(NETLIB_LAPACK_DIR) lapack_prof
|
||||
|
||||
$(NETLIB_LAPACK_DIR)/make.inc :
|
||||
lapack_prebuild :
|
||||
ifndef NOFORTRAN
|
||||
-@echo "FORTRAN = $(FC)" > $(NETLIB_LAPACK_DIR)/make.inc
|
||||
-@echo "OPTS = $(FFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
-@echo "POPTS = $(FPFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
-@echo "NOOPT = $(FFLAGS) -O0" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
-@echo "PNOOPT = $(FPFLAGS) -O0" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
-@echo "OPTS = $(LAPACK_FFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
-@echo "POPTS = $(LAPACK_FPFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
-@echo "NOOPT = $(LAPACK_FFLAGS) -O0" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
-@echo "PNOOPT = $(LAPACK_FPFLAGS) -O0" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
-@echo "LOADOPTS = $(FFLAGS) $(EXTRALIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
-@echo "CC = $(CC)" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
ifdef INTERFACE64
|
||||
-@echo "CFLAGS = $(CFLAGS) -DHAVE_LAPACK_CONFIG_H -DLAPACK_ILP64" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
else
|
||||
-@echo "CFLAGS = $(CFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
endif
|
||||
-@echo "override CFLAGS = $(LAPACK_CFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
-@echo "ARCH = $(AR)" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
-@echo "ARCHFLAGS = -ru" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
-@echo "RANLIB = $(RANLIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
|
||||
@@ -244,7 +241,7 @@ endif
|
||||
lapack-3.4.2 : lapack-3.4.2.tgz
|
||||
ifndef NOFORTRAN
|
||||
ifndef NO_LAPACK
|
||||
@if test `$(MD5SUM) lapack-3.4.2.tgz | $(AWK) '{print $$1}'` = 61bf1a8a4469d4bdb7604f5897179478; then \
|
||||
@if test `$(MD5SUM) $< | $(AWK) '{print $$1}'` = 61bf1a8a4469d4bdb7604f5897179478; then \
|
||||
echo $(TAR) zxf $< ;\
|
||||
$(TAR) zxf $< && (cd $(NETLIB_LAPACK_DIR); $(PATCH) -p1 < ../patch.for_lapack-3.4.2) ;\
|
||||
rm -f $(NETLIB_LAPACK_DIR)/lapacke/make.inc ;\
|
||||
@@ -262,27 +259,31 @@ lapack-3.4.2.tgz :
|
||||
ifndef NOFORTRAN
|
||||
#http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
|
||||
ifeq ($(OSNAME), $(filter $(OSNAME),Darwin NetBSD))
|
||||
curl -O $(LAPACK_URL)
|
||||
curl -O $(LAPACK_URL);
|
||||
else
|
||||
ifeq ($(OSNAME), FreeBSD)
|
||||
fetch $(LAPACK_URL)
|
||||
fetch $(LAPACK_URL);
|
||||
else
|
||||
wget $(LAPACK_URL)
|
||||
wget -O $@ $(LAPACK_URL);
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
large.tgz :
|
||||
ifndef NOFORTRAN
|
||||
-wget http://www.netlib.org/lapack/timing/large.tgz
|
||||
if [ ! -a $< ]; then
|
||||
-wget http://www.netlib.org/lapack/timing/large.tgz;
|
||||
fi
|
||||
endif
|
||||
|
||||
timing.tgz :
|
||||
ifndef NOFORTRAN
|
||||
-wget http://www.netlib.org/lapack/timing/timing.tgz
|
||||
if [ ! -a $< ]; then
|
||||
-wget http://www.netlib.org/lapack/timing/timing.tgz;
|
||||
fi
|
||||
endif
|
||||
|
||||
lapack-timing : lapack-3.4.2 large.tgz timing.tgz
|
||||
lapack-timing : large.tgz timing.tgz
|
||||
ifndef NOFORTRAN
|
||||
(cd $(NETLIB_LAPACK_DIR); $(TAR) zxf ../timing.tgz TIMING)
|
||||
(cd $(NETLIB_LAPACK_DIR)/TIMING; $(TAR) zxf ../../large.tgz )
|
||||
@@ -314,10 +315,12 @@ clean ::
|
||||
#endif
|
||||
@$(MAKE) -C reference clean
|
||||
@rm -f *.$(LIBSUFFIX) *.so *~ *.exe getarch getarch_2nd *.dll *.lib *.$(SUFFIX) *.dwf $(LIBPREFIX).$(LIBSUFFIX) $(LIBPREFIX)_p.$(LIBSUFFIX) $(LIBPREFIX).so.$(MAJOR_VERSION) *.lnk myconfig.h
|
||||
@rm -f Makefile.conf config.h cblas_noconst.h Makefile_kernel.conf config_kernel.h st* *.dylib
|
||||
@if test -d $(NETLIB_LAPACK_DIR); then \
|
||||
echo deleting $(NETLIB_LAPACK_DIR); \
|
||||
rm -rf $(NETLIB_LAPACK_DIR) ;\
|
||||
fi
|
||||
ifeq ($(OSNAME), Darwin)
|
||||
@rm -rf getarch.dSYM getarch_2nd.dSYM
|
||||
endif
|
||||
@rm -f Makefile.conf config.h Makefile_kernel.conf config_kernel.h st* *.dylib
|
||||
@touch $(NETLIB_LAPACK_DIR)/make.inc
|
||||
@$(MAKE) -C $(NETLIB_LAPACK_DIR) clean
|
||||
@rm -f $(NETLIB_LAPACK_DIR)/make.inc $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_mangling.h
|
||||
@rm -f *.grd Makefile.conf_last config_last.h
|
||||
@echo Done.
|
||||
@echo Done.
|
||||
|
||||
12
Makefile.arm
Normal file
12
Makefile.arm
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
ifeq ($(CORE), ARMV7)
|
||||
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
|
||||
FCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
|
||||
endif
|
||||
|
||||
ifeq ($(CORE), ARMV6)
|
||||
CCOMMON_OPT += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6
|
||||
FCOMMON_OPT += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6
|
||||
endif
|
||||
|
||||
|
||||
7
Makefile.arm64
Normal file
7
Makefile.arm64
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
ifeq ($(CORE), ARMV8)
|
||||
CCOMMON_OPT += -march=armv8-a
|
||||
FCOMMON_OPT += -march=armv8-a
|
||||
endif
|
||||
|
||||
|
||||
@@ -1,6 +1 @@
|
||||
COPT = -Wall -O2 # -DGEMMTEST
|
||||
ifdef BINARY64
|
||||
else
|
||||
# LDFLAGS = -m elf32ppc
|
||||
LDFLAGS = -m elf_i386
|
||||
endif
|
||||
|
||||
@@ -3,8 +3,11 @@ export GOTOBLAS_MAKEFILE = 1
|
||||
-include $(TOPDIR)/Makefile.conf_last
|
||||
include ./Makefile.system
|
||||
|
||||
OPENBLAS_INCLUDE_DIR:=$(PREFIX)/include
|
||||
OPENBLAS_LIBRARY_DIR:=$(PREFIX)/lib
|
||||
PREFIX ?= /opt/OpenBLAS
|
||||
|
||||
OPENBLAS_INCLUDE_DIR := $(PREFIX)/include
|
||||
OPENBLAS_LIBRARY_DIR := $(PREFIX)/lib
|
||||
OPENBLAS_BUILD_DIR := $(CURDIR)
|
||||
|
||||
.PHONY : install
|
||||
.NOTPARALLEL : install
|
||||
@@ -13,67 +16,73 @@ lib.grd :
|
||||
$(error OpenBLAS: Please run "make" firstly)
|
||||
|
||||
install : lib.grd
|
||||
@-mkdir -p $(PREFIX)
|
||||
@-mkdir -p $(OPENBLAS_INCLUDE_DIR)
|
||||
@-mkdir -p $(OPENBLAS_LIBRARY_DIR)
|
||||
@echo Generating openblas_config.h in $(OPENBLAS_INCLUDE_DIR)
|
||||
@-mkdir -p $(DESTDIR)$(PREFIX)
|
||||
@-mkdir -p $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)
|
||||
@-mkdir -p $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)
|
||||
@echo Generating openblas_config.h in $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)
|
||||
#for inc
|
||||
@echo \#ifndef OPENBLAS_CONFIG_H > $(OPENBLAS_INCLUDE_DIR)/openblas_config.h
|
||||
@echo \#define OPENBLAS_CONFIG_H >> $(OPENBLAS_INCLUDE_DIR)/openblas_config.h
|
||||
@cat config_last.h >> $(OPENBLAS_INCLUDE_DIR)/openblas_config.h
|
||||
@echo \#define VERSION \" OpenBLAS $(VERSION) \" >> $(OPENBLAS_INCLUDE_DIR)/openblas_config.h
|
||||
@cat openblas_config_template.h >> $(OPENBLAS_INCLUDE_DIR)/openblas_config.h
|
||||
@echo \#endif \/\* OPENBLAS_CONFIG_H \*\/ >> $(OPENBLAS_INCLUDE_DIR)/openblas_config.h
|
||||
@echo \#ifndef OPENBLAS_CONFIG_H > $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/openblas_config.h
|
||||
@echo \#define OPENBLAS_CONFIG_H >> $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/openblas_config.h
|
||||
@awk '{print $$1, "OPENBLAS_"$$2, $$3}' config_last.h >> $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/openblas_config.h
|
||||
@echo \#define OPENBLAS_VERSION \" OpenBLAS $(VERSION) \" >> $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/openblas_config.h
|
||||
@cat openblas_config_template.h >> $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/openblas_config.h
|
||||
@echo \#endif \/\* OPENBLAS_CONFIG_H \*\/ >> $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/openblas_config.h
|
||||
|
||||
@echo Generating f77blas.h in $(OPENBLAS_INCLUDE_DIR)
|
||||
@echo \#ifndef OPENBLAS_F77BLAS_H > $(OPENBLAS_INCLUDE_DIR)/f77blas.h
|
||||
@echo \#define OPENBLAS_F77BLAS_H >> $(OPENBLAS_INCLUDE_DIR)/f77blas.h
|
||||
@echo \#include \"openblas_config.h\" >> $(OPENBLAS_INCLUDE_DIR)/f77blas.h
|
||||
@cat common_interface.h >> $(OPENBLAS_INCLUDE_DIR)/f77blas.h
|
||||
@echo \#endif >> $(OPENBLAS_INCLUDE_DIR)/f77blas.h
|
||||
@echo Generating f77blas.h in $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)
|
||||
@echo \#ifndef OPENBLAS_F77BLAS_H > $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/f77blas.h
|
||||
@echo \#define OPENBLAS_F77BLAS_H >> $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/f77blas.h
|
||||
@echo \#include \"openblas_config.h\" >> $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/f77blas.h
|
||||
@cat common_interface.h >> $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/f77blas.h
|
||||
@echo \#endif >> $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/f77blas.h
|
||||
|
||||
ifndef NO_CBLAS
|
||||
@echo Generating cblas.h in $(OPENBLAS_INCLUDE_DIR)
|
||||
@sed 's/common/openblas_config/g' cblas.h > $(OPENBLAS_INCLUDE_DIR)/cblas.h
|
||||
@echo Generating cblas.h in $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)
|
||||
@sed 's/common/openblas_config/g' cblas.h > $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/cblas.h
|
||||
endif
|
||||
|
||||
ifndef NO_LAPACKE
|
||||
@echo Copying LAPACKE header files to $(OPENBLAS_LIBRARY_DIR)
|
||||
@-cp $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke.h $(OPENBLAS_INCLUDE_DIR)/lapacke.h
|
||||
@-cp $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_config.h $(OPENBLAS_INCLUDE_DIR)/lapacke_config.h
|
||||
@-cp $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_mangling_with_flags.h $(OPENBLAS_INCLUDE_DIR)/lapacke_mangling.h
|
||||
@-cp $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_utils.h $(OPENBLAS_INCLUDE_DIR)/lapacke_utils.h
|
||||
@echo Copying LAPACKE header files to $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)
|
||||
@-install -pDm644 $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke.h $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke.h
|
||||
@-install -pDm644 $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_config.h $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke_config.h
|
||||
@-install -pDm644 $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_mangling_with_flags.h $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke_mangling.h
|
||||
@-install -pDm644 $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_utils.h $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke_utils.h
|
||||
endif
|
||||
|
||||
#for install static library
|
||||
@echo Copy the static library to $(OPENBLAS_LIBRARY_DIR)
|
||||
@cp $(LIBNAME) $(OPENBLAS_LIBRARY_DIR)
|
||||
@-ln -fs $(OPENBLAS_LIBRARY_DIR)/$(LIBNAME) $(OPENBLAS_LIBRARY_DIR)/$(LIBPREFIX).$(LIBSUFFIX)
|
||||
@echo Copying the static library to $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)
|
||||
@install -pm644 $(LIBNAME) $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)
|
||||
@cd $(DESTDIR)$(OPENBLAS_LIBRARY_DIR) ; \
|
||||
ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
|
||||
#for install shared library
|
||||
@echo Copy the shared library to $(OPENBLAS_LIBRARY_DIR)
|
||||
ifndef NO_SHARED
|
||||
@echo Copying the shared library to $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)
|
||||
ifeq ($(OSNAME), Linux)
|
||||
-cp $(LIBSONAME) $(OPENBLAS_LIBRARY_DIR)
|
||||
-ln -fs $(OPENBLAS_LIBRARY_DIR)/$(LIBSONAME) $(OPENBLAS_LIBRARY_DIR)/$(LIBPREFIX).so
|
||||
-ln -fs $(OPENBLAS_LIBRARY_DIR)/$(LIBSONAME) $(OPENBLAS_LIBRARY_DIR)/$(LIBPREFIX).so.$(MAJOR_VERSION)
|
||||
@install -pm755 $(LIBSONAME) $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)
|
||||
@cd $(DESTDIR)$(OPENBLAS_LIBRARY_DIR) ; \
|
||||
ln -fs $(LIBSONAME) $(LIBPREFIX).so ; \
|
||||
ln -fs $(LIBSONAME) $(LIBPREFIX).so.$(MAJOR_VERSION)
|
||||
endif
|
||||
ifeq ($(OSNAME), FreeBSD)
|
||||
-cp $(LIBSONAME) $(OPENBLAS_LIBRARY_DIR)
|
||||
-ln -fs $(OPENBLAS_LIBRARY_DIR)/$(LIBSONAME) $(OPENBLAS_LIBRARY_DIR)/$(LIBPREFIX).so
|
||||
@cp $(LIBSONAME) $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)
|
||||
@cd $(DESTDIR)$(OPENBLAS_LIBRARY_DIR) ; \
|
||||
ln -fs $(LIBSONAME) $(LIBPREFIX).so
|
||||
endif
|
||||
ifeq ($(OSNAME), NetBSD)
|
||||
-cp $(LIBSONAME) $(OPENBLAS_LIBRARY_DIR)
|
||||
-ln -fs $(OPENBLAS_LIBRARY_DIR)/$(LIBSONAME) $(OPENBLAS_LIBRARY_DIR)/$(LIBPREFIX).so
|
||||
@cp $(LIBSONAME) $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)
|
||||
@cd $(DESTDIR)$(OPENBLAS_LIBRARY_DIR) ; \
|
||||
ln -fs $(LIBSONAME) $(LIBPREFIX).so
|
||||
endif
|
||||
ifeq ($(OSNAME), Darwin)
|
||||
-cp $(LIBDYNNAME) $(OPENBLAS_LIBRARY_DIR)
|
||||
-install_name_tool -id $(OPENBLAS_LIBRARY_DIR)/$(LIBDYNNAME) $(OPENBLAS_LIBRARY_DIR)/$(LIBDYNNAME)
|
||||
-ln -fs $(OPENBLAS_LIBRARY_DIR)/$(LIBDYNNAME) $(OPENBLAS_LIBRARY_DIR)/$(LIBPREFIX).dylib
|
||||
@-cp $(LIBDYNNAME) $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)
|
||||
@-install_name_tool -id $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)/$(LIBDYNNAME) $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)/$(LIBDYNNAME)
|
||||
@-ln -fs $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)/$(LIBDYNNAME) $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)/$(LIBPREFIX).dylib
|
||||
endif
|
||||
ifeq ($(OSNAME), WINNT)
|
||||
-cp $(LIBDLLNAME) $(OPENBLAS_LIBRARY_DIR)
|
||||
@-cp $(LIBDLLNAME) $(OPENBLAS_LIBRARY_DIR)
|
||||
endif
|
||||
ifeq ($(OSNAME), CYGWIN_NT)
|
||||
-cp $(LIBDLLNAME) $(OPENBLAS_LIBRARY_DIR)
|
||||
@-cp $(LIBDLLNAME) $(OPENBLAS_LIBRARY_DIR)
|
||||
endif
|
||||
endif
|
||||
|
||||
@echo Install OK!
|
||||
|
||||
@@ -17,13 +17,7 @@ endif
|
||||
endif
|
||||
|
||||
ifdef BINARY64
|
||||
ifeq ($(OSNAME), Linux)
|
||||
LDFLAGS = -m elf64ppc
|
||||
endif
|
||||
|
||||
ifeq ($(OSNAME), Darwin)
|
||||
LDFLAGS = -arch ppc64
|
||||
endif
|
||||
|
||||
ifeq ($(OSNAME), AIX)
|
||||
CCOMMON_OPT += -mpowerpc64 -maix64
|
||||
@@ -34,17 +28,12 @@ ifeq ($(COMPILER_F77), xlf)
|
||||
FCOMMON_OPT += -q64
|
||||
endif
|
||||
ARFLAGS = -X 64
|
||||
LDFLAGS = -b64
|
||||
ASFLAGS = -a64
|
||||
endif
|
||||
else
|
||||
ifeq ($(OSNAME), Linux)
|
||||
LDFLAGS = -m elf32ppc
|
||||
endif
|
||||
ifeq ($(OSNAME), AIX)
|
||||
CCOMMON_OPT += -Wa,-a32
|
||||
ARFLAGS = -X 32
|
||||
LDFLAGS = -b32
|
||||
ASFLAGS = -a32
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -17,13 +17,23 @@ ifdef CPUIDEMU
|
||||
EXFLAGS = -DCPUIDEMU -DVENDOR=99
|
||||
endif
|
||||
|
||||
all: getarch_2nd cblas_noconst.h
|
||||
all: getarch_2nd
|
||||
./getarch_2nd 0 >> $(TARGET_MAKE)
|
||||
./getarch_2nd 1 >> $(TARGET_CONF)
|
||||
|
||||
config.h : c_check f_check getarch
|
||||
perl ./c_check $(TARGET_MAKE) $(TARGET_CONF) $(CC)
|
||||
ifneq ($(ONLY_CBLAS), 1)
|
||||
perl ./f_check $(TARGET_MAKE) $(TARGET_CONF) $(FC)
|
||||
else
|
||||
#When we only build CBLAS, we set NOFORTRAN=2
|
||||
echo "NOFORTRAN=2" >> $(TARGET_MAKE)
|
||||
echo "NO_FBLAS=1" >> $(TARGET_MAKE)
|
||||
echo "F_COMPILER=GFORTRAN" >> $(TARGET_MAKE)
|
||||
echo "BU=_" >> $(TARGET_MAKE)
|
||||
echo "#define BUNDERSCORE _" >> $(TARGET_CONF)
|
||||
echo "#define NEEDBUNDERSCORE 1" >> $(TARGET_CONF)
|
||||
endif
|
||||
./getarch 0 >> $(TARGET_MAKE)
|
||||
./getarch 1 >> $(TARGET_CONF)
|
||||
|
||||
@@ -38,7 +48,4 @@ else
|
||||
$(HOSTCC) -I. $(CFLAGS) -DBUILD_KERNEL -o $(@F) getarch_2nd.c
|
||||
endif
|
||||
|
||||
cblas_noconst.h : cblas.h
|
||||
perl -ane ' s/\bconst\b\s*//g; print; ' < cblas.h > cblas_noconst.h
|
||||
|
||||
dummy:
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#
|
||||
|
||||
# This library's version
|
||||
VERSION = 0.2.6
|
||||
VERSION = 0.2.8
|
||||
|
||||
# If you set the suffix, the library name will be libopenblas_$(LIBNAMESUFFIX).a
|
||||
# and libopenblas_$(LIBNAMESUFFIX).so. Meanwhile, the soname in shared library
|
||||
@@ -54,6 +54,10 @@ VERSION = 0.2.6
|
||||
# If you don't need CBLAS interface, please comment it in.
|
||||
# NO_CBLAS = 1
|
||||
|
||||
# If you only want CBLAS interface without installing Fortran compiler,
|
||||
# please comment it in.
|
||||
# ONLY_CBLAS = 1
|
||||
|
||||
# If you don't need LAPACK, please comment it in.
|
||||
# If you set NO_LAPACK=1, the library automatically sets NO_LAPACKE=1.
|
||||
# NO_LAPACK = 1
|
||||
@@ -81,6 +85,9 @@ VERSION = 0.2.6
|
||||
# and OS. However, the performance is low.
|
||||
# NO_AVX = 1
|
||||
|
||||
# Don't use parallel make.
|
||||
# NO_PARALLEL_MAKE = 1
|
||||
|
||||
# If you would like to know minute performance report of GotoBLAS.
|
||||
# FUNCTION_PROFILE = 1
|
||||
|
||||
@@ -104,8 +111,8 @@ VERSION = 0.2.6
|
||||
|
||||
# If any gemm arguement m, n or k is less or equal this threshold, gemm will be execute
|
||||
# with single thread. You can use this flag to avoid the overhead of multi-threading
|
||||
# in small matrix sizes. The default value is 50.
|
||||
# GEMM_MULTITHREAD_THRESHOLD = 50
|
||||
# in small matrix sizes. The default value is 4.
|
||||
# GEMM_MULTITHREAD_THRESHOLD = 4
|
||||
|
||||
# If you need santy check by comparing reference BLAS. It'll be very
|
||||
# slow (Not implemented yet).
|
||||
|
||||
@@ -10,7 +10,6 @@ endif
|
||||
ifeq ($(COMPILER_F77), f90)
|
||||
FCOMMON_OPT += -xarch=v9
|
||||
endif
|
||||
LDFLAGS = -64
|
||||
else
|
||||
|
||||
CCOMMON_OPT += -mcpu=v9
|
||||
|
||||
202
Makefile.system
202
Makefile.system
@@ -9,9 +9,7 @@ ifndef TOPDIR
|
||||
TOPDIR = .
|
||||
endif
|
||||
|
||||
ifndef NETLIB_LAPACK_DIR
|
||||
NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-3.4.2
|
||||
endif
|
||||
NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-netlib
|
||||
|
||||
# Default C compiler
|
||||
# - Only set if not specified on the command line or inherited from the environment.
|
||||
@@ -20,6 +18,12 @@ endif
|
||||
# - Default value is 'cc' which is not always a valid command (e.g. MinGW).
|
||||
ifeq ($(origin CC),default)
|
||||
CC = gcc
|
||||
# Change the default compile to clang on Mac OSX.
|
||||
# http://stackoverflow.com/questions/714100/os-detecting-makefile
|
||||
UNAME_S := $(shell uname -s)
|
||||
ifeq ($(UNAME_S),Darwin)
|
||||
CC = clang
|
||||
endif
|
||||
endif
|
||||
|
||||
# Default Fortran compiler (FC) is selected by f_check.
|
||||
@@ -53,7 +57,7 @@ GETARCH_FLAGS += -DUSE64BITINT
|
||||
endif
|
||||
|
||||
ifndef GEMM_MULTITHREAD_THRESHOLD
|
||||
GEMM_MULTITHREAD_THRESHOLD=50
|
||||
GEMM_MULTITHREAD_THRESHOLD=4
|
||||
endif
|
||||
GETARCH_FLAGS += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
|
||||
|
||||
@@ -65,12 +69,32 @@ ifeq ($(DEBUG), 1)
|
||||
GETARCH_FLAGS += -g
|
||||
endif
|
||||
|
||||
ifeq ($(QUIET_MAKE), 1)
|
||||
MAKE += -s
|
||||
endif
|
||||
|
||||
ifndef NO_PARALLEL_MAKE
|
||||
NO_PARALLEL_MAKE=0
|
||||
endif
|
||||
GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
|
||||
|
||||
ifeq ($(HOSTCC), loongcc)
|
||||
GETARCH_FLAGS += -static
|
||||
endif
|
||||
|
||||
#if don't use Fortran, it will only compile CBLAS.
|
||||
ifeq ($(ONLY_CBLAS), 1)
|
||||
NO_LAPACK = 1
|
||||
else
|
||||
ONLY_CBLAS = 0
|
||||
endif
|
||||
|
||||
# This operation is expensive, so execution should be once.
|
||||
ifndef GOTOBLAS_MAKEFILE
|
||||
export GOTOBLAS_MAKEFILE = 1
|
||||
|
||||
# Generating Makefile.conf and config.h
|
||||
DUMMY := $(shell $(MAKE) -C $(TOPDIR) -f Makefile.prebuild CC="$(CC)" FC="$(FC)" HOSTCC="$(HOSTCC)" CFLAGS="$(GETARCH_FLAGS)" BINARY=$(BINARY) USE_OPENMP=$(USE_OPENMP) TARGET_CORE=$(TARGET_CORE) all)
|
||||
DUMMY := $(shell $(MAKE) -C $(TOPDIR) -f Makefile.prebuild CC="$(CC)" FC="$(FC)" HOSTCC="$(HOSTCC)" CFLAGS="$(GETARCH_FLAGS)" BINARY=$(BINARY) USE_OPENMP=$(USE_OPENMP) TARGET_CORE=$(TARGET_CORE) ONLY_CBLAS=$(ONLY_CBLAS) all)
|
||||
|
||||
ifndef TARGET_CORE
|
||||
include $(TOPDIR)/Makefile.conf
|
||||
@@ -148,7 +172,12 @@ EXTRALIB += -defaultlib:advapi32
|
||||
|
||||
SUFFIX = obj
|
||||
PSUFFIX = pobj
|
||||
LIBSUFFIX = lib
|
||||
LIBSUFFIX = a
|
||||
|
||||
ifeq ($(C_COMPILER), CLANG)
|
||||
CCOMMON_OPT += -DMS_ABI
|
||||
endif
|
||||
|
||||
ifeq ($(C_COMPILER), GCC)
|
||||
#Test for supporting MS_ABI
|
||||
GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
|
||||
@@ -167,8 +196,15 @@ ifeq ($(GCCMINORVERSIONGTEQ7), 1)
|
||||
CCOMMON_OPT += -DMS_ABI
|
||||
endif
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
# Ensure the correct stack alignment on Win32
|
||||
# http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
|
||||
ifeq ($(ARCH), x86)
|
||||
CCOMMON_OPT += -mincoming-stack-boundary=2
|
||||
FCOMMON_OPT += -mincoming-stack-boundary=2
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
ifeq ($(OSNAME), Interix)
|
||||
@@ -193,6 +229,11 @@ endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# ifeq logical or
|
||||
ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
|
||||
OS_WINDOWS=1
|
||||
endif
|
||||
|
||||
ifdef QUAD_PRECISION
|
||||
CCOMMON_OPT += -DQUAD_PRECISION
|
||||
NO_EXPRECISION = 1
|
||||
@@ -223,11 +264,17 @@ NO_BINARY_MODE = 1
|
||||
endif
|
||||
ifndef NO_EXPRECISION
|
||||
ifeq ($(F_COMPILER), GFORTRAN)
|
||||
ifeq ($(C_COMPILER), GCC)
|
||||
# ifeq logical or. GCC or LSB
|
||||
ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
|
||||
EXPRECISION = 1
|
||||
CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
|
||||
FCOMMON_OPT += -m128bit-long-double
|
||||
endif
|
||||
ifeq ($(C_COMPILER), CLANG)
|
||||
EXPRECISION = 1
|
||||
CCOMMON_OPT += -DEXPRECISION
|
||||
FCOMMON_OPT += -m128bit-long-double
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
@@ -235,11 +282,17 @@ endif
|
||||
ifeq ($(ARCH), x86_64)
|
||||
ifndef NO_EXPRECISION
|
||||
ifeq ($(F_COMPILER), GFORTRAN)
|
||||
ifeq ($(C_COMPILER), GCC)
|
||||
# ifeq logical or. GCC or LSB
|
||||
ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
|
||||
EXPRECISION = 1
|
||||
CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
|
||||
FCOMMON_OPT += -m128bit-long-double
|
||||
endif
|
||||
ifeq ($(C_COMPILER), CLANG)
|
||||
EXPRECISION = 1
|
||||
CCOMMON_OPT += -DEXPRECISION
|
||||
FCOMMON_OPT += -m128bit-long-double
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
@@ -249,7 +302,13 @@ CCOMMON_OPT += -wd981
|
||||
endif
|
||||
|
||||
ifeq ($(USE_OPENMP), 1)
|
||||
ifeq ($(C_COMPILER), GCC)
|
||||
# ifeq logical or. GCC or LSB
|
||||
ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
|
||||
CCOMMON_OPT += -fopenmp
|
||||
endif
|
||||
|
||||
ifeq ($(C_COMPILER), CLANG)
|
||||
$(error OpenBLAS: Clang didn't support OpenMP yet.)
|
||||
CCOMMON_OPT += -fopenmp
|
||||
endif
|
||||
|
||||
@@ -277,14 +336,14 @@ ifeq ($(ARCH), x86)
|
||||
DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
|
||||
CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
|
||||
ifneq ($(NO_AVX), 1)
|
||||
DYNAMIC_CORE += SANDYBRIDGE BULLDOZER
|
||||
DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER HASWELL
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH), x86_64)
|
||||
DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
|
||||
ifneq ($(NO_AVX), 1)
|
||||
DYNAMIC_CORE += SANDYBRIDGE BULLDOZER
|
||||
DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER HASWELL
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -314,15 +373,35 @@ NO_BINARY_MODE = 1
|
||||
BINARY_DEFINED = 1
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH), arm)
|
||||
NO_BINARY_MODE = 1
|
||||
BINARY_DEFINED = 1
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH), arm64)
|
||||
NO_BINARY_MODE = 1
|
||||
BINARY_DEFINED = 1
|
||||
endif
|
||||
|
||||
|
||||
|
||||
|
||||
#
|
||||
# C Compiler dependent settings
|
||||
#
|
||||
|
||||
ifeq ($(C_COMPILER), GCC)
|
||||
|
||||
# ifeq logical or. GCC or CLANG or LSB
|
||||
# http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
|
||||
ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
|
||||
CCOMMON_OPT += -Wall
|
||||
COMMON_PROF += -fno-inline
|
||||
NO_UNINITIALIZED_WARN = -Wno-uninitialized
|
||||
|
||||
ifeq ($(QUIET_MAKE), 1)
|
||||
CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
|
||||
endif
|
||||
|
||||
ifdef NO_BINARY_MODE
|
||||
|
||||
ifeq ($(ARCH), mips64)
|
||||
@@ -407,7 +486,10 @@ endif
|
||||
ifeq ($(F_COMPILER), GFORTRAN)
|
||||
CCOMMON_OPT += -DF_INTERFACE_GFORT
|
||||
FCOMMON_OPT += -Wall
|
||||
#Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
|
||||
ifneq ($(NO_LAPACK), 1)
|
||||
EXTRALIB += -lgfortran
|
||||
endif
|
||||
ifdef NO_BINARY_MODE
|
||||
ifeq ($(ARCH), mips64)
|
||||
ifdef BINARY64
|
||||
@@ -514,11 +596,28 @@ ifdef INTERFACE64
|
||||
FCOMMON_OPT += -i8
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH), mips64)
|
||||
ifndef BINARY64
|
||||
FCOMMON_OPT += -n32
|
||||
else
|
||||
FCOMMON_OPT += -n64
|
||||
endif
|
||||
ifeq ($(CORE), LOONGSON3A)
|
||||
FCOMMON_OPT += -loongson3 -static
|
||||
endif
|
||||
|
||||
ifeq ($(CORE), LOONGSON3B)
|
||||
FCOMMON_OPT += -loongson3 -static
|
||||
endif
|
||||
|
||||
else
|
||||
ifndef BINARY64
|
||||
FCOMMON_OPT += -m32
|
||||
else
|
||||
FCOMMON_OPT += -m64
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef USE_OPENMP
|
||||
FEXTRALIB += -lstdc++
|
||||
@@ -527,12 +626,30 @@ endif
|
||||
endif
|
||||
|
||||
ifeq ($(C_COMPILER), OPEN64)
|
||||
|
||||
ifeq ($(ARCH), mips64)
|
||||
ifndef BINARY64
|
||||
CCOMMON_OPT += -n32
|
||||
else
|
||||
CCOMMON_OPT += -n64
|
||||
endif
|
||||
ifeq ($(CORE), LOONGSON3A)
|
||||
CCOMMON_OPT += -loongson3 -static
|
||||
endif
|
||||
|
||||
ifeq ($(CORE), LOONGSON3B)
|
||||
CCOMMON_OPT += -loongson3 -static
|
||||
endif
|
||||
|
||||
else
|
||||
|
||||
ifndef BINARY64
|
||||
CCOMMON_OPT += -m32
|
||||
else
|
||||
CCOMMON_OPT += -m64
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(C_COMPILER), SUN)
|
||||
CCOMMON_OPT += -w
|
||||
@@ -729,6 +846,19 @@ ifeq ($(DEBUG), 1)
|
||||
COMMON_OPT += -g
|
||||
endif
|
||||
|
||||
ifndef COMMON_OPT
|
||||
ifeq ($(ARCH), arm)
|
||||
COMMON_OPT = -O3
|
||||
endif
|
||||
endif
|
||||
|
||||
ifndef COMMON_OPT
|
||||
ifeq ($(ARCH), arm64)
|
||||
COMMON_OPT = -O3
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
ifndef COMMON_OPT
|
||||
COMMON_OPT = -O2
|
||||
endif
|
||||
@@ -741,6 +871,22 @@ override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
|
||||
override FPFLAGS += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
|
||||
#MAKEOVERRIDES =
|
||||
|
||||
#For LAPACK Fortran codes.
|
||||
LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
|
||||
LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
|
||||
|
||||
LAPACK_CFLAGS = $(CFLAGS)
|
||||
LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
|
||||
ifdef INTERFACE64
|
||||
LAPACK_CFLAGS += -DLAPACK_ILP64
|
||||
endif
|
||||
ifdef OS_WINDOWS
|
||||
LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
|
||||
endif
|
||||
ifeq ($(C_COMPILER), LSB)
|
||||
LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
|
||||
endif
|
||||
|
||||
ifndef SUFFIX
|
||||
SUFFIX = o
|
||||
endif
|
||||
@@ -782,6 +928,23 @@ LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
|
||||
LIBS = $(TOPDIR)/$(LIBNAME)
|
||||
LIBS_P = $(TOPDIR)/$(LIBNAME_P)
|
||||
|
||||
|
||||
LIB_COMPONENTS = BLAS
|
||||
ifneq ($(NO_CBLAS), 1)
|
||||
LIB_COMPONENTS += CBLAS
|
||||
endif
|
||||
|
||||
ifneq ($(NO_LAPACK), 1)
|
||||
LIB_COMPONENTS += LAPACK
|
||||
ifneq ($(NO_LAPACKE), 1)
|
||||
LIB_COMPONENTS += LAPACKE
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(ONLY_CBLAS), 1)
|
||||
LIB_COMPONENTS = CBLAS
|
||||
endif
|
||||
|
||||
export OSNAME
|
||||
export ARCH
|
||||
export CORE
|
||||
@@ -792,6 +955,7 @@ export CC
|
||||
export FC
|
||||
export BU
|
||||
export FU
|
||||
export NEED2UNDERSCORES
|
||||
export USE_THREAD
|
||||
export NUM_THREADS
|
||||
export NUM_CORES
|
||||
@@ -807,6 +971,7 @@ export USE_OPENMP
|
||||
export CROSS
|
||||
export CROSS_SUFFIX
|
||||
export NOFORTRAN
|
||||
export NO_FBLAS
|
||||
export EXTRALIB
|
||||
export CEXTRALIB
|
||||
export FEXTRALIB
|
||||
@@ -819,6 +984,10 @@ export HAVE_SSE4_2
|
||||
export HAVE_SSE4A
|
||||
export HAVE_SSE5
|
||||
export HAVE_AVX
|
||||
export HAVE_VFP
|
||||
export HAVE_VFPV3
|
||||
export HAVE_VFPV4
|
||||
export HAVE_NEON
|
||||
export KERNELDIR
|
||||
export FUNCTION_PROFILE
|
||||
export TARGET_CORE
|
||||
@@ -835,6 +1004,13 @@ export ZGEMM_UNROLL_M
|
||||
export ZGEMM_UNROLL_N
|
||||
export XGEMM_UNROLL_M
|
||||
export XGEMM_UNROLL_N
|
||||
export CGEMM3M_UNROLL_M
|
||||
export CGEMM3M_UNROLL_N
|
||||
export ZGEMM3M_UNROLL_M
|
||||
export ZGEMM3M_UNROLL_N
|
||||
export XGEMM3M_UNROLL_M
|
||||
export XGEMM3M_UNROLL_N
|
||||
|
||||
|
||||
ifdef USE_CUDA
|
||||
export CUDADIR
|
||||
|
||||
@@ -606,7 +606,8 @@ clean ::
|
||||
@if test -d $(ARCH); then \
|
||||
(cd $(ARCH) && $(MAKE) clean) \
|
||||
fi
|
||||
@rm -rf *.a *.s *.o *.po *.obj *.i *.so core core.* gmon.out *.cso \
|
||||
@find . -name '*.o' | xargs rm -rf
|
||||
@rm -rf *.a *.s *.po *.obj *.i *.so core core.* gmon.out *.cso \
|
||||
*.csx *.is *~ *.exe *.flame *.pdb *.dwf \
|
||||
gen_insn_flash.c gen_insn_flash *.stackdump *.dll *.exp *.lib \
|
||||
*.pc *.pcl *.def *.i *.prof linktest.c \
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
# COMPILER_PREFIX = mingw32-
|
||||
|
||||
ifeq ($(OSNAME), Linux)
|
||||
LDFLAGS = -melf_i386
|
||||
endif
|
||||
|
||||
ifeq ($(OSNAME), Interix)
|
||||
ARFLAGS = -m x86
|
||||
|
||||
@@ -2,25 +2,12 @@
|
||||
|
||||
ifeq ($(OSNAME), SunOS)
|
||||
ifdef BINARY64
|
||||
LDFLAGS = -64
|
||||
ifeq ($(F_COMPILER), SUN)
|
||||
FCOMMON_OPT += -m64
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(OSNAME), FreeBSD)
|
||||
LDFLAGS = -m elf_x86_64_fbsd
|
||||
endif
|
||||
|
||||
ifeq ($(OSNAME), Linux)
|
||||
LDFLAGS = -m elf_x86_64
|
||||
endif
|
||||
|
||||
ifeq ($(OSNAME), Darwin)
|
||||
LDFLAGS =
|
||||
endif
|
||||
|
||||
ifeq ($(OSNAME), Interix)
|
||||
ARFLAGS = -m x64
|
||||
endif
|
||||
|
||||
43
README.md
43
README.md
@@ -1,11 +1,20 @@
|
||||
# OpenBLAS
|
||||
|
||||
[](https://travis-ci.org/xianyi/OpenBLAS)
|
||||
|
||||
## Introduction
|
||||
OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version. OpenBLAS is an open source project supported by Lab of Parallel Software and Computational Science, ISCAS <http://www.rdcps.ac.cn>.
|
||||
OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.
|
||||
|
||||
Please read the documents on OpenBLAS wiki pages <http://github.com/xianyi/OpenBLAS/wiki>.
|
||||
|
||||
## Installation
|
||||
## Binary Packages
|
||||
We provide binary packages for the following platform.
|
||||
|
||||
* Windows x86/x86_64
|
||||
|
||||
You can download them from [file hosting on sourceforge.net](https://sourceforge.net/projects/openblas/files/).
|
||||
|
||||
## Installation from Source
|
||||
Download from project homepage. http://xianyi.github.com/OpenBLAS/
|
||||
|
||||
Or, check out codes from git://github.com/xianyi/OpenBLAS.git
|
||||
@@ -23,11 +32,15 @@ On X86 box, compile this library for loongson3a CPU.
|
||||
|
||||
make BINARY=64 CC=mips64el-unknown-linux-gnu-gcc FC=mips64el-unknown-linux-gnu-gfortran HOSTCC=gcc TARGET=LOONGSON3A
|
||||
|
||||
On X86 box, compile this library for loongson3a CPU with loongcc (based on Open64) compiler.
|
||||
|
||||
make CC=loongcc FC=loongf95 HOSTCC=gcc TARGET=LOONGSON3A CROSS=1 CROSS_SUFFIX=mips64el-st-linux-gnu- NO_LAPACKE=1 NO_SHARED=1 BINARY=32
|
||||
|
||||
### Debug version
|
||||
|
||||
make DEBUG=1
|
||||
|
||||
### Intall to the directory (Optional)
|
||||
### Install to the directory (optional)
|
||||
|
||||
Example:
|
||||
|
||||
@@ -43,8 +56,10 @@ Please read GotoBLAS_01Readme.txt
|
||||
#### x86/x86-64:
|
||||
- **Intel Xeon 56xx (Westmere)**: Used GotoBLAS2 Nehalem codes.
|
||||
- **Intel Sandy Bridge**: Optimized Level-3 BLAS with AVX on x86-64.
|
||||
- **Intel Haswell**: Optimized Level-3 BLAS with AVX on x86-64 (identical to Sandy Bridge).
|
||||
- **AMD Bobcat**: Used GotoBLAS2 Barcelona codes.
|
||||
- **AMD Bulldozer**: x86-64 S/DGEMM AVX kernels. (Thank Werner Saar)
|
||||
- **AMD PILEDRIVER**: Used Bulldozer codes.
|
||||
|
||||
#### MIPS64:
|
||||
- **ICT Loongson 3A**: Optimized Level-3 BLAS and the part of Level-1,2.
|
||||
@@ -54,7 +69,7 @@ Please read GotoBLAS_01Readme.txt
|
||||
- **GNU/Linux**
|
||||
- **MingWin/Windows**: Please read <https://github.com/xianyi/OpenBLAS/wiki/How-to-use-OpenBLAS-in-Microsoft-Visual-Studio>.
|
||||
- **Darwin/Mac OS X**: Experimental. Although GotoBLAS2 supports Darwin, we are the beginner on Mac OS X.
|
||||
- **FreeBSD**: Supportted by community. We didn't test the library on this OS.
|
||||
- **FreeBSD**: Supported by community. We didn't test the library on this OS.
|
||||
|
||||
## Usages
|
||||
Link with libopenblas.a or -lopenblas for shared library.
|
||||
@@ -79,7 +94,7 @@ If you compile this lib with USE_OPENMP=1, you should set OMP_NUM_THREADS enviro
|
||||
|
||||
### Set the number of threads on runtime.
|
||||
|
||||
We provided the below functions to controll the number of threads on runtime.
|
||||
We provided the below functions to control the number of threads on runtime.
|
||||
|
||||
void goto_set_num_threads(int num_threads);
|
||||
|
||||
@@ -91,7 +106,8 @@ If you compile this lib with USE_OPENMP=1, you should use the above functions, t
|
||||
Please add a issue in https://github.com/xianyi/OpenBLAS/issues
|
||||
|
||||
## Contact
|
||||
OpenBLAS users mailing list: http://list.rdcps.ac.cn/mailman/listinfo/openblas
|
||||
* OpenBLAS users mailing list: https://groups.google.com/forum/#!forum/openblas-users
|
||||
* OpenBLAS developers mailing list: https://groups.google.com/forum/#!forum/openblas-dev
|
||||
|
||||
## ChangeLog
|
||||
Please see Changelog.txt to obtain the differences between GotoBLAS2 1.13 BSD version.
|
||||
@@ -104,10 +120,11 @@ Please see Changelog.txt to obtain the differences between GotoBLAS2 1.13 BSD ve
|
||||
* On Linux, OpenBLAS sets the processor affinity by default. This may cause [the conflict with R parallel](https://stat.ethz.ch/pipermail/r-sig-hpc/2012-April/001348.html). You can build the library with NO_AFFINITY=1.
|
||||
* On Loongson 3A. make test would be failed because of pthread_create error. The error code is EAGAIN. However, it will be OK when you run the same testcase on shell.
|
||||
|
||||
## Specification of Git Branches
|
||||
We used the git branching model in this article (http://nvie.com/posts/a-successful-git-branching-model/).
|
||||
Now, there are 4 branches in github.com.
|
||||
* The master branch. This a main branch to reflect a production-ready state.
|
||||
* The develop branch. This a main branch to reflect a state with the latest delivered development changes for the next release.
|
||||
* The loongson3a branch. This is a feature branch. We develop Loongson3A codes on this branch. We will merge this feature to develop branch in future.
|
||||
* The gh-pages branch. This is for web pages
|
||||
## Contributing
|
||||
1. [Check for open issues](https://github.com/xianyi/OpenBLAS/issues) or open a fresh issue to start a discussion around a feature idea or a bug.
|
||||
1. Fork the [OpenBLAS](https://github.com/xianyi/OpenBLAS) repository to start making your changes.
|
||||
1. Write a test which shows that the bug was fixed or that the feature works as expected.
|
||||
1. Send a pull request. Make sure to add yourself to `CONTRIBUTORS.md`.
|
||||
|
||||
## Donation
|
||||
Please read [this wiki page](https://github.com/xianyi/OpenBLAS/wiki/Donation).
|
||||
|
||||
@@ -8,8 +8,8 @@ Supported List:
|
||||
1.X86/X86_64
|
||||
a)Intel CPU:
|
||||
P2
|
||||
COPPERMINE
|
||||
KATMAI
|
||||
COPPERMINE
|
||||
NORTHWOOD
|
||||
PRESCOTT
|
||||
BANIAS
|
||||
|
||||
22
c_check
22
c_check
@@ -33,6 +33,8 @@ if ($ARGV[0] =~ /(.*)(-[.\d]+)/) {
|
||||
}
|
||||
|
||||
$compiler = "";
|
||||
$compiler = LSB if ($data =~ /COMPILER_LSB/);
|
||||
$compiler = CLANG if ($data =~ /COMPILER_CLANG/);
|
||||
$compiler = PGI if ($data =~ /COMPILER_PGI/);
|
||||
$compiler = PATHSCALE if ($data =~ /COMPILER_PATHSCALE/);
|
||||
$compiler = INTEL if ($data =~ /COMPILER_INTEL/);
|
||||
@@ -61,6 +63,8 @@ $architecture = mips64 if ($data =~ /ARCH_MIPS64/);
|
||||
$architecture = alpha if ($data =~ /ARCH_ALPHA/);
|
||||
$architecture = sparc if ($data =~ /ARCH_SPARC/);
|
||||
$architecture = ia64 if ($data =~ /ARCH_IA64/);
|
||||
$architecture = arm if ($data =~ /ARCH_ARM/);
|
||||
$architecture = arm64 if ($data =~ /ARCH_ARM64/);
|
||||
|
||||
$defined = 0;
|
||||
|
||||
@@ -117,7 +121,11 @@ if ($compiler eq "OPEN64") {
|
||||
$openmp = "-mp";
|
||||
}
|
||||
|
||||
if ($compiler eq "GCC") {
|
||||
if ($compiler eq "CLANG") {
|
||||
$openmp = "-fopenmp";
|
||||
}
|
||||
|
||||
if ($compiler eq "GCC" || $compiler eq "LSB") {
|
||||
$openmp = "-fopenmp";
|
||||
}
|
||||
|
||||
@@ -143,6 +151,8 @@ $architecture = mips64 if ($data =~ /ARCH_MIPS64/);
|
||||
$architecture = alpha if ($data =~ /ARCH_ALPHA/);
|
||||
$architecture = sparc if ($data =~ /ARCH_SPARC/);
|
||||
$architecture = ia64 if ($data =~ /ARCH_IA64/);
|
||||
$architecture = arm if ($data =~ /ARCH_ARM/);
|
||||
$architecture = arm64 if ($data =~ /ARCH_ARM64/);
|
||||
|
||||
$binformat = bin32;
|
||||
$binformat = bin64 if ($data =~ /BINARY_64/);
|
||||
@@ -241,13 +251,13 @@ print CONFFILE "#define FUNDERSCORE\t$need_fu\n" if $need_fu ne "";
|
||||
|
||||
if ($os eq "LINUX") {
|
||||
|
||||
@pthread = split(/\s+/, `nm /lib/libpthread.so* | grep _pthread_create`);
|
||||
# @pthread = split(/\s+/, `nm /lib/libpthread.so* | grep _pthread_create`);
|
||||
|
||||
if ($pthread[2] ne "") {
|
||||
print CONFFILE "#define PTHREAD_CREATE_FUNC $pthread[2]\n";
|
||||
} else {
|
||||
# if ($pthread[2] ne "") {
|
||||
# print CONFFILE "#define PTHREAD_CREATE_FUNC $pthread[2]\n";
|
||||
# } else {
|
||||
print CONFFILE "#define PTHREAD_CREATE_FUNC pthread_create\n";
|
||||
}
|
||||
# }
|
||||
} else {
|
||||
print CONFFILE "#define PTHREAD_CREATE_FUNC pthread_create\n";
|
||||
}
|
||||
|
||||
447
cblas.h
447
cblas.h
@@ -16,6 +16,25 @@ void goto_set_num_threads(int num_threads);
|
||||
/*Get the build configure on runtime.*/
|
||||
char* openblas_get_config(void);
|
||||
|
||||
/* Get the parallelization type which is used by OpenBLAS */
|
||||
int openblas_get_parallel(void);
|
||||
/* OpenBLAS is compiled for sequential use */
|
||||
#define OPENBLAS_SEQUENTIAL 0
|
||||
/* OpenBLAS is compiled using normal threading model */
|
||||
#define OPENBLAS_THREAD 1
|
||||
/* OpenBLAS is compiled using OpenMP threading model */
|
||||
#define OPENBLAS_OPENMP 2
|
||||
|
||||
|
||||
/*
|
||||
* Since all of GotoBlas was written without const,
|
||||
* we disable it at build time.
|
||||
*/
|
||||
#ifndef OPENBLAS_CONST
|
||||
# define OPENBLAS_CONST const
|
||||
#endif
|
||||
|
||||
|
||||
#define CBLAS_INDEX size_t
|
||||
|
||||
typedef enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102} CBLAS_ORDER;
|
||||
@@ -24,265 +43,265 @@ typedef enum CBLAS_UPLO {CblasUpper=121, CblasLower=122} CBLAS_UPLO;
|
||||
typedef enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132} CBLAS_DIAG;
|
||||
typedef enum CBLAS_SIDE {CblasLeft=141, CblasRight=142} CBLAS_SIDE;
|
||||
|
||||
float cblas_sdsdot(const blasint n, const float alpha, const float *x, const blasint incx, const float *y, const blasint incy);
|
||||
double cblas_dsdot (const blasint n, const float *x, const blasint incx, const float *y, const blasint incy);
|
||||
float cblas_sdot(const blasint n, const float *x, const blasint incx, const float *y, const blasint incy);
|
||||
double cblas_ddot(const blasint n, const double *x, const blasint incx, const double *y, const blasint incy);
|
||||
float cblas_sdsdot(OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy);
|
||||
double cblas_dsdot (OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy);
|
||||
float cblas_sdot(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy);
|
||||
double cblas_ddot(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST double *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
openblas_complex_float cblas_cdotu(const blasint n, const float *x, const blasint incx, const float *y, const blasint incy);
|
||||
openblas_complex_float cblas_cdotc(const blasint n, const float *x, const blasint incx, const float *y, const blasint incy);
|
||||
openblas_complex_double cblas_zdotu(const blasint n, const double *x, const blasint incx, const double *y, const blasint incy);
|
||||
openblas_complex_double cblas_zdotc(const blasint n, const double *x, const blasint incx, const double *y, const blasint incy);
|
||||
openblas_complex_float cblas_cdotu(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy);
|
||||
openblas_complex_float cblas_cdotc(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy);
|
||||
openblas_complex_double cblas_zdotu(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST double *y, OPENBLAS_CONST blasint incy);
|
||||
openblas_complex_double cblas_zdotc(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST double *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_cdotu_sub(const blasint n, const float *x, const blasint incx, const float *y, const blasint incy, openblas_complex_float *ret);
|
||||
void cblas_cdotc_sub(const blasint n, const float *x, const blasint incx, const float *y, const blasint incy, openblas_complex_float *ret);
|
||||
void cblas_zdotu_sub(const blasint n, const double *x, const blasint incx, const double *y, const blasint incy, openblas_complex_double *ret);
|
||||
void cblas_zdotc_sub(const blasint n, const double *x, const blasint incx, const double *y, const blasint incy, openblas_complex_double *ret);
|
||||
void cblas_cdotu_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy, openblas_complex_float *ret);
|
||||
void cblas_cdotc_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy, openblas_complex_float *ret);
|
||||
void cblas_zdotu_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST double *y, OPENBLAS_CONST blasint incy, openblas_complex_double *ret);
|
||||
void cblas_zdotc_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST double *y, OPENBLAS_CONST blasint incy, openblas_complex_double *ret);
|
||||
|
||||
float cblas_sasum (const blasint n, const float *x, const blasint incx);
|
||||
double cblas_dasum (const blasint n, const double *x, const blasint incx);
|
||||
float cblas_scasum(const blasint n, const float *x, const blasint incx);
|
||||
double cblas_dzasum(const blasint n, const double *x, const blasint incx);
|
||||
float cblas_sasum (OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
double cblas_dasum (OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
float cblas_scasum(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
double cblas_dzasum(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
|
||||
float cblas_snrm2 (const blasint N, const float *X, const blasint incX);
|
||||
double cblas_dnrm2 (const blasint N, const double *X, const blasint incX);
|
||||
float cblas_scnrm2(const blasint N, const float *X, const blasint incX);
|
||||
double cblas_dznrm2(const blasint N, const double *X, const blasint incX);
|
||||
float cblas_snrm2 (OPENBLAS_CONST blasint N, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX);
|
||||
double cblas_dnrm2 (OPENBLAS_CONST blasint N, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX);
|
||||
float cblas_scnrm2(OPENBLAS_CONST blasint N, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX);
|
||||
double cblas_dznrm2(OPENBLAS_CONST blasint N, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
CBLAS_INDEX cblas_isamax(const blasint n, const float *x, const blasint incx);
|
||||
CBLAS_INDEX cblas_idamax(const blasint n, const double *x, const blasint incx);
|
||||
CBLAS_INDEX cblas_icamax(const blasint n, const float *x, const blasint incx);
|
||||
CBLAS_INDEX cblas_izamax(const blasint n, const double *x, const blasint incx);
|
||||
CBLAS_INDEX cblas_isamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
CBLAS_INDEX cblas_idamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
CBLAS_INDEX cblas_icamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
CBLAS_INDEX cblas_izamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
|
||||
void cblas_saxpy(const blasint n, const float alpha, const float *x, const blasint incx, float *y, const blasint incy);
|
||||
void cblas_daxpy(const blasint n, const double alpha, const double *x, const blasint incx, double *y, const blasint incy);
|
||||
void cblas_caxpy(const blasint n, const float *alpha, const float *x, const blasint incx, float *y, const blasint incy);
|
||||
void cblas_zaxpy(const blasint n, const double *alpha, const double *x, const blasint incx, double *y, const blasint incy);
|
||||
void cblas_saxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, float *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_daxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, double *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_caxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, float *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_zaxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, double *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_scopy(const blasint n, const float *x, const blasint incx, float *y, const blasint incy);
|
||||
void cblas_dcopy(const blasint n, const double *x, const blasint incx, double *y, const blasint incy);
|
||||
void cblas_ccopy(const blasint n, const float *x, const blasint incx, float *y, const blasint incy);
|
||||
void cblas_zcopy(const blasint n, const double *x, const blasint incx, double *y, const blasint incy);
|
||||
void cblas_scopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, float *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_dcopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, double *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_ccopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, float *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_zcopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, double *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_sswap(const blasint n, float *x, const blasint incx, float *y, const blasint incy);
|
||||
void cblas_dswap(const blasint n, double *x, const blasint incx, double *y, const blasint incy);
|
||||
void cblas_cswap(const blasint n, float *x, const blasint incx, float *y, const blasint incy);
|
||||
void cblas_zswap(const blasint n, double *x, const blasint incx, double *y, const blasint incy);
|
||||
void cblas_sswap(OPENBLAS_CONST blasint n, float *x, OPENBLAS_CONST blasint incx, float *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_dswap(OPENBLAS_CONST blasint n, double *x, OPENBLAS_CONST blasint incx, double *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_cswap(OPENBLAS_CONST blasint n, float *x, OPENBLAS_CONST blasint incx, float *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_zswap(OPENBLAS_CONST blasint n, double *x, OPENBLAS_CONST blasint incx, double *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_srot(const blasint N, float *X, const blasint incX, float *Y, const blasint incY, const float c, const float s);
|
||||
void cblas_drot(const blasint N, double *X, const blasint incX, double *Y, const blasint incY, const double c, const double s);
|
||||
void cblas_srot(OPENBLAS_CONST blasint N, float *X, OPENBLAS_CONST blasint incX, float *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST float c, OPENBLAS_CONST float s);
|
||||
void cblas_drot(OPENBLAS_CONST blasint N, double *X, OPENBLAS_CONST blasint incX, double *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST double c, OPENBLAS_CONST double s);
|
||||
|
||||
void cblas_srotg(float *a, float *b, float *c, float *s);
|
||||
void cblas_drotg(double *a, double *b, double *c, double *s);
|
||||
|
||||
void cblas_srotm(const blasint N, float *X, const blasint incX, float *Y, const blasint incY, const float *P);
|
||||
void cblas_drotm(const blasint N, double *X, const blasint incX, double *Y, const blasint incY, const double *P);
|
||||
void cblas_srotm(OPENBLAS_CONST blasint N, float *X, OPENBLAS_CONST blasint incX, float *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST float *P);
|
||||
void cblas_drotm(OPENBLAS_CONST blasint N, double *X, OPENBLAS_CONST blasint incX, double *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST double *P);
|
||||
|
||||
void cblas_srotmg(float *d1, float *d2, float *b1, const float b2, float *P);
|
||||
void cblas_drotmg(double *d1, double *d2, double *b1, const double b2, double *P);
|
||||
void cblas_srotmg(float *d1, float *d2, float *b1, OPENBLAS_CONST float b2, float *P);
|
||||
void cblas_drotmg(double *d1, double *d2, double *b1, OPENBLAS_CONST double b2, double *P);
|
||||
|
||||
void cblas_sscal(const blasint N, const float alpha, float *X, const blasint incX);
|
||||
void cblas_dscal(const blasint N, const double alpha, double *X, const blasint incX);
|
||||
void cblas_cscal(const blasint N, const float *alpha, float *X, const blasint incX);
|
||||
void cblas_zscal(const blasint N, const double *alpha, double *X, const blasint incX);
|
||||
void cblas_csscal(const blasint N, const float alpha, float *X, const blasint incX);
|
||||
void cblas_zdscal(const blasint N, const double alpha, double *X, const blasint incX);
|
||||
void cblas_sscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_dscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, double *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_cscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST float *alpha, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_zscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST double *alpha, double *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_csscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_zdscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, double *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
void cblas_sgemv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE trans, const blasint m, const blasint n,
|
||||
const float alpha, const float *a, const blasint lda, const float *x, const blasint incx, const float beta, float *y, const blasint incy);
|
||||
void cblas_dgemv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE trans, const blasint m, const blasint n,
|
||||
const double alpha, const double *a, const blasint lda, const double *x, const blasint incx, const double beta, double *y, const blasint incy);
|
||||
void cblas_cgemv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE trans, const blasint m, const blasint n,
|
||||
const float *alpha, const float *a, const blasint lda, const float *x, const blasint incx, const float *beta, float *y, const blasint incy);
|
||||
void cblas_zgemv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE trans, const blasint m, const blasint n,
|
||||
const double *alpha, const double *a, const blasint lda, const double *x, const blasint incx, const double *beta, double *y, const blasint incy);
|
||||
void cblas_sgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n,
|
||||
OPENBLAS_CONST float alpha, OPENBLAS_CONST float *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float beta, float *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_dgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n,
|
||||
OPENBLAS_CONST double alpha, OPENBLAS_CONST double *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST double beta, double *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_cgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n,
|
||||
OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *beta, float *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_zgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n,
|
||||
OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST double *beta, double *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_sger (const enum CBLAS_ORDER order, const blasint M, const blasint N, const float alpha, const float *X, const blasint incX, const float *Y, const blasint incY, float *A, const blasint lda);
|
||||
void cblas_dger (const enum CBLAS_ORDER order, const blasint M, const blasint N, const double alpha, const double *X, const blasint incX, const double *Y, const blasint incY, double *A, const blasint lda);
|
||||
void cblas_cgeru(const enum CBLAS_ORDER order, const blasint M, const blasint N, const float *alpha, const float *X, const blasint incX, const float *Y, const blasint incY, float *A, const blasint lda);
|
||||
void cblas_cgerc(const enum CBLAS_ORDER order, const blasint M, const blasint N, const float *alpha, const float *X, const blasint incX, const float *Y, const blasint incY, float *A, const blasint lda);
|
||||
void cblas_zgeru(const enum CBLAS_ORDER order, const blasint M, const blasint N, const double *alpha, const double *X, const blasint incX, const double *Y, const blasint incY, double *A, const blasint lda);
|
||||
void cblas_zgerc(const enum CBLAS_ORDER order, const blasint M, const blasint N, const double *alpha, const double *X, const blasint incX, const double *Y, const blasint incY, double *A, const blasint lda);
|
||||
void cblas_sger (OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, float *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_dger (OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, double *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_cgeru(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, float *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_cgerc(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, float *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_zgeru(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, double *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_zgerc(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, double *A, OPENBLAS_CONST blasint lda);
|
||||
|
||||
void cblas_strsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const blasint N, const float *A, const blasint lda, float *X, const blasint incX);
|
||||
void cblas_dtrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const blasint N, const double *A, const blasint lda, double *X, const blasint incX);
|
||||
void cblas_ctrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const blasint N, const float *A, const blasint lda, float *X, const blasint incX);
|
||||
void cblas_ztrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const blasint N, const double *A, const blasint lda, double *X, const blasint incX);
|
||||
void cblas_strsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_dtrsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ctrsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ztrsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
void cblas_strmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const blasint N, const float *A, const blasint lda, float *X, const blasint incX);
|
||||
void cblas_dtrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const blasint N, const double *A, const blasint lda, double *X, const blasint incX);
|
||||
void cblas_ctrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const blasint N, const float *A, const blasint lda, float *X, const blasint incX);
|
||||
void cblas_ztrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const blasint N, const double *A, const blasint lda, double *X, const blasint incX);
|
||||
void cblas_strmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_dtrmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ctrmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ztrmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
void cblas_ssyr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const float alpha, const float *X, const blasint incX, float *A, const blasint lda);
|
||||
void cblas_dsyr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const double alpha, const double *X, const blasint incX, double *A, const blasint lda);
|
||||
void cblas_cher(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const float alpha, const float *X, const blasint incX, float *A, const blasint lda);
|
||||
void cblas_zher(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const double alpha, const double *X, const blasint incX, double *A, const blasint lda);
|
||||
void cblas_ssyr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, float *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_dsyr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, double *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_cher(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, float *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_zher(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, double *A, OPENBLAS_CONST blasint lda);
|
||||
|
||||
void cblas_ssyr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,const blasint N, const float alpha, const float *X,
|
||||
const blasint incX, const float *Y, const blasint incY, float *A, const blasint lda);
|
||||
void cblas_dsyr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const double alpha, const double *X,
|
||||
const blasint incX, const double *Y, const blasint incY, double *A, const blasint lda);
|
||||
void cblas_cher2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const float *alpha, const float *X, const blasint incX,
|
||||
const float *Y, const blasint incY, float *A, const blasint lda);
|
||||
void cblas_zher2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const double *alpha, const double *X, const blasint incX,
|
||||
const double *Y, const blasint incY, double *A, const blasint lda);
|
||||
void cblas_ssyr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo,OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X,
|
||||
OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, float *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_dsyr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X,
|
||||
OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, double *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_cher2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX,
|
||||
OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, float *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_zher2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX,
|
||||
OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, double *A, OPENBLAS_CONST blasint lda);
|
||||
|
||||
void cblas_sgbmv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const blasint M, const blasint N,
|
||||
const blasint KL, const blasint KU, const float alpha, const float *A, const blasint lda, const float *X, const blasint incX, const float beta, float *Y, const blasint incY);
|
||||
void cblas_dgbmv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const blasint M, const blasint N,
|
||||
const blasint KL, const blasint KU, const double alpha, const double *A, const blasint lda, const double *X, const blasint incX, const double beta, double *Y, const blasint incY);
|
||||
void cblas_cgbmv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const blasint M, const blasint N,
|
||||
const blasint KL, const blasint KU, const float *alpha, const float *A, const blasint lda, const float *X, const blasint incX, const float *beta, float *Y, const blasint incY);
|
||||
void cblas_zgbmv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const blasint M, const blasint N,
|
||||
const blasint KL, const blasint KU, const double *alpha, const double *A, const blasint lda, const double *X, const blasint incX, const double *beta, double *Y, const blasint incY);
|
||||
void cblas_sgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float beta, float *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_dgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double beta, double *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_cgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *beta, float *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_zgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *beta, double *Y, OPENBLAS_CONST blasint incY);
|
||||
|
||||
void cblas_ssbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const blasint K, const float alpha, const float *A,
|
||||
const blasint lda, const float *X, const blasint incX, const float beta, float *Y, const blasint incY);
|
||||
void cblas_dsbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const blasint K, const double alpha, const double *A,
|
||||
const blasint lda, const double *X, const blasint incX, const double beta, double *Y, const blasint incY);
|
||||
void cblas_ssbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A,
|
||||
OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float beta, float *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_dsbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A,
|
||||
OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double beta, double *Y, OPENBLAS_CONST blasint incY);
|
||||
|
||||
|
||||
void cblas_stbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const blasint K, const float *A, const blasint lda, float *X, const blasint incX);
|
||||
void cblas_dtbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const blasint K, const double *A, const blasint lda, double *X, const blasint incX);
|
||||
void cblas_ctbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const blasint K, const float *A, const blasint lda, float *X, const blasint incX);
|
||||
void cblas_ztbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const blasint K, const double *A, const blasint lda, double *X, const blasint incX);
|
||||
void cblas_stbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_dtbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ctbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ztbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
void cblas_stbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const blasint K, const float *A, const blasint lda, float *X, const blasint incX);
|
||||
void cblas_dtbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const blasint K, const double *A, const blasint lda, double *X, const blasint incX);
|
||||
void cblas_ctbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const blasint K, const float *A, const blasint lda, float *X, const blasint incX);
|
||||
void cblas_ztbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const blasint K, const double *A, const blasint lda, double *X, const blasint incX);
|
||||
void cblas_stbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_dtbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ctbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ztbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
void cblas_stpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const float *Ap, float *X, const blasint incX);
|
||||
void cblas_dtpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const double *Ap, double *X, const blasint incX);
|
||||
void cblas_ctpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const float *Ap, float *X, const blasint incX);
|
||||
void cblas_ztpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const double *Ap, double *X, const blasint incX);
|
||||
void cblas_stpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST float *Ap, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_dtpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST double *Ap, double *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ctpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST float *Ap, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ztpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST double *Ap, double *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
void cblas_stpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const float *Ap, float *X, const blasint incX);
|
||||
void cblas_dtpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const double *Ap, double *X, const blasint incX);
|
||||
void cblas_ctpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const float *Ap, float *X, const blasint incX);
|
||||
void cblas_ztpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
const blasint N, const double *Ap, double *X, const blasint incX);
|
||||
void cblas_stpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST float *Ap, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_dtpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST double *Ap, double *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ctpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST float *Ap, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ztpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST double *Ap, double *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
void cblas_ssymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const float alpha, const float *A,
|
||||
const blasint lda, const float *X, const blasint incX, const float beta, float *Y, const blasint incY);
|
||||
void cblas_dsymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const double alpha, const double *A,
|
||||
const blasint lda, const double *X, const blasint incX, const double beta, double *Y, const blasint incY);
|
||||
void cblas_chemv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const float *alpha, const float *A,
|
||||
const blasint lda, const float *X, const blasint incX, const float *beta, float *Y, const blasint incY);
|
||||
void cblas_zhemv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const double *alpha, const double *A,
|
||||
const blasint lda, const double *X, const blasint incX, const double *beta, double *Y, const blasint incY);
|
||||
void cblas_ssymv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A,
|
||||
OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float beta, float *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_dsymv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A,
|
||||
OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double beta, double *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_chemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *A,
|
||||
OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *beta, float *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_zhemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *A,
|
||||
OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *beta, double *Y, OPENBLAS_CONST blasint incY);
|
||||
|
||||
|
||||
void cblas_sspmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const float alpha, const float *Ap,
|
||||
const float *X, const blasint incX, const float beta, float *Y, const blasint incY);
|
||||
void cblas_dspmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const double alpha, const double *Ap,
|
||||
const double *X, const blasint incX, const double beta, double *Y, const blasint incY);
|
||||
void cblas_sspmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *Ap,
|
||||
OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float beta, float *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_dspmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *Ap,
|
||||
OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double beta, double *Y, OPENBLAS_CONST blasint incY);
|
||||
|
||||
void cblas_sspr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const float alpha, const float *X, const blasint incX, float *Ap);
|
||||
void cblas_dspr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const double alpha, const double *X, const blasint incX, double *Ap);
|
||||
void cblas_sspr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, float *Ap);
|
||||
void cblas_dspr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, double *Ap);
|
||||
|
||||
void cblas_chpr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const float alpha, const float *X, const blasint incX, float *A);
|
||||
void cblas_zhpr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const double alpha, const double *X,const blasint incX, double *A);
|
||||
void cblas_chpr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, float *A);
|
||||
void cblas_zhpr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X,OPENBLAS_CONST blasint incX, double *A);
|
||||
|
||||
void cblas_sspr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const float alpha, const float *X, const blasint incX, const float *Y, const blasint incY, float *A);
|
||||
void cblas_dspr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const double alpha, const double *X, const blasint incX, const double *Y, const blasint incY, double *A);
|
||||
void cblas_chpr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const float *alpha, const float *X, const blasint incX, const float *Y, const blasint incY, float *Ap);
|
||||
void cblas_zhpr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const double *alpha, const double *X, const blasint incX, const double *Y, const blasint incY, double *Ap);
|
||||
void cblas_sspr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, float *A);
|
||||
void cblas_dspr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, double *A);
|
||||
void cblas_chpr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, float *Ap);
|
||||
void cblas_zhpr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, double *Ap);
|
||||
|
||||
void cblas_chbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const blasint K,
|
||||
const float *alpha, const float *A, const blasint lda, const float *X, const blasint incX, const float *beta, float *Y, const blasint incY);
|
||||
void cblas_zhbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N, const blasint K,
|
||||
const double *alpha, const double *A, const blasint lda, const double *X, const blasint incX, const double *beta, double *Y, const blasint incY);
|
||||
void cblas_chbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *beta, float *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_zhbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *beta, double *Y, OPENBLAS_CONST blasint incY);
|
||||
|
||||
void cblas_chpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N,
|
||||
const float *alpha, const float *Ap, const float *X, const blasint incX, const float *beta, float *Y, const blasint incY);
|
||||
void cblas_zhpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const blasint N,
|
||||
const double *alpha, const double *Ap, const double *X, const blasint incX, const double *beta, double *Y, const blasint incY);
|
||||
void cblas_chpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *Ap, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *beta, float *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_zhpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *Ap, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *beta, double *Y, OPENBLAS_CONST blasint incY);
|
||||
|
||||
void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const blasint M, const blasint N, const blasint K,
|
||||
const float alpha, const float *A, const blasint lda, const float *B, const blasint ldb, const float beta, float *C, const blasint ldc);
|
||||
void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const blasint M, const blasint N, const blasint K,
|
||||
const double alpha, const double *A, const blasint lda, const double *B, const blasint ldb, const double beta, double *C, const blasint ldc);
|
||||
void cblas_cgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const blasint M, const blasint N, const blasint K,
|
||||
const float *alpha, const float *A, const blasint lda, const float *B, const blasint ldb, const float *beta, float *C, const blasint ldc);
|
||||
void cblas_zgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const blasint M, const blasint N, const blasint K,
|
||||
const double *alpha, const double *A, const blasint lda, const double *B, const blasint ldb, const double *beta, double *C, const blasint ldc);
|
||||
void cblas_sgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_dgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_cgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float *beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double *beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
void cblas_ssymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const blasint M, const blasint N,
|
||||
const float alpha, const float *A, const blasint lda, const float *B, const blasint ldb, const float beta, float *C, const blasint ldc);
|
||||
void cblas_dsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const blasint M, const blasint N,
|
||||
const double alpha, const double *A, const blasint lda, const double *B, const blasint ldb, const double beta, double *C, const blasint ldc);
|
||||
void cblas_csymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const blasint M, const blasint N,
|
||||
const float *alpha, const float *A, const blasint lda, const float *B, const blasint ldb, const float *beta, float *C, const blasint ldc);
|
||||
void cblas_zsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const blasint M, const blasint N,
|
||||
const double *alpha, const double *A, const blasint lda, const double *B, const blasint ldb, const double *beta, double *C, const blasint ldc);
|
||||
void cblas_ssymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_dsymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_csymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float *beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zsymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double *beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
void cblas_ssyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans,
|
||||
const blasint N, const blasint K, const float alpha, const float *A, const blasint lda, const float beta, float *C, const blasint ldc);
|
||||
void cblas_dsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans,
|
||||
const blasint N, const blasint K, const double alpha, const double *A, const blasint lda, const double beta, double *C, const blasint ldc);
|
||||
void cblas_csyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans,
|
||||
const blasint N, const blasint K, const float *alpha, const float *A, const blasint lda, const float *beta, float *C, const blasint ldc);
|
||||
void cblas_zsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans,
|
||||
const blasint N, const blasint K, const double *alpha, const double *A, const blasint lda, const double *beta, double *C, const blasint ldc);
|
||||
void cblas_ssyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_dsyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_csyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zsyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
void cblas_ssyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans,
|
||||
const blasint N, const blasint K, const float alpha, const float *A, const blasint lda, const float *B, const blasint ldb, const float beta, float *C, const blasint ldc);
|
||||
void cblas_dsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans,
|
||||
const blasint N, const blasint K, const double alpha, const double *A, const blasint lda, const double *B, const blasint ldb, const double beta, double *C, const blasint ldc);
|
||||
void cblas_csyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans,
|
||||
const blasint N, const blasint K, const float *alpha, const float *A, const blasint lda, const float *B, const blasint ldb, const float *beta, float *C, const blasint ldc);
|
||||
void cblas_zsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans,
|
||||
const blasint N, const blasint K, const double *alpha, const double *A, const blasint lda, const double *B, const blasint ldb, const double *beta, double *C, const blasint ldc);
|
||||
void cblas_ssyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_dsyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_csyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float *beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zsyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double *beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
void cblas_strmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const blasint M, const blasint N, const float alpha, const float *A, const blasint lda, float *B, const blasint ldb);
|
||||
void cblas_dtrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const blasint M, const blasint N, const double alpha, const double *A, const blasint lda, double *B, const blasint ldb);
|
||||
void cblas_ctrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const blasint M, const blasint N, const float *alpha, const float *A, const blasint lda, float *B, const blasint ldb);
|
||||
void cblas_ztrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const blasint M, const blasint N, const double *alpha, const double *A, const blasint lda, double *B, const blasint ldb);
|
||||
void cblas_strmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *B, OPENBLAS_CONST blasint ldb);
|
||||
void cblas_dtrmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *B, OPENBLAS_CONST blasint ldb);
|
||||
void cblas_ctrmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *B, OPENBLAS_CONST blasint ldb);
|
||||
void cblas_ztrmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *B, OPENBLAS_CONST blasint ldb);
|
||||
|
||||
void cblas_strsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const blasint M, const blasint N, const float alpha, const float *A, const blasint lda, float *B, const blasint ldb);
|
||||
void cblas_dtrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const blasint M, const blasint N, const double alpha, const double *A, const blasint lda, double *B, const blasint ldb);
|
||||
void cblas_ctrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const blasint M, const blasint N, const float *alpha, const float *A, const blasint lda, float *B, const blasint ldb);
|
||||
void cblas_ztrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const blasint M, const blasint N, const double *alpha, const double *A, const blasint lda, double *B, const blasint ldb);
|
||||
void cblas_strsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *B, OPENBLAS_CONST blasint ldb);
|
||||
void cblas_dtrsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *B, OPENBLAS_CONST blasint ldb);
|
||||
void cblas_ctrsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *B, OPENBLAS_CONST blasint ldb);
|
||||
void cblas_ztrsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *B, OPENBLAS_CONST blasint ldb);
|
||||
|
||||
void cblas_chemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const blasint M, const blasint N,
|
||||
const float *alpha, const float *A, const blasint lda, const float *B, const blasint ldb, const float *beta, float *C, const blasint ldc);
|
||||
void cblas_zhemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const blasint M, const blasint N,
|
||||
const double *alpha, const double *A, const blasint lda, const double *B, const blasint ldb, const double *beta, double *C, const blasint ldc);
|
||||
void cblas_chemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float *beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zhemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double *beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
void cblas_cherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const blasint N, const blasint K,
|
||||
const float alpha, const float *A, const blasint lda, const float beta, float *C, const blasint ldc);
|
||||
void cblas_zherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const blasint N, const blasint K,
|
||||
const double alpha, const double *A, const blasint lda, const double beta, double *C, const blasint ldc);
|
||||
void cblas_cherk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zherk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
void cblas_cher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const blasint N, const blasint K,
|
||||
const float *alpha, const float *A, const blasint lda, const float *B, const blasint ldb, const float beta, float *C, const blasint ldc);
|
||||
void cblas_zher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const blasint N, const blasint K,
|
||||
const double *alpha, const double *A, const blasint lda, const double *B, const blasint ldb, const double beta, double *C, const blasint ldc);
|
||||
void cblas_cher2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST float *alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zher2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST double *alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
void cblas_xerbla(blasint p, char *rout, char *form, ...);
|
||||
|
||||
|
||||
303
cblas_noconst.h
Normal file
303
cblas_noconst.h
Normal file
@@ -0,0 +1,303 @@
|
||||
#ifndef CBLAS_H
|
||||
#define CBLAS_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include "common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
/* Assume C declarations for C++ */
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/*Set the number of threads on runtime.*/
|
||||
void openblas_set_num_threads(int num_threads);
|
||||
void goto_set_num_threads(int num_threads);
|
||||
|
||||
/*Get the build configure on runtime.*/
|
||||
char* openblas_get_config(void);
|
||||
|
||||
/* Get the parallelization type which is used by OpenBLAS */
|
||||
int openblas_get_parallel(void);
|
||||
/* OpenBLAS is compiled for sequential use */
|
||||
#define OPENBLAS_SEQUENTIAL 0
|
||||
/* OpenBLAS is compiled using normal threading model */
|
||||
#define OPENBLAS_THREAD 1
|
||||
/* OpenBLAS is compiled using OpenMP threading model */
|
||||
#define OPENBLAS_OPENMP 2
|
||||
|
||||
|
||||
#define CBLAS_INDEX size_t
|
||||
|
||||
typedef enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102} CBLAS_ORDER;
|
||||
typedef enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113, CblasConjNoTrans=114} CBLAS_TRANSPOSE;
|
||||
typedef enum CBLAS_UPLO {CblasUpper=121, CblasLower=122} CBLAS_UPLO;
|
||||
typedef enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132} CBLAS_DIAG;
|
||||
typedef enum CBLAS_SIDE {CblasLeft=141, CblasRight=142} CBLAS_SIDE;
|
||||
|
||||
float cblas_sdsdot(blasint n, float alpha, float *x, blasint incx, float *y, blasint incy);
|
||||
double cblas_dsdot (blasint n, float *x, blasint incx, float *y, blasint incy);
|
||||
float cblas_sdot(blasint n, float *x, blasint incx, float *y, blasint incy);
|
||||
double cblas_ddot(blasint n, double *x, blasint incx, double *y, blasint incy);
|
||||
|
||||
openblas_complex_float cblas_cdotu(blasint n, float *x, blasint incx, float *y, blasint incy);
|
||||
openblas_complex_float cblas_cdotc(blasint n, float *x, blasint incx, float *y, blasint incy);
|
||||
openblas_complex_double cblas_zdotu(blasint n, double *x, blasint incx, double *y, blasint incy);
|
||||
openblas_complex_double cblas_zdotc(blasint n, double *x, blasint incx, double *y, blasint incy);
|
||||
|
||||
void cblas_cdotu_sub(blasint n, float *x, blasint incx, float *y, blasint incy, openblas_complex_float *ret);
|
||||
void cblas_cdotc_sub(blasint n, float *x, blasint incx, float *y, blasint incy, openblas_complex_float *ret);
|
||||
void cblas_zdotu_sub(blasint n, double *x, blasint incx, double *y, blasint incy, openblas_complex_double *ret);
|
||||
void cblas_zdotc_sub(blasint n, double *x, blasint incx, double *y, blasint incy, openblas_complex_double *ret);
|
||||
|
||||
float cblas_sasum (blasint n, float *x, blasint incx);
|
||||
double cblas_dasum (blasint n, double *x, blasint incx);
|
||||
float cblas_scasum(blasint n, float *x, blasint incx);
|
||||
double cblas_dzasum(blasint n, double *x, blasint incx);
|
||||
|
||||
float cblas_snrm2 (blasint N, float *X, blasint incX);
|
||||
double cblas_dnrm2 (blasint N, double *X, blasint incX);
|
||||
float cblas_scnrm2(blasint N, float *X, blasint incX);
|
||||
double cblas_dznrm2(blasint N, double *X, blasint incX);
|
||||
|
||||
CBLAS_INDEX cblas_isamax(blasint n, float *x, blasint incx);
|
||||
CBLAS_INDEX cblas_idamax(blasint n, double *x, blasint incx);
|
||||
CBLAS_INDEX cblas_icamax(blasint n, float *x, blasint incx);
|
||||
CBLAS_INDEX cblas_izamax(blasint n, double *x, blasint incx);
|
||||
|
||||
void cblas_saxpy(blasint n, float alpha, float *x, blasint incx, float *y, blasint incy);
|
||||
void cblas_daxpy(blasint n, double alpha, double *x, blasint incx, double *y, blasint incy);
|
||||
void cblas_caxpy(blasint n, float *alpha, float *x, blasint incx, float *y, blasint incy);
|
||||
void cblas_zaxpy(blasint n, double *alpha, double *x, blasint incx, double *y, blasint incy);
|
||||
|
||||
void cblas_scopy(blasint n, float *x, blasint incx, float *y, blasint incy);
|
||||
void cblas_dcopy(blasint n, double *x, blasint incx, double *y, blasint incy);
|
||||
void cblas_ccopy(blasint n, float *x, blasint incx, float *y, blasint incy);
|
||||
void cblas_zcopy(blasint n, double *x, blasint incx, double *y, blasint incy);
|
||||
|
||||
void cblas_sswap(blasint n, float *x, blasint incx, float *y, blasint incy);
|
||||
void cblas_dswap(blasint n, double *x, blasint incx, double *y, blasint incy);
|
||||
void cblas_cswap(blasint n, float *x, blasint incx, float *y, blasint incy);
|
||||
void cblas_zswap(blasint n, double *x, blasint incx, double *y, blasint incy);
|
||||
|
||||
void cblas_srot(blasint N, float *X, blasint incX, float *Y, blasint incY, float c, float s);
|
||||
void cblas_drot(blasint N, double *X, blasint incX, double *Y, blasint incY, double c, double s);
|
||||
|
||||
void cblas_srotg(float *a, float *b, float *c, float *s);
|
||||
void cblas_drotg(double *a, double *b, double *c, double *s);
|
||||
|
||||
void cblas_srotm(blasint N, float *X, blasint incX, float *Y, blasint incY, float *P);
|
||||
void cblas_drotm(blasint N, double *X, blasint incX, double *Y, blasint incY, double *P);
|
||||
|
||||
void cblas_srotmg(float *d1, float *d2, float *b1, float b2, float *P);
|
||||
void cblas_drotmg(double *d1, double *d2, double *b1, double b2, double *P);
|
||||
|
||||
void cblas_sscal(blasint N, float alpha, float *X, blasint incX);
|
||||
void cblas_dscal(blasint N, double alpha, double *X, blasint incX);
|
||||
void cblas_cscal(blasint N, float *alpha, float *X, blasint incX);
|
||||
void cblas_zscal(blasint N, double *alpha, double *X, blasint incX);
|
||||
void cblas_csscal(blasint N, float alpha, float *X, blasint incX);
|
||||
void cblas_zdscal(blasint N, double alpha, double *X, blasint incX);
|
||||
|
||||
void cblas_sgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE trans, blasint m, blasint n,
|
||||
float alpha, float *a, blasint lda, float *x, blasint incx, float beta, float *y, blasint incy);
|
||||
void cblas_dgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE trans, blasint m, blasint n,
|
||||
double alpha, double *a, blasint lda, double *x, blasint incx, double beta, double *y, blasint incy);
|
||||
void cblas_cgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE trans, blasint m, blasint n,
|
||||
float *alpha, float *a, blasint lda, float *x, blasint incx, float *beta, float *y, blasint incy);
|
||||
void cblas_zgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE trans, blasint m, blasint n,
|
||||
double *alpha, double *a, blasint lda, double *x, blasint incx, double *beta, double *y, blasint incy);
|
||||
|
||||
void cblas_sger (enum CBLAS_ORDER order, blasint M, blasint N, float alpha, float *X, blasint incX, float *Y, blasint incY, float *A, blasint lda);
|
||||
void cblas_dger (enum CBLAS_ORDER order, blasint M, blasint N, double alpha, double *X, blasint incX, double *Y, blasint incY, double *A, blasint lda);
|
||||
void cblas_cgeru(enum CBLAS_ORDER order, blasint M, blasint N, float *alpha, float *X, blasint incX, float *Y, blasint incY, float *A, blasint lda);
|
||||
void cblas_cgerc(enum CBLAS_ORDER order, blasint M, blasint N, float *alpha, float *X, blasint incX, float *Y, blasint incY, float *A, blasint lda);
|
||||
void cblas_zgeru(enum CBLAS_ORDER order, blasint M, blasint N, double *alpha, double *X, blasint incX, double *Y, blasint incY, double *A, blasint lda);
|
||||
void cblas_zgerc(enum CBLAS_ORDER order, blasint M, blasint N, double *alpha, double *X, blasint incX, double *Y, blasint incY, double *A, blasint lda);
|
||||
|
||||
void cblas_strsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, blasint N, float *A, blasint lda, float *X, blasint incX);
|
||||
void cblas_dtrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, blasint N, double *A, blasint lda, double *X, blasint incX);
|
||||
void cblas_ctrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, blasint N, float *A, blasint lda, float *X, blasint incX);
|
||||
void cblas_ztrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, blasint N, double *A, blasint lda, double *X, blasint incX);
|
||||
|
||||
void cblas_strmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, blasint N, float *A, blasint lda, float *X, blasint incX);
|
||||
void cblas_dtrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, blasint N, double *A, blasint lda, double *X, blasint incX);
|
||||
void cblas_ctrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, blasint N, float *A, blasint lda, float *X, blasint incX);
|
||||
void cblas_ztrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, blasint N, double *A, blasint lda, double *X, blasint incX);
|
||||
|
||||
void cblas_ssyr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, float alpha, float *X, blasint incX, float *A, blasint lda);
|
||||
void cblas_dsyr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, double alpha, double *X, blasint incX, double *A, blasint lda);
|
||||
void cblas_cher(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, float alpha, float *X, blasint incX, float *A, blasint lda);
|
||||
void cblas_zher(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, double alpha, double *X, blasint incX, double *A, blasint lda);
|
||||
|
||||
void cblas_ssyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo,blasint N, float alpha, float *X,
|
||||
blasint incX, float *Y, blasint incY, float *A, blasint lda);
|
||||
void cblas_dsyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, double alpha, double *X,
|
||||
blasint incX, double *Y, blasint incY, double *A, blasint lda);
|
||||
void cblas_cher2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, float *alpha, float *X, blasint incX,
|
||||
float *Y, blasint incY, float *A, blasint lda);
|
||||
void cblas_zher2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, double *alpha, double *X, blasint incX,
|
||||
double *Y, blasint incY, double *A, blasint lda);
|
||||
|
||||
void cblas_sgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, blasint M, blasint N,
|
||||
blasint KL, blasint KU, float alpha, float *A, blasint lda, float *X, blasint incX, float beta, float *Y, blasint incY);
|
||||
void cblas_dgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, blasint M, blasint N,
|
||||
blasint KL, blasint KU, double alpha, double *A, blasint lda, double *X, blasint incX, double beta, double *Y, blasint incY);
|
||||
void cblas_cgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, blasint M, blasint N,
|
||||
blasint KL, blasint KU, float *alpha, float *A, blasint lda, float *X, blasint incX, float *beta, float *Y, blasint incY);
|
||||
void cblas_zgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, blasint M, blasint N,
|
||||
blasint KL, blasint KU, double *alpha, double *A, blasint lda, double *X, blasint incX, double *beta, double *Y, blasint incY);
|
||||
|
||||
void cblas_ssbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, blasint K, float alpha, float *A,
|
||||
blasint lda, float *X, blasint incX, float beta, float *Y, blasint incY);
|
||||
void cblas_dsbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, blasint K, double alpha, double *A,
|
||||
blasint lda, double *X, blasint incX, double beta, double *Y, blasint incY);
|
||||
|
||||
|
||||
void cblas_stbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, blasint K, float *A, blasint lda, float *X, blasint incX);
|
||||
void cblas_dtbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, blasint K, double *A, blasint lda, double *X, blasint incX);
|
||||
void cblas_ctbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, blasint K, float *A, blasint lda, float *X, blasint incX);
|
||||
void cblas_ztbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, blasint K, double *A, blasint lda, double *X, blasint incX);
|
||||
|
||||
void cblas_stbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, blasint K, float *A, blasint lda, float *X, blasint incX);
|
||||
void cblas_dtbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, blasint K, double *A, blasint lda, double *X, blasint incX);
|
||||
void cblas_ctbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, blasint K, float *A, blasint lda, float *X, blasint incX);
|
||||
void cblas_ztbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, blasint K, double *A, blasint lda, double *X, blasint incX);
|
||||
|
||||
void cblas_stpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, float *Ap, float *X, blasint incX);
|
||||
void cblas_dtpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, double *Ap, double *X, blasint incX);
|
||||
void cblas_ctpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, float *Ap, float *X, blasint incX);
|
||||
void cblas_ztpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, double *Ap, double *X, blasint incX);
|
||||
|
||||
void cblas_stpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, float *Ap, float *X, blasint incX);
|
||||
void cblas_dtpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, double *Ap, double *X, blasint incX);
|
||||
void cblas_ctpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, float *Ap, float *X, blasint incX);
|
||||
void cblas_ztpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag,
|
||||
blasint N, double *Ap, double *X, blasint incX);
|
||||
|
||||
void cblas_ssymv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, float alpha, float *A,
|
||||
blasint lda, float *X, blasint incX, float beta, float *Y, blasint incY);
|
||||
void cblas_dsymv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, double alpha, double *A,
|
||||
blasint lda, double *X, blasint incX, double beta, double *Y, blasint incY);
|
||||
void cblas_chemv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, float *alpha, float *A,
|
||||
blasint lda, float *X, blasint incX, float *beta, float *Y, blasint incY);
|
||||
void cblas_zhemv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, double *alpha, double *A,
|
||||
blasint lda, double *X, blasint incX, double *beta, double *Y, blasint incY);
|
||||
|
||||
|
||||
void cblas_sspmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, float alpha, float *Ap,
|
||||
float *X, blasint incX, float beta, float *Y, blasint incY);
|
||||
void cblas_dspmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, double alpha, double *Ap,
|
||||
double *X, blasint incX, double beta, double *Y, blasint incY);
|
||||
|
||||
void cblas_sspr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, float alpha, float *X, blasint incX, float *Ap);
|
||||
void cblas_dspr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, double alpha, double *X, blasint incX, double *Ap);
|
||||
|
||||
void cblas_chpr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, float alpha, float *X, blasint incX, float *A);
|
||||
void cblas_zhpr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, double alpha, double *X,blasint incX, double *A);
|
||||
|
||||
void cblas_sspr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, float alpha, float *X, blasint incX, float *Y, blasint incY, float *A);
|
||||
void cblas_dspr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, double alpha, double *X, blasint incX, double *Y, blasint incY, double *A);
|
||||
void cblas_chpr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, float *alpha, float *X, blasint incX, float *Y, blasint incY, float *Ap);
|
||||
void cblas_zhpr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, double *alpha, double *X, blasint incX, double *Y, blasint incY, double *Ap);
|
||||
|
||||
void cblas_chbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, blasint K,
|
||||
float *alpha, float *A, blasint lda, float *X, blasint incX, float *beta, float *Y, blasint incY);
|
||||
void cblas_zhbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N, blasint K,
|
||||
double *alpha, double *A, blasint lda, double *X, blasint incX, double *beta, double *Y, blasint incY);
|
||||
|
||||
void cblas_chpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N,
|
||||
float *alpha, float *Ap, float *X, blasint incX, float *beta, float *Y, blasint incY);
|
||||
void cblas_zhpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint N,
|
||||
double *alpha, double *Ap, double *X, blasint incX, double *beta, double *Y, blasint incY);
|
||||
|
||||
void cblas_sgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, blasint M, blasint N, blasint K,
|
||||
float alpha, float *A, blasint lda, float *B, blasint ldb, float beta, float *C, blasint ldc);
|
||||
void cblas_dgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, blasint M, blasint N, blasint K,
|
||||
double alpha, double *A, blasint lda, double *B, blasint ldb, double beta, double *C, blasint ldc);
|
||||
void cblas_cgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, blasint M, blasint N, blasint K,
|
||||
float *alpha, float *A, blasint lda, float *B, blasint ldb, float *beta, float *C, blasint ldc);
|
||||
void cblas_zgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, blasint M, blasint N, blasint K,
|
||||
double *alpha, double *A, blasint lda, double *B, blasint ldb, double *beta, double *C, blasint ldc);
|
||||
|
||||
void cblas_ssymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, blasint M, blasint N,
|
||||
float alpha, float *A, blasint lda, float *B, blasint ldb, float beta, float *C, blasint ldc);
|
||||
void cblas_dsymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, blasint M, blasint N,
|
||||
double alpha, double *A, blasint lda, double *B, blasint ldb, double beta, double *C, blasint ldc);
|
||||
void cblas_csymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, blasint M, blasint N,
|
||||
float *alpha, float *A, blasint lda, float *B, blasint ldb, float *beta, float *C, blasint ldc);
|
||||
void cblas_zsymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, blasint M, blasint N,
|
||||
double *alpha, double *A, blasint lda, double *B, blasint ldb, double *beta, double *C, blasint ldc);
|
||||
|
||||
void cblas_ssyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans,
|
||||
blasint N, blasint K, float alpha, float *A, blasint lda, float beta, float *C, blasint ldc);
|
||||
void cblas_dsyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans,
|
||||
blasint N, blasint K, double alpha, double *A, blasint lda, double beta, double *C, blasint ldc);
|
||||
void cblas_csyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans,
|
||||
blasint N, blasint K, float *alpha, float *A, blasint lda, float *beta, float *C, blasint ldc);
|
||||
void cblas_zsyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans,
|
||||
blasint N, blasint K, double *alpha, double *A, blasint lda, double *beta, double *C, blasint ldc);
|
||||
|
||||
void cblas_ssyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans,
|
||||
blasint N, blasint K, float alpha, float *A, blasint lda, float *B, blasint ldb, float beta, float *C, blasint ldc);
|
||||
void cblas_dsyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans,
|
||||
blasint N, blasint K, double alpha, double *A, blasint lda, double *B, blasint ldb, double beta, double *C, blasint ldc);
|
||||
void cblas_csyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans,
|
||||
blasint N, blasint K, float *alpha, float *A, blasint lda, float *B, blasint ldb, float *beta, float *C, blasint ldc);
|
||||
void cblas_zsyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans,
|
||||
blasint N, blasint K, double *alpha, double *A, blasint lda, double *B, blasint ldb, double *beta, double *C, blasint ldc);
|
||||
|
||||
void cblas_strmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA,
|
||||
enum CBLAS_DIAG Diag, blasint M, blasint N, float alpha, float *A, blasint lda, float *B, blasint ldb);
|
||||
void cblas_dtrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA,
|
||||
enum CBLAS_DIAG Diag, blasint M, blasint N, double alpha, double *A, blasint lda, double *B, blasint ldb);
|
||||
void cblas_ctrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA,
|
||||
enum CBLAS_DIAG Diag, blasint M, blasint N, float *alpha, float *A, blasint lda, float *B, blasint ldb);
|
||||
void cblas_ztrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA,
|
||||
enum CBLAS_DIAG Diag, blasint M, blasint N, double *alpha, double *A, blasint lda, double *B, blasint ldb);
|
||||
|
||||
void cblas_strsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA,
|
||||
enum CBLAS_DIAG Diag, blasint M, blasint N, float alpha, float *A, blasint lda, float *B, blasint ldb);
|
||||
void cblas_dtrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA,
|
||||
enum CBLAS_DIAG Diag, blasint M, blasint N, double alpha, double *A, blasint lda, double *B, blasint ldb);
|
||||
void cblas_ctrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA,
|
||||
enum CBLAS_DIAG Diag, blasint M, blasint N, float *alpha, float *A, blasint lda, float *B, blasint ldb);
|
||||
void cblas_ztrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA,
|
||||
enum CBLAS_DIAG Diag, blasint M, blasint N, double *alpha, double *A, blasint lda, double *B, blasint ldb);
|
||||
|
||||
void cblas_chemm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, blasint M, blasint N,
|
||||
float *alpha, float *A, blasint lda, float *B, blasint ldb, float *beta, float *C, blasint ldc);
|
||||
void cblas_zhemm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, blasint M, blasint N,
|
||||
double *alpha, double *A, blasint lda, double *B, blasint ldb, double *beta, double *C, blasint ldc);
|
||||
|
||||
void cblas_cherk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, blasint N, blasint K,
|
||||
float alpha, float *A, blasint lda, float beta, float *C, blasint ldc);
|
||||
void cblas_zherk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, blasint N, blasint K,
|
||||
double alpha, double *A, blasint lda, double beta, double *C, blasint ldc);
|
||||
|
||||
void cblas_cher2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, blasint N, blasint K,
|
||||
float *alpha, float *A, blasint lda, float *B, blasint ldb, float beta, float *C, blasint ldc);
|
||||
void cblas_zher2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, blasint N, blasint K,
|
||||
double *alpha, double *A, blasint lda, double *B, blasint ldb, double beta, double *C, blasint ldc);
|
||||
|
||||
void cblas_xerbla(blasint p, char *rout, char *form, ...);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
40
common.h
40
common.h
@@ -310,10 +310,36 @@ typedef int blasint;
|
||||
#define YIELDING SwitchToThread()
|
||||
#endif
|
||||
|
||||
#if defined(ARMV7) || defined(ARMV6) || defined(ARMV8)
|
||||
#define YIELDING asm volatile ("nop;nop;nop;nop;nop;nop;nop;nop; \n");
|
||||
#endif
|
||||
|
||||
#ifdef PILEDRIVER
|
||||
#define YIELDING __asm__ __volatile__ ("nop;nop;nop;nop;nop;nop;nop;nop;\n");
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef YIELDING
|
||||
#define YIELDING sched_yield()
|
||||
#endif
|
||||
|
||||
/***
|
||||
To alloc job_t on heap or statck.
|
||||
please https://github.com/xianyi/OpenBLAS/issues/246
|
||||
***/
|
||||
#if defined(OS_WINDOWS)
|
||||
#define GETRF_MEM_ALLOC_THRESHOLD 32
|
||||
#define BLAS3_MEM_ALLOC_THRESHOLD 32
|
||||
#endif
|
||||
|
||||
#ifndef GETRF_MEM_ALLOC_THRESHOLD
|
||||
#define GETRF_MEM_ALLOC_THRESHOLD 80
|
||||
#endif
|
||||
|
||||
#ifndef BLAS3_MEM_ALLOC_THRESHOLD
|
||||
#define BLAS3_MEM_ALLOC_THRESHOLD 160
|
||||
#endif
|
||||
|
||||
#ifdef QUAD_PRECISION
|
||||
#include "common_quad.h"
|
||||
#endif
|
||||
@@ -346,6 +372,15 @@ typedef int blasint;
|
||||
#include "common_mips64.h"
|
||||
#endif
|
||||
|
||||
#ifdef ARCH_ARM
|
||||
#include "common_arm.h"
|
||||
#endif
|
||||
|
||||
#ifdef ARCH_ARM64
|
||||
#include "common_arm64.h"
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef OS_LINUX
|
||||
#include "common_linux.h"
|
||||
#endif
|
||||
@@ -557,9 +592,10 @@ typedef struct {
|
||||
#include "common_level2.h"
|
||||
#include "common_level3.h"
|
||||
#include "common_lapack.h"
|
||||
|
||||
#ifdef CBLAS
|
||||
/* This header file is generated from "cblas.h" (see Makefile.prebuild). */
|
||||
#include "cblas_noconst.h"
|
||||
# define OPENBLAS_CONST /* see comment in cblas.h */
|
||||
# include "cblas.h"
|
||||
#endif
|
||||
|
||||
#ifndef ASSEMBLER
|
||||
|
||||
@@ -150,9 +150,17 @@ REALNAME:
|
||||
#define PROFCODE .prologue 0
|
||||
#endif
|
||||
|
||||
#if defined(__linux__) && defined(__ELF__)
|
||||
#define GNUSTACK .section .note.GNU-stack,"",@progbits
|
||||
#else
|
||||
#define GNUSTACK
|
||||
#endif
|
||||
|
||||
#define EPILOGUE \
|
||||
.end REALNAME; \
|
||||
.ident VERSION
|
||||
.ident VERSION; \
|
||||
GNUSTACK
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef DOUBLE
|
||||
|
||||
169
common_arm.h
Normal file
169
common_arm.h
Normal file
@@ -0,0 +1,169 @@
|
||||
/*****************************************************************************
|
||||
Copyright (c) 2011, Lab of Parallel Software and Computational Science,ICSAS
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the ISCAS nor the names of its contributors may
|
||||
be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
**********************************************************************************/
|
||||
|
||||
/*********************************************************************/
|
||||
/* Copyright 2009, 2010 The University of Texas at Austin. */
|
||||
/* All rights reserved. */
|
||||
/* */
|
||||
/* Redistribution and use in source and binary forms, with or */
|
||||
/* without modification, are permitted provided that the following */
|
||||
/* conditions are met: */
|
||||
/* */
|
||||
/* 1. Redistributions of source code must retain the above */
|
||||
/* copyright notice, this list of conditions and the following */
|
||||
/* disclaimer. */
|
||||
/* */
|
||||
/* 2. Redistributions in binary form must reproduce the above */
|
||||
/* copyright notice, this list of conditions and the following */
|
||||
/* disclaimer in the documentation and/or other materials */
|
||||
/* provided with the distribution. */
|
||||
/* */
|
||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */
|
||||
/* AUSTIN ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, */
|
||||
/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
|
||||
/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */
|
||||
/* DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF TEXAS AT */
|
||||
/* AUSTIN OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, */
|
||||
/* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES */
|
||||
/* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE */
|
||||
/* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR */
|
||||
/* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF */
|
||||
/* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */
|
||||
/* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT */
|
||||
/* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
|
||||
/* POSSIBILITY OF SUCH DAMAGE. */
|
||||
/* */
|
||||
/* The views and conclusions contained in the software and */
|
||||
/* documentation are those of the authors and should not be */
|
||||
/* interpreted as representing official policies, either expressed */
|
||||
/* or implied, of The University of Texas at Austin. */
|
||||
/*********************************************************************/
|
||||
|
||||
#ifndef COMMON_ARM
|
||||
#define COMMON_ARM
|
||||
|
||||
#define MB
|
||||
#define WMB
|
||||
|
||||
#define INLINE inline
|
||||
|
||||
#define RETURN_BY_COMPLEX
|
||||
|
||||
#ifndef ASSEMBLER
|
||||
|
||||
static void __inline blas_lock(volatile BLASULONG *address){
|
||||
|
||||
int register ret;
|
||||
|
||||
do {
|
||||
while (*address) {YIELDING;};
|
||||
|
||||
__asm__ __volatile__(
|
||||
"ldrex r2, [%1] \n\t"
|
||||
"mov r2, #0 \n\t"
|
||||
"strex r3, r2, [%1] \n\t"
|
||||
"mov %0 , r3 \n\t"
|
||||
: "=r"(ret), "=r"(address)
|
||||
: "1"(address)
|
||||
: "memory", "r2" , "r3"
|
||||
|
||||
|
||||
);
|
||||
|
||||
} while (ret);
|
||||
|
||||
}
|
||||
|
||||
|
||||
static inline unsigned long long rpcc(void){
|
||||
unsigned long long ret=0;
|
||||
double v;
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv,NULL);
|
||||
v=(double) tv.tv_sec + (double) tv.tv_usec * 1e-6;
|
||||
ret = (unsigned long long) ( v * 1000.0d );
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int blas_quickdivide(blasint x, blasint y){
|
||||
return x / y;
|
||||
}
|
||||
|
||||
#if defined(DOUBLE)
|
||||
#define GET_IMAGE(res) __asm__ __volatile__("vstr.f64 d1, %0" : "=m"(res) : : "memory")
|
||||
#else
|
||||
#define GET_IMAGE(res) __asm__ __volatile__("vstr.f32 s1, %0" : "=m"(res) : : "memory")
|
||||
#endif
|
||||
|
||||
#define GET_IMAGE_CANCEL
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef F_INTERFACE
|
||||
#define REALNAME ASMNAME
|
||||
#else
|
||||
#define REALNAME ASMFNAME
|
||||
#endif
|
||||
|
||||
#if defined(ASSEMBLER) && !defined(NEEDPARAM)
|
||||
|
||||
#define PROLOGUE \
|
||||
.arm ;\
|
||||
.global REALNAME ;\
|
||||
.func REALNAME ;\
|
||||
REALNAME:
|
||||
|
||||
#define EPILOGUE
|
||||
|
||||
#define PROFCODE
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#define SEEK_ADDRESS
|
||||
|
||||
#ifndef PAGESIZE
|
||||
#define PAGESIZE ( 4 << 10)
|
||||
#endif
|
||||
#define HUGE_PAGESIZE ( 4 << 20)
|
||||
|
||||
#define BUFFER_SIZE (16 << 20)
|
||||
|
||||
|
||||
#define BASE_ADDRESS (START_ADDRESS - BUFFER_SIZE * MAX_CPU_NUMBER)
|
||||
|
||||
#ifndef MAP_ANONYMOUS
|
||||
#define MAP_ANONYMOUS MAP_ANON
|
||||
#endif
|
||||
|
||||
#endif
|
||||
169
common_arm64.h
Normal file
169
common_arm64.h
Normal file
@@ -0,0 +1,169 @@
|
||||
/*****************************************************************************
|
||||
Copyright (c) 2011, Lab of Parallel Software and Computational Science,ICSAS
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the ISCAS nor the names of its contributors may
|
||||
be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
**********************************************************************************/
|
||||
|
||||
/*********************************************************************/
|
||||
/* Copyright 2009, 2010 The University of Texas at Austin. */
|
||||
/* All rights reserved. */
|
||||
/* */
|
||||
/* Redistribution and use in source and binary forms, with or */
|
||||
/* without modification, are permitted provided that the following */
|
||||
/* conditions are met: */
|
||||
/* */
|
||||
/* 1. Redistributions of source code must retain the above */
|
||||
/* copyright notice, this list of conditions and the following */
|
||||
/* disclaimer. */
|
||||
/* */
|
||||
/* 2. Redistributions in binary form must reproduce the above */
|
||||
/* copyright notice, this list of conditions and the following */
|
||||
/* disclaimer in the documentation and/or other materials */
|
||||
/* provided with the distribution. */
|
||||
/* */
|
||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */
|
||||
/* AUSTIN ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, */
|
||||
/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
|
||||
/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */
|
||||
/* DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF TEXAS AT */
|
||||
/* AUSTIN OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, */
|
||||
/* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES */
|
||||
/* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE */
|
||||
/* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR */
|
||||
/* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF */
|
||||
/* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */
|
||||
/* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT */
|
||||
/* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
|
||||
/* POSSIBILITY OF SUCH DAMAGE. */
|
||||
/* */
|
||||
/* The views and conclusions contained in the software and */
|
||||
/* documentation are those of the authors and should not be */
|
||||
/* interpreted as representing official policies, either expressed */
|
||||
/* or implied, of The University of Texas at Austin. */
|
||||
/*********************************************************************/
|
||||
|
||||
#ifndef COMMON_ARM64
|
||||
#define COMMON_ARM64
|
||||
|
||||
#define MB
|
||||
#define WMB
|
||||
|
||||
#define INLINE inline
|
||||
|
||||
#define RETURN_BY_COMPLEX
|
||||
|
||||
#ifndef ASSEMBLER
|
||||
|
||||
static void __inline blas_lock(volatile BLASULONG *address){
|
||||
/*
|
||||
int register ret;
|
||||
|
||||
do {
|
||||
while (*address) {YIELDING;};
|
||||
|
||||
__asm__ __volatile__(
|
||||
"ldrex r2, [%1] \n\t"
|
||||
"mov r2, #0 \n\t"
|
||||
"strex r3, r2, [%1] \n\t"
|
||||
"mov %0 , r3 \n\t"
|
||||
: "=r"(ret), "=r"(address)
|
||||
: "1"(address)
|
||||
: "memory", "r2" , "r3"
|
||||
|
||||
|
||||
);
|
||||
|
||||
} while (ret);
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
static inline unsigned long long rpcc(void){
|
||||
unsigned long long ret=0;
|
||||
double v;
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv,NULL);
|
||||
v=(double) tv.tv_sec + (double) tv.tv_usec * 1e-6;
|
||||
ret = (unsigned long long) ( v * 1000.0d );
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int blas_quickdivide(blasint x, blasint y){
|
||||
return x / y;
|
||||
}
|
||||
|
||||
#if defined(DOUBLE)
|
||||
#define GET_IMAGE(res) __asm__ __volatile__("vstr.f64 d1, %0" : "=m"(res) : : "memory")
|
||||
#else
|
||||
#define GET_IMAGE(res) __asm__ __volatile__("vstr.f32 s1, %0" : "=m"(res) : : "memory")
|
||||
#endif
|
||||
|
||||
#define GET_IMAGE_CANCEL
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef F_INTERFACE
|
||||
#define REALNAME ASMNAME
|
||||
#else
|
||||
#define REALNAME ASMFNAME
|
||||
#endif
|
||||
|
||||
#if defined(ASSEMBLER) && !defined(NEEDPARAM)
|
||||
|
||||
#define PROLOGUE \
|
||||
.arm ;\
|
||||
.global REALNAME ;\
|
||||
.func REALNAME ;\
|
||||
REALNAME:
|
||||
|
||||
#define EPILOGUE
|
||||
|
||||
#define PROFCODE
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#define SEEK_ADDRESS
|
||||
|
||||
#ifndef PAGESIZE
|
||||
#define PAGESIZE ( 4 << 10)
|
||||
#endif
|
||||
#define HUGE_PAGESIZE ( 4 << 20)
|
||||
|
||||
#define BUFFER_SIZE (16 << 20)
|
||||
|
||||
|
||||
#define BASE_ADDRESS (START_ADDRESS - BUFFER_SIZE * MAX_CPU_NUMBER)
|
||||
|
||||
#ifndef MAP_ANONYMOUS
|
||||
#define MAP_ANONYMOUS MAP_ANON
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -379,8 +379,15 @@ REALNAME:
|
||||
#define PROFCODE
|
||||
#endif
|
||||
|
||||
#if defined(__linux__) && defined(__ELF__)
|
||||
#define GNUSTACK .section .note.GNU-stack,"",@progbits
|
||||
#else
|
||||
#define GNUSTACK
|
||||
#endif
|
||||
|
||||
#define EPILOGUE \
|
||||
.endp REALNAME
|
||||
.endp REALNAME ; \
|
||||
GNUSTACK
|
||||
|
||||
#define START_ADDRESS 0x20000fc800000000UL
|
||||
|
||||
|
||||
@@ -65,9 +65,16 @@ extern long int syscall (long int __sysno, ...);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
static inline int my_mbind(void *addr, unsigned long len, int mode,
|
||||
unsigned long *nodemask, unsigned long maxnode,
|
||||
unsigned flags) {
|
||||
#if defined (__LSB_VERSION__)
|
||||
// So far, LSB (Linux Standard Base) don't support syscall().
|
||||
// https://lsbbugs.linuxfoundation.org/show_bug.cgi?id=3482
|
||||
return 0;
|
||||
#else
|
||||
#if defined (LOONGSON3B)
|
||||
#if defined (__64BIT__)
|
||||
return syscall(SYS_mbind, addr, len, mode, nodemask, maxnode, flags);
|
||||
@@ -79,11 +86,17 @@ static inline int my_mbind(void *addr, unsigned long len, int mode,
|
||||
// unsigned long null_nodemask=0;
|
||||
return syscall(SYS_mbind, addr, len, mode, nodemask, maxnode, flags);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline int my_set_mempolicy(int mode, const unsigned long *addr, unsigned long flag) {
|
||||
|
||||
#if defined (__LSB_VERSION__)
|
||||
// So far, LSB (Linux Standard Base) don't support syscall().
|
||||
// https://lsbbugs.linuxfoundation.org/show_bug.cgi?id=3482
|
||||
return 0;
|
||||
#else
|
||||
return syscall(SYS_set_mempolicy, mode, addr, flag);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline int my_gettid(void) {
|
||||
|
||||
@@ -235,10 +235,17 @@ REALNAME: ;\
|
||||
.set noreorder ;\
|
||||
.set nomacro
|
||||
|
||||
#if defined(__linux__) && defined(__ELF__)
|
||||
#define GNUSTACK .section .note.GNU-stack,"",@progbits
|
||||
#else
|
||||
#define GNUSTACK
|
||||
#endif
|
||||
|
||||
#define EPILOGUE \
|
||||
.set macro ;\
|
||||
.set reorder ;\
|
||||
.end REALNAME
|
||||
.end REALNAME ;\
|
||||
GNUSTACK
|
||||
|
||||
#define PROFCODE
|
||||
#endif
|
||||
@@ -255,8 +262,8 @@ REALNAME: ;\
|
||||
#endif
|
||||
|
||||
#if defined(LOONGSON3B)
|
||||
#define PAGESIZE (32UL << 10)
|
||||
#define FIXED_PAGESIZE (32UL << 10)
|
||||
#define PAGESIZE (16UL << 10)
|
||||
#define FIXED_PAGESIZE (16UL << 10)
|
||||
#endif
|
||||
|
||||
#ifndef PAGESIZE
|
||||
|
||||
@@ -199,8 +199,17 @@ static __inline int blas_quickdivide(blasint x, blasint y){
|
||||
.type REALNAME, #function; \
|
||||
.proc 07; \
|
||||
REALNAME:;
|
||||
|
||||
#if defined(__linux__) && defined(__ELF__)
|
||||
#define GNUSTACK .section .note.GNU-stack,"",@progbits
|
||||
#else
|
||||
#define GNUSTACK
|
||||
#endif
|
||||
|
||||
#define EPILOGUE \
|
||||
.size REALNAME, .-REALNAME
|
||||
.size REALNAME, .-REALNAME; \
|
||||
GNUSTACK
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -103,7 +103,7 @@ typedef struct blas_queue {
|
||||
|
||||
struct blas_queue *next;
|
||||
|
||||
#if defined( __WIN32__) || defined(__CYGWIN32__)
|
||||
#if defined( __WIN32__) || defined(__CYGWIN32__) || defined(_WIN32) || defined(__CYGWIN__)
|
||||
CRITICAL_SECTION lock;
|
||||
HANDLE finish;
|
||||
#else
|
||||
|
||||
13
common_x86.h
13
common_x86.h
@@ -171,6 +171,11 @@ static __inline int blas_quickdivide(unsigned int x, unsigned int y){
|
||||
#define MMXSTORE movd
|
||||
#endif
|
||||
|
||||
#if defined(PILEDRIVER) || defined(BULLDOZER)
|
||||
//Enable some optimazation for barcelona.
|
||||
#define BARCELONA_OPTIMIZATION
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_3DNOW)
|
||||
#define EMMS femms
|
||||
#elif defined(HAVE_MMX)
|
||||
@@ -296,7 +301,9 @@ REALNAME:
|
||||
#define PROFCODE
|
||||
#endif
|
||||
|
||||
#define EPILOGUE .size REALNAME, .-REALNAME
|
||||
#define EPILOGUE \
|
||||
.size REALNAME, .-REALNAME; \
|
||||
.section .note.GNU-stack,"",@progbits
|
||||
|
||||
#endif
|
||||
|
||||
@@ -335,6 +342,7 @@ REALNAME:
|
||||
#define ALIGN_2 .align 2
|
||||
#define ALIGN_3 .align 3
|
||||
#define ALIGN_4 .align 4
|
||||
#define ALIGN_5 .align 5
|
||||
#define ffreep fstp
|
||||
#endif
|
||||
|
||||
@@ -356,11 +364,10 @@ REALNAME:
|
||||
|
||||
#ifndef ALIGN_6
|
||||
#define ALIGN_6 .align 64
|
||||
|
||||
#endif
|
||||
// ffreep %st(0).
|
||||
// Because Clang didn't support ffreep, we directly use the opcode.
|
||||
// Please check out http://www.sandpile.org/x86/opc_fpu.htm
|
||||
#ifndef ffreep
|
||||
#define ffreep .byte 0xdf, 0xc0 #
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -218,6 +218,11 @@ static __inline int blas_quickdivide(unsigned int x, unsigned int y){
|
||||
|
||||
#ifdef ASSEMBLER
|
||||
|
||||
#if defined(PILEDRIVER) || defined(BULLDOZER)
|
||||
//Enable some optimazation for barcelona.
|
||||
#define BARCELONA_OPTIMIZATION
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_3DNOW)
|
||||
#define EMMS femms
|
||||
#elif defined(HAVE_MMX)
|
||||
@@ -367,7 +372,10 @@ REALNAME:
|
||||
#define PROFCODE
|
||||
#endif
|
||||
|
||||
#define EPILOGUE .size REALNAME, .-REALNAME
|
||||
#define EPILOGUE \
|
||||
.size REALNAME, .-REALNAME; \
|
||||
.section .note.GNU-stack,"",@progbits
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
6
cpuid.h
6
cpuid.h
@@ -106,6 +106,8 @@
|
||||
#define CORE_SANDYBRIDGE 20
|
||||
#define CORE_BOBCAT 21
|
||||
#define CORE_BULLDOZER 22
|
||||
#define CORE_PILEDRIVER 23
|
||||
#define CORE_HASWELL 24
|
||||
|
||||
#define HAVE_SSE (1 << 0)
|
||||
#define HAVE_SSE2 (1 << 1)
|
||||
@@ -127,6 +129,7 @@
|
||||
#define HAVE_FASTMOVU (1 << 17)
|
||||
#define HAVE_AVX (1 << 18)
|
||||
#define HAVE_FMA4 (1 << 19)
|
||||
#define HAVE_FMA3 (1 << 20)
|
||||
|
||||
#define CACHE_INFO_L1_I 1
|
||||
#define CACHE_INFO_L1_D 2
|
||||
@@ -196,4 +199,7 @@ typedef struct {
|
||||
#define CPUTYPE_SANDYBRIDGE 44
|
||||
#define CPUTYPE_BOBCAT 45
|
||||
#define CPUTYPE_BULLDOZER 46
|
||||
#define CPUTYPE_PILEDRIVER 47
|
||||
#define CPUTYPE_HASWELL 48
|
||||
|
||||
#endif
|
||||
|
||||
262
cpuid_arm.c
Normal file
262
cpuid_arm.c
Normal file
@@ -0,0 +1,262 @@
|
||||
/**************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#define CPU_UNKNOWN 0
|
||||
#define CPU_ARMV6 1
|
||||
#define CPU_ARMV7 2
|
||||
#define CPU_CORTEXA15 3
|
||||
|
||||
static char *cpuname[] = {
|
||||
"UNKOWN",
|
||||
"ARMV6",
|
||||
"ARMV7",
|
||||
"CORTEXA15"
|
||||
};
|
||||
|
||||
|
||||
int get_feature(char *search)
|
||||
{
|
||||
|
||||
#ifdef linux
|
||||
FILE *infile;
|
||||
char buffer[2048], *p,*t;
|
||||
p = (char *) NULL ;
|
||||
|
||||
infile = fopen("/proc/cpuinfo", "r");
|
||||
|
||||
while (fgets(buffer, sizeof(buffer), infile))
|
||||
{
|
||||
|
||||
if (!strncmp("Features", buffer, 8))
|
||||
{
|
||||
p = strchr(buffer, ':') + 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(infile);
|
||||
|
||||
|
||||
if( p == NULL ) return;
|
||||
|
||||
t = strtok(p," ");
|
||||
while( t = strtok(NULL," "))
|
||||
{
|
||||
if (!strcmp(t, search)) { return(1); }
|
||||
}
|
||||
|
||||
#endif
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
int detect(void)
|
||||
{
|
||||
|
||||
#ifdef linux
|
||||
|
||||
FILE *infile;
|
||||
char buffer[512], *p;
|
||||
p = (char *) NULL ;
|
||||
|
||||
infile = fopen("/proc/cpuinfo", "r");
|
||||
|
||||
while (fgets(buffer, sizeof(buffer), infile))
|
||||
{
|
||||
|
||||
if (!strncmp("model name", buffer, 10))
|
||||
{
|
||||
p = strchr(buffer, ':') + 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(infile);
|
||||
|
||||
if(p != NULL)
|
||||
{
|
||||
|
||||
if (strstr(p, "ARMv7"))
|
||||
{
|
||||
if ( get_feature("vfpv4"))
|
||||
return CPU_ARMV7;
|
||||
|
||||
if ( get_feature("vfpv3"))
|
||||
return CPU_ARMV7;
|
||||
|
||||
if ( get_feature("vfp"))
|
||||
return CPU_ARMV6;
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (strstr(p, "ARMv6"))
|
||||
{
|
||||
if ( get_feature("vfp"))
|
||||
return CPU_ARMV6;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
return CPU_UNKNOWN;
|
||||
}
|
||||
|
||||
char *get_corename(void)
|
||||
{
|
||||
return cpuname[detect()];
|
||||
}
|
||||
|
||||
void get_architecture(void)
|
||||
{
|
||||
printf("ARM");
|
||||
}
|
||||
|
||||
void get_subarchitecture(void)
|
||||
{
|
||||
int d = detect();
|
||||
switch (d)
|
||||
{
|
||||
|
||||
case CPU_ARMV7:
|
||||
printf("ARMV7");
|
||||
break;
|
||||
|
||||
case CPU_ARMV6:
|
||||
printf("ARMV6");
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("UNKNOWN");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void get_subdirname(void)
|
||||
{
|
||||
printf("arm");
|
||||
}
|
||||
|
||||
void get_cpuconfig(void)
|
||||
{
|
||||
|
||||
int d = detect();
|
||||
switch (d)
|
||||
{
|
||||
|
||||
case CPU_ARMV7:
|
||||
printf("#define ARMV7\n");
|
||||
printf("#define HAVE_VFP\n");
|
||||
printf("#define HAVE_VFPV3\n");
|
||||
if ( get_feature("neon")) printf("#define HAVE_NEON\n");
|
||||
if ( get_feature("vfpv4")) printf("#define HAVE_VFPV4\n");
|
||||
printf("#define L1_DATA_SIZE 65536\n");
|
||||
printf("#define L1_DATA_LINESIZE 32\n");
|
||||
printf("#define L2_SIZE 512488\n");
|
||||
printf("#define L2_LINESIZE 32\n");
|
||||
printf("#define DTB_DEFAULT_ENTRIES 64\n");
|
||||
printf("#define DTB_SIZE 4096\n");
|
||||
printf("#define L2_ASSOCIATIVE 4\n");
|
||||
break;
|
||||
|
||||
case CPU_ARMV6:
|
||||
printf("#define ARMV6\n");
|
||||
printf("#define HAVE_VFP\n");
|
||||
printf("#define L1_DATA_SIZE 65536\n");
|
||||
printf("#define L1_DATA_LINESIZE 32\n");
|
||||
printf("#define L2_SIZE 512488\n");
|
||||
printf("#define L2_LINESIZE 32\n");
|
||||
printf("#define DTB_DEFAULT_ENTRIES 64\n");
|
||||
printf("#define DTB_SIZE 4096\n");
|
||||
printf("#define L2_ASSOCIATIVE 4\n");
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void get_libname(void)
|
||||
{
|
||||
|
||||
int d = detect();
|
||||
switch (d)
|
||||
{
|
||||
|
||||
case CPU_ARMV7:
|
||||
printf("armv7\n");
|
||||
break;
|
||||
|
||||
case CPU_ARMV6:
|
||||
printf("armv6\n");
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void get_features(void)
|
||||
{
|
||||
|
||||
#ifdef linux
|
||||
FILE *infile;
|
||||
char buffer[2048], *p,*t;
|
||||
p = (char *) NULL ;
|
||||
|
||||
infile = fopen("/proc/cpuinfo", "r");
|
||||
|
||||
while (fgets(buffer, sizeof(buffer), infile))
|
||||
{
|
||||
|
||||
if (!strncmp("Features", buffer, 8))
|
||||
{
|
||||
p = strchr(buffer, ':') + 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(infile);
|
||||
|
||||
|
||||
if( p == NULL ) return;
|
||||
|
||||
t = strtok(p," ");
|
||||
while( t = strtok(NULL," "))
|
||||
{
|
||||
if (!strcmp(t, "vfp")) { printf("HAVE_VFP=1\n"); continue; }
|
||||
if (!strcmp(t, "vfpv3")) { printf("HAVE_VFPV3=1\n"); continue; }
|
||||
if (!strcmp(t, "vfpv4")) { printf("HAVE_VFPV4=1\n"); continue; }
|
||||
if (!strcmp(t, "neon")) { printf("HAVE_NEON=1\n"); continue; }
|
||||
}
|
||||
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -114,6 +114,7 @@ int detect(void){
|
||||
if (!strncasecmp(p, "PPC970", 6)) return CPUTYPE_PPC970;
|
||||
if (!strncasecmp(p, "POWER5", 6)) return CPUTYPE_POWER5;
|
||||
if (!strncasecmp(p, "POWER6", 6)) return CPUTYPE_POWER6;
|
||||
if (!strncasecmp(p, "POWER7", 6)) return CPUTYPE_POWER6;
|
||||
if (!strncasecmp(p, "Cell", 4)) return CPUTYPE_CELL;
|
||||
if (!strncasecmp(p, "7447", 4)) return CPUTYPE_PPCG4;
|
||||
|
||||
|
||||
83
cpuid_x86.c
83
cpuid_x86.c
@@ -41,10 +41,14 @@
|
||||
#include "cpuid.h"
|
||||
|
||||
#ifdef NO_AVX
|
||||
#define CPUTYPE_HASWELL CPUTYPE_NEHALEM
|
||||
#define CORE_HASWELL CORE_NEHALEM
|
||||
#define CPUTYPE_SANDYBRIDGE CPUTYPE_NEHALEM
|
||||
#define CORE_SANDYBRIDGE CORE_NEHALEM
|
||||
#define CPUTYPE_BULLDOZER CPUTYPE_BARCELONA
|
||||
#define CORE_BULLDOZER CORE_BARCELONA
|
||||
#define CPUTYPE_PILEDRIVER CPUTYPE_BARCELONA
|
||||
#define CORE_PILEDRIVER CORE_BARCELONA
|
||||
#endif
|
||||
|
||||
#ifndef CPUIDEMU
|
||||
@@ -130,7 +134,7 @@ int support_avx(){
|
||||
int ret=0;
|
||||
|
||||
cpuid(1, &eax, &ebx, &ecx, &edx);
|
||||
if ((ecx & (1 << 28)) != 0 && (ecx & (1 << 27)) != 0){
|
||||
if ((ecx & (1 << 28)) != 0 && (ecx & (1 << 27)) != 0 && (ecx & (1 << 26)) != 0){
|
||||
xgetbv(0, &eax, &edx);
|
||||
if((eax & 6) == 6){
|
||||
ret=1; //OS support AVX
|
||||
@@ -225,6 +229,7 @@ int get_cputype(int gettype){
|
||||
if ((ecx & (1 << 20)) != 0) feature |= HAVE_SSE4_2;
|
||||
#ifndef NO_AVX
|
||||
if (support_avx()) feature |= HAVE_AVX;
|
||||
if ((ecx & (1 << 12)) != 0) feature |= HAVE_FMA3;
|
||||
#endif
|
||||
|
||||
if (have_excpuid() >= 0x01) {
|
||||
@@ -1050,8 +1055,22 @@ int get_cpuname(void){
|
||||
return CPUTYPE_SANDYBRIDGE;
|
||||
else
|
||||
return CPUTYPE_NEHALEM;
|
||||
case 12:
|
||||
if(support_avx())
|
||||
return CPUTYPE_HASWELL;
|
||||
else
|
||||
return CPUTYPE_NEHALEM;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
switch (model) {
|
||||
case 5:
|
||||
if(support_avx())
|
||||
return CPUTYPE_HASWELL;
|
||||
else
|
||||
return CPUTYPE_NEHALEM;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0x7:
|
||||
@@ -1084,11 +1103,21 @@ int get_cpuname(void){
|
||||
case 1:
|
||||
case 10:
|
||||
return CPUTYPE_BARCELONA;
|
||||
case 6: //AMD Bulldozer Opteron 6200 / Opteron 4200 / AMD FX-Series
|
||||
if(support_avx())
|
||||
return CPUTYPE_BULLDOZER;
|
||||
else
|
||||
return CPUTYPE_BARCELONA; //OS don't support AVX.
|
||||
case 6:
|
||||
switch (model) {
|
||||
case 1:
|
||||
//AMD Bulldozer Opteron 6200 / Opteron 4200 / AMD FX-Series
|
||||
if(support_avx())
|
||||
return CPUTYPE_BULLDOZER;
|
||||
else
|
||||
return CPUTYPE_BARCELONA; //OS don't support AVX.
|
||||
case 2:
|
||||
if(support_avx())
|
||||
return CPUTYPE_PILEDRIVER;
|
||||
else
|
||||
return CPUTYPE_BARCELONA; //OS don't support AVX.
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
return CPUTYPE_BOBCAT;
|
||||
}
|
||||
@@ -1213,6 +1242,8 @@ static char *cpuname[] = {
|
||||
"SANDYBRIDGE",
|
||||
"BOBCAT",
|
||||
"BULLDOZER",
|
||||
"PILEDRIVER",
|
||||
"HASWELL",
|
||||
};
|
||||
|
||||
static char *lowercpuname[] = {
|
||||
@@ -1262,6 +1293,8 @@ static char *lowercpuname[] = {
|
||||
"sandybridge",
|
||||
"bobcat",
|
||||
"bulldozer",
|
||||
"piledriver",
|
||||
"haswell",
|
||||
};
|
||||
|
||||
static char *corename[] = {
|
||||
@@ -1288,6 +1321,8 @@ static char *corename[] = {
|
||||
"SANDYBRIDGE",
|
||||
"BOBCAT",
|
||||
"BULLDOZER",
|
||||
"PILEDRIVER",
|
||||
"HASWELL",
|
||||
};
|
||||
|
||||
static char *corename_lower[] = {
|
||||
@@ -1314,6 +1349,8 @@ static char *corename_lower[] = {
|
||||
"sandybridge",
|
||||
"bobcat",
|
||||
"bulldozer",
|
||||
"piledriver",
|
||||
"haswell",
|
||||
};
|
||||
|
||||
|
||||
@@ -1424,8 +1461,22 @@ int get_coretype(void){
|
||||
return CORE_SANDYBRIDGE;
|
||||
else
|
||||
return CORE_NEHALEM; //OS doesn't support AVX
|
||||
case 12:
|
||||
if(support_avx())
|
||||
return CORE_HASWELL;
|
||||
else
|
||||
return CORE_NEHALEM;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
switch (model) {
|
||||
case 5:
|
||||
if(support_avx())
|
||||
return CORE_HASWELL;
|
||||
else
|
||||
return CORE_NEHALEM;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1442,11 +1493,19 @@ int get_coretype(void){
|
||||
if ((exfamily == 0) || (exfamily == 2)) return CORE_OPTERON;
|
||||
else if (exfamily == 5) return CORE_BOBCAT;
|
||||
else if (exfamily == 6) {
|
||||
//AMD Bulldozer Opteron 6200 / Opteron 4200 / AMD FX-Series
|
||||
if(support_avx())
|
||||
return CORE_BULLDOZER;
|
||||
else
|
||||
return CORE_BARCELONA; //OS don't support AVX. Use old kernels.
|
||||
switch (model) {
|
||||
case 1:
|
||||
//AMD Bulldozer Opteron 6200 / Opteron 4200 / AMD FX-Series
|
||||
if(support_avx())
|
||||
return CORE_BULLDOZER;
|
||||
else
|
||||
return CORE_BARCELONA; //OS don't support AVX.
|
||||
case 2:
|
||||
if(support_avx())
|
||||
return CORE_PILEDRIVER;
|
||||
else
|
||||
return CORE_BARCELONA; //OS don't support AVX.
|
||||
}
|
||||
}else return CORE_BARCELONA;
|
||||
}
|
||||
}
|
||||
@@ -1534,6 +1593,7 @@ void get_cpuconfig(void){
|
||||
if (features & HAVE_3DNOWEX) printf("#define HAVE_3DNOWEX\n");
|
||||
if (features & HAVE_3DNOW) printf("#define HAVE_3DNOW\n");
|
||||
if (features & HAVE_FMA4 ) printf("#define HAVE_FMA4\n");
|
||||
if (features & HAVE_FMA3 ) printf("#define HAVE_FMA3\n");
|
||||
if (features & HAVE_CFLUSH) printf("#define HAVE_CFLUSH\n");
|
||||
if (features & HAVE_HIT) printf("#define HAVE_HIT 1\n");
|
||||
if (features & HAVE_MISALIGNSSE) printf("#define HAVE_MISALIGNSSE\n");
|
||||
@@ -1601,5 +1661,6 @@ void get_sse(void){
|
||||
if (features & HAVE_3DNOWEX) printf("HAVE_3DNOWEX=1\n");
|
||||
if (features & HAVE_3DNOW) printf("HAVE_3DNOW=1\n");
|
||||
if (features & HAVE_FMA4 ) printf("HAVE_FMA4=1\n");
|
||||
if (features & HAVE_FMA3 ) printf("HAVE_FMA3=1\n");
|
||||
|
||||
}
|
||||
|
||||
23
ctest.c
23
ctest.c
@@ -1,3 +1,17 @@
|
||||
//LSB (Linux Standard Base) compiler
|
||||
//only support lsbc++
|
||||
#if defined (__LSB_VERSION__)
|
||||
#if !defined (__cplusplus)
|
||||
COMPILER_LSB
|
||||
#else
|
||||
#error "OpenBLAS only supports lsbcc."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__clang__)
|
||||
COMPILER_CLANG
|
||||
#endif
|
||||
|
||||
#if defined(__PGI) || defined(__PGIC__)
|
||||
COMPILER_PGI
|
||||
#endif
|
||||
@@ -110,3 +124,12 @@ ARCH_IA64
|
||||
#if defined(__LP64) || defined(__LP64__) || defined(__ptr64) || defined(__x86_64__) || defined(__amd64__) || defined(__64BIT__)
|
||||
BINARY_64
|
||||
#endif
|
||||
|
||||
#if defined(__ARM_ARCH) || defined(__ARM_ARCH_7A__)
|
||||
ARCH_ARM
|
||||
#endif
|
||||
|
||||
#if defined(__aarch64__)
|
||||
ARCH_ARM64
|
||||
#endif
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ endif
|
||||
clean ::
|
||||
rm -f x*
|
||||
|
||||
FLDFLAGS = $(FFLAGS:-fPIC=)
|
||||
FLDFLAGS = $(FFLAGS:-fPIC=) $(LDFLAGS)
|
||||
CEXTRALIB =
|
||||
|
||||
# Single real
|
||||
|
||||
@@ -71,7 +71,7 @@ int CNAME(int mode, blas_arg_t *arg, BLASLONG *range_m, BLASLONG *range_n, int (
|
||||
queue[num_cpu].args = arg;
|
||||
queue[num_cpu].range_m = range_m;
|
||||
queue[num_cpu].range_n = &range[num_cpu];
|
||||
#if defined(LOONGSON3A)
|
||||
#if 0 //defined(LOONGSON3A)
|
||||
queue[num_cpu].sa = sa + GEMM_OFFSET_A1 * num_cpu;
|
||||
queue[num_cpu].sb = queue[num_cpu].sa + GEMM_OFFSET_A1 * 5;
|
||||
#else
|
||||
@@ -83,7 +83,7 @@ int CNAME(int mode, blas_arg_t *arg, BLASLONG *range_m, BLASLONG *range_n, int (
|
||||
}
|
||||
|
||||
if (num_cpu) {
|
||||
#if defined(LOONGSON3A)
|
||||
#if 0 //defined(LOONGSON3A)
|
||||
queue[0].sa = sa;
|
||||
queue[0].sb = sa + GEMM_OFFSET_A1 * 5;
|
||||
#else
|
||||
|
||||
@@ -332,7 +332,18 @@ int CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n,
|
||||
#else
|
||||
for(jjs = js; jjs < js + min_j; jjs += min_jj){
|
||||
min_jj = min_j + js - jjs;
|
||||
if (min_jj > GEMM_UNROLL_N) min_jj = GEMM_UNROLL_N;
|
||||
|
||||
#if ( defined(BULLDOZER) || defined(PILEDRIVER) || defined(HASWELL) ) && defined(ARCH_X86_64) && !defined(XDOUBLE) && !defined(COMPLEX)
|
||||
if (min_jj >= 6*GEMM_UNROLL_N) min_jj = 6*GEMM_UNROLL_N;
|
||||
else
|
||||
if (min_jj >= 3*GEMM_UNROLL_N) min_jj = 3*GEMM_UNROLL_N;
|
||||
else
|
||||
if (min_jj > GEMM_UNROLL_N) min_jj = GEMM_UNROLL_N;
|
||||
#else
|
||||
|
||||
if (min_jj > GEMM_UNROLL_N) min_jj = GEMM_UNROLL_N;
|
||||
#endif
|
||||
|
||||
|
||||
START_RPCC();
|
||||
|
||||
|
||||
@@ -48,6 +48,12 @@
|
||||
#define SWITCH_RATIO 2
|
||||
#endif
|
||||
|
||||
//The array of job_t may overflow the stack.
|
||||
//Instead, use malloc to alloc job_t.
|
||||
#if MAX_CPU_NUMBER > BLAS3_MEM_ALLOC_THRESHOLD
|
||||
#define USE_ALLOC_HEAP
|
||||
#endif
|
||||
|
||||
#ifndef GEMM3M_LOCAL
|
||||
#if defined(NN)
|
||||
#define GEMM3M_LOCAL GEMM3M_NN
|
||||
@@ -836,7 +842,11 @@ static int gemm_driver(blas_arg_t *args, BLASLONG *range_m, BLASLONG
|
||||
BLASLONG range_M[MAX_CPU_NUMBER + 1];
|
||||
BLASLONG range_N[MAX_CPU_NUMBER + 1];
|
||||
|
||||
job_t job[MAX_CPU_NUMBER];
|
||||
#ifndef USE_ALLOC_HEAP
|
||||
job_t job[MAX_CPU_NUMBER];
|
||||
#else
|
||||
job_t * job = NULL;
|
||||
#endif
|
||||
|
||||
BLASLONG num_cpu_m, num_cpu_n;
|
||||
|
||||
@@ -866,6 +876,15 @@ static int gemm_driver(blas_arg_t *args, BLASLONG *range_m, BLASLONG
|
||||
newarg.alpha = args -> alpha;
|
||||
newarg.beta = args -> beta;
|
||||
newarg.nthreads = args -> nthreads;
|
||||
|
||||
#ifdef USE_ALLOC_HEAP
|
||||
job = (job_t*)malloc(MAX_CPU_NUMBER * sizeof(job_t));
|
||||
if(job==NULL){
|
||||
fprintf(stderr, "OpenBLAS: malloc failed in %s\n", __func__);
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
newarg.common = (void *)job;
|
||||
|
||||
if (!range_m) {
|
||||
@@ -945,6 +964,10 @@ static int gemm_driver(blas_arg_t *args, BLASLONG *range_m, BLASLONG
|
||||
exec_blas(num_cpu_m, queue);
|
||||
}
|
||||
|
||||
#ifdef USE_ALLOC_HEAP
|
||||
free(job);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -48,6 +48,12 @@
|
||||
#define SWITCH_RATIO 2
|
||||
#endif
|
||||
|
||||
//The array of job_t may overflow the stack.
|
||||
//Instead, use malloc to alloc job_t.
|
||||
#if MAX_CPU_NUMBER > BLAS3_MEM_ALLOC_THRESHOLD
|
||||
#define USE_ALLOC_HEAP
|
||||
#endif
|
||||
|
||||
#ifndef SYRK_LOCAL
|
||||
#if !defined(LOWER) && !defined(TRANS)
|
||||
#define SYRK_LOCAL SYRK_UN
|
||||
@@ -502,7 +508,12 @@ int CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n, FLOAT *sa, FLO
|
||||
|
||||
blas_arg_t newarg;
|
||||
|
||||
#ifndef USE_ALLOC_HEAP
|
||||
job_t job[MAX_CPU_NUMBER];
|
||||
#else
|
||||
job_t * job = NULL;
|
||||
#endif
|
||||
|
||||
blas_queue_t queue[MAX_CPU_NUMBER];
|
||||
|
||||
BLASLONG range[MAX_CPU_NUMBER + 100];
|
||||
@@ -556,6 +567,15 @@ int CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n, FLOAT *sa, FLO
|
||||
newarg.ldc = args -> ldc;
|
||||
newarg.alpha = args -> alpha;
|
||||
newarg.beta = args -> beta;
|
||||
|
||||
#ifdef USE_ALLOC_HEAP
|
||||
job = (job_t*)malloc(MAX_CPU_NUMBER * sizeof(job_t));
|
||||
if(job==NULL){
|
||||
fprintf(stderr, "OpenBLAS: malloc failed in %s\n", __func__);
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
newarg.common = (void *)job;
|
||||
|
||||
if (!range_n) {
|
||||
@@ -668,6 +688,9 @@ int CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n, FLOAT *sa, FLO
|
||||
exec_blas(num_cpu, queue);
|
||||
}
|
||||
|
||||
#ifdef USE_ALLOC_HEAP
|
||||
free(job);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -48,6 +48,12 @@
|
||||
#define SWITCH_RATIO 2
|
||||
#endif
|
||||
|
||||
//The array of job_t may overflow the stack.
|
||||
//Instead, use malloc to alloc job_t.
|
||||
#if MAX_CPU_NUMBER > BLAS3_MEM_ALLOC_THRESHOLD
|
||||
#define USE_ALLOC_HEAP
|
||||
#endif
|
||||
|
||||
#ifndef GEMM_LOCAL
|
||||
#if defined(NN)
|
||||
#define GEMM_LOCAL GEMM_NN
|
||||
@@ -360,8 +366,18 @@ static int inner_thread(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n,
|
||||
|
||||
for(jjs = xxx; jjs < MIN(n_to, xxx + div_n); jjs += min_jj){
|
||||
min_jj = MIN(n_to, xxx + div_n) - jjs;
|
||||
|
||||
#if ( defined(BULLDOZER) || defined(PILEDRIVER) || defined(HASWELL) ) && defined(ARCH_X86_64) && !defined(XDOUBLE) && !defined(COMPLEX)
|
||||
if (min_jj >= 6*GEMM_UNROLL_N) min_jj = 6*GEMM_UNROLL_N;
|
||||
else
|
||||
if (min_jj >= 3*GEMM_UNROLL_N) min_jj = 3*GEMM_UNROLL_N;
|
||||
else
|
||||
if (min_jj > GEMM_UNROLL_N) min_jj = GEMM_UNROLL_N;
|
||||
#else
|
||||
|
||||
if (min_jj > GEMM_UNROLL_N) min_jj = GEMM_UNROLL_N;
|
||||
|
||||
#endif
|
||||
|
||||
START_RPCC();
|
||||
|
||||
OCOPY_OPERATION(min_l, min_jj, b, ldb, ls, jjs,
|
||||
@@ -519,7 +535,12 @@ static int gemm_driver(blas_arg_t *args, BLASLONG *range_m, BLASLONG
|
||||
|
||||
blas_arg_t newarg;
|
||||
|
||||
#ifndef USE_ALLOC_HEAP
|
||||
job_t job[MAX_CPU_NUMBER];
|
||||
#else
|
||||
job_t * job = NULL;
|
||||
#endif
|
||||
|
||||
blas_queue_t queue[MAX_CPU_NUMBER];
|
||||
|
||||
BLASLONG range_M[MAX_CPU_NUMBER + 1];
|
||||
@@ -563,6 +584,15 @@ static int gemm_driver(blas_arg_t *args, BLASLONG *range_m, BLASLONG
|
||||
newarg.alpha = args -> alpha;
|
||||
newarg.beta = args -> beta;
|
||||
newarg.nthreads = args -> nthreads;
|
||||
|
||||
#ifdef USE_ALLOC_HEAP
|
||||
job = (job_t*)malloc(MAX_CPU_NUMBER * sizeof(job_t));
|
||||
if(job==NULL){
|
||||
fprintf(stderr, "OpenBLAS: malloc failed in %s\n", __func__);
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
newarg.common = (void *)job;
|
||||
|
||||
#ifdef PARAMTEST
|
||||
@@ -634,7 +664,7 @@ static int gemm_driver(blas_arg_t *args, BLASLONG *range_m, BLASLONG
|
||||
|
||||
num_cpu_n ++;
|
||||
}
|
||||
|
||||
|
||||
for (j = 0; j < num_cpu_m; j++) {
|
||||
for (i = 0; i < num_cpu_m; i++) {
|
||||
for (k = 0; k < DIVIDE_RATE; k++) {
|
||||
@@ -648,6 +678,10 @@ static int gemm_driver(blas_arg_t *args, BLASLONG *range_m, BLASLONG
|
||||
exec_blas(num_cpu_m, queue);
|
||||
}
|
||||
|
||||
#ifdef USE_ALLOC_HEAP
|
||||
free(job);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
TOPDIR = ../..
|
||||
include ../../Makefile.system
|
||||
|
||||
COMMONOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) c_abs.$(SUFFIX) z_abs.$(SUFFIX) openblas_set_num_threads.$(SUFFIX) openblas_get_config.$(SUFFIX)
|
||||
COMMONOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) c_abs.$(SUFFIX) z_abs.$(SUFFIX) openblas_set_num_threads.$(SUFFIX) openblas_get_config.$(SUFFIX) openblas_get_parallel.$(SUFFIX)
|
||||
|
||||
COMMONOBJS += slamch.$(SUFFIX) slamc3.$(SUFFIX) dlamch.$(SUFFIX) dlamc3.$(SUFFIX)
|
||||
|
||||
@@ -106,6 +106,9 @@ openblas_set_num_threads.$(SUFFIX) : openblas_set_num_threads.c
|
||||
openblas_get_config.$(SUFFIX) : openblas_get_config.c
|
||||
$(CC) $(CFLAGS) -c $< -o $(@F)
|
||||
|
||||
openblas_get_parallel.$(SUFFIX) : openblas_get_parallel.c
|
||||
$(CC) $(CFLAGS) -c $< -o $(@F)
|
||||
|
||||
blasL1thread.$(SUFFIX) : blas_l1_thread.c ../../common.h ../../common_thread.h
|
||||
$(CC) $(CFLAGS) -c $< -o $(@F)
|
||||
|
||||
|
||||
@@ -231,7 +231,10 @@ static void exec_threads(blas_queue_t *queue){
|
||||
release_flag=1;
|
||||
}
|
||||
|
||||
if (sa == NULL) sa = (void *)((BLASLONG)buffer + GEMM_OFFSET_A);
|
||||
if (sa == NULL) {
|
||||
sa = (void *)((BLASLONG)buffer + GEMM_OFFSET_A);
|
||||
queue->sa=sa;
|
||||
}
|
||||
|
||||
if (sb == NULL) {
|
||||
if (!(queue -> mode & BLAS_COMPLEX)){
|
||||
|
||||
@@ -441,9 +441,10 @@ int BLASFUNC(blas_thread_shutdown)(void){
|
||||
if (blas_server_avail){
|
||||
|
||||
SetEvent(pool.killed);
|
||||
|
||||
printf("blas_num_threads=%d\n", blas_num_threads);
|
||||
for(i = 0; i < blas_num_threads - 1; i++){
|
||||
WaitForSingleObject(blas_threads[i], INFINITE);
|
||||
WaitForSingleObject(blas_threads[i], 5); //INFINITE);
|
||||
TerminateThread(blas_threads[i],0);
|
||||
}
|
||||
|
||||
blas_server_avail = 0;
|
||||
|
||||
@@ -64,10 +64,14 @@ extern gotoblas_t gotoblas_BOBCAT;
|
||||
#ifndef NO_AVX
|
||||
extern gotoblas_t gotoblas_SANDYBRIDGE;
|
||||
extern gotoblas_t gotoblas_BULLDOZER;
|
||||
extern gotoblas_t gotoblas_PILEDRIVER;
|
||||
extern gotoblas_t gotoblas_HASWELL;
|
||||
#else
|
||||
//Use NEHALEM kernels for sandy bridge
|
||||
#define gotoblas_SANDYBRIDGE gotoblas_NEHALEM
|
||||
#define gotoblas_HASWELL gotoblas_NEHALEM
|
||||
#define gotoblas_BULLDOZER gotoblas_BARCELONA
|
||||
#define gotoblas_PILEDRIVER gotoblas_BARCELONA
|
||||
#endif
|
||||
|
||||
|
||||
@@ -92,7 +96,7 @@ int support_avx(){
|
||||
int ret=0;
|
||||
|
||||
cpuid(1, &eax, &ebx, &ecx, &edx);
|
||||
if ((ecx & (1 << 28)) != 0 && (ecx & (1 << 27)) != 0){
|
||||
if ((ecx & (1 << 28)) != 0 && (ecx & (1 << 27)) != 0 && (ecx & (1 << 26)) != 0){
|
||||
xgetbv(0, &eax, &edx);
|
||||
if((eax & 6) == 6){
|
||||
ret=1; //OS support AVX
|
||||
@@ -190,6 +194,26 @@ static gotoblas_t *get_coretype(void){
|
||||
return &gotoblas_NEHALEM; //OS doesn't support AVX. Use old kernels.
|
||||
}
|
||||
}
|
||||
//Intel Haswell
|
||||
if (model == 12) {
|
||||
if(support_avx())
|
||||
return &gotoblas_HASWELL;
|
||||
else{
|
||||
fprintf(stderr, "OpenBLAS : Your OS does not support AVX instructions. OpenBLAS is using Nehalem kernels as a fallback, which may give poorer performance.\n");
|
||||
return &gotoblas_NEHALEM; //OS doesn't support AVX. Use old kernels.
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
case 4:
|
||||
//Intel Haswell
|
||||
if (model == 5) {
|
||||
if(support_avx())
|
||||
return &gotoblas_HASWELL;
|
||||
else{
|
||||
fprintf(stderr, "OpenBLAS : Your OS does not support AVX instructions. OpenBLAS is using Nehalem kernels as a fallback, which may give poorer performance.\n");
|
||||
return &gotoblas_NEHALEM; //OS doesn't support AVX. Use old kernels.
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
case 0xf:
|
||||
@@ -199,7 +223,19 @@ static gotoblas_t *get_coretype(void){
|
||||
}
|
||||
|
||||
if (vendor == VENDOR_AMD){
|
||||
if (family <= 0xe) return &gotoblas_ATHLON;
|
||||
if (family <= 0xe) {
|
||||
// Verify that CPU has 3dnow and 3dnowext before claiming it is Athlon
|
||||
cpuid(0x80000000, &eax, &ebx, &ecx, &edx);
|
||||
if (eax & 0xffff >= 0x01) {
|
||||
cpuid(0x80000001, &eax, &ebx, &ecx, &edx);
|
||||
if ((edx & (1 << 30)) == 0 || (edx & (1 << 31)) == 0)
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
return NULL;
|
||||
|
||||
return &gotoblas_ATHLON;
|
||||
}
|
||||
if (family == 0xf){
|
||||
if ((exfamily == 0) || (exfamily == 2)) {
|
||||
if (ecx & (1 << 0)) return &gotoblas_OPTERON_SSE3;
|
||||
@@ -207,13 +243,23 @@ static gotoblas_t *get_coretype(void){
|
||||
} else if (exfamily == 5) {
|
||||
return &gotoblas_BOBCAT;
|
||||
} else if (exfamily == 6) {
|
||||
//AMD Bulldozer Opteron 6200 / Opteron 4200 / AMD FX-Series
|
||||
if(model == 1){
|
||||
//AMD Bulldozer Opteron 6200 / Opteron 4200 / AMD FX-Series
|
||||
if(support_avx())
|
||||
return &gotoblas_BULLDOZER;
|
||||
else{
|
||||
fprintf(stderr, "OpenBLAS : Your OS does not support AVX instructions. OpenBLAS is using Barcelona kernels as a fallback, which may give poorer performance.\n");
|
||||
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
|
||||
}
|
||||
}
|
||||
}else if(model == 2){
|
||||
//AMD Bulldozer Opteron 6300 / Opteron 4300 / Opteron 3300
|
||||
if(support_avx())
|
||||
return &gotoblas_PILEDRIVER;
|
||||
else{
|
||||
fprintf(stderr, "OpenBLAS : Your OS does not support AVX instructions. OpenBLAS is using Barcelona kernels as a fallback, which may give poorer performance.\n");
|
||||
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return &gotoblas_BARCELONA;
|
||||
}
|
||||
@@ -251,6 +297,8 @@ static char *corename[] = {
|
||||
"Sandybridge",
|
||||
"Bobcat",
|
||||
"Bulldozer",
|
||||
"Piledriver",
|
||||
"Haswell",
|
||||
};
|
||||
|
||||
char *gotoblas_corename(void) {
|
||||
@@ -273,6 +321,8 @@ char *gotoblas_corename(void) {
|
||||
if (gotoblas == &gotoblas_SANDYBRIDGE) return corename[16];
|
||||
if (gotoblas == &gotoblas_BOBCAT) return corename[17];
|
||||
if (gotoblas == &gotoblas_BULLDOZER) return corename[18];
|
||||
if (gotoblas == &gotoblas_PILEDRIVER) return corename[19];
|
||||
if (gotoblas == &gotoblas_HASWELL) return corename[20];
|
||||
|
||||
return corename[0];
|
||||
}
|
||||
|
||||
@@ -82,6 +82,8 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#include <sched.h>
|
||||
#include <dirent.h>
|
||||
#include <dlfcn.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
#define MAX_NODES 16
|
||||
#define MAX_CPUS 256
|
||||
@@ -314,7 +316,7 @@ static int numa_check(void) {
|
||||
}
|
||||
|
||||
while ((dir = readdir(dp)) != NULL) {
|
||||
if (*(unsigned int *) dir -> d_name == 0x065646f6eU) {
|
||||
if (strncmp(dir->d_name, "node", 4)==0) {
|
||||
|
||||
node = atoi(&dir -> d_name[4]);
|
||||
|
||||
@@ -492,7 +494,7 @@ static void disable_affinity(void) {
|
||||
|
||||
#ifndef USE_OPENMP
|
||||
for(i=0; i< count; i++){
|
||||
lprocmask[i] &= ((unsigned long *)&cpu_orig_mask[0])[i];
|
||||
lprocmask[i] &= common->avail[i];
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -735,7 +737,8 @@ void gotoblas_affinity_init(void) {
|
||||
fprintf(stderr, "Shared Memory Initialization.\n");
|
||||
#endif
|
||||
|
||||
common -> num_procs = get_nprocs();
|
||||
//returns the number of processors which are currently online
|
||||
common -> num_procs = sysconf(_SC_NPROCESSORS_ONLN);;
|
||||
|
||||
if(common -> num_procs > MAX_CPUS) {
|
||||
fprintf(stderr, "\nOpenBLAS Warining : The number of CPU/Cores(%d) is beyond the limit(%d). Terminated.\n", common->num_procs, MAX_CPUS);
|
||||
@@ -751,7 +754,7 @@ void gotoblas_affinity_init(void) {
|
||||
if (common -> num_nodes > 1) numa_mapping();
|
||||
|
||||
common -> final_num_procs = 0;
|
||||
for(i = 0; i < common -> avail_count; i++) common -> final_num_procs += popcount(common -> avail[i]);
|
||||
for(i = 0; i < common -> avail_count; i++) common -> final_num_procs += rcount(common -> avail[i]) + 1; //Make the max cpu number.
|
||||
|
||||
for (cpu = 0; cpu < common -> final_num_procs; cpu ++) common -> cpu_use[cpu] = 0;
|
||||
|
||||
|
||||
@@ -105,6 +105,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#if defined(OS_FREEBSD) || defined(OS_DARWIN)
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/resource.h>
|
||||
#endif
|
||||
|
||||
#if defined(OS_WINDOWS) && (defined(__MINGW32__) || defined(__MINGW64__))
|
||||
@@ -125,7 +126,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#define NO_WARMUP
|
||||
#endif
|
||||
|
||||
#ifdef ALLOC_HUGETLB
|
||||
#ifndef SHM_HUGETLB
|
||||
#define SHM_HUGETLB 04000
|
||||
#endif
|
||||
|
||||
@@ -216,6 +217,25 @@ int get_num_procs(void) {
|
||||
}
|
||||
return nums;
|
||||
}
|
||||
/*
|
||||
void set_stack_limit(int limitMB){
|
||||
int result=0;
|
||||
struct rlimit rl;
|
||||
rlim_t StackSize;
|
||||
|
||||
StackSize=limitMB*1024*1024;
|
||||
result=getrlimit(RLIMIT_STACK, &rl);
|
||||
if(result==0){
|
||||
if(rl.rlim_cur < StackSize){
|
||||
rl.rlim_cur=StackSize;
|
||||
result=setrlimit(RLIMIT_STACK, &rl);
|
||||
if(result !=0){
|
||||
fprintf(stderr, "OpenBLAS: set stack limit error =%d\n", result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -343,7 +363,7 @@ static void *alloc_mmap(void *address){
|
||||
#define BENCH_ITERATION 4
|
||||
#define SCALING 2
|
||||
|
||||
static inline BLASULONG run_bench(BLASULONG address, long size) {
|
||||
static inline BLASULONG run_bench(BLASULONG address, BLASULONG size) {
|
||||
|
||||
BLASULONG original, *p;
|
||||
BLASULONG start, stop, min;
|
||||
@@ -430,12 +450,12 @@ static void *alloc_mmap(void *address){
|
||||
current = (SCALING - 1) * BUFFER_SIZE;
|
||||
|
||||
while(current > 0) {
|
||||
*(long *)start = (long)start + PAGESIZE;
|
||||
*(BLASLONG *)start = (BLASLONG)start + PAGESIZE;
|
||||
start += PAGESIZE;
|
||||
current -= PAGESIZE;
|
||||
}
|
||||
|
||||
*(long *)(start - PAGESIZE) = (BLASULONG)map_address;
|
||||
*(BLASLONG *)(start - PAGESIZE) = (BLASULONG)map_address;
|
||||
|
||||
start = (BLASULONG)map_address;
|
||||
|
||||
@@ -1150,7 +1170,7 @@ static void _touch_memory(blas_arg_t *arg, BLASLONG *range_m, BLASLONG *range_n,
|
||||
|
||||
#if !defined(ARCH_POWER) && !defined(ARCH_SPARC)
|
||||
|
||||
long size;
|
||||
size_t size;
|
||||
BLASULONG buffer;
|
||||
|
||||
size = BUFFER_SIZE - PAGESIZE;
|
||||
@@ -1248,6 +1268,7 @@ void CONSTRUCTOR gotoblas_init(void) {
|
||||
|
||||
if (gotoblas_initialized) return;
|
||||
|
||||
|
||||
#ifdef PROFILE
|
||||
moncontrol (0);
|
||||
#endif
|
||||
|
||||
52
driver/others/openblas_get_parallel.c
Normal file
52
driver/others/openblas_get_parallel.c
Normal file
@@ -0,0 +1,52 @@
|
||||
/*****************************************************************************
|
||||
Copyright (c) 2013 Martin Koehler, grisuthedragon@users.github.com
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the ISCAS nor the names of its contributors may
|
||||
be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
**********************************************************************************/
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#if defined(USE_OPENMP)
|
||||
static int parallel = 2 ;
|
||||
#elif defined(SMP_SERVER)
|
||||
static int parallel = 1;
|
||||
#else
|
||||
static int parallel = 0;
|
||||
#endif
|
||||
|
||||
int CNAME() {
|
||||
return parallel;
|
||||
}
|
||||
|
||||
int NAME() {
|
||||
return parallel;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -18,6 +18,14 @@ ifndef NO_LAPACKE
|
||||
NO_LAPACKE = 0
|
||||
endif
|
||||
|
||||
ifndef NEED2UNDERSCORES
|
||||
NEED2UNDERSCORES=0
|
||||
endif
|
||||
|
||||
ifndef ONLY_CBLAS
|
||||
ONLY_CBLAS = 0
|
||||
endif
|
||||
|
||||
ifeq ($(OSNAME), WINNT)
|
||||
ifeq ($(F_COMPILER), GFORTRAN)
|
||||
EXTRALIB += -lgfortran
|
||||
@@ -89,21 +97,21 @@ else
|
||||
endif
|
||||
|
||||
libgoto2_shared.dll : ../$(LIBNAME) libgoto2_shared.def
|
||||
$(CC) $(CFLAGS) libgoto2_shared.def -shared -o $(@F) \
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) libgoto2_shared.def -shared -o $(@F) \
|
||||
-Wl,--whole-archive ../$(LIBNAME) -Wl,--no-whole-archive \
|
||||
-Wl,--out-implib,libgoto2_shared.lib $(FEXTRALIB)
|
||||
|
||||
libopenblas.def : gensymbol
|
||||
perl ./gensymbol win2k $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > $(@F)
|
||||
perl ./gensymbol win2k $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) > $(@F)
|
||||
|
||||
libgoto2_shared.def : gensymbol
|
||||
perl ./gensymbol win2k $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > $(@F)
|
||||
perl ./gensymbol win2k $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) > $(@F)
|
||||
|
||||
libgoto_hpl.def : gensymbol
|
||||
perl ./gensymbol win2khpl $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > $(@F)
|
||||
perl ./gensymbol win2khpl $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) > $(@F)
|
||||
|
||||
$(LIBDYNNAME) : ../$(LIBNAME) osx.def
|
||||
$(CC) $(CFLAGS) -all_load -headerpad_max_install_names -install_name $(CURDIR)/../$(LIBDYNNAME) -dynamiclib -o ../$(LIBDYNNAME) $< -Wl,-exported_symbols_list,osx.def $(FEXTRALIB)
|
||||
$(FC) $(FFLAGS) -all_load -headerpad_max_install_names -install_name $(CURDIR)/../$(LIBDYNNAME) -dynamiclib -o ../$(LIBDYNNAME) $< -Wl,-exported_symbols_list,osx.def $(FEXTRALIB)
|
||||
|
||||
symbol.$(SUFFIX) : symbol.S
|
||||
$(CC) $(CFLAGS) -c -o $(@F) $^
|
||||
@@ -116,10 +124,18 @@ ifeq ($(OSNAME), Linux)
|
||||
so : ../$(LIBSONAME)
|
||||
|
||||
../$(LIBSONAME) : ../$(LIBNAME) linux.def linktest.c
|
||||
$(CC) $(CFLAGS) -shared -o ../$(LIBSONAME) \
|
||||
ifneq ($(C_COMPILER), LSB)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \
|
||||
-Wl,--whole-archive ../$(LIBNAME) -Wl,--no-whole-archive \
|
||||
-Wl,--retain-symbols-file=linux.def -Wl,-soname,$(LIBPREFIX).so.$(MAJOR_VERSION) $(EXTRALIB)
|
||||
$(CC) $(CFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK.
|
||||
-Wl,-soname,$(LIBPREFIX).so.$(MAJOR_VERSION) $(EXTRALIB)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK.
|
||||
else
|
||||
#for LSB
|
||||
env LSBCC_SHAREDLIBS=gfortran $(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \
|
||||
-Wl,--whole-archive ../$(LIBNAME) -Wl,--no-whole-archive \
|
||||
-Wl,-soname,$(LIBPREFIX).so.$(MAJOR_VERSION) $(EXTRALIB)
|
||||
$(FC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK.
|
||||
endif
|
||||
rm -f linktest
|
||||
|
||||
endif
|
||||
@@ -130,10 +146,10 @@ ifeq ($(OSNAME), $(filter $(OSNAME),FreeBSD NetBSD))
|
||||
so : ../$(LIBSONAME)
|
||||
|
||||
../$(LIBSONAME) : ../$(LIBNAME) linux.def linktest.c
|
||||
$(CC) $(CFLAGS) -shared -o ../$(LIBSONAME) \
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \
|
||||
-Wl,--whole-archive ../$(LIBNAME) -Wl,--no-whole-archive \
|
||||
-Wl,--retain-symbols-file=linux.def $(FEXTRALIB) $(EXTRALIB)
|
||||
$(CC) $(CFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK.
|
||||
$(FEXTRALIB) $(EXTRALIB)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK.
|
||||
rm -f linktest
|
||||
|
||||
endif
|
||||
@@ -143,15 +159,15 @@ ifeq ($(OSNAME), OSF1)
|
||||
so : ../$(LIBSONAME)
|
||||
|
||||
../$(LIBSONAME) :
|
||||
$(CC) -shared -o ../$(LIBSONAME) ../$(LIBNAME)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) ../$(LIBNAME)
|
||||
endif
|
||||
|
||||
ifeq ($(OSNAME), SunOS)
|
||||
|
||||
so : ../$(LIBSONAME)
|
||||
$(CC) $(CFLAGS) -shared -o ../$(LIBSONAME) \
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \
|
||||
-Wl,--whole-archive ../$(LIBNAME) -Wl,--no-whole-archive $(EXTRALIB)
|
||||
$(CC) $(CFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK.
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK.
|
||||
rm -f linktest
|
||||
|
||||
endif
|
||||
@@ -182,23 +198,23 @@ static : ../$(LIBNAME)
|
||||
rm -f goto.$(SUFFIX)
|
||||
|
||||
linux.def : gensymbol ../Makefile.system ../getarch.c
|
||||
perl ./gensymbol linux $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > $(@F)
|
||||
perl ./gensymbol linux $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) > $(@F)
|
||||
|
||||
osx.def : gensymbol ../Makefile.system ../getarch.c
|
||||
perl ./gensymbol osx $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > $(@F)
|
||||
perl ./gensymbol osx $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) > $(@F)
|
||||
|
||||
aix.def : gensymbol ../Makefile.system ../getarch.c
|
||||
perl ./gensymbol aix $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > $(@F)
|
||||
perl ./gensymbol aix $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) > $(@F)
|
||||
|
||||
symbol.S : gensymbol
|
||||
perl ./gensymbol win2kasm noarch dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > symbol.S
|
||||
perl ./gensymbol win2kasm noarch dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) > symbol.S
|
||||
|
||||
test : linktest.c
|
||||
$(CC) $(CFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) -lm && echo OK.
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) -lm && echo OK.
|
||||
rm -f linktest
|
||||
|
||||
linktest.c : gensymbol ../Makefile.system ../getarch.c
|
||||
perl ./gensymbol linktest $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > linktest.c
|
||||
perl ./gensymbol linktest $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) > linktest.c
|
||||
|
||||
clean ::
|
||||
@rm -f *.def *.dylib __.SYMDEF*
|
||||
|
||||
4125
exports/gensymbol
4125
exports/gensymbol
File diff suppressed because it is too large
Load Diff
23
f_check
23
f_check
@@ -24,7 +24,7 @@ $compiler = "" if $compiler eq "f77";
|
||||
|
||||
if ($compiler eq "") {
|
||||
|
||||
@lists = ("f77", "g77", "g95", "gfortran", "frt", "fort", "openf90", "openf95",
|
||||
@lists = ("g77", "g95", "gfortran", "frt", "fort", "openf90", "openf95",
|
||||
"sunf77", "sunf90", "sunf95",
|
||||
"xlf95", "xlf90", "xlf",
|
||||
"ppuf77", "ppuf95", "ppuf90", "ppuxlf",
|
||||
@@ -114,6 +114,12 @@ if ($compiler eq "") {
|
||||
$vendor = IBM;
|
||||
$openmp = "-openmp";
|
||||
}
|
||||
|
||||
# for embeded underscore name, e.g. zho_ge, it may append 2 underscores.
|
||||
$data = `$compiler -O2 -S ftest3.f > /dev/null 2>&1 && cat ftest3.s && rm -f ftest3.s`;
|
||||
if ($data =~ /zho_ge__/) {
|
||||
$need2bu = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ($vendor eq "") {
|
||||
@@ -245,6 +251,8 @@ if ($link ne "") {
|
||||
|
||||
$link =~ s/\-rpath\s+/\-rpath\@/g;
|
||||
|
||||
$link =~ s/\-rpath-link\s+/\-rpath-link\@/g;
|
||||
|
||||
@flags = split(/[\s\,\n]/, $link);
|
||||
# remove leading and trailing quotes from each flag.
|
||||
@flags = map {s/^['"]|['"]$//g; $_} @flags;
|
||||
@@ -265,7 +273,15 @@ if ($link ne "") {
|
||||
$linker_L .= "-Wl,". $flags . " ";
|
||||
}
|
||||
|
||||
if ($flags =~ /^\-rpath/) {
|
||||
if ($flags =~ /^\-rpath\@/) {
|
||||
$flags =~ s/\@/\,/g;
|
||||
if ($vendor eq "PGI") {
|
||||
$flags =~ s/lib$/libso/;
|
||||
}
|
||||
$linker_L .= "-Wl,". $flags . " " ;
|
||||
}
|
||||
|
||||
if ($flags =~ /^\-rpath-link\@/) {
|
||||
$flags =~ s/\@/\,/g;
|
||||
if ($vendor eq "PGI") {
|
||||
$flags =~ s/lib$/libso/;
|
||||
@@ -309,6 +325,9 @@ print MAKEFILE "NOFORTRAN=1\n" if $nofortran == 1;
|
||||
|
||||
print CONFFILE "#define BUNDERSCORE\t$bu\n" if $bu ne "";
|
||||
print CONFFILE "#define NEEDBUNDERSCORE\t1\n" if $bu ne "";
|
||||
print CONFFILE "#define NEED2UNDERSCORES\t1\n" if $need2bu ne "";
|
||||
|
||||
print MAKEFILE "NEED2UNDERSCORES=1\n" if $need2bu ne "";
|
||||
|
||||
if (($linker_l ne "") || ($linker_a ne "")) {
|
||||
print MAKEFILE "FEXTRALIB=$linker_L $linker_l $linker_a\n";
|
||||
|
||||
6
ftest3.f
Normal file
6
ftest3.f
Normal file
@@ -0,0 +1,6 @@
|
||||
double complex function zho_ge()
|
||||
|
||||
zho_ge = (0.0d0,0.0d0)
|
||||
|
||||
return
|
||||
end
|
||||
137
getarch.c
137
getarch.c
@@ -83,6 +83,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#endif
|
||||
#ifdef linux
|
||||
#include <sys/sysinfo.h>
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
/* #define FORCE_P2 */
|
||||
@@ -96,14 +97,17 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
/* #define FORCE_PENRYN */
|
||||
/* #define FORCE_DUNNINGTON */
|
||||
/* #define FORCE_NEHALEM */
|
||||
/* #define FORCE_SANDYBRIDGE */
|
||||
/* #define FORCE_ATOM */
|
||||
/* #define FORCE_ATHLON */
|
||||
/* #define FORCE_OPTERON */
|
||||
/* #define FORCE_OPTERON_SSE3 */
|
||||
/* #define FORCE_BARCELONA */
|
||||
/* #define FORCE_SHANGHAI */
|
||||
/* #define FORCE_ISTANBUL */
|
||||
/* #define FORCE_BOBCAT */
|
||||
/* #define FORCE_BULLDOZER */
|
||||
/* #define FORCE_BOBCAT */
|
||||
/* #define FORCE_PILEDRIVER */
|
||||
/* #define FORCE_SSE_GENERIC */
|
||||
/* #define FORCE_VIAC3 */
|
||||
/* #define FORCE_NANO */
|
||||
@@ -118,12 +122,12 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
/* #define FORCE_PPC440FP2 */
|
||||
/* #define FORCE_CELL */
|
||||
/* #define FORCE_SICORTEX */
|
||||
/* #define FORCE_LOONGSON3A */
|
||||
/* #define FORCE_LOONGSON3B */
|
||||
/* #define FORCE_LOONGSON3A */
|
||||
/* #define FORCE_LOONGSON3B */
|
||||
/* #define FORCE_ITANIUM2 */
|
||||
/* #define FORCE_GENERIC */
|
||||
/* #define FORCE_SPARC */
|
||||
/* #define FORCE_SPARCV7 */
|
||||
/* #define FORCE_GENERIC */
|
||||
|
||||
#ifdef FORCE_P2
|
||||
#define FORCE
|
||||
@@ -139,20 +143,6 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#define CORENAME "P5"
|
||||
#endif
|
||||
|
||||
#ifdef FORCE_COPPERMINE
|
||||
#define FORCE
|
||||
#define FORCE_INTEL
|
||||
#define ARCHITECTURE "X86"
|
||||
#define SUBARCHITECTURE "PENTIUM3"
|
||||
#define ARCHCONFIG "-DPENTIUM3 " \
|
||||
"-DL1_DATA_SIZE=16384 -DL1_DATA_LINESIZE=32 " \
|
||||
"-DL2_SIZE=262144 -DL2_LINESIZE=32 " \
|
||||
"-DDTB_DEFAULT_ENTRIES=64 -DDTB_SIZE=4096 " \
|
||||
"-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE "
|
||||
#define LIBNAME "coppermine"
|
||||
#define CORENAME "COPPERMINE"
|
||||
#endif
|
||||
|
||||
#ifdef FORCE_KATMAI
|
||||
#define FORCE
|
||||
#define FORCE_INTEL
|
||||
@@ -167,6 +157,20 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#define CORENAME "KATMAI"
|
||||
#endif
|
||||
|
||||
#ifdef FORCE_COPPERMINE
|
||||
#define FORCE
|
||||
#define FORCE_INTEL
|
||||
#define ARCHITECTURE "X86"
|
||||
#define SUBARCHITECTURE "PENTIUM3"
|
||||
#define ARCHCONFIG "-DPENTIUM3 " \
|
||||
"-DL1_DATA_SIZE=16384 -DL1_DATA_LINESIZE=32 " \
|
||||
"-DL2_SIZE=262144 -DL2_LINESIZE=32 " \
|
||||
"-DDTB_DEFAULT_ENTRIES=64 -DDTB_SIZE=4096 " \
|
||||
"-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE "
|
||||
#define LIBNAME "coppermine"
|
||||
#define CORENAME "COPPERMINE"
|
||||
#endif
|
||||
|
||||
#ifdef FORCE_NORTHWOOD
|
||||
#define FORCE
|
||||
#define FORCE_INTEL
|
||||
@@ -294,6 +298,21 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#define CORENAME "SANDYBRIDGE"
|
||||
#endif
|
||||
|
||||
#ifdef FORCE_HASWELL
|
||||
#define FORCE
|
||||
#define FORCE_INTEL
|
||||
#define ARCHITECTURE "X86"
|
||||
#define SUBARCHITECTURE "HASWELL"
|
||||
#define ARCHCONFIG "-DHASWELL " \
|
||||
"-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=64 " \
|
||||
"-DL2_SIZE=262144 -DL2_LINESIZE=64 " \
|
||||
"-DDTB_DEFAULT_ENTRIES=64 -DDTB_SIZE=4096 " \
|
||||
"-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2 -DHAVE_SSE3 -DHAVE_SSSE3 -DHAVE_SSE4_1 -DHAVE_SSE4_2 -DHAVE_AVX " \
|
||||
"-DFMA3"
|
||||
#define LIBNAME "haswell"
|
||||
#define CORENAME "HASWELL"
|
||||
#endif
|
||||
|
||||
#ifdef FORCE_ATOM
|
||||
#define FORCE
|
||||
#define FORCE_INTEL
|
||||
@@ -396,6 +415,22 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#define CORENAME "BULLDOZER"
|
||||
#endif
|
||||
|
||||
#if defined (FORCE_PILEDRIVER)
|
||||
#define FORCE
|
||||
#define FORCE_INTEL
|
||||
#define ARCHITECTURE "X86"
|
||||
#define SUBARCHITECTURE "PILEDRIVER"
|
||||
#define ARCHCONFIG "-DPILEDRIVER " \
|
||||
"-DL1_DATA_SIZE=16384 -DL1_DATA_LINESIZE=64 " \
|
||||
"-DL2_SIZE=2097152 -DL2_LINESIZE=64 -DL3_SIZE=12582912 " \
|
||||
"-DDTB_DEFAULT_ENTRIES=64 -DDTB_SIZE=4096 " \
|
||||
"-DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2 -DHAVE_SSE3 -DHAVE_SSE4_1 -DHAVE_SSE4_2 " \
|
||||
"-DHAVE_SSE4A -DHAVE_MISALIGNSSE -DHAVE_128BITFPU -DHAVE_FASTMOVU -DHAVE_CFLUSH " \
|
||||
"-DHAVE_AVX -DHAVE_FMA4 -DHAVE_FMA3"
|
||||
#define LIBNAME "piledriver"
|
||||
#define CORENAME "PILEDRIVER"
|
||||
#endif
|
||||
|
||||
#ifdef FORCE_SSE_GENERIC
|
||||
#define FORCE
|
||||
#define FORCE_INTEL
|
||||
@@ -659,6 +694,52 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#define CORENAME "generic"
|
||||
#endif
|
||||
|
||||
#ifdef FORCE_ARMV7
|
||||
#define FORCE
|
||||
#define ARCHITECTURE "ARM"
|
||||
#define SUBARCHITECTURE "ARMV7"
|
||||
#define SUBDIRNAME "arm"
|
||||
#define ARCHCONFIG "-DARMV7 " \
|
||||
"-DL1_DATA_SIZE=65536 -DL1_DATA_LINESIZE=32 " \
|
||||
"-DL2_SIZE=512488 -DL2_LINESIZE=32 " \
|
||||
"-DDTB_DEFAULT_ENTRIES=64 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=4 " \
|
||||
"-DHAVE_VFPV3 -DHAVE_VFP"
|
||||
#define LIBNAME "armv7"
|
||||
#define CORENAME "ARMV7"
|
||||
#else
|
||||
#endif
|
||||
|
||||
#ifdef FORCE_ARMV6
|
||||
#define FORCE
|
||||
#define ARCHITECTURE "ARM"
|
||||
#define SUBARCHITECTURE "ARMV6"
|
||||
#define SUBDIRNAME "arm"
|
||||
#define ARCHCONFIG "-DARMV6 " \
|
||||
"-DL1_DATA_SIZE=65536 -DL1_DATA_LINESIZE=32 " \
|
||||
"-DL2_SIZE=512488 -DL2_LINESIZE=32 " \
|
||||
"-DDTB_DEFAULT_ENTRIES=64 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=4 " \
|
||||
"-DHAVE_VFP"
|
||||
#define LIBNAME "armv6"
|
||||
#define CORENAME "ARMV6"
|
||||
#else
|
||||
#endif
|
||||
|
||||
#ifdef FORCE_ARMV8
|
||||
#define FORCE
|
||||
#define ARCHITECTURE "ARM64"
|
||||
#define SUBARCHITECTURE "ARMV8"
|
||||
#define SUBDIRNAME "arm64"
|
||||
#define ARCHCONFIG "-DARMV8 " \
|
||||
"-DL1_DATA_SIZE=65536 -DL1_DATA_LINESIZE=32 " \
|
||||
"-DL2_SIZE=512488 -DL2_LINESIZE=32 " \
|
||||
"-DDTB_DEFAULT_ENTRIES=64 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=4 " \
|
||||
"-DHAVE_VFP -DHAVE_VFPV3 -DHAVE_VFPV4"
|
||||
#define LIBNAME "armv8"
|
||||
#define CORENAME "ARMV8"
|
||||
#else
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef FORCE
|
||||
|
||||
#if defined(__powerpc__) || defined(__powerpc) || defined(powerpc) || \
|
||||
@@ -699,6 +780,12 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#define OPENBLAS_SUPPORTED
|
||||
#endif
|
||||
|
||||
#ifdef __arm__
|
||||
#include "cpuid_arm.c"
|
||||
#define OPENBLAS_SUPPORTED
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef OPENBLAS_SUPPORTED
|
||||
#error "This arch/CPU is not supported by OpenBLAS."
|
||||
#endif
|
||||
@@ -717,7 +804,8 @@ static int get_num_cores(void) {
|
||||
#endif
|
||||
|
||||
#ifdef linux
|
||||
return get_nprocs();
|
||||
//returns the number of processors which are currently online
|
||||
return sysconf(_SC_NPROCESSORS_ONLN);
|
||||
|
||||
#elif defined(OS_WINDOWS)
|
||||
|
||||
@@ -752,7 +840,7 @@ int main(int argc, char *argv[]){
|
||||
#ifdef FORCE
|
||||
printf("CORE=%s\n", CORENAME);
|
||||
#else
|
||||
#if defined(__i386__) || defined(__x86_64__) || defined(POWER) || defined(__mips__)
|
||||
#if defined(__i386__) || defined(__x86_64__) || defined(POWER) || defined(__mips__) || defined(__arm__)
|
||||
printf("CORE=%s\n", get_corename());
|
||||
#endif
|
||||
#endif
|
||||
@@ -767,6 +855,11 @@ int main(int argc, char *argv[]){
|
||||
|
||||
printf("NUM_CORES=%d\n", get_num_cores());
|
||||
|
||||
#if defined(__arm__) && !defined(FORCE)
|
||||
get_features();
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
#ifndef FORCE
|
||||
get_sse();
|
||||
@@ -802,8 +895,12 @@ int main(int argc, char *argv[]){
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if NO_PARALLEL_MAKE==1
|
||||
printf("MAKE += -j 1\n");
|
||||
#else
|
||||
#ifndef OS_WINDOWS
|
||||
printf("MAKE += -j %d\n", get_num_cores());
|
||||
#endif
|
||||
#endif
|
||||
|
||||
break;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
|
||||
if ((argc < 1) || (*argv[1] == '0')) {
|
||||
if ( (argc <= 1) || ((argc >= 2) && (*argv[1] == '0'))) {
|
||||
printf("SGEMM_UNROLL_M=%d\n", SGEMM_DEFAULT_UNROLL_M);
|
||||
printf("SGEMM_UNROLL_N=%d\n", SGEMM_DEFAULT_UNROLL_N);
|
||||
printf("DGEMM_UNROLL_M=%d\n", DGEMM_DEFAULT_UNROLL_M);
|
||||
@@ -22,10 +22,48 @@ int main(int argc, char **argv) {
|
||||
printf("ZGEMM_UNROLL_N=%d\n", ZGEMM_DEFAULT_UNROLL_N);
|
||||
printf("XGEMM_UNROLL_M=%d\n", XGEMM_DEFAULT_UNROLL_M);
|
||||
printf("XGEMM_UNROLL_N=%d\n", XGEMM_DEFAULT_UNROLL_N);
|
||||
|
||||
#ifdef CGEMM3M_DEFAULT_UNROLL_M
|
||||
printf("CGEMM3M_UNROLL_M=%d\n", CGEMM3M_DEFAULT_UNROLL_M);
|
||||
#else
|
||||
printf("CGEMM3M_UNROLL_M=%d\n", SGEMM_DEFAULT_UNROLL_M);
|
||||
#endif
|
||||
|
||||
#ifdef CGEMM3M_DEFAULT_UNROLL_N
|
||||
printf("CGEMM3M_UNROLL_N=%d\n", CGEMM3M_DEFAULT_UNROLL_N);
|
||||
#else
|
||||
printf("CGEMM3M_UNROLL_N=%d\n", SGEMM_DEFAULT_UNROLL_N);
|
||||
#endif
|
||||
|
||||
#ifdef ZGEMM3M_DEFAULT_UNROLL_M
|
||||
printf("ZGEMM3M_UNROLL_M=%d\n", ZGEMM3M_DEFAULT_UNROLL_M);
|
||||
#else
|
||||
printf("ZGEMM3M_UNROLL_M=%d\n", DGEMM_DEFAULT_UNROLL_M);
|
||||
#endif
|
||||
|
||||
#ifdef ZGEMM3M_DEFAULT_UNROLL_N
|
||||
printf("ZGEMM3M_UNROLL_N=%d\n", ZGEMM3M_DEFAULT_UNROLL_N);
|
||||
#else
|
||||
printf("ZGEMM3M_UNROLL_N=%d\n", DGEMM_DEFAULT_UNROLL_N);
|
||||
#endif
|
||||
|
||||
#ifdef XGEMM3M_DEFAULT_UNROLL_M
|
||||
printf("XGEMM3M_UNROLL_M=%d\n", ZGEMM3M_DEFAULT_UNROLL_M);
|
||||
#else
|
||||
printf("XGEMM3M_UNROLL_M=%d\n", QGEMM_DEFAULT_UNROLL_M);
|
||||
#endif
|
||||
|
||||
#ifdef XGEMM3M_DEFAULT_UNROLL_N
|
||||
printf("XGEMM3M_UNROLL_N=%d\n", ZGEMM3M_DEFAULT_UNROLL_N);
|
||||
#else
|
||||
printf("XGEMM3M_UNROLL_N=%d\n", QGEMM_DEFAULT_UNROLL_N);
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
if ((argc >= 1) && (*argv[1] == '1')) {
|
||||
if ((argc >= 2) && (*argv[1] == '1')) {
|
||||
printf("#define SLOCAL_BUFFER_SIZE\t%ld\n", (SGEMM_DEFAULT_Q * SGEMM_DEFAULT_UNROLL_N * 4 * 1 * sizeof(float)));
|
||||
printf("#define DLOCAL_BUFFER_SIZE\t%ld\n", (DGEMM_DEFAULT_Q * DGEMM_DEFAULT_UNROLL_N * 2 * 1 * sizeof(double)));
|
||||
printf("#define CLOCAL_BUFFER_SIZE\t%ld\n", (CGEMM_DEFAULT_Q * CGEMM_DEFAULT_UNROLL_N * 4 * 2 * sizeof(float)));
|
||||
|
||||
@@ -786,7 +786,7 @@ endif
|
||||
|
||||
qgemv.$(SUFFIX) qgemv.$(PSUFFIX): gemv.c
|
||||
$(CC) -c $(CFLAGS) -o $(@F) $<
|
||||
|
||||
|
||||
ifndef USE_NETLIB_GEMV
|
||||
cgemv.$(SUFFIX) cgemv.$(PSUFFIX): zgemv.c
|
||||
$(CC) -c $(CFLAGS) -o $(@F) $<
|
||||
|
||||
@@ -71,6 +71,10 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef GEMM_MULTITHREAD_THRESHOLD
|
||||
# define GEMM_MULTITHREAD_THRESHOLD 4
|
||||
#endif
|
||||
|
||||
static int (*gemm[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = {
|
||||
#ifndef GEMM3M
|
||||
GEMM_NN, GEMM_TN, GEMM_RN, GEMM_CN,
|
||||
|
||||
@@ -60,6 +60,7 @@ static blasint (*trtri_parallel[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
int NAME(char *UPLO, char *DIAG, blasint *N, FLOAT *a, blasint *ldA, blasint *Info){
|
||||
|
||||
blas_arg_t args;
|
||||
@@ -83,6 +84,7 @@ int NAME(char *UPLO, char *DIAG, blasint *N, FLOAT *a, blasint *ldA, blasint *In
|
||||
TOUPPER(uplo_arg);
|
||||
TOUPPER(diag_arg);
|
||||
|
||||
|
||||
uplo = -1;
|
||||
if (uplo_arg == 'U') uplo = 0;
|
||||
if (uplo_arg == 'L') uplo = 1;
|
||||
@@ -90,6 +92,7 @@ int NAME(char *UPLO, char *DIAG, blasint *N, FLOAT *a, blasint *ldA, blasint *In
|
||||
if (diag_arg == 'U') diag = 0;
|
||||
if (diag_arg == 'N') diag = 1;
|
||||
|
||||
|
||||
info = 0;
|
||||
if (args.lda < MAX(1,args.n)) info = 5;
|
||||
if (args.n < 0) info = 3;
|
||||
|
||||
@@ -388,7 +388,7 @@ $(KDIR)xgerv_k$(TSUFFIX).$(SUFFIX) $(KDIR)xgerv_k$(TSUFFIX).$(PSUFFIX) : $(KER
|
||||
$(CC) -c $(CFLAGS) -DXDOUBLE -UCONJ -DXCONJ $< -o $@
|
||||
|
||||
$(KDIR)xgerd_k$(TSUFFIX).$(SUFFIX) $(KDIR)xgerd_k$(TSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(XGERCKERNEL) $(XGERPARAM)
|
||||
$(CC) -c $(CFLAGS) -DXDOUBLE -DCONJ-DXCONJ $< -o $@
|
||||
$(CC) -c $(CFLAGS) -DXDOUBLE -DCONJ -DXCONJ $< -o $@
|
||||
|
||||
$(KDIR)chemv_U$(TSUFFIX).$(SUFFIX) $(KDIR)chemv_U$(TSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(CHEMV_U_KERNEL) $(CHEMV_U_PARAM)
|
||||
$(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE -ULOWER -DHEMV $< -o $@
|
||||
|
||||
@@ -14,6 +14,20 @@ ifeq ($(ARCH), MIPS)
|
||||
USE_GEMM3M = 1
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH), arm)
|
||||
USE_TRMM = 1
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH), arm64)
|
||||
USE_TRMM = 1
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET), LOONGSON3B)
|
||||
USE_TRMM = 1
|
||||
endif
|
||||
|
||||
|
||||
|
||||
SKERNELOBJS += \
|
||||
sgemm_kernel$(TSUFFIX).$(SUFFIX) \
|
||||
$(SGEMMINCOPYOBJ) $(SGEMMITCOPYOBJ) \
|
||||
@@ -498,7 +512,8 @@ $(KDIR)xgemm_kernel_r$(TSUFFIX).$(SUFFIX) : $(KERNELDIR)/$(XGEMMKERNEL) $(XGEMMD
|
||||
$(KDIR)xgemm_kernel_b$(TSUFFIX).$(SUFFIX) : $(KERNELDIR)/$(XGEMMKERNEL) $(XGEMMDEPEND)
|
||||
$(CC) $(CFLAGS) -c -DXDOUBLE -DCOMPLEX -DCC $< -o $@
|
||||
|
||||
ifeq ($(TARGET), LOONGSON3B)
|
||||
|
||||
ifdef USE_TRMM
|
||||
$(KDIR)strmm_kernel_LN$(TSUFFIX).$(SUFFIX) : $(KERNELDIR)/$(STRMMKERNEL)
|
||||
$(CC) $(CFLAGS) -c -DTRMMKERNEL -UDOUBLE -UCOMPLEX -DLEFT -UTRANSA $< -o $@
|
||||
|
||||
@@ -668,6 +683,9 @@ $(KDIR)ztrmm_kernel_RC$(TSUFFIX).$(SUFFIX) : $(KERNELDIR)/$(ZGEMMKERNEL)
|
||||
$(CC) $(CFLAGS) -c -DTRMMKERNEL -DDOUBLE -DCOMPLEX -ULEFT -DTRANSA -DCONJ -DNC $< -o $@
|
||||
endif
|
||||
|
||||
|
||||
|
||||
|
||||
$(KDIR)xtrmm_kernel_LN$(TSUFFIX).$(SUFFIX) : $(KERNELDIR)/$(XGEMMKERNEL)
|
||||
$(CC) $(CFLAGS) -c -DTRMMKERNEL -DXDOUBLE -DCOMPLEX -DLEFT -UTRANSA -UCONJ -DNN $< -o $@
|
||||
|
||||
@@ -1206,328 +1224,328 @@ $(KDIR)xhemm_iutcopy$(TSUFFIX).$(SUFFIX) : generic/zhemm_utcopy_$(XGEMM_UNROLL_M
|
||||
$(KDIR)xhemm_iltcopy$(TSUFFIX).$(SUFFIX) : generic/zhemm_ltcopy_$(XGEMM_UNROLL_M).c
|
||||
$(CC) -c $(CFLAGS) $(NO_UNINITIALIZED_WARN) -DXDOUBLE -DCOMPLEX -UOUTER $< -DLOWER -o $@
|
||||
|
||||
$(KDIR)cgemm3m_oncopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)cgemm3m_oncopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_oncopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)cgemm3m_oncopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_oncopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)cgemm3m_oncopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_otcopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)cgemm3m_otcopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_otcopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)cgemm3m_otcopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_otcopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)cgemm3m_otcopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_incopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)cgemm3m_incopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -UDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_incopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)cgemm3m_incopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -UDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_incopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)cgemm3m_incopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -UDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_itcopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)cgemm3m_itcopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -UDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_itcopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)cgemm3m_itcopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -UDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_itcopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)cgemm3m_itcopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -UDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_oncopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zgemm3m_oncopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_oncopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zgemm3m_oncopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_oncopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zgemm3m_oncopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_otcopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zgemm3m_otcopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_otcopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zgemm3m_otcopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_otcopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zgemm3m_otcopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_incopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zgemm3m_incopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -DDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_incopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zgemm3m_incopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -DDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_incopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zgemm3m_incopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -DDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_itcopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zgemm3m_itcopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -DDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_itcopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zgemm3m_itcopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -DDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_itcopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zgemm3m_itcopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -DDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_oncopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xgemm3m_oncopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_oncopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xgemm3m_oncopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_oncopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xgemm3m_oncopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_otcopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xgemm3m_otcopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_otcopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xgemm3m_otcopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_otcopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xgemm3m_otcopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_incopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xgemm3m_incopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -DXDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_incopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xgemm3m_incopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -DXDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_incopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xgemm3m_incopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_ncopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -DXDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_itcopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xgemm3m_itcopyb$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -DXDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_itcopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xgemm3m_itcopyr$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -DXDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_itcopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xgemm3m_itcopyi$(TSUFFIX).$(SUFFIX) : generic/zgemm3m_tcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) -c -DXDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_oucopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)csymm3m_oucopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_olcopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)csymm3m_olcopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_oucopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)csymm3m_oucopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_olcopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)csymm3m_olcopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_oucopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)csymm3m_oucopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_olcopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)csymm3m_olcopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_iucopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)csymm3m_iucopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_ilcopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)csymm3m_ilcopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_iucopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)csymm3m_iucopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_ilcopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)csymm3m_ilcopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_iucopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)csymm3m_iucopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_ilcopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)csymm3m_ilcopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_oucopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zsymm3m_oucopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_olcopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zsymm3m_olcopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_oucopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zsymm3m_oucopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_olcopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zsymm3m_olcopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_oucopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zsymm3m_oucopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_olcopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zsymm3m_olcopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_iucopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zsymm3m_iucopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_ilcopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zsymm3m_ilcopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_iucopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zsymm3m_iucopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_ilcopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zsymm3m_ilcopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_iucopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zsymm3m_iucopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_ilcopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zsymm3m_ilcopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_oucopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xsymm3m_oucopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_olcopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xsymm3m_olcopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_oucopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xsymm3m_oucopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_olcopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xsymm3m_olcopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_oucopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xsymm3m_oucopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_olcopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xsymm3m_olcopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_iucopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xsymm3m_iucopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_ilcopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xsymm3m_ilcopyb$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_iucopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xsymm3m_iucopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_ilcopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xsymm3m_ilcopyr$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_iucopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xsymm3m_iucopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_ucopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_ilcopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xsymm3m_ilcopyi$(TSUFFIX).$(SUFFIX) : generic/zsymm3m_lcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_oucopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)chemm3m_oucopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_olcopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)chemm3m_olcopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_oucopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)chemm3m_oucopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_olcopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)chemm3m_olcopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_oucopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)chemm3m_oucopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_olcopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)chemm3m_olcopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_iucopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)chemm3m_iucopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_ilcopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)chemm3m_ilcopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_iucopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)chemm3m_iucopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_ilcopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)chemm3m_ilcopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_iucopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)chemm3m_iucopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_ilcopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)chemm3m_ilcopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_oucopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zhemm3m_oucopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_olcopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zhemm3m_olcopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_oucopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zhemm3m_oucopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_olcopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zhemm3m_olcopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_oucopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zhemm3m_oucopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_olcopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zhemm3m_olcopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_iucopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zhemm3m_iucopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_ilcopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zhemm3m_ilcopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_iucopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zhemm3m_iucopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_ilcopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zhemm3m_ilcopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_iucopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zhemm3m_iucopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_ilcopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zhemm3m_ilcopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_oucopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xhemm3m_oucopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_olcopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xhemm3m_olcopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_oucopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xhemm3m_oucopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_olcopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xhemm3m_olcopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_oucopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xhemm3m_oucopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_olcopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xhemm3m_olcopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_iucopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xhemm3m_iucopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_ilcopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xhemm3m_ilcopyb$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_iucopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xhemm3m_iucopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_ilcopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xhemm3m_ilcopyr$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_iucopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xhemm3m_iucopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_ucopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_ilcopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xhemm3m_ilcopyi$(TSUFFIX).$(SUFFIX) : generic/zhemm3m_lcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(CFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)strsm_iunucopy$(TSUFFIX).$(SUFFIX) : generic/trsm_uncopy_$(SGEMM_UNROLL_M).c
|
||||
@@ -2608,328 +2626,328 @@ $(KDIR)xhemm_iutcopy$(TSUFFIX).$(PSUFFIX) : generic/zhemm_utcopy_$(XGEMM_UNROLL_
|
||||
$(KDIR)xhemm_iltcopy$(TSUFFIX).$(PSUFFIX) : generic/zhemm_ltcopy_$(XGEMM_UNROLL_M).c
|
||||
$(CC) -c $(PFLAGS) $(NO_UNINITIALIZED_WARN) -DXDOUBLE -DCOMPLEX -UOUTER $< -DLOWER -o $@
|
||||
|
||||
$(KDIR)cgemm3m_oncopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)cgemm3m_oncopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_oncopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)cgemm3m_oncopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_oncopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)cgemm3m_oncopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_otcopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)cgemm3m_otcopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_otcopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)cgemm3m_otcopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_otcopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)cgemm3m_otcopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_incopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)cgemm3m_incopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -UDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_incopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)cgemm3m_incopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -UDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_incopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)cgemm3m_incopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -UDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_itcopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)cgemm3m_itcopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -UDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_itcopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)cgemm3m_itcopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -UDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)cgemm3m_itcopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)cgemm3m_itcopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -UDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_oncopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zgemm3m_oncopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_oncopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zgemm3m_oncopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_oncopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zgemm3m_oncopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_otcopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zgemm3m_otcopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_otcopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zgemm3m_otcopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_otcopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zgemm3m_otcopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_incopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zgemm3m_incopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -DDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_incopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zgemm3m_incopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -DDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_incopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zgemm3m_incopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -DDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_itcopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zgemm3m_itcopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -DDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_itcopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zgemm3m_itcopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -DDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zgemm3m_itcopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zgemm3m_itcopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -DDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_oncopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xgemm3m_oncopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_oncopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xgemm3m_oncopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_oncopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xgemm3m_oncopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_otcopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xgemm3m_otcopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_otcopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xgemm3m_otcopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_otcopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xgemm3m_otcopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_incopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xgemm3m_incopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -DXDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_incopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xgemm3m_incopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -DXDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_incopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xgemm3m_incopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_ncopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -DXDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_itcopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xgemm3m_itcopyb$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -DXDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_itcopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xgemm3m_itcopyr$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -DXDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xgemm3m_itcopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xgemm3m_itcopyi$(TSUFFIX).$(PSUFFIX) : generic/zgemm3m_tcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) -c -DXDOUBLE -DCOMPLEX -DICOPY -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_oucopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)csymm3m_oucopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_olcopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)csymm3m_olcopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_oucopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)csymm3m_oucopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_olcopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)csymm3m_olcopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_oucopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)csymm3m_oucopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_olcopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)csymm3m_olcopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_iucopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)csymm3m_iucopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_ilcopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)csymm3m_ilcopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_iucopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)csymm3m_iucopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_ilcopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)csymm3m_ilcopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_iucopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)csymm3m_iucopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)csymm3m_ilcopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)csymm3m_ilcopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_oucopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zsymm3m_oucopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_olcopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zsymm3m_olcopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_oucopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zsymm3m_oucopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_olcopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zsymm3m_olcopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_oucopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zsymm3m_oucopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_olcopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zsymm3m_olcopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_iucopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zsymm3m_iucopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_ilcopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zsymm3m_ilcopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_iucopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zsymm3m_iucopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_ilcopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zsymm3m_ilcopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_iucopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zsymm3m_iucopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zsymm3m_ilcopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zsymm3m_ilcopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_oucopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xsymm3m_oucopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_olcopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xsymm3m_olcopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_oucopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xsymm3m_oucopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_olcopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xsymm3m_olcopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_oucopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xsymm3m_oucopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_olcopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xsymm3m_olcopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_iucopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xsymm3m_iucopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_ilcopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xsymm3m_ilcopyb$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_iucopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xsymm3m_iucopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_ilcopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xsymm3m_ilcopyr$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_iucopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xsymm3m_iucopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_ucopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xsymm3m_ilcopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xsymm3m_ilcopyi$(TSUFFIX).$(PSUFFIX) : generic/zsymm3m_lcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_oucopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)chemm3m_oucopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_olcopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)chemm3m_olcopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_oucopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)chemm3m_oucopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_olcopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)chemm3m_olcopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_oucopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)chemm3m_oucopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_olcopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(SGEMM_UNROLL_N).c
|
||||
$(KDIR)chemm3m_olcopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(CGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_iucopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)chemm3m_iucopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_ilcopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)chemm3m_ilcopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_iucopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)chemm3m_iucopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_ilcopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)chemm3m_ilcopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_iucopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)chemm3m_iucopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)chemm3m_ilcopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(SGEMM_UNROLL_M).c
|
||||
$(KDIR)chemm3m_ilcopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(CGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -UDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_oucopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zhemm3m_oucopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_olcopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zhemm3m_olcopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_oucopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zhemm3m_oucopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_olcopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zhemm3m_olcopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_oucopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zhemm3m_oucopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_olcopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(DGEMM_UNROLL_N).c
|
||||
$(KDIR)zhemm3m_olcopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(ZGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_iucopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zhemm3m_iucopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_ilcopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zhemm3m_ilcopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_iucopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zhemm3m_iucopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_ilcopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zhemm3m_ilcopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_iucopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zhemm3m_iucopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)zhemm3m_ilcopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(DGEMM_UNROLL_M).c
|
||||
$(KDIR)zhemm3m_ilcopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(ZGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_oucopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xhemm3m_oucopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_olcopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xhemm3m_olcopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_oucopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xhemm3m_oucopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_olcopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xhemm3m_olcopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_oucopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xhemm3m_oucopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_olcopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(QGEMM_UNROLL_N).c
|
||||
$(KDIR)xhemm3m_olcopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(XGEMM3M_UNROLL_N).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -DUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_iucopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xhemm3m_iucopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_ilcopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xhemm3m_ilcopyb$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_iucopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xhemm3m_iucopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_ilcopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xhemm3m_ilcopyr$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DREAL_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_iucopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xhemm3m_iucopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_ucopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)xhemm3m_ilcopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(QGEMM_UNROLL_M).c
|
||||
$(KDIR)xhemm3m_ilcopyi$(TSUFFIX).$(PSUFFIX) : generic/zhemm3m_lcopy_$(XGEMM3M_UNROLL_M).c
|
||||
$(CC) $(PFLAGS) $(NO_UNINITIALIZED_WARN) -c -DXDOUBLE -DCOMPLEX -UUSE_ALPHA -DIMAGE_ONLY $< -o $@
|
||||
|
||||
$(KDIR)strsm_iunucopy$(TSUFFIX).$(PSUFFIX) : generic/trsm_uncopy_$(SGEMM_UNROLL_M).c
|
||||
|
||||
46
kernel/arm/KERNEL
Normal file
46
kernel/arm/KERNEL
Normal file
@@ -0,0 +1,46 @@
|
||||
ifndef SNRM2KERNEL
|
||||
SNRM2KERNEL = nrm2.c
|
||||
endif
|
||||
|
||||
ifndef DNRM2KERNEL
|
||||
DNRM2KERNEL = nrm2.c
|
||||
endif
|
||||
|
||||
ifndef CNRM2KERNEL
|
||||
CNRM2KERNEL = znrm2.c
|
||||
endif
|
||||
|
||||
ifndef ZNRM2KERNEL
|
||||
ZNRM2KERNEL = znrm2.c
|
||||
endif
|
||||
|
||||
ifndef SCABS_KERNEL
|
||||
SCABS_KERNEL = ../generic/cabs.c
|
||||
endif
|
||||
|
||||
ifndef DCABS_KERNEL
|
||||
DCABS_KERNEL = ../generic/cabs.c
|
||||
endif
|
||||
|
||||
ifndef QCABS_KERNEL
|
||||
QCABS_KERNEL = ../generic/cabs.c
|
||||
endif
|
||||
|
||||
ifndef LSAME_KERNEL
|
||||
LSAME_KERNEL = ../generic/lsame.c
|
||||
endif
|
||||
|
||||
ifndef SGEMM_BETA
|
||||
SGEMM_BETA = ../generic/gemm_beta.c
|
||||
endif
|
||||
ifndef DGEMM_BETA
|
||||
DGEMM_BETA = ../generic/gemm_beta.c
|
||||
endif
|
||||
ifndef CGEMM_BETA
|
||||
CGEMM_BETA = ../generic/zgemm_beta.c
|
||||
endif
|
||||
ifndef ZGEMM_BETA
|
||||
ZGEMM_BETA = ../generic/zgemm_beta.c
|
||||
endif
|
||||
|
||||
|
||||
142
kernel/arm/KERNEL.ARMV6
Normal file
142
kernel/arm/KERNEL.ARMV6
Normal file
@@ -0,0 +1,142 @@
|
||||
SAMAXKERNEL = iamax_vfp.S
|
||||
DAMAXKERNEL = iamax_vfp.S
|
||||
CAMAXKERNEL = iamax_vfp.S
|
||||
ZAMAXKERNEL = iamax_vfp.S
|
||||
|
||||
SAMINKERNEL = iamax_vfp.S
|
||||
DAMINKERNEL = iamax_vfp.S
|
||||
CAMINKERNEL = iamax_vfp.S
|
||||
ZAMINKERNEL = iamax_vfp.S
|
||||
|
||||
SMAXKERNEL = iamax_vfp.S
|
||||
DMAXKERNEL = iamax_vfp.S
|
||||
|
||||
SMINKERNEL = iamax_vfp.S
|
||||
DMINKERNEL = iamax_vfp.S
|
||||
|
||||
ISAMAXKERNEL = iamax_vfp.S
|
||||
IDAMAXKERNEL = iamax_vfp.S
|
||||
ICAMAXKERNEL = iamax_vfp.S
|
||||
IZAMAXKERNEL = iamax_vfp.S
|
||||
|
||||
ISAMINKERNEL = iamax_vfp.S
|
||||
IDAMINKERNEL = iamax_vfp.S
|
||||
ICAMINKERNEL = iamax_vfp.S
|
||||
IZAMINKERNEL = iamax_vfp.S
|
||||
|
||||
ISMAXKERNEL = iamax_vfp.S
|
||||
IDMAXKERNEL = iamax_vfp.S
|
||||
|
||||
ISMINKERNEL = iamax_vfp.S
|
||||
IDMINKERNEL = iamax_vfp.S
|
||||
|
||||
SASUMKERNEL = asum_vfp.S
|
||||
DASUMKERNEL = asum_vfp.S
|
||||
CASUMKERNEL = asum_vfp.S
|
||||
ZASUMKERNEL = asum_vfp.S
|
||||
|
||||
SAXPYKERNEL = axpy_vfp.S
|
||||
DAXPYKERNEL = axpy_vfp.S
|
||||
CAXPYKERNEL = axpy_vfp.S
|
||||
ZAXPYKERNEL = axpy_vfp.S
|
||||
|
||||
SCOPYKERNEL = scopy_vfp.S
|
||||
DCOPYKERNEL = dcopy_vfp.S
|
||||
CCOPYKERNEL = ccopy_vfp.S
|
||||
ZCOPYKERNEL = zcopy_vfp.S
|
||||
|
||||
SDOTKERNEL = sdot_vfp.S
|
||||
DDOTKERNEL = ddot_vfp.S
|
||||
CDOTKERNEL = cdot_vfp.S
|
||||
ZDOTKERNEL = zdot_vfp.S
|
||||
|
||||
SNRM2KERNEL = nrm2_vfp.S
|
||||
DNRM2KERNEL = nrm2_vfp.S
|
||||
CNRM2KERNEL = nrm2_vfp.S
|
||||
ZNRM2KERNEL = nrm2_vfp.S
|
||||
|
||||
SROTKERNEL = rot_vfp.S
|
||||
DROTKERNEL = rot_vfp.S
|
||||
CROTKERNEL = rot_vfp.S
|
||||
ZROTKERNEL = rot_vfp.S
|
||||
|
||||
SSCALKERNEL = scal_vfp.S
|
||||
DSCALKERNEL = scal_vfp.S
|
||||
CSCALKERNEL = scal_vfp.S
|
||||
ZSCALKERNEL = scal_vfp.S
|
||||
|
||||
SSWAPKERNEL = swap_vfp.S
|
||||
DSWAPKERNEL = swap_vfp.S
|
||||
CSWAPKERNEL = swap_vfp.S
|
||||
ZSWAPKERNEL = swap_vfp.S
|
||||
|
||||
SGEMVNKERNEL = gemv_n_vfp.S
|
||||
DGEMVNKERNEL = gemv_n_vfp.S
|
||||
CGEMVNKERNEL = cgemv_n_vfp.S
|
||||
ZGEMVNKERNEL = zgemv_n_vfp.S
|
||||
|
||||
SGEMVTKERNEL = gemv_t_vfp.S
|
||||
DGEMVTKERNEL = gemv_t_vfp.S
|
||||
CGEMVTKERNEL = cgemv_t_vfp.S
|
||||
ZGEMVTKERNEL = zgemv_t_vfp.S
|
||||
|
||||
STRMMKERNEL = strmm_kernel_4x2_vfp.S
|
||||
DTRMMKERNEL = dtrmm_kernel_4x2_vfp.S
|
||||
CTRMMKERNEL = ctrmm_kernel_2x2_vfp.S
|
||||
ZTRMMKERNEL = ztrmm_kernel_2x2_vfp.S
|
||||
|
||||
SGEMMKERNEL = sgemm_kernel_4x2_vfp.S
|
||||
SGEMMINCOPY = sgemm_ncopy_4_vfp.S
|
||||
SGEMMITCOPY = sgemm_tcopy_4_vfp.S
|
||||
SGEMMINCOPYOBJ = sgemm_incopy.o
|
||||
SGEMMITCOPYOBJ = sgemm_itcopy.o
|
||||
SGEMMONCOPY = sgemm_ncopy_2_vfp.S
|
||||
SGEMMOTCOPY = ../generic/gemm_tcopy_2.c
|
||||
SGEMMONCOPYOBJ = sgemm_oncopy.o
|
||||
SGEMMOTCOPYOBJ = sgemm_otcopy.o
|
||||
|
||||
DGEMMKERNEL = dgemm_kernel_4x2_vfp.S
|
||||
DGEMMINCOPY = dgemm_ncopy_4_vfp.S
|
||||
DGEMMITCOPY = dgemm_tcopy_4_vfp.S
|
||||
DGEMMINCOPYOBJ = dgemm_incopy.o
|
||||
DGEMMITCOPYOBJ = dgemm_itcopy.o
|
||||
DGEMMONCOPY = dgemm_ncopy_2_vfp.S
|
||||
DGEMMOTCOPY = ../generic/gemm_tcopy_2.c
|
||||
DGEMMONCOPYOBJ = dgemm_oncopy.o
|
||||
DGEMMOTCOPYOBJ = dgemm_otcopy.o
|
||||
|
||||
CGEMMKERNEL = cgemm_kernel_2x2_vfp.S
|
||||
CGEMMONCOPY = cgemm_ncopy_2_vfp.S
|
||||
CGEMMOTCOPY = cgemm_tcopy_2_vfp.S
|
||||
CGEMMONCOPYOBJ = cgemm_oncopy.o
|
||||
CGEMMOTCOPYOBJ = cgemm_otcopy.o
|
||||
|
||||
ZGEMMKERNEL = zgemm_kernel_2x2_vfp.S
|
||||
ZGEMMONCOPY = zgemm_ncopy_2_vfp.S
|
||||
ZGEMMOTCOPY = zgemm_tcopy_2_vfp.S
|
||||
ZGEMMONCOPYOBJ = zgemm_oncopy.o
|
||||
ZGEMMOTCOPYOBJ = zgemm_otcopy.o
|
||||
|
||||
STRSMKERNEL_LN = ../generic/trsm_kernel_LN.c
|
||||
STRSMKERNEL_LT = ../generic/trsm_kernel_LT.c
|
||||
STRSMKERNEL_RN = ../generic/trsm_kernel_RN.c
|
||||
STRSMKERNEL_RT = ../generic/trsm_kernel_RT.c
|
||||
|
||||
DTRSMKERNEL_LN = ../generic/trsm_kernel_LN.c
|
||||
DTRSMKERNEL_LT = ../generic/trsm_kernel_LT.c
|
||||
DTRSMKERNEL_RN = ../generic/trsm_kernel_RN.c
|
||||
DTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c
|
||||
|
||||
CTRSMKERNEL_LN = ../generic/trsm_kernel_LN.c
|
||||
CTRSMKERNEL_LT = ../generic/trsm_kernel_LT.c
|
||||
CTRSMKERNEL_RN = ../generic/trsm_kernel_RN.c
|
||||
CTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c
|
||||
|
||||
ZTRSMKERNEL_LN = ../generic/trsm_kernel_LN.c
|
||||
ZTRSMKERNEL_LT = ../generic/trsm_kernel_LT.c
|
||||
ZTRSMKERNEL_RN = ../generic/trsm_kernel_RN.c
|
||||
ZTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c
|
||||
|
||||
|
||||
|
||||
|
||||
141
kernel/arm/KERNEL.ARMV7
Normal file
141
kernel/arm/KERNEL.ARMV7
Normal file
@@ -0,0 +1,141 @@
|
||||
SAMAXKERNEL = iamax_vfp.S
|
||||
DAMAXKERNEL = iamax_vfp.S
|
||||
CAMAXKERNEL = iamax_vfp.S
|
||||
ZAMAXKERNEL = iamax_vfp.S
|
||||
|
||||
SAMINKERNEL = iamax_vfp.S
|
||||
DAMINKERNEL = iamax_vfp.S
|
||||
CAMINKERNEL = iamax_vfp.S
|
||||
ZAMINKERNEL = iamax_vfp.S
|
||||
|
||||
SMAXKERNEL = iamax_vfp.S
|
||||
DMAXKERNEL = iamax_vfp.S
|
||||
|
||||
SMINKERNEL = iamax_vfp.S
|
||||
DMINKERNEL = iamax_vfp.S
|
||||
|
||||
ISAMAXKERNEL = iamax_vfp.S
|
||||
IDAMAXKERNEL = iamax_vfp.S
|
||||
ICAMAXKERNEL = iamax_vfp.S
|
||||
IZAMAXKERNEL = iamax_vfp.S
|
||||
|
||||
ISAMINKERNEL = iamax_vfp.S
|
||||
IDAMINKERNEL = iamax_vfp.S
|
||||
ICAMINKERNEL = iamax_vfp.S
|
||||
IZAMINKERNEL = iamax_vfp.S
|
||||
|
||||
ISMAXKERNEL = iamax_vfp.S
|
||||
IDMAXKERNEL = iamax_vfp.S
|
||||
|
||||
ISMINKERNEL = iamax_vfp.S
|
||||
IDMINKERNEL = iamax_vfp.S
|
||||
|
||||
SSWAPKERNEL = swap_vfp.S
|
||||
DSWAPKERNEL = swap_vfp.S
|
||||
CSWAPKERNEL = swap_vfp.S
|
||||
ZSWAPKERNEL = swap_vfp.S
|
||||
|
||||
SASUMKERNEL = asum_vfp.S
|
||||
DASUMKERNEL = asum_vfp.S
|
||||
CASUMKERNEL = asum_vfp.S
|
||||
ZASUMKERNEL = asum_vfp.S
|
||||
|
||||
SAXPYKERNEL = axpy_vfp.S
|
||||
DAXPYKERNEL = axpy_vfp.S
|
||||
CAXPYKERNEL = axpy_vfp.S
|
||||
ZAXPYKERNEL = axpy_vfp.S
|
||||
|
||||
SCOPYKERNEL = scopy_vfp.S
|
||||
DCOPYKERNEL = dcopy_vfp.S
|
||||
CCOPYKERNEL = ccopy_vfp.S
|
||||
ZCOPYKERNEL = zcopy_vfp.S
|
||||
|
||||
SDOTKERNEL = sdot_vfp.S
|
||||
DDOTKERNEL = ddot_vfp.S
|
||||
CDOTKERNEL = cdot_vfp.S
|
||||
ZDOTKERNEL = zdot_vfp.S
|
||||
|
||||
SNRM2KERNEL = nrm2_vfpv3.S
|
||||
DNRM2KERNEL = nrm2_vfpv3.S
|
||||
CNRM2KERNEL = nrm2_vfpv3.S
|
||||
ZNRM2KERNEL = nrm2_vfpv3.S
|
||||
|
||||
SROTKERNEL = rot_vfp.S
|
||||
DROTKERNEL = rot_vfp.S
|
||||
CROTKERNEL = rot_vfp.S
|
||||
ZROTKERNEL = rot_vfp.S
|
||||
|
||||
SSCALKERNEL = scal_vfp.S
|
||||
DSCALKERNEL = scal_vfp.S
|
||||
CSCALKERNEL = scal_vfp.S
|
||||
ZSCALKERNEL = scal_vfp.S
|
||||
|
||||
SGEMVNKERNEL = gemv_n_vfp.S
|
||||
DGEMVNKERNEL = gemv_n_vfp.S
|
||||
CGEMVNKERNEL = cgemv_n_vfp.S
|
||||
ZGEMVNKERNEL = zgemv_n_vfp.S
|
||||
|
||||
SGEMVTKERNEL = gemv_t_vfp.S
|
||||
DGEMVTKERNEL = gemv_t_vfp.S
|
||||
CGEMVTKERNEL = cgemv_t_vfp.S
|
||||
ZGEMVTKERNEL = zgemv_t_vfp.S
|
||||
|
||||
STRMMKERNEL = strmm_kernel_4x4_vfpv3.S
|
||||
DTRMMKERNEL = dtrmm_kernel_4x4_vfpv3.S
|
||||
CTRMMKERNEL = ctrmm_kernel_2x2_vfpv3.S
|
||||
ZTRMMKERNEL = ztrmm_kernel_2x2_vfpv3.S
|
||||
|
||||
#SGEMMKERNEL = ../generic/gemmkernel_2x2.c
|
||||
SGEMMKERNEL = sgemm_kernel_4x4_vfpv3.S
|
||||
SGEMMINCOPY =
|
||||
SGEMMITCOPY =
|
||||
SGEMMONCOPY = sgemm_ncopy_4_vfp.S
|
||||
SGEMMOTCOPY = sgemm_tcopy_4_vfp.S
|
||||
SGEMMINCOPYOBJ =
|
||||
SGEMMITCOPYOBJ =
|
||||
SGEMMONCOPYOBJ = sgemm_oncopy.o
|
||||
SGEMMOTCOPYOBJ = sgemm_otcopy.o
|
||||
|
||||
DGEMMKERNEL = dgemm_kernel_4x4_vfpv3.S
|
||||
DGEMMINCOPY =
|
||||
DGEMMITCOPY =
|
||||
DGEMMONCOPY = dgemm_ncopy_4_vfp.S
|
||||
DGEMMOTCOPY = dgemm_tcopy_4_vfp.S
|
||||
DGEMMINCOPYOBJ =
|
||||
DGEMMITCOPYOBJ =
|
||||
DGEMMONCOPYOBJ = dgemm_oncopy.o
|
||||
DGEMMOTCOPYOBJ = dgemm_otcopy.o
|
||||
|
||||
CGEMMKERNEL = cgemm_kernel_2x2_vfpv3.S
|
||||
CGEMMONCOPY = cgemm_ncopy_2_vfp.S
|
||||
CGEMMOTCOPY = cgemm_tcopy_2_vfp.S
|
||||
CGEMMONCOPYOBJ = cgemm_oncopy.o
|
||||
CGEMMOTCOPYOBJ = cgemm_otcopy.o
|
||||
|
||||
ZGEMMKERNEL = zgemm_kernel_2x2_vfpv3.S
|
||||
ZGEMMONCOPY = zgemm_ncopy_2_vfp.S
|
||||
ZGEMMOTCOPY = zgemm_tcopy_2_vfp.S
|
||||
ZGEMMONCOPYOBJ = zgemm_oncopy.o
|
||||
ZGEMMOTCOPYOBJ = zgemm_otcopy.o
|
||||
|
||||
STRSMKERNEL_LN = ../generic/trsm_kernel_LN.c
|
||||
STRSMKERNEL_LT = ../generic/trsm_kernel_LT.c
|
||||
STRSMKERNEL_RN = ../generic/trsm_kernel_RN.c
|
||||
STRSMKERNEL_RT = ../generic/trsm_kernel_RT.c
|
||||
|
||||
DTRSMKERNEL_LN = ../generic/trsm_kernel_LN.c
|
||||
DTRSMKERNEL_LT = ../generic/trsm_kernel_LT.c
|
||||
DTRSMKERNEL_RN = ../generic/trsm_kernel_RN.c
|
||||
DTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c
|
||||
|
||||
CTRSMKERNEL_LN = ../generic/trsm_kernel_LN.c
|
||||
CTRSMKERNEL_LT = ../generic/trsm_kernel_LT.c
|
||||
CTRSMKERNEL_RN = ../generic/trsm_kernel_RN.c
|
||||
CTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c
|
||||
|
||||
ZTRSMKERNEL_LN = ../generic/trsm_kernel_LN.c
|
||||
ZTRSMKERNEL_LT = ../generic/trsm_kernel_LT.c
|
||||
ZTRSMKERNEL_RN = ../generic/trsm_kernel_RN.c
|
||||
ZTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c
|
||||
|
||||
|
||||
2
kernel/arm/Makefile
Normal file
2
kernel/arm/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
clean ::
|
||||
|
||||
73
kernel/arm/amax.c
Normal file
73
kernel/arm/amax.c
Normal file
@@ -0,0 +1,73 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/09/14 Saar
|
||||
* BLASTEST float : OK
|
||||
* BLASTEST double : OK
|
||||
* CTEST : NoTest
|
||||
* TEST : NoTest
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#include "common.h"
|
||||
#include <math.h>
|
||||
|
||||
#if defined(DOUBLE)
|
||||
|
||||
#define ABS fabs
|
||||
|
||||
#else
|
||||
|
||||
#define ABS fabsf
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
|
||||
{
|
||||
BLASLONG i=0;
|
||||
BLASLONG ix=0;
|
||||
FLOAT maxf=0.0;
|
||||
|
||||
if (n < 0 || inc_x < 1 ) return(maxf);
|
||||
|
||||
maxf=ABS(x[0]);
|
||||
|
||||
while(i < n)
|
||||
{
|
||||
if( ABS(x[ix]) > ABS(maxf) )
|
||||
{
|
||||
maxf = ABS(x[ix]);
|
||||
}
|
||||
ix += inc_x;
|
||||
i++;
|
||||
}
|
||||
return(maxf);
|
||||
}
|
||||
|
||||
|
||||
73
kernel/arm/amin.c
Normal file
73
kernel/arm/amin.c
Normal file
@@ -0,0 +1,73 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/09/14 Saar
|
||||
* BLASTEST float : OK
|
||||
* BLASTEST double : OK
|
||||
* CTEST : NoTest
|
||||
* TEST : NoTest
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#include "common.h"
|
||||
#include <math.h>
|
||||
|
||||
#if defined(DOUBLE)
|
||||
|
||||
#define ABS fabs
|
||||
|
||||
#else
|
||||
|
||||
#define ABS fabsf
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
|
||||
{
|
||||
BLASLONG i=0;
|
||||
BLASLONG ix=0;
|
||||
FLOAT minf=0.0;
|
||||
|
||||
if (n < 0 || inc_x < 1 ) return(minf);
|
||||
|
||||
minf=ABS(x[0]);
|
||||
|
||||
while(i < n)
|
||||
{
|
||||
if( ABS(x[ix]) < ABS(minf) )
|
||||
{
|
||||
minf = ABS(x[ix]);
|
||||
}
|
||||
ix += inc_x;
|
||||
i++;
|
||||
}
|
||||
return(minf);
|
||||
}
|
||||
|
||||
|
||||
67
kernel/arm/asum.c
Normal file
67
kernel/arm/asum.c
Normal file
@@ -0,0 +1,67 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/09/14 Saar
|
||||
* BLASTEST float : OK
|
||||
* BLASTEST double : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
|
||||
#include "common.h"
|
||||
#include <math.h>
|
||||
|
||||
#if defined(DOUBLE)
|
||||
|
||||
#define ABS fabs
|
||||
|
||||
#else
|
||||
|
||||
#define ABS fabsf
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
|
||||
{
|
||||
BLASLONG i=0;
|
||||
FLOAT sumf = 0.0;
|
||||
if (n < 0 || inc_x < 1 ) return(sumf);
|
||||
|
||||
n *= inc_x;
|
||||
while(i < n)
|
||||
{
|
||||
sumf += ABS(x[i]);
|
||||
i += inc_x;
|
||||
}
|
||||
return(sumf);
|
||||
}
|
||||
|
||||
|
||||
481
kernel/arm/asum_vfp.S
Normal file
481
kernel/arm/asum_vfp.S
Normal file
@@ -0,0 +1,481 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/11 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define N r0
|
||||
#define X r1
|
||||
#define INC_X r2
|
||||
|
||||
|
||||
#define I r12
|
||||
|
||||
#define X_PRE 512
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
#if !defined(COMPLEX)
|
||||
|
||||
#if defined(DOUBLE)
|
||||
|
||||
.macro KERNEL_F4
|
||||
|
||||
pld [ X, #X_PRE ]
|
||||
fldmiad X!, { d4 - d5 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
vabs.f64 d5, d5
|
||||
fldmiad X!, { d6 - d7 }
|
||||
vabs.f64 d6, d6
|
||||
vadd.f64 d1 , d1, d5
|
||||
vabs.f64 d7, d7
|
||||
vadd.f64 d0 , d0, d6
|
||||
vadd.f64 d1 , d1, d7
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F1
|
||||
|
||||
fldmiad X!, { d4 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S4
|
||||
|
||||
fldmiad X, { d4 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
add X, X, INC_X
|
||||
|
||||
fldmiad X, { d4 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
add X, X, INC_X
|
||||
|
||||
fldmiad X, { d4 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
add X, X, INC_X
|
||||
|
||||
fldmiad X, { d4 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
add X, X, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S1
|
||||
|
||||
fldmiad X, { d4 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
add X, X, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
#else
|
||||
|
||||
.macro KERNEL_F4
|
||||
|
||||
fldmias X!, { s4 - s5 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
vabs.f32 s5, s5
|
||||
fldmias X!, { s6 - s7 }
|
||||
vabs.f32 s6, s6
|
||||
vadd.f32 s1 , s1, s5
|
||||
vabs.f32 s7, s7
|
||||
vadd.f32 s0 , s0, s6
|
||||
vadd.f32 s1 , s1, s7
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F1
|
||||
|
||||
fldmias X!, { s4 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S4
|
||||
|
||||
fldmias X, { s4 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
add X, X, INC_X
|
||||
|
||||
fldmias X, { s4 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
add X, X, INC_X
|
||||
|
||||
fldmias X, { s4 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
add X, X, INC_X
|
||||
|
||||
fldmias X, { s4 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
add X, X, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S1
|
||||
|
||||
fldmias X, { s4 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
add X, X, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#if defined(DOUBLE)
|
||||
|
||||
.macro KERNEL_F4
|
||||
|
||||
pld [ X, #X_PRE ]
|
||||
fldmiad X!, { d4 - d5 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
vabs.f64 d5, d5
|
||||
fldmiad X!, { d6 - d7 }
|
||||
vabs.f64 d6, d6
|
||||
vadd.f64 d1 , d1, d5
|
||||
vabs.f64 d7, d7
|
||||
vadd.f64 d0 , d0, d6
|
||||
vadd.f64 d1 , d1, d7
|
||||
|
||||
pld [ X, #X_PRE ]
|
||||
fldmiad X!, { d4 - d5 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
vabs.f64 d5, d5
|
||||
fldmiad X!, { d6 - d7 }
|
||||
vabs.f64 d6, d6
|
||||
vadd.f64 d1 , d1, d5
|
||||
vabs.f64 d7, d7
|
||||
vadd.f64 d0 , d0, d6
|
||||
vadd.f64 d1 , d1, d7
|
||||
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F1
|
||||
|
||||
fldmiad X!, { d4 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
|
||||
fldmiad X!, { d4 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S4
|
||||
|
||||
fldmiad X, { d4 -d5 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
vabs.f64 d5, d5
|
||||
vadd.f64 d0 , d0, d5
|
||||
add X, X, INC_X
|
||||
|
||||
fldmiad X, { d4 -d5 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
vabs.f64 d5, d5
|
||||
vadd.f64 d0 , d0, d5
|
||||
add X, X, INC_X
|
||||
|
||||
fldmiad X, { d4 -d5 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
vabs.f64 d5, d5
|
||||
vadd.f64 d0 , d0, d5
|
||||
add X, X, INC_X
|
||||
|
||||
fldmiad X, { d4 -d5 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
vabs.f64 d5, d5
|
||||
vadd.f64 d0 , d0, d5
|
||||
add X, X, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S1
|
||||
|
||||
fldmiad X, { d4 -d5 }
|
||||
vabs.f64 d4, d4
|
||||
vadd.f64 d0 , d0, d4
|
||||
vabs.f64 d5, d5
|
||||
vadd.f64 d0 , d0, d5
|
||||
add X, X, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
#else
|
||||
|
||||
.macro KERNEL_F4
|
||||
|
||||
pld [ X, #X_PRE ]
|
||||
fldmias X!, { s4 - s5 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
vabs.f32 s5, s5
|
||||
fldmias X!, { s6 - s7 }
|
||||
vabs.f32 s6, s6
|
||||
vadd.f32 s1 , s1, s5
|
||||
vabs.f32 s7, s7
|
||||
vadd.f32 s0 , s0, s6
|
||||
vadd.f32 s1 , s1, s7
|
||||
|
||||
fldmias X!, { s4 - s5 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
vabs.f32 s5, s5
|
||||
fldmias X!, { s6 - s7 }
|
||||
vabs.f32 s6, s6
|
||||
vadd.f32 s1 , s1, s5
|
||||
vabs.f32 s7, s7
|
||||
vadd.f32 s0 , s0, s6
|
||||
vadd.f32 s1 , s1, s7
|
||||
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F1
|
||||
|
||||
fldmias X!, { s4 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
|
||||
fldmias X!, { s4 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S4
|
||||
|
||||
fldmias X, { s4 -s5 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
vabs.f32 s5, s5
|
||||
vadd.f32 s0 , s0, s5
|
||||
add X, X, INC_X
|
||||
|
||||
fldmias X, { s4 -s5 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
vabs.f32 s5, s5
|
||||
vadd.f32 s0 , s0, s5
|
||||
add X, X, INC_X
|
||||
|
||||
fldmias X, { s4 -s5 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
vabs.f32 s5, s5
|
||||
vadd.f32 s0 , s0, s5
|
||||
add X, X, INC_X
|
||||
|
||||
fldmias X, { s4 -s5 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
vabs.f32 s5, s5
|
||||
vadd.f32 s0 , s0, s5
|
||||
add X, X, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S1
|
||||
|
||||
fldmias X, { s4 -s5 }
|
||||
vabs.f32 s4, s4
|
||||
vadd.f32 s0 , s0, s4
|
||||
vabs.f32 s5, s5
|
||||
vadd.f32 s0 , s0, s5
|
||||
add X, X, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vsub.f64 d0 , d0 , d0
|
||||
vsub.f64 d1 , d1 , d1
|
||||
#else
|
||||
vsub.f32 s0 , s0 , s0
|
||||
vsub.f32 s1 , s1 , s1
|
||||
#endif
|
||||
|
||||
cmp N, #0
|
||||
ble asum_kernel_L999
|
||||
|
||||
cmp INC_X, #0
|
||||
beq asum_kernel_L999
|
||||
|
||||
cmp INC_X, #1
|
||||
bne asum_kernel_S_BEGIN
|
||||
|
||||
|
||||
asum_kernel_F_BEGIN:
|
||||
|
||||
asrs I, N, #2 // I = N / 4
|
||||
ble asum_kernel_F1
|
||||
|
||||
.align 5
|
||||
|
||||
asum_kernel_F4:
|
||||
|
||||
#if !defined(DOUBLE) && !defined(COMPLEX)
|
||||
pld [ X, #X_PRE ]
|
||||
#endif
|
||||
KERNEL_F4
|
||||
|
||||
subs I, I, #1
|
||||
ble asum_kernel_F1
|
||||
|
||||
KERNEL_F4
|
||||
|
||||
subs I, I, #1
|
||||
bne asum_kernel_F4
|
||||
|
||||
asum_kernel_F1:
|
||||
|
||||
ands I, N, #3
|
||||
ble asum_kernel_L999
|
||||
|
||||
asum_kernel_F10:
|
||||
|
||||
KERNEL_F1
|
||||
|
||||
subs I, I, #1
|
||||
bne asum_kernel_F10
|
||||
|
||||
b asum_kernel_L999
|
||||
|
||||
asum_kernel_S_BEGIN:
|
||||
|
||||
#if defined(COMPLEX)
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl INC_X, INC_X, #4 // INC_X * SIZE * 2
|
||||
#else
|
||||
lsl INC_X, INC_X, #3 // INC_X * SIZE * 2
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl INC_X, INC_X, #3 // INC_X * SIZE
|
||||
#else
|
||||
lsl INC_X, INC_X, #2 // INC_X * SIZE
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
asrs I, N, #2 // I = N / 4
|
||||
ble asum_kernel_S1
|
||||
|
||||
.align 5
|
||||
|
||||
asum_kernel_S4:
|
||||
|
||||
KERNEL_S4
|
||||
|
||||
subs I, I, #1
|
||||
bne asum_kernel_S4
|
||||
|
||||
asum_kernel_S1:
|
||||
|
||||
ands I, N, #3
|
||||
ble asum_kernel_L999
|
||||
|
||||
asum_kernel_S10:
|
||||
|
||||
KERNEL_S1
|
||||
|
||||
subs I, I, #1
|
||||
bne asum_kernel_S10
|
||||
|
||||
|
||||
asum_kernel_L999:
|
||||
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vadd.f64 d0 , d0, d1 // set return value
|
||||
#else
|
||||
vadd.f32 s0 , s0, s1 // set return value
|
||||
#endif
|
||||
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
64
kernel/arm/axpy.c
Normal file
64
kernel/arm/axpy.c
Normal file
@@ -0,0 +1,64 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/09/14 Saar
|
||||
* BLASTEST float : OK
|
||||
* BLASTEST double : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *dummy, BLASLONG dummy2)
|
||||
{
|
||||
BLASLONG i=0;
|
||||
BLASLONG ix,iy;
|
||||
|
||||
if ( n < 0 ) return(0);
|
||||
if ( da == 0.0 ) return(0);
|
||||
|
||||
ix = 0;
|
||||
iy = 0;
|
||||
|
||||
while(i < n)
|
||||
{
|
||||
|
||||
y[iy] += da * x[ix] ;
|
||||
ix += inc_x ;
|
||||
iy += inc_y ;
|
||||
i++ ;
|
||||
|
||||
}
|
||||
return(0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
503
kernel/arm/axpy_vfp.S
Normal file
503
kernel/arm/axpy_vfp.S
Normal file
@@ -0,0 +1,503 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/14 Saar
|
||||
* BLASTEST : xOK
|
||||
* CTEST : xOK
|
||||
* TEST : xOK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define OLD_INC_X [fp, #0 ]
|
||||
#define OLD_Y [fp, #4 ]
|
||||
#define OLD_INC_Y [fp, #8 ]
|
||||
|
||||
|
||||
#define N r0
|
||||
#define Y r1
|
||||
#define INC_X r2
|
||||
#define X r3
|
||||
#define INC_Y r4
|
||||
|
||||
#define I r12
|
||||
|
||||
#define X_PRE 512
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
/*****************************************************************************************/
|
||||
|
||||
#if !defined(CONJ)
|
||||
|
||||
#if defined(DOUBLE)
|
||||
|
||||
#define FMAC_R1 fmacd
|
||||
#define FMAC_R2 fnmacd
|
||||
#define FMAC_I1 fmacd
|
||||
#define FMAC_I2 fmacd
|
||||
|
||||
#else
|
||||
|
||||
#define FMAC_R1 fmacs
|
||||
#define FMAC_R2 fnmacs
|
||||
#define FMAC_I1 fmacs
|
||||
#define FMAC_I2 fmacs
|
||||
|
||||
#endif
|
||||
|
||||
#else // CONJ
|
||||
|
||||
#if defined(DOUBLE)
|
||||
|
||||
#define FMAC_R1 fmacd
|
||||
#define FMAC_R2 fmacd
|
||||
#define FMAC_I1 fnmacd
|
||||
#define FMAC_I2 fmacd
|
||||
|
||||
#else
|
||||
|
||||
#define FMAC_R1 fmacs
|
||||
#define FMAC_R2 fmacs
|
||||
#define FMAC_I1 fnmacs
|
||||
#define FMAC_I2 fmacs
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#if !defined(COMPLEX)
|
||||
|
||||
#if defined(DOUBLE)
|
||||
|
||||
.macro KERNEL_F4
|
||||
|
||||
pld [ X, #X_PRE ]
|
||||
fldmiad X!, { d4 - d7 }
|
||||
pld [ Y, #X_PRE ]
|
||||
fldmiad Y , { d8 - d11 }
|
||||
fmacd d8 , d0, d4
|
||||
fstmiad Y!, { d8 }
|
||||
fmacd d9 , d0, d5
|
||||
fstmiad Y!, { d9 }
|
||||
fmacd d10, d0, d6
|
||||
fstmiad Y!, { d10 }
|
||||
fmacd d11, d0, d7
|
||||
fstmiad Y!, { d11 }
|
||||
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_F1
|
||||
|
||||
fldmiad X!, { d4 }
|
||||
fldmiad Y , { d8 }
|
||||
fmacd d8 , d0, d4
|
||||
fstmiad Y!, { d8 }
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S1
|
||||
|
||||
fldmiad X , { d4 }
|
||||
fldmiad Y , { d8 }
|
||||
fmacd d8 , d0, d4
|
||||
fstmiad Y , { d8 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
#else
|
||||
|
||||
.macro KERNEL_F4
|
||||
|
||||
fldmias X!, { s4 - s7 }
|
||||
fldmias Y , { s8 - s11 }
|
||||
fmacs s8 , s0, s4
|
||||
fstmias Y!, { s8 }
|
||||
fmacs s9 , s0, s5
|
||||
fstmias Y!, { s9 }
|
||||
fmacs s10, s0, s6
|
||||
fstmias Y!, { s10 }
|
||||
fmacs s11, s0, s7
|
||||
fstmias Y!, { s11 }
|
||||
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_F1
|
||||
|
||||
fldmias X!, { s4 }
|
||||
fldmias Y , { s8 }
|
||||
fmacs s8 , s0, s4
|
||||
fstmias Y!, { s8 }
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S1
|
||||
|
||||
fldmias X , { s4 }
|
||||
fldmias Y , { s8 }
|
||||
fmacs s8 , s0, s4
|
||||
fstmias Y , { s8 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#if defined(DOUBLE)
|
||||
|
||||
.macro KERNEL_F4
|
||||
|
||||
pld [ X, #X_PRE ]
|
||||
fldmiad X!, { d4 - d7 }
|
||||
pld [ Y, #X_PRE ]
|
||||
fldmiad Y , { d8 - d11 }
|
||||
|
||||
FMAC_R1 d8 , d0, d4
|
||||
FMAC_R2 d8 , d1, d5
|
||||
FMAC_I1 d9 , d0, d5
|
||||
FMAC_I2 d9 , d1, d4
|
||||
fstmiad Y!, { d8 }
|
||||
fstmiad Y!, { d9 }
|
||||
|
||||
FMAC_R1 d10, d0, d6
|
||||
FMAC_R2 d10, d1, d7
|
||||
FMAC_I1 d11, d0, d7
|
||||
FMAC_I2 d11, d1, d6
|
||||
fstmiad Y!, { d10 }
|
||||
fstmiad Y!, { d11 }
|
||||
|
||||
pld [ X, #X_PRE ]
|
||||
fldmiad X!, { d4 - d7 }
|
||||
pld [ Y, #X_PRE ]
|
||||
fldmiad Y , { d8 - d11 }
|
||||
|
||||
FMAC_R1 d8 , d0, d4
|
||||
FMAC_R2 d8 , d1, d5
|
||||
FMAC_I1 d9 , d0, d5
|
||||
FMAC_I2 d9 , d1, d4
|
||||
fstmiad Y!, { d8 }
|
||||
fstmiad Y!, { d9 }
|
||||
|
||||
FMAC_R1 d10, d0, d6
|
||||
FMAC_R2 d10, d1, d7
|
||||
FMAC_I1 d11, d0, d7
|
||||
FMAC_I2 d11, d1, d6
|
||||
fstmiad Y!, { d10 }
|
||||
fstmiad Y!, { d11 }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_F1
|
||||
|
||||
fldmiad X!, { d4 - d5 }
|
||||
fldmiad Y , { d8 - d9 }
|
||||
|
||||
FMAC_R1 d8 , d0, d4
|
||||
FMAC_R2 d8 , d1, d5
|
||||
FMAC_I1 d9 , d0, d5
|
||||
FMAC_I2 d9 , d1, d4
|
||||
fstmiad Y!, { d8 }
|
||||
fstmiad Y!, { d9 }
|
||||
|
||||
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S1
|
||||
|
||||
fldmiad X , { d4 - d5 }
|
||||
fldmiad Y , { d8 - d9 }
|
||||
|
||||
FMAC_R1 d8 , d0, d4
|
||||
FMAC_R2 d8 , d1, d5
|
||||
FMAC_I1 d9 , d0, d5
|
||||
FMAC_I2 d9 , d1, d4
|
||||
fstmiad Y , { d8 - d9 }
|
||||
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
#else
|
||||
|
||||
.macro KERNEL_F4
|
||||
|
||||
pld [ X, #X_PRE ]
|
||||
fldmias X!, { s4 - s7 }
|
||||
pld [ Y, #X_PRE ]
|
||||
fldmias Y , { s8 - s11 }
|
||||
|
||||
FMAC_R1 s8 , s0, s4
|
||||
FMAC_R2 s8 , s1, s5
|
||||
FMAC_I1 s9 , s0, s5
|
||||
FMAC_I2 s9 , s1, s4
|
||||
fstmias Y!, { s8 }
|
||||
fstmias Y!, { s9 }
|
||||
|
||||
FMAC_R1 s10, s0, s6
|
||||
FMAC_R2 s10, s1, s7
|
||||
FMAC_I1 s11, s0, s7
|
||||
FMAC_I2 s11, s1, s6
|
||||
fstmias Y!, { s10 }
|
||||
fstmias Y!, { s11 }
|
||||
|
||||
fldmias X!, { s4 - s7 }
|
||||
fldmias Y , { s8 - s11 }
|
||||
|
||||
FMAC_R1 s8 , s0, s4
|
||||
FMAC_R2 s8 , s1, s5
|
||||
FMAC_I1 s9 , s0, s5
|
||||
FMAC_I2 s9 , s1, s4
|
||||
fstmias Y!, { s8 }
|
||||
fstmias Y!, { s9 }
|
||||
|
||||
FMAC_R1 s10, s0, s6
|
||||
FMAC_R2 s10, s1, s7
|
||||
FMAC_I1 s11, s0, s7
|
||||
FMAC_I2 s11, s1, s6
|
||||
fstmias Y!, { s10 }
|
||||
fstmias Y!, { s11 }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_F1
|
||||
|
||||
fldmias X!, { s4 - s5 }
|
||||
fldmias Y , { s8 - s9 }
|
||||
|
||||
FMAC_R1 s8 , s0, s4
|
||||
FMAC_R2 s8 , s1, s5
|
||||
FMAC_I1 s9 , s0, s5
|
||||
FMAC_I2 s9 , s1, s4
|
||||
fstmias Y!, { s8 }
|
||||
fstmias Y!, { s9 }
|
||||
|
||||
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S1
|
||||
|
||||
fldmias X , { s4 - s5 }
|
||||
fldmias Y , { s8 - s9 }
|
||||
|
||||
FMAC_R1 s8 , s0, s4
|
||||
FMAC_R2 s8 , s1, s5
|
||||
FMAC_I1 s9 , s0, s5
|
||||
FMAC_I2 s9 , s1, s4
|
||||
fstmias Y , { s8 - s9 }
|
||||
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
push {r4 , fp}
|
||||
add fp, sp, #8
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
ldr INC_X , OLD_INC_X
|
||||
ldr Y, OLD_Y
|
||||
ldr INC_Y , OLD_INC_Y
|
||||
|
||||
sub r12, fp, #128
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vstm r12, { d8 - d15} // store floating point registers
|
||||
#else
|
||||
vstm r12, { s8 - s15} // store floating point registers
|
||||
#endif
|
||||
|
||||
cmp N, #0
|
||||
ble axpy_kernel_L999
|
||||
|
||||
cmp INC_X, #0
|
||||
beq axpy_kernel_L999
|
||||
|
||||
cmp INC_Y, #0
|
||||
beq axpy_kernel_L999
|
||||
|
||||
cmp INC_X, #1
|
||||
bne axpy_kernel_S_BEGIN
|
||||
|
||||
cmp INC_Y, #1
|
||||
bne axpy_kernel_S_BEGIN
|
||||
|
||||
|
||||
axpy_kernel_F_BEGIN:
|
||||
|
||||
|
||||
asrs I, N, #2 // I = N / 4
|
||||
ble axpy_kernel_F1
|
||||
|
||||
.align 5
|
||||
|
||||
axpy_kernel_F4:
|
||||
|
||||
#if !defined(COMPLEX) && !defined(DOUBLE)
|
||||
pld [ X, #X_PRE ]
|
||||
pld [ Y, #X_PRE ]
|
||||
#endif
|
||||
|
||||
KERNEL_F4
|
||||
|
||||
subs I, I, #1
|
||||
ble axpy_kernel_F1
|
||||
|
||||
KERNEL_F4
|
||||
|
||||
subs I, I, #1
|
||||
bne axpy_kernel_F4
|
||||
|
||||
axpy_kernel_F1:
|
||||
|
||||
ands I, N, #3
|
||||
ble axpy_kernel_L999
|
||||
|
||||
axpy_kernel_F10:
|
||||
|
||||
KERNEL_F1
|
||||
|
||||
subs I, I, #1
|
||||
bne axpy_kernel_F10
|
||||
|
||||
b axpy_kernel_L999
|
||||
|
||||
axpy_kernel_S_BEGIN:
|
||||
|
||||
#if defined(COMPLEX)
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl INC_X, INC_X, #4 // INC_X * SIZE * 2
|
||||
lsl INC_Y, INC_Y, #4 // INC_Y * SIZE * 2
|
||||
#else
|
||||
lsl INC_X, INC_X, #3 // INC_X * SIZE * 2
|
||||
lsl INC_Y, INC_Y, #3 // INC_Y * SIZE * 2
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl INC_X, INC_X, #3 // INC_X * SIZE
|
||||
lsl INC_Y, INC_Y, #3 // INC_Y * SIZE
|
||||
#else
|
||||
lsl INC_X, INC_X, #2 // INC_X * SIZE
|
||||
lsl INC_Y, INC_Y, #2 // INC_Y * SIZE
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
asrs I, N, #2 // I = N / 4
|
||||
ble axpy_kernel_S1
|
||||
|
||||
.align 5
|
||||
|
||||
axpy_kernel_S4:
|
||||
|
||||
KERNEL_S1
|
||||
KERNEL_S1
|
||||
KERNEL_S1
|
||||
KERNEL_S1
|
||||
|
||||
subs I, I, #1
|
||||
bne axpy_kernel_S4
|
||||
|
||||
axpy_kernel_S1:
|
||||
|
||||
ands I, N, #3
|
||||
ble axpy_kernel_L999
|
||||
|
||||
axpy_kernel_S10:
|
||||
|
||||
KERNEL_S1
|
||||
|
||||
subs I, I, #1
|
||||
bne axpy_kernel_S10
|
||||
|
||||
|
||||
axpy_kernel_L999:
|
||||
|
||||
sub r3, fp, #128
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vldm r3, { d8 - d15 } // restore floating point registers
|
||||
#else
|
||||
vldm r3, { s8 - s15 } // restore floating point registers
|
||||
#endif
|
||||
|
||||
mov r0, #0 // set return value
|
||||
|
||||
sub sp, fp, #8
|
||||
pop {r4,fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
222
kernel/arm/ccopy_vfp.S
Normal file
222
kernel/arm/ccopy_vfp.S
Normal file
@@ -0,0 +1,222 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/07 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define N r0
|
||||
#define X r1
|
||||
#define INC_X r2
|
||||
#define OLD_Y r3
|
||||
|
||||
|
||||
/******************************************************
|
||||
* [fp, #-128] - [fp, #-64] is reserved
|
||||
* for store and restore of floating point
|
||||
* registers
|
||||
*******************************************************/
|
||||
|
||||
#define OLD_INC_Y [fp, #4 ]
|
||||
|
||||
#define I r5
|
||||
#define Y r6
|
||||
#define INC_Y r7
|
||||
|
||||
#define X_PRE 256
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
.macro COPY_F4
|
||||
|
||||
pld [ X, #X_PRE ]
|
||||
fldmias X!, { s0 - s7 }
|
||||
fstmias Y!, { s0 - s7 }
|
||||
|
||||
.endm
|
||||
|
||||
.macro COPY_F1
|
||||
|
||||
fldmias X!, { s0 - s1 }
|
||||
fstmias Y!, { s0 - s1 }
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
/*************************************************************************************************************************/
|
||||
|
||||
.macro COPY_S4
|
||||
|
||||
nop
|
||||
fldmias X, { s0 - s1 }
|
||||
fstmias Y, { s0 - s1 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
fldmias X, { s2 - s3 }
|
||||
fstmias Y, { s2 - s3 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
fldmias X, { s0 - s1 }
|
||||
fstmias Y, { s0 - s1 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
fldmias X, { s2 - s3 }
|
||||
fstmias Y, { s2 - s3 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro COPY_S1
|
||||
|
||||
fldmias X, { s0 - s1 }
|
||||
fstmias Y, { s0 - s1 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
|
||||
push {r4 - r9, fp}
|
||||
add fp, sp, #24
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
sub r4, fp, #128
|
||||
vstm r4, { s8 - s15} // store floating point registers
|
||||
|
||||
mov Y, OLD_Y
|
||||
ldr INC_Y, OLD_INC_Y
|
||||
|
||||
cmp N, #0
|
||||
ble ccopy_kernel_L999
|
||||
|
||||
cmp INC_X, #0
|
||||
beq ccopy_kernel_L999
|
||||
|
||||
cmp INC_Y, #0
|
||||
beq ccopy_kernel_L999
|
||||
|
||||
cmp INC_X, #1
|
||||
bne ccopy_kernel_S_BEGIN
|
||||
|
||||
cmp INC_Y, #1
|
||||
bne ccopy_kernel_S_BEGIN
|
||||
|
||||
ccopy_kernel_F_BEGIN:
|
||||
|
||||
asrs I, N, #2 // I = N / 4
|
||||
ble ccopy_kernel_F1
|
||||
|
||||
ccopy_kernel_F4:
|
||||
|
||||
COPY_F4
|
||||
|
||||
subs I, I, #1
|
||||
bne ccopy_kernel_F4
|
||||
|
||||
ccopy_kernel_F1:
|
||||
|
||||
ands I, N, #3
|
||||
ble ccopy_kernel_L999
|
||||
|
||||
ccopy_kernel_F10:
|
||||
|
||||
COPY_F1
|
||||
|
||||
subs I, I, #1
|
||||
bne ccopy_kernel_F10
|
||||
|
||||
b ccopy_kernel_L999
|
||||
|
||||
ccopy_kernel_S_BEGIN:
|
||||
|
||||
lsl INC_X, INC_X, #3 // INC_X * SIZE * 2
|
||||
lsl INC_Y, INC_Y, #3 // INC_Y * SIZE * 2
|
||||
|
||||
asrs I, N, #2 // I = N / 4
|
||||
ble ccopy_kernel_S1
|
||||
|
||||
ccopy_kernel_S4:
|
||||
|
||||
COPY_S4
|
||||
|
||||
subs I, I, #1
|
||||
bne ccopy_kernel_S4
|
||||
|
||||
ccopy_kernel_S1:
|
||||
|
||||
ands I, N, #3
|
||||
ble ccopy_kernel_L999
|
||||
|
||||
ccopy_kernel_S10:
|
||||
|
||||
COPY_S1
|
||||
|
||||
subs I, I, #1
|
||||
bne ccopy_kernel_S10
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ccopy_kernel_L999:
|
||||
|
||||
sub r3, fp, #128
|
||||
vldm r3, { s8 - s15} // restore floating point registers
|
||||
|
||||
mov r0, #0 // set return value
|
||||
sub sp, fp, #24
|
||||
pop {r4 - r9, fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
284
kernel/arm/cdot_vfp.S
Normal file
284
kernel/arm/cdot_vfp.S
Normal file
@@ -0,0 +1,284 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/11 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define N r0
|
||||
#define X r1
|
||||
#define INC_X r2
|
||||
#define OLD_Y r3
|
||||
|
||||
|
||||
/******************************************************
|
||||
* [fp, #-128] - [fp, #-64] is reserved
|
||||
* for store and restore of floating point
|
||||
* registers
|
||||
*******************************************************/
|
||||
|
||||
#define OLD_INC_Y [fp, #4 ]
|
||||
|
||||
#define I r5
|
||||
#define Y r6
|
||||
#define INC_Y r7
|
||||
|
||||
#define X_PRE 512
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
.macro KERNEL_F4
|
||||
|
||||
pld [ X, #X_PRE ]
|
||||
pld [ Y, #X_PRE ]
|
||||
|
||||
fldmias X!, { s4 - s5 }
|
||||
fldmias Y!, { s8 - s9 }
|
||||
fmacs s0 , s4, s8
|
||||
fmacs s1 , s4, s9
|
||||
fldmias X!, { s6 - s7 }
|
||||
fmacs s2 , s5, s9
|
||||
fmacs s3 , s5, s8
|
||||
|
||||
fldmias Y!, { s10 - s11 }
|
||||
fmacs s0 , s6, s10
|
||||
fmacs s1 , s6, s11
|
||||
fmacs s2 , s7, s11
|
||||
fmacs s3 , s7, s10
|
||||
|
||||
|
||||
fldmias X!, { s4 - s5 }
|
||||
fldmias Y!, { s8 - s9 }
|
||||
fmacs s0 , s4, s8
|
||||
fmacs s1 , s4, s9
|
||||
fldmias X!, { s6 - s7 }
|
||||
fmacs s2 , s5, s9
|
||||
fmacs s3 , s5, s8
|
||||
|
||||
fldmias Y!, { s10 - s11 }
|
||||
fmacs s0 , s6, s10
|
||||
fmacs s1 , s6, s11
|
||||
fmacs s2 , s7, s11
|
||||
fmacs s3 , s7, s10
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F1
|
||||
|
||||
fldmias X!, { s4 - s5 }
|
||||
fldmias Y!, { s8 - s9 }
|
||||
fmacs s0 , s4, s8
|
||||
fmacs s1 , s4, s9
|
||||
fmacs s2 , s5, s9
|
||||
fmacs s3 , s5, s8
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
/*************************************************************************************************************************/
|
||||
|
||||
.macro KERNEL_S4
|
||||
|
||||
nop
|
||||
|
||||
fldmias X, { s4 - s5 }
|
||||
fldmias Y, { s8 - s9 }
|
||||
fmacs s0 , s4, s8
|
||||
fmacs s1 , s4, s9
|
||||
fmacs s2 , s5, s9
|
||||
fmacs s3 , s5, s8
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
fldmias X, { s4 - s5 }
|
||||
fldmias Y, { s8 - s9 }
|
||||
fmacs s0 , s4, s8
|
||||
fmacs s1 , s4, s9
|
||||
fmacs s2 , s5, s9
|
||||
fmacs s3 , s5, s8
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
fldmias X, { s4 - s5 }
|
||||
fldmias Y, { s8 - s9 }
|
||||
fmacs s0 , s4, s8
|
||||
fmacs s1 , s4, s9
|
||||
fmacs s2 , s5, s9
|
||||
fmacs s3 , s5, s8
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
fldmias X, { s4 - s5 }
|
||||
fldmias Y, { s8 - s9 }
|
||||
fmacs s0 , s4, s8
|
||||
fmacs s1 , s4, s9
|
||||
fmacs s2 , s5, s9
|
||||
fmacs s3 , s5, s8
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S1
|
||||
|
||||
fldmias X, { s4 - s5 }
|
||||
fldmias Y, { s8 - s9 }
|
||||
fmacs s0 , s4, s8
|
||||
fmacs s1 , s4, s9
|
||||
fmacs s2 , s5, s9
|
||||
fmacs s3 , s5, s8
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
|
||||
push {r4 - r9, fp}
|
||||
add fp, sp, #24
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
sub r4, fp, #128
|
||||
vstm r4, { s8 - s15} // store floating point registers
|
||||
|
||||
mov Y, OLD_Y
|
||||
ldr INC_Y, OLD_INC_Y
|
||||
|
||||
vsub.f32 s0 , s0 , s0
|
||||
vsub.f32 s1 , s1 , s1
|
||||
vsub.f32 s2 , s2 , s2
|
||||
vsub.f32 s3 , s3 , s3
|
||||
|
||||
cmp N, #0
|
||||
ble cdot_kernel_L999
|
||||
|
||||
cmp INC_X, #0
|
||||
beq cdot_kernel_L999
|
||||
|
||||
cmp INC_Y, #0
|
||||
beq cdot_kernel_L999
|
||||
|
||||
cmp INC_X, #1
|
||||
bne cdot_kernel_S_BEGIN
|
||||
|
||||
cmp INC_Y, #1
|
||||
bne cdot_kernel_S_BEGIN
|
||||
|
||||
cdot_kernel_F_BEGIN:
|
||||
|
||||
asrs I, N, #2 // I = N / 4
|
||||
ble cdot_kernel_F1
|
||||
|
||||
cdot_kernel_F4:
|
||||
|
||||
KERNEL_F4
|
||||
|
||||
subs I, I, #1
|
||||
bne cdot_kernel_F4
|
||||
|
||||
cdot_kernel_F1:
|
||||
|
||||
ands I, N, #3
|
||||
ble cdot_kernel_L999
|
||||
|
||||
cdot_kernel_F10:
|
||||
|
||||
KERNEL_F1
|
||||
|
||||
subs I, I, #1
|
||||
bne cdot_kernel_F10
|
||||
|
||||
b cdot_kernel_L999
|
||||
|
||||
cdot_kernel_S_BEGIN:
|
||||
|
||||
lsl INC_X, INC_X, #3 // INC_X * SIZE * 2
|
||||
lsl INC_Y, INC_Y, #3 // INC_Y * SIZE * 2
|
||||
|
||||
asrs I, N, #2 // I = N / 4
|
||||
ble cdot_kernel_S1
|
||||
|
||||
cdot_kernel_S4:
|
||||
|
||||
KERNEL_S4
|
||||
|
||||
subs I, I, #1
|
||||
bne cdot_kernel_S4
|
||||
|
||||
cdot_kernel_S1:
|
||||
|
||||
ands I, N, #3
|
||||
ble cdot_kernel_L999
|
||||
|
||||
cdot_kernel_S10:
|
||||
|
||||
KERNEL_S1
|
||||
|
||||
subs I, I, #1
|
||||
bne cdot_kernel_S10
|
||||
|
||||
|
||||
|
||||
cdot_kernel_L999:
|
||||
|
||||
sub r3, fp, #128
|
||||
vldm r3, { s8 - s15} // restore floating point registers
|
||||
|
||||
#if !defined(CONJ)
|
||||
vsub.f32 s0 , s0, s2
|
||||
vadd.f32 s1 , s1, s3
|
||||
#else
|
||||
vadd.f32 s0 , s0, s2
|
||||
vsub.f32 s1 , s1, s3
|
||||
#endif
|
||||
|
||||
sub sp, fp, #24
|
||||
pop {r4 - r9, fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
1252
kernel/arm/cgemm_kernel_2x2_vfp.S
Normal file
1252
kernel/arm/cgemm_kernel_2x2_vfp.S
Normal file
File diff suppressed because it is too large
Load Diff
1309
kernel/arm/cgemm_kernel_2x2_vfpv3.S
Normal file
1309
kernel/arm/cgemm_kernel_2x2_vfpv3.S
Normal file
File diff suppressed because it is too large
Load Diff
258
kernel/arm/cgemm_ncopy_2_vfp.S
Normal file
258
kernel/arm/cgemm_ncopy_2_vfp.S
Normal file
@@ -0,0 +1,258 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/05 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define OLD_M r0
|
||||
#define OLD_N r1
|
||||
#define OLD_A r2
|
||||
#define OLD_LDA r3
|
||||
|
||||
|
||||
/******************************************************
|
||||
* [fp, #-128] - [fp, #-64] is reserved
|
||||
* for store and restore of floating point
|
||||
* registers
|
||||
*******************************************************/
|
||||
|
||||
#define LDA [fp, #-260 ]
|
||||
|
||||
#define B [fp, #4 ]
|
||||
|
||||
#define M r0
|
||||
#define N r1
|
||||
#define A r2
|
||||
|
||||
#define BO r5
|
||||
|
||||
#define AO1 r6
|
||||
#define AO2 r7
|
||||
|
||||
#define I r3
|
||||
#define J r12
|
||||
|
||||
#define A_PRE 256
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
.macro COPY2x2
|
||||
|
||||
flds s0 , [ AO1, #0 ]
|
||||
flds s1 , [ AO1, #4 ]
|
||||
flds s4 , [ AO1, #8 ]
|
||||
flds s5 , [ AO1, #12 ]
|
||||
|
||||
flds s2 , [ AO2, #0 ]
|
||||
flds s3 , [ AO2, #4 ]
|
||||
add AO1, AO1, #16
|
||||
flds s6 , [ AO2, #8 ]
|
||||
flds s7 , [ AO2, #12 ]
|
||||
|
||||
fstmias BO!, { s0 - s7 }
|
||||
add AO2, AO2, #16
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro COPY1x2
|
||||
|
||||
flds s0 , [ AO1, #0 ]
|
||||
flds s1 , [ AO1, #4 ]
|
||||
flds s2 , [ AO2, #0 ]
|
||||
flds s3 , [ AO2, #4 ]
|
||||
|
||||
add AO1, AO1, #8
|
||||
fstmias BO!, { s0 - s3 }
|
||||
add AO2, AO2, #8
|
||||
|
||||
.endm
|
||||
|
||||
.macro COPY2x1
|
||||
|
||||
flds s0 , [ AO1, #0 ]
|
||||
flds s1 , [ AO1, #4 ]
|
||||
flds s2 , [ AO1, #8 ]
|
||||
flds s3 , [ AO1, #12 ]
|
||||
|
||||
fstmias BO!, { s0 - s3 }
|
||||
add AO1, AO1, #16
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro COPY1x1
|
||||
|
||||
flds s0 , [ AO1, #0 ]
|
||||
flds s1 , [ AO1, #4 ]
|
||||
|
||||
fstmias BO!, { s0 - s1 }
|
||||
add AO1, AO1, #8
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
|
||||
push {r4 - r9, fp}
|
||||
add fp, sp, #24
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
|
||||
lsl r3, r3, #3 // lda = lda * 4 * 2
|
||||
str r3, LDA
|
||||
|
||||
sub r4, fp, #128
|
||||
vstm r4, { s8 - s15} // store floating point registers
|
||||
|
||||
ldr BO, B
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
cgemm_ncopy_L2_BEGIN:
|
||||
|
||||
asrs J, N, #1 // J = N / 2
|
||||
ble cgemm_ncopy_L1_BEGIN
|
||||
|
||||
cgemm_ncopy_L2_M2_BEGIN:
|
||||
|
||||
mov AO1, A // AO1 = A
|
||||
ldr r4 , LDA
|
||||
add AO2, AO1, r4
|
||||
add A , AO2, r4 // A = A + 2 * LDA
|
||||
|
||||
asrs I, M, #1 // I = M / 2
|
||||
ble cgemm_ncopy_L2_M2_40
|
||||
|
||||
cgemm_ncopy_L2_M2_20:
|
||||
|
||||
pld [ AO1, #A_PRE ]
|
||||
pld [ AO2, #A_PRE ]
|
||||
|
||||
COPY2x2
|
||||
subs I , I , #1
|
||||
ble cgemm_ncopy_L2_M2_40
|
||||
|
||||
COPY2x2
|
||||
subs I , I , #1
|
||||
bne cgemm_ncopy_L2_M2_20
|
||||
|
||||
|
||||
cgemm_ncopy_L2_M2_40:
|
||||
|
||||
ands I, M , #1
|
||||
ble cgemm_ncopy_L2_M2_END
|
||||
|
||||
cgemm_ncopy_L2_M2_60:
|
||||
|
||||
COPY1x2
|
||||
|
||||
subs I , I , #1
|
||||
bne cgemm_ncopy_L2_M2_60
|
||||
|
||||
|
||||
cgemm_ncopy_L2_M2_END:
|
||||
|
||||
subs J , J, #1 // j--
|
||||
bne cgemm_ncopy_L2_M2_BEGIN
|
||||
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
cgemm_ncopy_L1_BEGIN:
|
||||
|
||||
tst N, #1
|
||||
ble cgemm_ncopy_L999
|
||||
|
||||
|
||||
cgemm_ncopy_L1_M2_BEGIN:
|
||||
|
||||
mov AO1, A // AO1 = A
|
||||
ldr r4 , LDA
|
||||
add A , AO1, r4 // A = A + 1 * LDA
|
||||
|
||||
asrs I, M, #1 // I = M / 2
|
||||
ble cgemm_ncopy_L1_M2_40
|
||||
|
||||
cgemm_ncopy_L1_M2_20:
|
||||
|
||||
COPY2x1
|
||||
|
||||
subs I , I , #1
|
||||
bne cgemm_ncopy_L1_M2_20
|
||||
|
||||
|
||||
cgemm_ncopy_L1_M2_40:
|
||||
|
||||
ands I, M , #1
|
||||
ble cgemm_ncopy_L1_M2_END
|
||||
|
||||
cgemm_ncopy_L1_M2_60:
|
||||
|
||||
COPY1x1
|
||||
|
||||
subs I , I , #1
|
||||
bne cgemm_ncopy_L1_M2_60
|
||||
|
||||
|
||||
cgemm_ncopy_L1_M2_END:
|
||||
|
||||
|
||||
|
||||
cgemm_ncopy_L999:
|
||||
|
||||
sub r3, fp, #128
|
||||
vldm r3, { s8 - s15} // restore floating point registers
|
||||
|
||||
movs r0, #0 // set return value
|
||||
sub sp, fp, #24
|
||||
pop {r4 - r9, fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
243
kernel/arm/cgemm_tcopy_2_vfp.S
Normal file
243
kernel/arm/cgemm_tcopy_2_vfp.S
Normal file
@@ -0,0 +1,243 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/07 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define OLD_M r0
|
||||
#define OLD_N r1
|
||||
#define OLD_A r2
|
||||
#define OLD_LDA r3
|
||||
|
||||
|
||||
/******************************************************
|
||||
* [fp, #-128] - [fp, #-64] is reserved
|
||||
* for store and restore of floating point
|
||||
* registers
|
||||
*******************************************************/
|
||||
|
||||
#define B [fp, #4 ]
|
||||
#define A [fp, #-248 ]
|
||||
|
||||
#define M r0
|
||||
#define N r1
|
||||
#define M4 r2
|
||||
|
||||
#define LDA r5
|
||||
|
||||
#define AO1 r6
|
||||
#define BO1 r7
|
||||
#define BO2 r8
|
||||
|
||||
#define I r4
|
||||
#define J r12
|
||||
|
||||
#define A_PRE 256
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
.macro COPY2x2
|
||||
|
||||
fldmias AO1, { s0 - s3 }
|
||||
|
||||
add r3, AO1, LDA
|
||||
fldmias r3, { s4 - s7 }
|
||||
|
||||
fstmias BO1, { s0 - s7 }
|
||||
add AO1, AO1, #16
|
||||
add BO1, BO1, M4
|
||||
|
||||
.endm
|
||||
|
||||
.macro COPY1x2
|
||||
|
||||
fldmias AO1, { s0 -s1 }
|
||||
|
||||
add r3, AO1, LDA
|
||||
fldmias r3, { s2 - s3 }
|
||||
|
||||
fstmias BO2, { s0 - s3 }
|
||||
add AO1, AO1, #8
|
||||
add BO2, BO2, #16
|
||||
|
||||
.endm
|
||||
|
||||
/*************************************************************************************************************************/
|
||||
.macro COPY2x1
|
||||
|
||||
fldmias AO1, { s0 - s3 }
|
||||
|
||||
fstmias BO1, { s0 - s3 }
|
||||
add AO1, AO1, #16
|
||||
add BO1, BO1, M4
|
||||
|
||||
.endm
|
||||
|
||||
.macro COPY1x1
|
||||
|
||||
fldmias AO1, { s0 - s1 }
|
||||
|
||||
fstmias BO2, { s0 - s1 }
|
||||
add AO1, AO1, #8
|
||||
add BO2, BO2, #8
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
|
||||
push {r4 - r9, fp}
|
||||
add fp, sp, #24
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
str OLD_A, A // store A
|
||||
|
||||
lsl LDA, OLD_LDA, #3 // lda = lda * SIZE * 2
|
||||
|
||||
sub r4, fp, #128
|
||||
vstm r4, { s8 - s15} // store floating point registers
|
||||
|
||||
lsl r4 , M, #3 // M * SIZE * 2
|
||||
|
||||
ldr r3, B
|
||||
|
||||
and BO2 , N , #-2
|
||||
|
||||
mul BO2, BO2, r4
|
||||
|
||||
add BO2 , BO2, r3
|
||||
|
||||
lsl M4, M, #4 // M4 = M * 2 * SIZE * 2
|
||||
|
||||
cgemm_tcopy_L2_BEGIN:
|
||||
|
||||
asrs J, M, #1 // J = N / 2
|
||||
ble cgemm_tcopy_L1_BEGIN
|
||||
|
||||
cgemm_tcopy_L2_M2_BEGIN:
|
||||
|
||||
ldr AO1, A // AO1 = A
|
||||
lsl r3, LDA, #1 // r3 = 2 * LDA
|
||||
add r3, r3 , AO1 // A = A + 2 * LDA
|
||||
str r3, A // store A
|
||||
|
||||
ldr BO1, B
|
||||
add r3, BO1, #32 // B = B + 4 * SIZE *2
|
||||
str r3, B
|
||||
|
||||
asrs I, N, #1 // I = M / 2
|
||||
ble cgemm_tcopy_L2_M2_60
|
||||
|
||||
cgemm_tcopy_L2_M2_40:
|
||||
|
||||
COPY2x2
|
||||
subs I, I, #1
|
||||
bne cgemm_tcopy_L2_M2_40
|
||||
|
||||
cgemm_tcopy_L2_M2_60:
|
||||
|
||||
tst N , #1
|
||||
ble cgemm_tcopy_L2_M2_END
|
||||
|
||||
COPY1x2
|
||||
|
||||
|
||||
cgemm_tcopy_L2_M2_END:
|
||||
|
||||
subs J , J, #1 // j--
|
||||
bne cgemm_tcopy_L2_M2_BEGIN
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
cgemm_tcopy_L1_BEGIN:
|
||||
|
||||
tst M, #1
|
||||
ble cgemm_tcopy_L999
|
||||
|
||||
|
||||
cgemm_tcopy_L1_M2_BEGIN:
|
||||
|
||||
ldr AO1, A // AO1 = A
|
||||
add r3, LDA , AO1 // A = A + 1 * LDA
|
||||
str r3, A // store A
|
||||
|
||||
ldr BO1, B
|
||||
add r3, BO1, #16 // B = B + 2 * SIZE *2
|
||||
str r3, B
|
||||
|
||||
asrs I, N, #1 // I = M / 2
|
||||
ble cgemm_tcopy_L1_M2_60
|
||||
|
||||
|
||||
cgemm_tcopy_L1_M2_40:
|
||||
|
||||
COPY2x1
|
||||
subs I, I, #1
|
||||
bne cgemm_tcopy_L1_M2_40
|
||||
|
||||
cgemm_tcopy_L1_M2_60:
|
||||
|
||||
tst N , #1
|
||||
ble cgemm_tcopy_L1_M2_END
|
||||
|
||||
COPY1x1
|
||||
|
||||
|
||||
cgemm_tcopy_L1_M2_END:
|
||||
|
||||
|
||||
|
||||
cgemm_tcopy_L999:
|
||||
|
||||
sub r3, fp, #128
|
||||
vldm r3, { s8 - s15} // restore floating point registers
|
||||
|
||||
mov r0, #0 // set return value
|
||||
sub sp, fp, #24
|
||||
pop {r4 - r9, fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
697
kernel/arm/cgemv_n_vfp.S
Normal file
697
kernel/arm/cgemv_n_vfp.S
Normal file
@@ -0,0 +1,697 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/29 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define OLD_LDA [fp, #0 ]
|
||||
#define X [fp, #4 ]
|
||||
#define OLD_INC_X [fp, #8 ]
|
||||
#define Y [fp, #12 ]
|
||||
#define OLD_INC_Y [fp, #16 ]
|
||||
#define OLD_A r3
|
||||
#define OLD_M r0
|
||||
|
||||
#define AO1 r0
|
||||
#define N r1
|
||||
#define J r2
|
||||
|
||||
#define AO2 r4
|
||||
#define XO r5
|
||||
#define YO r6
|
||||
#define LDA r7
|
||||
#define INC_X r8
|
||||
#define INC_Y r9
|
||||
|
||||
#define I r12
|
||||
|
||||
#define ALPHA_I [fp, #-236]
|
||||
#define ALPHA_R [fp, #-244]
|
||||
|
||||
#define M [fp, #-252 ]
|
||||
#define A [fp, #-256 ]
|
||||
|
||||
|
||||
#define X_PRE 64
|
||||
#define Y_PRE 0
|
||||
#define A_PRE 0
|
||||
|
||||
/**************************************************************************************/
|
||||
|
||||
#if !defined(CONJ) && !defined(XCONJ)
|
||||
|
||||
#define KMAC_R fnmacs
|
||||
#define KMAC_I fmacs
|
||||
|
||||
#define FMAC_R1 fmacs
|
||||
#define FMAC_R2 fnmacs
|
||||
#define FMAC_I1 fmacs
|
||||
#define FMAC_I2 fmacs
|
||||
|
||||
#elif defined(CONJ) && !defined(XCONJ)
|
||||
|
||||
#define KMAC_R fmacs
|
||||
#define KMAC_I fnmacs
|
||||
|
||||
#define FMAC_R1 fmacs
|
||||
#define FMAC_R2 fnmacs
|
||||
#define FMAC_I1 fmacs
|
||||
#define FMAC_I2 fmacs
|
||||
|
||||
#elif !defined(CONJ) && defined(XCONJ)
|
||||
|
||||
#define KMAC_R fmacs
|
||||
#define KMAC_I fnmacs
|
||||
|
||||
#define FMAC_R1 fmacs
|
||||
#define FMAC_R2 fmacs
|
||||
#define FMAC_I1 fnmacs
|
||||
#define FMAC_I2 fmacs
|
||||
|
||||
#else
|
||||
|
||||
#define KMAC_R fnmacs
|
||||
#define KMAC_I fmacs
|
||||
|
||||
#define FMAC_R1 fmacs
|
||||
#define FMAC_R2 fmacs
|
||||
#define FMAC_I1 fnmacs
|
||||
#define FMAC_I2 fmacs
|
||||
|
||||
#endif
|
||||
|
||||
.macro INIT_F4
|
||||
|
||||
pld [ YO, #Y_PRE ]
|
||||
vsub.f32 s8 , s8 , s8
|
||||
vmov.f32 s9 , s8
|
||||
vmov.f32 s10, s8
|
||||
vmov.f32 s11, s8
|
||||
vmov.f32 s12, s8
|
||||
vmov.f32 s13, s8
|
||||
vmov.f32 s14, s8
|
||||
vmov.f32 s15, s8
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F4X4
|
||||
|
||||
pld [ XO, #X_PRE ]
|
||||
KERNEL_F4X1
|
||||
KERNEL_F4X1
|
||||
KERNEL_F4X1
|
||||
KERNEL_F4X1
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F4X1
|
||||
|
||||
pld [ AO2, #A_PRE ]
|
||||
flds s0 , [ AO1 ]
|
||||
flds s1 , [ AO1, #4 ]
|
||||
flds s2 , [ AO1, #8 ]
|
||||
flds s3 , [ AO1, #12 ]
|
||||
|
||||
flds s4 , [ XO ]
|
||||
flds s5 , [ XO, #4 ]
|
||||
|
||||
fmacs s8 , s0, s4
|
||||
fmacs s9 , s0, s5
|
||||
fmacs s10 , s2, s4
|
||||
fmacs s11 , s2, s5
|
||||
|
||||
KMAC_R s8 , s1, s5
|
||||
KMAC_I s9 , s1, s4
|
||||
KMAC_R s10 , s3, s5
|
||||
KMAC_I s11 , s3, s4
|
||||
|
||||
flds s0 , [ AO1, #16 ]
|
||||
flds s1 , [ AO1, #20 ]
|
||||
flds s2 , [ AO1, #24 ]
|
||||
flds s3 , [ AO1, #28 ]
|
||||
|
||||
fmacs s12 , s0, s4
|
||||
fmacs s13 , s0, s5
|
||||
fmacs s14 , s2, s4
|
||||
fmacs s15 , s2, s5
|
||||
|
||||
KMAC_R s12 , s1, s5
|
||||
KMAC_I s13 , s1, s4
|
||||
KMAC_R s14 , s3, s5
|
||||
KMAC_I s15 , s3, s4
|
||||
|
||||
add XO , XO, #8
|
||||
add AO1 , AO1, LDA
|
||||
add AO2 , AO2, LDA
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F4
|
||||
|
||||
flds s0, ALPHA_R
|
||||
flds s1, ALPHA_I
|
||||
|
||||
fldmias YO, { s4 - s7 }
|
||||
|
||||
FMAC_R1 s4 , s0 , s8
|
||||
FMAC_I1 s5 , s0 , s9
|
||||
FMAC_R2 s4 , s1 , s9
|
||||
FMAC_I2 s5 , s1 , s8
|
||||
|
||||
FMAC_R1 s6 , s0 , s10
|
||||
FMAC_I1 s7 , s0 , s11
|
||||
FMAC_R2 s6 , s1 , s11
|
||||
FMAC_I2 s7 , s1 , s10
|
||||
|
||||
fstmias YO!, { s4 - s7 }
|
||||
|
||||
fldmias YO, { s4 - s7 }
|
||||
|
||||
FMAC_R1 s4 , s0 , s12
|
||||
FMAC_I1 s5 , s0 , s13
|
||||
FMAC_R2 s4 , s1 , s13
|
||||
FMAC_I2 s5 , s1 , s12
|
||||
|
||||
FMAC_R1 s6 , s0 , s14
|
||||
FMAC_I1 s7 , s0 , s15
|
||||
FMAC_R2 s6 , s1 , s15
|
||||
FMAC_I2 s7 , s1 , s14
|
||||
|
||||
fstmias YO!, { s4 - s7 }
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
|
||||
.macro INIT_F1
|
||||
|
||||
vsub.f32 s8 , s8 , s8
|
||||
vmov.f32 s9 , s8
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F1X1
|
||||
|
||||
flds s0 , [ AO1 ]
|
||||
flds s1 , [ AO1, #4 ]
|
||||
|
||||
flds s4 , [ XO ]
|
||||
flds s5 , [ XO, #4 ]
|
||||
|
||||
fmacs s8 , s0, s4
|
||||
fmacs s9 , s0, s5
|
||||
|
||||
KMAC_R s8 , s1, s5
|
||||
KMAC_I s9 , s1, s4
|
||||
|
||||
add XO , XO, #8
|
||||
add AO1 , AO1, LDA
|
||||
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F1
|
||||
|
||||
flds s0, ALPHA_R
|
||||
flds s1, ALPHA_I
|
||||
|
||||
fldmias YO, { s4 - s5 }
|
||||
|
||||
FMAC_R1 s4 , s0 , s8
|
||||
FMAC_I1 s5 , s0 , s9
|
||||
FMAC_R2 s4 , s1 , s9
|
||||
FMAC_I2 s5 , s1 , s8
|
||||
|
||||
fstmias YO, { s4 - s5 }
|
||||
|
||||
add YO, YO, #8
|
||||
|
||||
.endm
|
||||
|
||||
/****************************************************************************************/
|
||||
|
||||
.macro INIT_S4
|
||||
|
||||
vsub.f32 s8 , s8 , s8
|
||||
vmov.f32 s9 , s8
|
||||
vmov.f32 s10, s8
|
||||
vmov.f32 s11, s8
|
||||
vmov.f32 s12, s8
|
||||
vmov.f32 s13, s8
|
||||
vmov.f32 s14, s8
|
||||
vmov.f32 s15, s8
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S4X4
|
||||
|
||||
KERNEL_S4X1
|
||||
KERNEL_S4X1
|
||||
KERNEL_S4X1
|
||||
KERNEL_S4X1
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S4X1
|
||||
|
||||
flds s0 , [ AO1 ]
|
||||
flds s1 , [ AO1, #4 ]
|
||||
flds s2 , [ AO1, #8 ]
|
||||
flds s3 , [ AO1, #12 ]
|
||||
|
||||
flds s4 , [ XO ]
|
||||
flds s5 , [ XO, #4 ]
|
||||
|
||||
fmacs s8 , s0, s4
|
||||
fmacs s9 , s0, s5
|
||||
fmacs s10 , s2, s4
|
||||
fmacs s11 , s2, s5
|
||||
|
||||
KMAC_R s8 , s1, s5
|
||||
KMAC_I s9 , s1, s4
|
||||
KMAC_R s10 , s3, s5
|
||||
KMAC_I s11 , s3, s4
|
||||
|
||||
flds s0 , [ AO1, #16 ]
|
||||
flds s1 , [ AO1, #20 ]
|
||||
flds s2 , [ AO1, #24 ]
|
||||
flds s3 , [ AO1, #28 ]
|
||||
|
||||
fmacs s12 , s0, s4
|
||||
fmacs s13 , s0, s5
|
||||
fmacs s14 , s2, s4
|
||||
fmacs s15 , s2, s5
|
||||
|
||||
KMAC_R s12 , s1, s5
|
||||
KMAC_I s13 , s1, s4
|
||||
KMAC_R s14 , s3, s5
|
||||
KMAC_I s15 , s3, s4
|
||||
|
||||
add XO , XO, INC_X
|
||||
add AO1 , AO1, LDA
|
||||
add AO2 , AO2, LDA
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S4
|
||||
|
||||
flds s0, ALPHA_R
|
||||
flds s1, ALPHA_I
|
||||
|
||||
fldmias YO, { s4 - s5 }
|
||||
|
||||
FMAC_R1 s4 , s0 , s8
|
||||
FMAC_I1 s5 , s0 , s9
|
||||
FMAC_R2 s4 , s1 , s9
|
||||
FMAC_I2 s5 , s1 , s8
|
||||
|
||||
fstmias YO, { s4 - s5 }
|
||||
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s6 - s7 }
|
||||
|
||||
FMAC_R1 s6 , s0 , s10
|
||||
FMAC_I1 s7 , s0 , s11
|
||||
FMAC_R2 s6 , s1 , s11
|
||||
FMAC_I2 s7 , s1 , s10
|
||||
|
||||
fstmias YO, { s6 - s7 }
|
||||
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s4 - s5 }
|
||||
|
||||
FMAC_R1 s4 , s0 , s12
|
||||
FMAC_I1 s5 , s0 , s13
|
||||
FMAC_R2 s4 , s1 , s13
|
||||
FMAC_I2 s5 , s1 , s12
|
||||
|
||||
fstmias YO, { s4 - s5 }
|
||||
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s6 - s7 }
|
||||
|
||||
FMAC_R1 s6 , s0 , s14
|
||||
FMAC_I1 s7 , s0 , s15
|
||||
FMAC_R2 s6 , s1 , s15
|
||||
FMAC_I2 s7 , s1 , s14
|
||||
|
||||
fstmias YO, { s6 - s7 }
|
||||
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
|
||||
.macro INIT_S1
|
||||
|
||||
vsub.f32 s8 , s8 , s8
|
||||
vmov.f32 s9 , s8
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S1X1
|
||||
|
||||
flds s0 , [ AO1 ]
|
||||
flds s1 , [ AO1, #4 ]
|
||||
|
||||
flds s4 , [ XO ]
|
||||
flds s5 , [ XO, #4 ]
|
||||
|
||||
fmacs s8 , s0, s4
|
||||
fmacs s9 , s0, s5
|
||||
|
||||
KMAC_R s8 , s1, s5
|
||||
KMAC_I s9 , s1, s4
|
||||
|
||||
add XO , XO, INC_X
|
||||
add AO1 , AO1, LDA
|
||||
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S1
|
||||
|
||||
flds s0, ALPHA_R
|
||||
flds s1, ALPHA_I
|
||||
|
||||
fldmias YO, { s4 - s5 }
|
||||
|
||||
FMAC_R1 s4 , s0 , s8
|
||||
FMAC_I1 s5 , s0 , s9
|
||||
FMAC_R2 s4 , s1 , s9
|
||||
FMAC_I2 s5 , s1 , s8
|
||||
|
||||
fstmias YO, { s4 - s5 }
|
||||
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
push {r4 - r9 , fp}
|
||||
add fp, sp, #28
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
sub r12, fp, #192
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vstm r12, { d8 - d15 } // store floating point registers
|
||||
#else
|
||||
vstm r12, { s8 - s15 } // store floating point registers
|
||||
#endif
|
||||
|
||||
cmp OLD_M, #0
|
||||
ble cgemvn_kernel_L999
|
||||
|
||||
cmp N, #0
|
||||
ble cgemvn_kernel_L999
|
||||
|
||||
str OLD_A, A
|
||||
str OLD_M, M
|
||||
vstr s0 , ALPHA_R
|
||||
vstr s1 , ALPHA_I
|
||||
|
||||
|
||||
ldr INC_X , OLD_INC_X
|
||||
ldr INC_Y , OLD_INC_Y
|
||||
|
||||
cmp INC_X, #0
|
||||
beq cgemvn_kernel_L999
|
||||
|
||||
cmp INC_Y, #0
|
||||
beq cgemvn_kernel_L999
|
||||
|
||||
ldr LDA, OLD_LDA
|
||||
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl LDA, LDA, #4 // LDA * SIZE * 2
|
||||
#else
|
||||
lsl LDA, LDA, #3 // LDA * SIZE * 2
|
||||
#endif
|
||||
|
||||
cmp INC_X, #1
|
||||
bne cgemvn_kernel_S4_BEGIN
|
||||
|
||||
cmp INC_Y, #1
|
||||
bne cgemvn_kernel_S4_BEGIN
|
||||
|
||||
|
||||
cgemvn_kernel_F4_BEGIN:
|
||||
|
||||
ldr YO , Y
|
||||
|
||||
ldr I, M
|
||||
asrs I, I, #2 // I = M / 4
|
||||
ble cgemvn_kernel_F1_BEGIN
|
||||
|
||||
cgemvn_kernel_F4X4:
|
||||
|
||||
ldr AO1, A
|
||||
add AO2, AO1, LDA
|
||||
add r3 , AO1, #32
|
||||
str r3 , A
|
||||
|
||||
add AO2, AO2, LDA
|
||||
add AO2, AO2, LDA
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_F4
|
||||
|
||||
asrs J, N, #2 // J = N / 4
|
||||
ble cgemvn_kernel_F4X1
|
||||
|
||||
|
||||
cgemvn_kernel_F4X4_10:
|
||||
|
||||
KERNEL_F4X4
|
||||
|
||||
subs J, J, #1
|
||||
bne cgemvn_kernel_F4X4_10
|
||||
|
||||
|
||||
cgemvn_kernel_F4X1:
|
||||
|
||||
ands J, N , #3
|
||||
ble cgemvn_kernel_F4_END
|
||||
|
||||
cgemvn_kernel_F4X1_10:
|
||||
|
||||
KERNEL_F4X1
|
||||
|
||||
subs J, J, #1
|
||||
bne cgemvn_kernel_F4X1_10
|
||||
|
||||
|
||||
cgemvn_kernel_F4_END:
|
||||
|
||||
SAVE_F4
|
||||
|
||||
subs I , I , #1
|
||||
bne cgemvn_kernel_F4X4
|
||||
|
||||
|
||||
cgemvn_kernel_F1_BEGIN:
|
||||
|
||||
ldr I, M
|
||||
ands I, I , #3
|
||||
ble cgemvn_kernel_L999
|
||||
|
||||
cgemvn_kernel_F1X1:
|
||||
|
||||
ldr AO1, A
|
||||
add r3, AO1, #8
|
||||
str r3, A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_F1
|
||||
|
||||
mov J, N
|
||||
|
||||
|
||||
cgemvn_kernel_F1X1_10:
|
||||
|
||||
KERNEL_F1X1
|
||||
|
||||
subs J, J, #1
|
||||
bne cgemvn_kernel_F1X1_10
|
||||
|
||||
|
||||
cgemvn_kernel_F1_END:
|
||||
|
||||
SAVE_F1
|
||||
|
||||
subs I , I , #1
|
||||
bne cgemvn_kernel_F1X1
|
||||
|
||||
b cgemvn_kernel_L999
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************************/
|
||||
|
||||
cgemvn_kernel_S4_BEGIN:
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl INC_X, INC_X, #4 // INC_X * SIZE * 2
|
||||
lsl INC_Y, INC_Y, #4 // INC_Y * SIZE * 2
|
||||
#else
|
||||
lsl INC_X, INC_X, #3 // INC_X * SIZE * 2
|
||||
lsl INC_Y, INC_Y, #3 // INC_Y * SIZE * 2
|
||||
#endif
|
||||
|
||||
ldr YO , Y
|
||||
|
||||
ldr I, M
|
||||
asrs I, I, #2 // I = M / 4
|
||||
ble cgemvn_kernel_S1_BEGIN
|
||||
|
||||
cgemvn_kernel_S4X4:
|
||||
|
||||
ldr AO1, A
|
||||
add AO2, AO1, LDA
|
||||
add r3 , AO1, #32
|
||||
str r3 , A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_S4
|
||||
|
||||
asrs J, N, #2 // J = N / 4
|
||||
ble cgemvn_kernel_S4X1
|
||||
|
||||
|
||||
cgemvn_kernel_S4X4_10:
|
||||
|
||||
KERNEL_S4X4
|
||||
|
||||
subs J, J, #1
|
||||
bne cgemvn_kernel_S4X4_10
|
||||
|
||||
|
||||
cgemvn_kernel_S4X1:
|
||||
|
||||
ands J, N , #3
|
||||
ble cgemvn_kernel_S4_END
|
||||
|
||||
cgemvn_kernel_S4X1_10:
|
||||
|
||||
KERNEL_S4X1
|
||||
|
||||
subs J, J, #1
|
||||
bne cgemvn_kernel_S4X1_10
|
||||
|
||||
|
||||
cgemvn_kernel_S4_END:
|
||||
|
||||
SAVE_S4
|
||||
|
||||
subs I , I , #1
|
||||
bne cgemvn_kernel_S4X4
|
||||
|
||||
|
||||
cgemvn_kernel_S1_BEGIN:
|
||||
|
||||
ldr I, M
|
||||
ands I, I , #3
|
||||
ble cgemvn_kernel_L999
|
||||
|
||||
cgemvn_kernel_S1X1:
|
||||
|
||||
ldr AO1, A
|
||||
add r3, AO1, #8
|
||||
str r3, A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_S1
|
||||
|
||||
mov J, N
|
||||
|
||||
|
||||
cgemvn_kernel_S1X1_10:
|
||||
|
||||
KERNEL_S1X1
|
||||
|
||||
subs J, J, #1
|
||||
bne cgemvn_kernel_S1X1_10
|
||||
|
||||
|
||||
cgemvn_kernel_S1_END:
|
||||
|
||||
SAVE_S1
|
||||
|
||||
subs I , I , #1
|
||||
bne cgemvn_kernel_S1X1
|
||||
|
||||
|
||||
/*************************************************************************************************************/
|
||||
|
||||
cgemvn_kernel_L999:
|
||||
|
||||
sub r3, fp, #192
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vldm r3, { d8 - d15 } // restore floating point registers
|
||||
#else
|
||||
vldm r3, { s8 - s15 } // restore floating point registers
|
||||
#endif
|
||||
|
||||
mov r0, #0 // set return value
|
||||
|
||||
sub sp, fp, #28
|
||||
pop {r4 -r9 ,fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
607
kernel/arm/cgemv_t_vfp.S
Normal file
607
kernel/arm/cgemv_t_vfp.S
Normal file
@@ -0,0 +1,607 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/29 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define OLD_LDA [fp, #0 ]
|
||||
#define X [fp, #4 ]
|
||||
#define OLD_INC_X [fp, #8 ]
|
||||
#define Y [fp, #12 ]
|
||||
#define OLD_INC_Y [fp, #16 ]
|
||||
#define OLD_A r3
|
||||
#define OLD_N r1
|
||||
|
||||
#define M r0
|
||||
#define AO1 r1
|
||||
#define J r2
|
||||
|
||||
#define AO2 r4
|
||||
#define XO r5
|
||||
#define YO r6
|
||||
#define LDA r7
|
||||
#define INC_X r8
|
||||
#define INC_Y r9
|
||||
|
||||
#define I r12
|
||||
|
||||
#define N [fp, #-252 ]
|
||||
#define A [fp, #-256 ]
|
||||
|
||||
|
||||
#define X_PRE 512
|
||||
#define A_PRE 512
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
#if !defined(CONJ) && !defined(XCONJ)
|
||||
|
||||
#define KMAC_R fnmacs
|
||||
#define KMAC_I fmacs
|
||||
|
||||
#define FMAC_R1 fmacs
|
||||
#define FMAC_R2 fnmacs
|
||||
#define FMAC_I1 fmacs
|
||||
#define FMAC_I2 fmacs
|
||||
|
||||
#elif defined(CONJ) && !defined(XCONJ)
|
||||
|
||||
#define KMAC_R fmacs
|
||||
#define KMAC_I fnmacs
|
||||
|
||||
#define FMAC_R1 fmacs
|
||||
#define FMAC_R2 fnmacs
|
||||
#define FMAC_I1 fmacs
|
||||
#define FMAC_I2 fmacs
|
||||
|
||||
#elif !defined(CONJ) && defined(XCONJ)
|
||||
|
||||
#define KMAC_R fmacs
|
||||
#define KMAC_I fnmacs
|
||||
|
||||
#define FMAC_R1 fmacs
|
||||
#define FMAC_R2 fmacs
|
||||
#define FMAC_I1 fnmacs
|
||||
#define FMAC_I2 fmacs
|
||||
|
||||
#else
|
||||
|
||||
#define KMAC_R fnmacs
|
||||
#define KMAC_I fmacs
|
||||
|
||||
#define FMAC_R1 fmacs
|
||||
#define FMAC_R2 fmacs
|
||||
#define FMAC_I1 fnmacs
|
||||
#define FMAC_I2 fmacs
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
.macro INIT_F2
|
||||
|
||||
vsub.f32 s12, s12, s12
|
||||
vsub.f32 s13, s13, s13
|
||||
vsub.f32 s14, s14, s14
|
||||
vsub.f32 s15, s15, s15
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F2X4
|
||||
|
||||
KERNEL_F2X1
|
||||
KERNEL_F2X1
|
||||
KERNEL_F2X1
|
||||
KERNEL_F2X1
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F2X1
|
||||
|
||||
fldmias XO! , { s2 - s3 }
|
||||
fldmias AO1!, { s4 - s5 }
|
||||
fldmias AO2!, { s8 - s9 }
|
||||
|
||||
fmacs s12 , s4 , s2
|
||||
fmacs s13 , s4 , s3
|
||||
KMAC_R s12 , s5 , s3
|
||||
KMAC_I s13 , s5 , s2
|
||||
|
||||
fmacs s14 , s8 , s2
|
||||
fmacs s15 , s8 , s3
|
||||
KMAC_R s14 , s9 , s3
|
||||
KMAC_I s15 , s9 , s2
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F2
|
||||
|
||||
fldmias YO, { s4 - s7 }
|
||||
|
||||
FMAC_R1 s4 , s0 , s12
|
||||
FMAC_I1 s5 , s0 , s13
|
||||
FMAC_R2 s4 , s1 , s13
|
||||
FMAC_I2 s5 , s1 , s12
|
||||
|
||||
FMAC_R1 s6 , s0 , s14
|
||||
FMAC_I1 s7 , s0 , s15
|
||||
FMAC_R2 s6 , s1 , s15
|
||||
FMAC_I2 s7 , s1 , s14
|
||||
|
||||
fstmias YO!, { s4 - s7 }
|
||||
|
||||
.endm
|
||||
|
||||
/************************************************************************************************/
|
||||
|
||||
.macro INIT_F1
|
||||
|
||||
vsub.f32 s12, s12, s12
|
||||
vsub.f32 s13, s13, s13
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F1X4
|
||||
|
||||
KERNEL_F1X1
|
||||
KERNEL_F1X1
|
||||
KERNEL_F1X1
|
||||
KERNEL_F1X1
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F1X1
|
||||
|
||||
fldmias XO! , { s2 - s3 }
|
||||
fldmias AO1!, { s4 - s5 }
|
||||
|
||||
fmacs s12 , s4 , s2
|
||||
fmacs s13 , s4 , s3
|
||||
KMAC_R s12 , s5 , s3
|
||||
KMAC_I s13 , s5 , s2
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F1
|
||||
|
||||
fldmias YO, { s4 - s5 }
|
||||
|
||||
FMAC_R1 s4 , s0 , s12
|
||||
FMAC_I1 s5 , s0 , s13
|
||||
FMAC_R2 s4 , s1 , s13
|
||||
FMAC_I2 s5 , s1 , s12
|
||||
|
||||
fstmias YO!, { s4 - s5 }
|
||||
|
||||
.endm
|
||||
|
||||
/************************************************************************************************/
|
||||
|
||||
.macro INIT_S2
|
||||
|
||||
vsub.f32 s12, s12, s12
|
||||
vsub.f32 s13, s13, s13
|
||||
vsub.f32 s14, s14, s14
|
||||
vsub.f32 s15, s15, s15
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S2X4
|
||||
|
||||
KERNEL_S2X1
|
||||
KERNEL_S2X1
|
||||
KERNEL_S2X1
|
||||
KERNEL_S2X1
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S2X1
|
||||
|
||||
fldmias XO , { s2 - s3 }
|
||||
fldmias AO1!, { s4 - s5 }
|
||||
fldmias AO2!, { s8 - s9 }
|
||||
|
||||
fmacs s12 , s4 , s2
|
||||
fmacs s13 , s4 , s3
|
||||
KMAC_R s12 , s5 , s3
|
||||
KMAC_I s13 , s5 , s2
|
||||
|
||||
fmacs s14 , s8 , s2
|
||||
fmacs s15 , s8 , s3
|
||||
KMAC_R s14 , s9 , s3
|
||||
KMAC_I s15 , s9 , s2
|
||||
|
||||
add XO, XO, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S2
|
||||
|
||||
fldmias YO, { s4 - s5 }
|
||||
|
||||
FMAC_R1 s4 , s0 , s12
|
||||
FMAC_I1 s5 , s0 , s13
|
||||
FMAC_R2 s4 , s1 , s13
|
||||
FMAC_I2 s5 , s1 , s12
|
||||
|
||||
fstmias YO, { s4 - s5 }
|
||||
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s6 - s7 }
|
||||
|
||||
FMAC_R1 s6 , s0 , s14
|
||||
FMAC_I1 s7 , s0 , s15
|
||||
FMAC_R2 s6 , s1 , s15
|
||||
FMAC_I2 s7 , s1 , s14
|
||||
|
||||
fstmias YO, { s6 - s7 }
|
||||
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
/************************************************************************************************/
|
||||
|
||||
.macro INIT_S1
|
||||
|
||||
vsub.f32 s12, s12, s12
|
||||
vsub.f32 s13, s13, s13
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S1X4
|
||||
|
||||
KERNEL_S1X1
|
||||
KERNEL_S1X1
|
||||
KERNEL_S1X1
|
||||
KERNEL_S1X1
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S1X1
|
||||
|
||||
fldmias XO , { s2 - s3 }
|
||||
fldmias AO1!, { s4 - s5 }
|
||||
|
||||
fmacs s12 , s4 , s2
|
||||
fmacs s13 , s4 , s3
|
||||
KMAC_R s12 , s5 , s3
|
||||
KMAC_I s13 , s5 , s2
|
||||
|
||||
add XO, XO, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S1
|
||||
|
||||
fldmias YO, { s4 - s5 }
|
||||
|
||||
FMAC_R1 s4 , s0 , s12
|
||||
FMAC_I1 s5 , s0 , s13
|
||||
FMAC_R2 s4 , s1 , s13
|
||||
FMAC_I2 s5 , s1 , s12
|
||||
|
||||
fstmias YO, { s4 - s5 }
|
||||
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
push {r4 - r9 , fp}
|
||||
add fp, sp, #28
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
sub r12, fp, #192
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vstm r12, { d8 - d15 } // store floating point registers
|
||||
#else
|
||||
vstm r12, { s8 - s15 } // store floating point registers
|
||||
#endif
|
||||
|
||||
cmp M, #0
|
||||
ble cgemvt_kernel_L999
|
||||
|
||||
cmp OLD_N, #0
|
||||
ble cgemvt_kernel_L999
|
||||
|
||||
str OLD_A, A
|
||||
str OLD_N, N
|
||||
|
||||
ldr INC_X , OLD_INC_X
|
||||
ldr INC_Y , OLD_INC_Y
|
||||
|
||||
cmp INC_X, #0
|
||||
beq cgemvt_kernel_L999
|
||||
|
||||
cmp INC_Y, #0
|
||||
beq cgemvt_kernel_L999
|
||||
|
||||
ldr LDA, OLD_LDA
|
||||
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl LDA, LDA, #4 // LDA * SIZE
|
||||
#else
|
||||
lsl LDA, LDA, #3 // LDA * SIZE
|
||||
#endif
|
||||
|
||||
cmp INC_X, #1
|
||||
bne cgemvt_kernel_S2_BEGIN
|
||||
|
||||
cmp INC_Y, #1
|
||||
bne cgemvt_kernel_S2_BEGIN
|
||||
|
||||
|
||||
cgemvt_kernel_F2_BEGIN:
|
||||
|
||||
ldr YO , Y
|
||||
|
||||
ldr J, N
|
||||
asrs J, J, #1 // J = N / 2
|
||||
ble cgemvt_kernel_F1_BEGIN
|
||||
|
||||
cgemvt_kernel_F2X4:
|
||||
|
||||
ldr AO1, A
|
||||
add AO2, AO1, LDA
|
||||
add r3 , AO2, LDA
|
||||
str r3 , A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_F2
|
||||
|
||||
asrs I, M, #2 // I = M / 4
|
||||
ble cgemvt_kernel_F2X1
|
||||
|
||||
|
||||
cgemvt_kernel_F2X4_10:
|
||||
|
||||
KERNEL_F2X4
|
||||
|
||||
subs I, I, #1
|
||||
bne cgemvt_kernel_F2X4_10
|
||||
|
||||
|
||||
cgemvt_kernel_F2X1:
|
||||
|
||||
ands I, M , #3
|
||||
ble cgemvt_kernel_F2_END
|
||||
|
||||
cgemvt_kernel_F2X1_10:
|
||||
|
||||
KERNEL_F2X1
|
||||
|
||||
subs I, I, #1
|
||||
bne cgemvt_kernel_F2X1_10
|
||||
|
||||
|
||||
cgemvt_kernel_F2_END:
|
||||
|
||||
SAVE_F2
|
||||
|
||||
subs J , J , #1
|
||||
bne cgemvt_kernel_F2X4
|
||||
|
||||
|
||||
cgemvt_kernel_F1_BEGIN:
|
||||
|
||||
ldr J, N
|
||||
ands J, J, #1
|
||||
ble cgemvt_kernel_L999
|
||||
|
||||
cgemvt_kernel_F1X4:
|
||||
|
||||
ldr AO1, A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_F1
|
||||
|
||||
asrs I, M, #2 // I = M / 4
|
||||
ble cgemvt_kernel_F1X1
|
||||
|
||||
|
||||
cgemvt_kernel_F1X4_10:
|
||||
|
||||
KERNEL_F1X4
|
||||
|
||||
subs I, I, #1
|
||||
bne cgemvt_kernel_F1X4_10
|
||||
|
||||
|
||||
cgemvt_kernel_F1X1:
|
||||
|
||||
ands I, M , #3
|
||||
ble cgemvt_kernel_F1_END
|
||||
|
||||
cgemvt_kernel_F1X1_10:
|
||||
|
||||
KERNEL_F1X1
|
||||
|
||||
subs I, I, #1
|
||||
bne cgemvt_kernel_F1X1_10
|
||||
|
||||
|
||||
cgemvt_kernel_F1_END:
|
||||
|
||||
SAVE_F1
|
||||
|
||||
b cgemvt_kernel_L999
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************************/
|
||||
|
||||
cgemvt_kernel_S2_BEGIN:
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl INC_X, INC_X, #4 // INC_X * SIZE
|
||||
lsl INC_Y, INC_Y, #4 // INC_Y * SIZE
|
||||
#else
|
||||
lsl INC_X, INC_X, #3 // INC_X * SIZE
|
||||
lsl INC_Y, INC_Y, #3 // INC_Y * SIZE
|
||||
#endif
|
||||
|
||||
ldr YO , Y
|
||||
|
||||
ldr J, N
|
||||
asrs J, J, #1 // J = N / 2
|
||||
ble cgemvt_kernel_S1_BEGIN
|
||||
|
||||
cgemvt_kernel_S2X4:
|
||||
|
||||
ldr AO1, A
|
||||
add AO2, AO1, LDA
|
||||
add r3 , AO2, LDA
|
||||
str r3 , A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_S2
|
||||
|
||||
asrs I, M, #2 // I = M / 4
|
||||
ble cgemvt_kernel_S2X1
|
||||
|
||||
|
||||
cgemvt_kernel_S2X4_10:
|
||||
|
||||
KERNEL_S2X4
|
||||
|
||||
subs I, I, #1
|
||||
bne cgemvt_kernel_S2X4_10
|
||||
|
||||
|
||||
cgemvt_kernel_S2X1:
|
||||
|
||||
ands I, M , #3
|
||||
ble cgemvt_kernel_S2_END
|
||||
|
||||
cgemvt_kernel_S2X1_10:
|
||||
|
||||
KERNEL_S2X1
|
||||
|
||||
subs I, I, #1
|
||||
bne cgemvt_kernel_S2X1_10
|
||||
|
||||
|
||||
cgemvt_kernel_S2_END:
|
||||
|
||||
SAVE_S2
|
||||
|
||||
subs J , J , #1
|
||||
bne cgemvt_kernel_S2X4
|
||||
|
||||
|
||||
cgemvt_kernel_S1_BEGIN:
|
||||
|
||||
ldr J, N
|
||||
ands J, J, #1
|
||||
ble cgemvt_kernel_L999
|
||||
|
||||
cgemvt_kernel_S1X4:
|
||||
|
||||
ldr AO1, A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_S1
|
||||
|
||||
asrs I, M, #2 // I = M / 4
|
||||
ble cgemvt_kernel_S1X1
|
||||
|
||||
|
||||
cgemvt_kernel_S1X4_10:
|
||||
|
||||
KERNEL_S1X4
|
||||
|
||||
subs I, I, #1
|
||||
bne cgemvt_kernel_S1X4_10
|
||||
|
||||
|
||||
cgemvt_kernel_S1X1:
|
||||
|
||||
ands I, M , #3
|
||||
ble cgemvt_kernel_S1_END
|
||||
|
||||
cgemvt_kernel_S1X1_10:
|
||||
|
||||
KERNEL_S1X1
|
||||
|
||||
subs I, I, #1
|
||||
bne cgemvt_kernel_S1X1_10
|
||||
|
||||
|
||||
cgemvt_kernel_S1_END:
|
||||
|
||||
SAVE_S1
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************************/
|
||||
|
||||
cgemvt_kernel_L999:
|
||||
|
||||
sub r3, fp, #192
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vldm r3, { d8 - d15 } // restore floating point registers
|
||||
#else
|
||||
vldm r3, { s8 - s15 } // restore floating point registers
|
||||
#endif
|
||||
|
||||
mov r0, #0 // set return value
|
||||
|
||||
sub sp, fp, #28
|
||||
pop {r4 -r9 ,fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
59
kernel/arm/copy.c
Normal file
59
kernel/arm/copy.c
Normal file
@@ -0,0 +1,59 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/09/14 Saar
|
||||
* BLASTEST float : OK
|
||||
* BLASTEST double : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#include "common.h"
|
||||
|
||||
int CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y)
|
||||
{
|
||||
BLASLONG i=0;
|
||||
BLASLONG ix=0,iy=0;
|
||||
|
||||
if ( n < 0 ) return(0);
|
||||
|
||||
while(i < n)
|
||||
{
|
||||
|
||||
y[iy] = x[ix] ;
|
||||
ix += inc_x ;
|
||||
iy += inc_y ;
|
||||
i++ ;
|
||||
|
||||
}
|
||||
return(0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
1455
kernel/arm/ctrmm_kernel_2x2_vfp.S
Normal file
1455
kernel/arm/ctrmm_kernel_2x2_vfp.S
Normal file
File diff suppressed because it is too large
Load Diff
1476
kernel/arm/ctrmm_kernel_2x2_vfpv3.S
Normal file
1476
kernel/arm/ctrmm_kernel_2x2_vfpv3.S
Normal file
File diff suppressed because it is too large
Load Diff
222
kernel/arm/dcopy_vfp.S
Normal file
222
kernel/arm/dcopy_vfp.S
Normal file
@@ -0,0 +1,222 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/07 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define N r0
|
||||
#define X r1
|
||||
#define INC_X r2
|
||||
#define OLD_Y r3
|
||||
|
||||
|
||||
/******************************************************
|
||||
* [fp, #-128] - [fp, #-64] is reserved
|
||||
* for store and restore of floating point
|
||||
* registers
|
||||
*******************************************************/
|
||||
|
||||
#define OLD_INC_Y [fp, #4 ]
|
||||
|
||||
#define I r5
|
||||
#define Y r6
|
||||
#define INC_Y r7
|
||||
|
||||
#define X_PRE 256
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
.macro COPY_F4
|
||||
|
||||
pld [ X, #X_PRE ]
|
||||
fldmiad X!, { d0 - d3 }
|
||||
fstmiad Y!, { d0 - d3 }
|
||||
|
||||
.endm
|
||||
|
||||
.macro COPY_F1
|
||||
|
||||
fldmiad X!, { d0 }
|
||||
fstmiad Y!, { d0 }
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
/*************************************************************************************************************************/
|
||||
|
||||
.macro COPY_S4
|
||||
|
||||
nop
|
||||
fldmiad X, { d0 }
|
||||
fstmiad Y, { d0 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
fldmiad X, { d1 }
|
||||
fstmiad Y, { d1 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
fldmiad X, { d0 }
|
||||
fstmiad Y, { d0 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
fldmiad X, { d1 }
|
||||
fstmiad Y, { d1 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro COPY_S1
|
||||
|
||||
fldmiad X, { d0 }
|
||||
fstmiad Y, { d0 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
|
||||
push {r4 - r9, fp}
|
||||
add fp, sp, #24
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
sub r4, fp, #128
|
||||
vstm r4, { d8 - d15} // store floating point registers
|
||||
|
||||
mov Y, OLD_Y
|
||||
ldr INC_Y, OLD_INC_Y
|
||||
|
||||
cmp N, #0
|
||||
ble dcopy_kernel_L999
|
||||
|
||||
cmp INC_X, #0
|
||||
beq dcopy_kernel_L999
|
||||
|
||||
cmp INC_Y, #0
|
||||
beq dcopy_kernel_L999
|
||||
|
||||
cmp INC_X, #1
|
||||
bne dcopy_kernel_S_BEGIN
|
||||
|
||||
cmp INC_Y, #1
|
||||
bne dcopy_kernel_S_BEGIN
|
||||
|
||||
dcopy_kernel_F_BEGIN:
|
||||
|
||||
asrs I, N, #2 // I = N / 4
|
||||
ble dcopy_kernel_F1
|
||||
|
||||
dcopy_kernel_F4:
|
||||
|
||||
COPY_F4
|
||||
|
||||
subs I, I, #1
|
||||
bne dcopy_kernel_F4
|
||||
|
||||
dcopy_kernel_F1:
|
||||
|
||||
ands I, N, #3
|
||||
ble dcopy_kernel_L999
|
||||
|
||||
dcopy_kernel_F10:
|
||||
|
||||
COPY_F1
|
||||
|
||||
subs I, I, #1
|
||||
bne dcopy_kernel_F10
|
||||
|
||||
b dcopy_kernel_L999
|
||||
|
||||
dcopy_kernel_S_BEGIN:
|
||||
|
||||
lsl INC_X, INC_X, #3 // INC_X * SIZE
|
||||
lsl INC_Y, INC_Y, #3 // INC_Y * SIZE
|
||||
|
||||
asrs I, N, #2 // I = N / 4
|
||||
ble dcopy_kernel_S1
|
||||
|
||||
dcopy_kernel_S4:
|
||||
|
||||
COPY_S4
|
||||
|
||||
subs I, I, #1
|
||||
bne dcopy_kernel_S4
|
||||
|
||||
dcopy_kernel_S1:
|
||||
|
||||
ands I, N, #3
|
||||
ble dcopy_kernel_L999
|
||||
|
||||
dcopy_kernel_S10:
|
||||
|
||||
COPY_S1
|
||||
|
||||
subs I, I, #1
|
||||
bne dcopy_kernel_S10
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
dcopy_kernel_L999:
|
||||
|
||||
sub r3, fp, #128
|
||||
vldm r3, { d8 - d15} // restore floating point registers
|
||||
|
||||
mov r0, #0 // set return value
|
||||
sub sp, fp, #24
|
||||
pop {r4 - r9, fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
248
kernel/arm/ddot_vfp.S
Normal file
248
kernel/arm/ddot_vfp.S
Normal file
@@ -0,0 +1,248 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/11 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define N r0
|
||||
#define X r1
|
||||
#define INC_X r2
|
||||
#define OLD_Y r3
|
||||
|
||||
|
||||
/******************************************************
|
||||
* [fp, #-128] - [fp, #-64] is reserved
|
||||
* for store and restore of floating point
|
||||
* registers
|
||||
*******************************************************/
|
||||
|
||||
#define OLD_INC_Y [fp, #4 ]
|
||||
|
||||
#define I r5
|
||||
#define Y r6
|
||||
#define INC_Y r7
|
||||
|
||||
#define X_PRE 512
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
.macro KERNEL_F4
|
||||
|
||||
pld [ X, #X_PRE ]
|
||||
fldmiad X!, { d8 }
|
||||
pld [ Y, #X_PRE ]
|
||||
fldmiad Y!, { d4 }
|
||||
fldmiad Y!, { d5 }
|
||||
fmacd d0 , d4, d8
|
||||
fldmiad X!, { d9 }
|
||||
fldmiad Y!, { d6 }
|
||||
fmacd d1 , d5, d9
|
||||
fldmiad X!, { d10 }
|
||||
fldmiad X!, { d11 }
|
||||
fmacd d0 , d6, d10
|
||||
fldmiad Y!, { d7 }
|
||||
fmacd d1 , d7, d11
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F1
|
||||
|
||||
fldmiad X!, { d4 }
|
||||
fldmiad Y!, { d8 }
|
||||
fmacd d0 , d4, d8
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
/*************************************************************************************************************************/
|
||||
|
||||
.macro KERNEL_S4
|
||||
|
||||
nop
|
||||
fldmiad X, { d4 }
|
||||
fldmiad Y, { d8 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
fmacd d0 , d4, d8
|
||||
|
||||
fldmiad X, { d5 }
|
||||
fldmiad Y, { d9 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
fmacd d1 , d5, d9
|
||||
|
||||
fldmiad X, { d6 }
|
||||
fldmiad Y, { d10 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
fmacd d0 , d6, d10
|
||||
|
||||
fldmiad X, { d7 }
|
||||
fldmiad Y, { d11 }
|
||||
add X, X, INC_X
|
||||
add Y, Y, INC_Y
|
||||
fmacd d1 , d7, d11
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S1
|
||||
|
||||
fldmiad X, { d4 }
|
||||
fldmiad Y, { d8 }
|
||||
add X, X, INC_X
|
||||
fmacd d0 , d4, d8
|
||||
add Y, Y, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
|
||||
push {r4 - r9, fp}
|
||||
add fp, sp, #24
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
sub r4, fp, #128
|
||||
vstm r4, { d8 - d15} // store floating point registers
|
||||
|
||||
mov Y, OLD_Y
|
||||
ldr INC_Y, OLD_INC_Y
|
||||
|
||||
vsub.f64 d0 , d0 , d0
|
||||
vsub.f64 d1 , d1 , d1
|
||||
|
||||
cmp N, #0
|
||||
ble ddot_kernel_L999
|
||||
|
||||
cmp INC_X, #0
|
||||
beq ddot_kernel_L999
|
||||
|
||||
cmp INC_Y, #0
|
||||
beq ddot_kernel_L999
|
||||
|
||||
cmp INC_X, #1
|
||||
bne ddot_kernel_S_BEGIN
|
||||
|
||||
cmp INC_Y, #1
|
||||
bne ddot_kernel_S_BEGIN
|
||||
|
||||
ddot_kernel_F_BEGIN:
|
||||
|
||||
asrs I, N, #2 // I = N / 4
|
||||
ble ddot_kernel_F1
|
||||
|
||||
ddot_kernel_F4:
|
||||
|
||||
KERNEL_F4
|
||||
|
||||
subs I, I, #1
|
||||
ble ddot_kernel_F1
|
||||
|
||||
|
||||
KERNEL_F4
|
||||
|
||||
subs I, I, #1
|
||||
bne ddot_kernel_F4
|
||||
|
||||
ddot_kernel_F1:
|
||||
|
||||
ands I, N, #3
|
||||
ble ddot_kernel_L999
|
||||
|
||||
ddot_kernel_F10:
|
||||
|
||||
KERNEL_F1
|
||||
|
||||
subs I, I, #1
|
||||
bne ddot_kernel_F10
|
||||
|
||||
b ddot_kernel_L999
|
||||
|
||||
ddot_kernel_S_BEGIN:
|
||||
|
||||
lsl INC_X, INC_X, #3 // INC_X * SIZE
|
||||
lsl INC_Y, INC_Y, #3 // INC_Y * SIZE
|
||||
|
||||
asrs I, N, #2 // I = N / 4
|
||||
ble ddot_kernel_S1
|
||||
|
||||
ddot_kernel_S4:
|
||||
|
||||
KERNEL_S4
|
||||
|
||||
subs I, I, #1
|
||||
bne ddot_kernel_S4
|
||||
|
||||
ddot_kernel_S1:
|
||||
|
||||
ands I, N, #3
|
||||
ble ddot_kernel_L999
|
||||
|
||||
ddot_kernel_S10:
|
||||
|
||||
KERNEL_S1
|
||||
|
||||
subs I, I, #1
|
||||
bne ddot_kernel_S10
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ddot_kernel_L999:
|
||||
|
||||
sub r3, fp, #128
|
||||
vldm r3, { d8 - d15} // restore floating point registers
|
||||
|
||||
vadd.f64 d0 , d0, d1 // set return value
|
||||
sub sp, fp, #24
|
||||
pop {r4 - r9, fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
806
kernel/arm/dgemm_kernel_4x2_vfp.S
Normal file
806
kernel/arm/dgemm_kernel_4x2_vfp.S
Normal file
@@ -0,0 +1,806 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/27 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define OLD_M r0
|
||||
#define OLD_N r1
|
||||
#define OLD_K r2
|
||||
#define OLD_A r3
|
||||
#define OLD_ALPHA d0
|
||||
|
||||
/******************************************************
|
||||
* [fp, #-128] - [fp, #-64] is reserved
|
||||
* for store and restore of floating point
|
||||
* registers
|
||||
*******************************************************/
|
||||
|
||||
#define LDC [fp, #-252 ]
|
||||
#define M [fp, #-256 ]
|
||||
#define N [fp, #-260 ]
|
||||
#define K [fp, #-264 ]
|
||||
#define A [fp, #-268 ]
|
||||
|
||||
#define ALPHA [fp, #-280]
|
||||
|
||||
#define B [fp, #4 ]
|
||||
#define C [fp, #8 ]
|
||||
#define OLD_LDC [fp, #12 ]
|
||||
|
||||
#define I r0
|
||||
#define J r1
|
||||
#define L r2
|
||||
|
||||
#define AO r5
|
||||
#define BO r6
|
||||
|
||||
#define CO1 r8
|
||||
#define CO2 r9
|
||||
|
||||
#define K1 r7
|
||||
#define BC r12
|
||||
|
||||
#define A_PRE 96
|
||||
#define B_PRE 96
|
||||
#define C_PRE 32
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
.macro INIT4x2
|
||||
|
||||
vsub.f64 d8 , d8 , d8
|
||||
vmov.f64 d9, d8
|
||||
vmov.f64 d10, d8
|
||||
vmov.f64 d11, d8
|
||||
vmov.f64 d12, d8
|
||||
vmov.f64 d13, d8
|
||||
vmov.f64 d14, d8
|
||||
vmov.f64 d15, d8
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
.macro KERNEL4x2_SUB
|
||||
|
||||
pld [ AO, #A_PRE ]
|
||||
fldd d4 , [ BO ]
|
||||
|
||||
fldd d0 , [ AO ]
|
||||
fldd d1 , [ AO, #8 ]
|
||||
|
||||
fmacd d8 , d0, d4
|
||||
fldd d2 , [ AO, #16 ]
|
||||
fmacd d9 , d1, d4
|
||||
fldd d3 , [ AO, #24 ]
|
||||
fmacd d10 , d2, d4
|
||||
fldd d5 , [ BO, #8 ]
|
||||
fmacd d11 , d3, d4
|
||||
|
||||
fmacd d12 , d0, d5
|
||||
fmacd d13 , d1, d5
|
||||
add AO , AO, #32
|
||||
fmacd d14 , d2, d5
|
||||
add BO , BO, #16
|
||||
fmacd d15 , d3, d5
|
||||
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE4x2
|
||||
|
||||
ldr r3 , LDC
|
||||
add CO2 , CO1, r3
|
||||
|
||||
fldd d0, ALPHA
|
||||
|
||||
|
||||
fldd d4 , [CO1]
|
||||
fldd d5 , [CO1, #8 ]
|
||||
|
||||
pld [ CO1, #C_PRE ]
|
||||
fmacd d4 , d0 , d8
|
||||
fldd d6 , [CO1, #16 ]
|
||||
fmacd d5 , d0 , d9
|
||||
fldd d7 , [CO1, #24 ]
|
||||
fmacd d6 , d0 , d10
|
||||
fstd d4 , [CO1]
|
||||
fmacd d7 , d0 , d11
|
||||
|
||||
fstd d5 , [CO1, #8 ]
|
||||
fstd d6 , [CO1, #16 ]
|
||||
fstd d7 , [CO1, #24 ]
|
||||
|
||||
fldd d4 , [CO2]
|
||||
fldd d5 , [CO2, #8 ]
|
||||
|
||||
pld [ CO2, #C_PRE ]
|
||||
fmacd d4 , d0 , d12
|
||||
fldd d6 , [CO2, #16 ]
|
||||
fmacd d5 , d0 , d13
|
||||
fldd d7 , [CO2, #24 ]
|
||||
fmacd d6 , d0 , d14
|
||||
fstd d4 , [CO2]
|
||||
fmacd d7 , d0 , d15
|
||||
add CO1, CO1, #32
|
||||
|
||||
fstd d5 , [CO2, #8 ]
|
||||
fstd d6 , [CO2, #16 ]
|
||||
fstd d7 , [CO2, #24 ]
|
||||
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
.macro INIT2x2
|
||||
|
||||
vsub.f64 d8 , d8 , d8
|
||||
vmov.f64 d9, d8
|
||||
vmov.f64 d12, d8
|
||||
vmov.f64 d13, d8
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL2x2_SUB
|
||||
|
||||
fldd d4 , [ BO ]
|
||||
fldd d5 , [ BO, #8 ]
|
||||
|
||||
fldd d0 , [ AO ]
|
||||
fldd d1 , [ AO, #8 ]
|
||||
|
||||
fmacd d8 , d0, d4
|
||||
fmacd d9 , d1, d4
|
||||
|
||||
fmacd d12 , d0, d5
|
||||
fmacd d13 , d1, d5
|
||||
|
||||
add AO , AO, #16
|
||||
add BO , BO, #16
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE2x2
|
||||
|
||||
ldr r3 , LDC
|
||||
add CO2 , CO1, r3
|
||||
|
||||
fldd d0, ALPHA
|
||||
|
||||
fldd d4 , [CO1]
|
||||
fldd d5 , [CO1, #8 ]
|
||||
|
||||
fmacd d4 , d0 , d8
|
||||
fmacd d5 , d0 , d9
|
||||
|
||||
fstd d4 , [CO1]
|
||||
fstd d5 , [CO1, #8 ]
|
||||
|
||||
fldd d4 , [CO2]
|
||||
fldd d5 , [CO2, #8 ]
|
||||
|
||||
fmacd d4 , d0 , d12
|
||||
fmacd d5 , d0 , d13
|
||||
|
||||
fstd d4 , [CO2]
|
||||
fstd d5 , [CO2, #8 ]
|
||||
|
||||
add CO1, CO1, #16
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
.macro INIT1x2
|
||||
|
||||
vsub.f64 d8 , d8 , d8
|
||||
vmov.f64 d12, d8
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL1x2_SUB
|
||||
|
||||
fldd d4 , [ BO ]
|
||||
fldd d5 , [ BO, #8 ]
|
||||
|
||||
fldd d0 , [ AO ]
|
||||
|
||||
fmacd d8 , d0, d4
|
||||
|
||||
fmacd d12 , d0, d5
|
||||
|
||||
add AO , AO, #8
|
||||
add BO , BO, #16
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE1x2
|
||||
|
||||
ldr r3 , LDC
|
||||
add CO2 , CO1, r3
|
||||
|
||||
fldd d0, ALPHA
|
||||
|
||||
fldd d4 , [CO1]
|
||||
|
||||
fmacd d4 , d0 , d8
|
||||
|
||||
fstd d4 , [CO1]
|
||||
|
||||
fldd d4 , [CO2]
|
||||
|
||||
fmacd d4 , d0 , d12
|
||||
|
||||
fstd d4 , [CO2]
|
||||
|
||||
add CO1, CO1, #8
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
.macro INIT4x1
|
||||
|
||||
vsub.f64 d8 , d8 , d8
|
||||
vmov.f64 d9, d8
|
||||
vmov.f64 d10, d8
|
||||
vmov.f64 d11, d8
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
.macro KERNEL4x1_SUB
|
||||
|
||||
fldd d4 , [ BO ]
|
||||
|
||||
fldd d0 , [ AO ]
|
||||
fldd d1 , [ AO, #8 ]
|
||||
fldd d2 , [ AO, #16 ]
|
||||
fldd d3 , [ AO, #24 ]
|
||||
|
||||
fmacd d8 , d0, d4
|
||||
fmacd d9 , d1, d4
|
||||
fmacd d10 , d2, d4
|
||||
fmacd d11 , d3, d4
|
||||
|
||||
add AO , AO, #32
|
||||
add BO , BO, #8
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE4x1
|
||||
|
||||
fldd d0, ALPHA
|
||||
|
||||
fldd d4 , [CO1]
|
||||
fldd d5 , [CO1, #8 ]
|
||||
fldd d6 , [CO1, #16 ]
|
||||
fldd d7 , [CO1, #24 ]
|
||||
|
||||
fmacd d4 , d0 , d8
|
||||
fmacd d5 , d0 , d9
|
||||
fmacd d6 , d0 , d10
|
||||
fmacd d7 , d0 , d11
|
||||
|
||||
fstd d4 , [CO1]
|
||||
fstd d5 , [CO1, #8 ]
|
||||
fstd d6 , [CO1, #16 ]
|
||||
fstd d7 , [CO1, #24 ]
|
||||
|
||||
add CO1, CO1, #32
|
||||
|
||||
.endm
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
.macro INIT2x1
|
||||
|
||||
vsub.f64 d8 , d8 , d8
|
||||
vmov.f64 d9 , d8
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL2x1_SUB
|
||||
|
||||
fldd d4 , [ BO ]
|
||||
|
||||
fldd d0 , [ AO ]
|
||||
fldd d1 , [ AO, #8 ]
|
||||
|
||||
fmacd d8 , d0, d4
|
||||
fmacd d9 , d1, d4
|
||||
|
||||
add AO , AO, #16
|
||||
add BO , BO, #8
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE2x1
|
||||
|
||||
fldd d0, ALPHA
|
||||
|
||||
fldd d4 , [CO1]
|
||||
fldd d5 , [CO1, #8 ]
|
||||
|
||||
fmacd d4 , d0 , d8
|
||||
fmacd d5 , d0 , d9
|
||||
|
||||
fstd d4 , [CO1]
|
||||
fstd d5 , [CO1, #8 ]
|
||||
|
||||
add CO1, CO1, #16
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
.macro INIT1x1
|
||||
|
||||
vsub.f64 d8 , d8 , d8
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL1x1_SUB
|
||||
|
||||
fldd d4 , [ BO ]
|
||||
|
||||
fldd d0 , [ AO ]
|
||||
|
||||
fmacd d8 , d0, d4
|
||||
|
||||
add AO , AO, #8
|
||||
add BO , BO, #8
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE1x1
|
||||
|
||||
fldd d0, ALPHA
|
||||
|
||||
fldd d4 , [CO1]
|
||||
|
||||
fmacd d4 , d0 , d8
|
||||
|
||||
fstd d4 , [CO1]
|
||||
|
||||
add CO1, CO1, #8
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
|
||||
push {r4 - r9, fp}
|
||||
add fp, sp, #24
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
str OLD_M, M
|
||||
str OLD_N, N
|
||||
str OLD_K, K
|
||||
str OLD_A, A
|
||||
vstr OLD_ALPHA, ALPHA
|
||||
|
||||
sub r3, fp, #128
|
||||
vstm r3, { d8 - d15} // store floating point registers
|
||||
|
||||
ldr r3, OLD_LDC
|
||||
lsl r3, r3, #3 // ldc = ldc * 8
|
||||
str r3, LDC
|
||||
|
||||
ldr K1, K
|
||||
ldr BC, B
|
||||
|
||||
ldr J, N
|
||||
asrs J, J, #1 // J = J / 2
|
||||
ble dgemm_kernel_L1_BEGIN
|
||||
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
dgemm_kernel_L2_BEGIN:
|
||||
|
||||
ldr CO1, C // CO1 = C
|
||||
ldr r4 , LDC
|
||||
lsl r4 , r4 , #1 // LDC * 2
|
||||
add r3 , r4, CO1
|
||||
str r3 , C // store C
|
||||
|
||||
ldr AO, A // AO = A
|
||||
|
||||
dgemm_kernel_L2_M4_BEGIN:
|
||||
|
||||
ldr I, M
|
||||
asrs I, I, #2 // I = I / 4
|
||||
ble dgemm_kernel_L2_M2_BEGIN
|
||||
|
||||
dgemm_kernel_L2_M4_20:
|
||||
|
||||
INIT4x2
|
||||
|
||||
mov BO, BC
|
||||
asrs L , K1, #3 // L = L / 8
|
||||
ble dgemm_kernel_L2_M4_40
|
||||
.align 5
|
||||
|
||||
dgemm_kernel_L2_M4_22:
|
||||
|
||||
pld [ BO, #B_PRE ]
|
||||
KERNEL4x2_SUB
|
||||
KERNEL4x2_SUB
|
||||
pld [ BO, #B_PRE ]
|
||||
KERNEL4x2_SUB
|
||||
KERNEL4x2_SUB
|
||||
|
||||
pld [ BO, #B_PRE ]
|
||||
KERNEL4x2_SUB
|
||||
KERNEL4x2_SUB
|
||||
pld [ BO, #B_PRE ]
|
||||
KERNEL4x2_SUB
|
||||
KERNEL4x2_SUB
|
||||
|
||||
subs L, L, #1
|
||||
bgt dgemm_kernel_L2_M4_22
|
||||
|
||||
|
||||
dgemm_kernel_L2_M4_40:
|
||||
|
||||
ands L , K1, #7 // L = L % 8
|
||||
ble dgemm_kernel_L2_M4_100
|
||||
|
||||
dgemm_kernel_L2_M4_42:
|
||||
|
||||
KERNEL4x2_SUB
|
||||
|
||||
subs L, L, #1
|
||||
bgt dgemm_kernel_L2_M4_42
|
||||
|
||||
dgemm_kernel_L2_M4_100:
|
||||
|
||||
SAVE4x2
|
||||
|
||||
dgemm_kernel_L2_M4_END:
|
||||
|
||||
subs I, I, #1
|
||||
bgt dgemm_kernel_L2_M4_20
|
||||
|
||||
|
||||
dgemm_kernel_L2_M2_BEGIN:
|
||||
|
||||
ldr I, M
|
||||
tst I , #3
|
||||
ble dgemm_kernel_L2_END
|
||||
|
||||
tst I, #2 // I = I / 2
|
||||
ble dgemm_kernel_L2_M1_BEGIN
|
||||
|
||||
dgemm_kernel_L2_M2_20:
|
||||
|
||||
INIT2x2
|
||||
|
||||
mov BO, BC
|
||||
asrs L , K1, #3 // L = L / 8
|
||||
ble dgemm_kernel_L2_M2_40
|
||||
|
||||
dgemm_kernel_L2_M2_22:
|
||||
|
||||
KERNEL2x2_SUB
|
||||
KERNEL2x2_SUB
|
||||
KERNEL2x2_SUB
|
||||
KERNEL2x2_SUB
|
||||
|
||||
KERNEL2x2_SUB
|
||||
KERNEL2x2_SUB
|
||||
KERNEL2x2_SUB
|
||||
KERNEL2x2_SUB
|
||||
|
||||
subs L, L, #1
|
||||
bgt dgemm_kernel_L2_M2_22
|
||||
|
||||
|
||||
dgemm_kernel_L2_M2_40:
|
||||
|
||||
ands L , K1, #7 // L = L % 8
|
||||
ble dgemm_kernel_L2_M2_100
|
||||
|
||||
dgemm_kernel_L2_M2_42:
|
||||
|
||||
KERNEL2x2_SUB
|
||||
|
||||
subs L, L, #1
|
||||
bgt dgemm_kernel_L2_M2_42
|
||||
|
||||
dgemm_kernel_L2_M2_100:
|
||||
|
||||
SAVE2x2
|
||||
|
||||
dgemm_kernel_L2_M2_END:
|
||||
|
||||
|
||||
dgemm_kernel_L2_M1_BEGIN:
|
||||
|
||||
tst I, #1 // I = I % 2
|
||||
ble dgemm_kernel_L2_END
|
||||
|
||||
dgemm_kernel_L2_M1_20:
|
||||
|
||||
INIT1x2
|
||||
|
||||
mov BO, BC
|
||||
asrs L , K1, #3 // L = L / 8
|
||||
ble dgemm_kernel_L2_M1_40
|
||||
|
||||
dgemm_kernel_L2_M1_22:
|
||||
KERNEL1x2_SUB
|
||||
KERNEL1x2_SUB
|
||||
KERNEL1x2_SUB
|
||||
KERNEL1x2_SUB
|
||||
|
||||
KERNEL1x2_SUB
|
||||
KERNEL1x2_SUB
|
||||
KERNEL1x2_SUB
|
||||
KERNEL1x2_SUB
|
||||
|
||||
subs L, L, #1
|
||||
bgt dgemm_kernel_L2_M1_22
|
||||
|
||||
|
||||
dgemm_kernel_L2_M1_40:
|
||||
|
||||
ands L , K1, #7 // L = L % 8
|
||||
ble dgemm_kernel_L2_M1_100
|
||||
|
||||
dgemm_kernel_L2_M1_42:
|
||||
|
||||
KERNEL1x2_SUB
|
||||
|
||||
subs L, L, #1
|
||||
bgt dgemm_kernel_L2_M1_42
|
||||
|
||||
dgemm_kernel_L2_M1_100:
|
||||
|
||||
SAVE1x2
|
||||
|
||||
|
||||
dgemm_kernel_L2_END:
|
||||
|
||||
mov r3, BC
|
||||
mov r4, K1
|
||||
lsl r4, r4, #4 // k * 2 * 8
|
||||
add r3, r3, r4 // B = B + K * 2 * 8
|
||||
mov BC, r3
|
||||
|
||||
subs J , #1 // j--
|
||||
bgt dgemm_kernel_L2_BEGIN
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
dgemm_kernel_L1_BEGIN:
|
||||
|
||||
ldr J , N
|
||||
tst J , #1
|
||||
ble dgemm_kernel_L999
|
||||
|
||||
|
||||
ldr CO1, C // CO1 = C
|
||||
ldr r4 , LDC
|
||||
add r3 , r4, CO1
|
||||
str r3 , C // store C
|
||||
|
||||
ldr AO, A // AO = A
|
||||
|
||||
|
||||
|
||||
dgemm_kernel_L1_M4_BEGIN:
|
||||
|
||||
ldr I, M
|
||||
asrs I, I, #2 // I = I / 4
|
||||
ble dgemm_kernel_L1_M2_BEGIN
|
||||
|
||||
dgemm_kernel_L1_M4_20:
|
||||
|
||||
INIT4x1
|
||||
|
||||
mov BO, BC
|
||||
asrs L , K1, #3 // L = L / 8
|
||||
ble dgemm_kernel_L1_M4_40
|
||||
.align 5
|
||||
|
||||
dgemm_kernel_L1_M4_22:
|
||||
KERNEL4x1_SUB
|
||||
KERNEL4x1_SUB
|
||||
KERNEL4x1_SUB
|
||||
KERNEL4x1_SUB
|
||||
|
||||
KERNEL4x1_SUB
|
||||
KERNEL4x1_SUB
|
||||
KERNEL4x1_SUB
|
||||
KERNEL4x1_SUB
|
||||
|
||||
subs L, L, #1
|
||||
bgt dgemm_kernel_L1_M4_22
|
||||
|
||||
|
||||
dgemm_kernel_L1_M4_40:
|
||||
|
||||
ands L , K1, #7 // L = L % 8
|
||||
ble dgemm_kernel_L1_M4_100
|
||||
|
||||
dgemm_kernel_L1_M4_42:
|
||||
|
||||
KERNEL4x1_SUB
|
||||
|
||||
subs L, L, #1
|
||||
bgt dgemm_kernel_L1_M4_42
|
||||
|
||||
dgemm_kernel_L1_M4_100:
|
||||
|
||||
SAVE4x1
|
||||
|
||||
dgemm_kernel_L1_M4_END:
|
||||
|
||||
subs I, I, #1
|
||||
bgt dgemm_kernel_L1_M4_20
|
||||
|
||||
|
||||
dgemm_kernel_L1_M2_BEGIN:
|
||||
|
||||
ldr I, M
|
||||
tst I , #3
|
||||
ble dgemm_kernel_L1_END
|
||||
|
||||
tst I, #2 // I = I / 2
|
||||
ble dgemm_kernel_L1_M1_BEGIN
|
||||
|
||||
dgemm_kernel_L1_M2_20:
|
||||
|
||||
INIT2x1
|
||||
|
||||
mov BO, BC
|
||||
asrs L , K1, #3 // L = L / 8
|
||||
ble dgemm_kernel_L1_M2_40
|
||||
|
||||
dgemm_kernel_L1_M2_22:
|
||||
|
||||
KERNEL2x1_SUB
|
||||
KERNEL2x1_SUB
|
||||
KERNEL2x1_SUB
|
||||
KERNEL2x1_SUB
|
||||
|
||||
KERNEL2x1_SUB
|
||||
KERNEL2x1_SUB
|
||||
KERNEL2x1_SUB
|
||||
KERNEL2x1_SUB
|
||||
|
||||
subs L, L, #1
|
||||
bgt dgemm_kernel_L1_M2_22
|
||||
|
||||
|
||||
dgemm_kernel_L1_M2_40:
|
||||
|
||||
ands L , K1, #7 // L = L % 8
|
||||
ble dgemm_kernel_L1_M2_100
|
||||
|
||||
dgemm_kernel_L1_M2_42:
|
||||
|
||||
KERNEL2x1_SUB
|
||||
|
||||
subs L, L, #1
|
||||
bgt dgemm_kernel_L1_M2_42
|
||||
|
||||
dgemm_kernel_L1_M2_100:
|
||||
|
||||
SAVE2x1
|
||||
|
||||
dgemm_kernel_L1_M2_END:
|
||||
|
||||
|
||||
dgemm_kernel_L1_M1_BEGIN:
|
||||
|
||||
tst I, #1 // I = I % 2
|
||||
ble dgemm_kernel_L1_END
|
||||
|
||||
dgemm_kernel_L1_M1_20:
|
||||
|
||||
INIT1x1
|
||||
|
||||
mov BO, BC
|
||||
asrs L , K1, #3 // L = L / 8
|
||||
ble dgemm_kernel_L1_M1_40
|
||||
|
||||
dgemm_kernel_L1_M1_22:
|
||||
KERNEL1x1_SUB
|
||||
KERNEL1x1_SUB
|
||||
KERNEL1x1_SUB
|
||||
KERNEL1x1_SUB
|
||||
|
||||
KERNEL1x1_SUB
|
||||
KERNEL1x1_SUB
|
||||
KERNEL1x1_SUB
|
||||
KERNEL1x1_SUB
|
||||
|
||||
subs L, L, #1
|
||||
bgt dgemm_kernel_L1_M1_22
|
||||
|
||||
|
||||
dgemm_kernel_L1_M1_40:
|
||||
|
||||
ands L , K1, #7 // L = L % 8
|
||||
ble dgemm_kernel_L1_M1_100
|
||||
|
||||
dgemm_kernel_L1_M1_42:
|
||||
|
||||
KERNEL1x1_SUB
|
||||
|
||||
subs L, L, #1
|
||||
bgt dgemm_kernel_L1_M1_42
|
||||
|
||||
dgemm_kernel_L1_M1_100:
|
||||
|
||||
SAVE1x1
|
||||
|
||||
|
||||
dgemm_kernel_L1_END:
|
||||
|
||||
|
||||
dgemm_kernel_L999:
|
||||
|
||||
sub r3, fp, #128
|
||||
vldm r3, { d8 - d15} // restore floating point registers
|
||||
|
||||
movs r0, #0 // set return value
|
||||
sub sp, fp, #24
|
||||
pop {r4 - r9, fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
1483
kernel/arm/dgemm_kernel_4x4_vfpv3.S
Normal file
1483
kernel/arm/dgemm_kernel_4x4_vfpv3.S
Normal file
File diff suppressed because it is too large
Load Diff
225
kernel/arm/dgemm_ncopy_2_vfp.S
Normal file
225
kernel/arm/dgemm_ncopy_2_vfp.S
Normal file
@@ -0,0 +1,225 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/24 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define OLD_M r0
|
||||
#define OLD_N r1
|
||||
#define OLD_A r2
|
||||
#define OLD_LDA r3
|
||||
|
||||
#define B [fp, #4 ]
|
||||
|
||||
#define M r0
|
||||
#define N r1
|
||||
#define A r2
|
||||
|
||||
#define BO r5
|
||||
|
||||
#define AO1 r6
|
||||
#define AO2 r7
|
||||
#define LDA r8
|
||||
|
||||
#define I r3
|
||||
#define J r12
|
||||
|
||||
#define A_PRE 256
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
.macro COPY2x2
|
||||
|
||||
fldd d0 , [ AO1, #0 ]
|
||||
fldd d2 , [ AO1, #8 ]
|
||||
|
||||
fldd d1 , [ AO2, #0 ]
|
||||
fldd d3 , [ AO2, #8 ]
|
||||
|
||||
add AO1, AO1, #16
|
||||
fstmiad BO!, { d0 - d3 }
|
||||
add AO2, AO2, #16
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro COPY1x2
|
||||
|
||||
fldd d0 , [ AO1, #0 ]
|
||||
fldd d1 , [ AO2, #0 ]
|
||||
add AO1, AO1, #8
|
||||
|
||||
fstmiad BO!, { d0 - d1 }
|
||||
add AO2, AO2, #8
|
||||
|
||||
.endm
|
||||
|
||||
.macro COPY2x1
|
||||
|
||||
fldd d0 , [ AO1, #0 ]
|
||||
fldd d1 , [ AO1, #8 ]
|
||||
|
||||
fstmiad BO!, { d0 - d1 }
|
||||
add AO1, AO1, #16
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro COPY1x1
|
||||
|
||||
fldd d0 , [ AO1, #0 ]
|
||||
|
||||
fstmiad BO!, { d0 }
|
||||
add AO1, AO1, #8
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
|
||||
push {r4 - r9, fp}
|
||||
add fp, sp, #24
|
||||
|
||||
lsl LDA, OLD_LDA, #3 // lda = lda * 8
|
||||
|
||||
ldr BO, B
|
||||
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
dgemm_ncopy_L2_BEGIN:
|
||||
|
||||
asrs J, N, #1 // J = N / 2
|
||||
ble dgemm_ncopy_L1_BEGIN
|
||||
|
||||
dgemm_ncopy_L2_M2_BEGIN:
|
||||
|
||||
mov AO1, A // AO1 = A
|
||||
add AO2, AO1, LDA
|
||||
add A , AO2, LDA // A = A + 2 * LDA
|
||||
|
||||
asrs I, M, #1 // I = M / 2
|
||||
ble dgemm_ncopy_L2_M2_40
|
||||
|
||||
dgemm_ncopy_L2_M2_20:
|
||||
|
||||
COPY2x2
|
||||
|
||||
subs I , I , #1
|
||||
bne dgemm_ncopy_L2_M2_20
|
||||
|
||||
|
||||
dgemm_ncopy_L2_M2_40:
|
||||
|
||||
ands I, M , #1
|
||||
ble dgemm_ncopy_L2_M2_END
|
||||
|
||||
dgemm_ncopy_L2_M2_60:
|
||||
|
||||
COPY1x2
|
||||
|
||||
subs I , I , #1
|
||||
bne dgemm_ncopy_L2_M2_60
|
||||
|
||||
|
||||
dgemm_ncopy_L2_M2_END:
|
||||
|
||||
subs J , J, #1 // j--
|
||||
bne dgemm_ncopy_L2_M2_BEGIN
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
dgemm_ncopy_L1_BEGIN:
|
||||
|
||||
tst N, #1
|
||||
ble dgemm_ncopy_L999
|
||||
|
||||
|
||||
dgemm_ncopy_L1_M2_BEGIN:
|
||||
|
||||
mov AO1, A // AO1 = A
|
||||
add A , AO1, LDA // A = A + 1 * LDA
|
||||
|
||||
asrs I, M, #1 // I = M / 2
|
||||
ble dgemm_ncopy_L1_M2_40
|
||||
|
||||
dgemm_ncopy_L1_M2_20:
|
||||
|
||||
COPY2x1
|
||||
|
||||
subs I , I , #1
|
||||
bne dgemm_ncopy_L1_M2_20
|
||||
|
||||
|
||||
dgemm_ncopy_L1_M2_40:
|
||||
|
||||
ands I, M , #1
|
||||
ble dgemm_ncopy_L1_M2_END
|
||||
|
||||
dgemm_ncopy_L1_M2_60:
|
||||
|
||||
COPY1x1
|
||||
|
||||
subs I , I , #1
|
||||
bne dgemm_ncopy_L1_M2_60
|
||||
|
||||
|
||||
dgemm_ncopy_L1_M2_END:
|
||||
|
||||
|
||||
|
||||
dgemm_ncopy_L999:
|
||||
|
||||
|
||||
movs r0, #0 // set return value
|
||||
sub sp, fp, #24
|
||||
pop {r4 - r9, fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
349
kernel/arm/dgemm_ncopy_4_vfp.S
Normal file
349
kernel/arm/dgemm_ncopy_4_vfp.S
Normal file
@@ -0,0 +1,349 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/05 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define OLD_M r0
|
||||
#define OLD_N r1
|
||||
#define OLD_A r2
|
||||
#define OLD_LDA r3
|
||||
|
||||
|
||||
/******************************************************
|
||||
* [fp, #-128] - [fp, #-64] is reserved
|
||||
* for store and restore of floating point
|
||||
* registers
|
||||
*******************************************************/
|
||||
|
||||
#define LDA [fp, #-260 ]
|
||||
|
||||
#define B [fp, #4 ]
|
||||
|
||||
#define M r0
|
||||
#define N r1
|
||||
#define A r2
|
||||
|
||||
#define BO r5
|
||||
|
||||
#define AO1 r6
|
||||
#define AO2 r7
|
||||
#define AO3 r8
|
||||
#define AO4 r9
|
||||
|
||||
#define I r3
|
||||
#define J r12
|
||||
|
||||
#define A_PRE 256
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
.macro COPY4x4
|
||||
|
||||
pld [ AO1, #A_PRE ]
|
||||
pld [ AO2, #A_PRE ]
|
||||
pld [ AO3, #A_PRE ]
|
||||
pld [ AO4, #A_PRE ]
|
||||
|
||||
fldd d0 , [ AO1, #0 ]
|
||||
fldd d1 , [ AO2, #0 ]
|
||||
fldd d2 , [ AO3, #0 ]
|
||||
fldd d3 , [ AO4, #0 ]
|
||||
|
||||
fldd d4 , [ AO1, #8 ]
|
||||
fldd d8 , [ AO1, #16 ]
|
||||
fldd d12, [ AO1, #24 ]
|
||||
|
||||
fldd d5 , [ AO2, #8 ]
|
||||
add AO1, AO1, #32
|
||||
fldd d9 , [ AO2, #16 ]
|
||||
fldd d13, [ AO2, #24 ]
|
||||
|
||||
fldd d6 , [ AO3, #8 ]
|
||||
add AO2, AO2, #32
|
||||
fldd d10, [ AO3, #16 ]
|
||||
fldd d14, [ AO3, #24 ]
|
||||
|
||||
fldd d7 , [ AO4, #8 ]
|
||||
add AO3, AO3, #32
|
||||
fldd d11, [ AO4, #16 ]
|
||||
fldd d15, [ AO4, #24 ]
|
||||
|
||||
fstmiad BO!, { d0 - d3 }
|
||||
add AO4, AO4, #32
|
||||
fstmiad BO!, { d4 - d7 }
|
||||
fstmiad BO!, { d8 - d15 }
|
||||
|
||||
.endm
|
||||
|
||||
.macro COPY1x4
|
||||
|
||||
fldd d0 , [ AO1, #0 ]
|
||||
fldd d1 , [ AO2, #0 ]
|
||||
add AO1, AO1, #8
|
||||
fldd d2 , [ AO3, #0 ]
|
||||
add AO2, AO2, #8
|
||||
fldd d3 , [ AO4, #0 ]
|
||||
|
||||
add AO3, AO3, #8
|
||||
fstmiad BO!, { d0 - d3 }
|
||||
add AO4, AO4, #8
|
||||
|
||||
.endm
|
||||
|
||||
.macro COPY4x2
|
||||
|
||||
fldd d0 , [ AO1, #0 ]
|
||||
fldd d2 , [ AO1, #8 ]
|
||||
fldd d4 , [ AO1, #16 ]
|
||||
fldd d6 , [ AO1, #24 ]
|
||||
|
||||
fldd d1 , [ AO2, #0 ]
|
||||
fldd d3 , [ AO2, #8 ]
|
||||
add AO1, AO1, #32
|
||||
fldd d5 , [ AO2, #16 ]
|
||||
fldd d7 , [ AO2, #24 ]
|
||||
|
||||
fstmiad BO!, { d0 - d7 }
|
||||
add AO2, AO2, #32
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro COPY1x2
|
||||
|
||||
fldd d0 , [ AO1, #0 ]
|
||||
fldd d1 , [ AO2, #0 ]
|
||||
add AO1, AO1, #8
|
||||
|
||||
fstmiad BO!, { d0 - d1 }
|
||||
add AO2, AO2, #8
|
||||
|
||||
.endm
|
||||
|
||||
.macro COPY4x1
|
||||
|
||||
fldd d0 , [ AO1, #0 ]
|
||||
fldd d1 , [ AO1, #8 ]
|
||||
fldd d2 , [ AO1, #16 ]
|
||||
fldd d3 , [ AO1, #24 ]
|
||||
|
||||
fstmiad BO!, { d0 - d3 }
|
||||
add AO1, AO1, #32
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro COPY1x1
|
||||
|
||||
fldd d0 , [ AO1, #0 ]
|
||||
|
||||
fstmiad BO!, { d0 }
|
||||
add AO1, AO1, #8
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
|
||||
push {r4 - r9, fp}
|
||||
add fp, sp, #24
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
|
||||
lsl r3, r3, #3 // lda = lda * 8
|
||||
str r3, LDA
|
||||
|
||||
sub r4, fp, #128
|
||||
vstm r4, { d8 - d15} // store floating point registers
|
||||
|
||||
ldr BO, B
|
||||
|
||||
dgemm_ncopy_L4_BEGIN:
|
||||
|
||||
asrs J, N, #2 // J = N / 4
|
||||
ble dgemm_ncopy_L2_BEGIN
|
||||
|
||||
dgemm_ncopy_L4_M4_BEGIN:
|
||||
|
||||
mov AO1, A // AO1 = A
|
||||
ldr r4 , LDA
|
||||
add AO2, AO1, r4
|
||||
add AO3, AO2, r4
|
||||
add AO4, AO3, r4
|
||||
add A , AO4, r4 // A = A + 4 * LDA
|
||||
|
||||
asrs I, M, #2 // I = M / 4
|
||||
ble dgemm_ncopy_L4_M4_40
|
||||
|
||||
dgemm_ncopy_L4_M4_20:
|
||||
|
||||
COPY4x4
|
||||
|
||||
subs I , I , #1
|
||||
bne dgemm_ncopy_L4_M4_20
|
||||
|
||||
|
||||
dgemm_ncopy_L4_M4_40:
|
||||
|
||||
ands I, M , #3
|
||||
ble dgemm_ncopy_L4_M4_END
|
||||
|
||||
dgemm_ncopy_L4_M4_60:
|
||||
|
||||
COPY1x4
|
||||
|
||||
subs I , I , #1
|
||||
bne dgemm_ncopy_L4_M4_60
|
||||
|
||||
|
||||
dgemm_ncopy_L4_M4_END:
|
||||
|
||||
subs J , J, #1 // j--
|
||||
bne dgemm_ncopy_L4_M4_BEGIN
|
||||
|
||||
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
dgemm_ncopy_L2_BEGIN:
|
||||
|
||||
tst N, #3
|
||||
ble dgemm_ncopy_L999
|
||||
|
||||
tst N, #2
|
||||
ble dgemm_ncopy_L1_BEGIN
|
||||
|
||||
dgemm_ncopy_L2_M4_BEGIN:
|
||||
|
||||
mov AO1, A // AO1 = A
|
||||
ldr r4 , LDA
|
||||
add AO2, AO1, r4
|
||||
add A , AO2, r4 // A = A + 2 * LDA
|
||||
|
||||
asrs I, M, #2 // I = M / 4
|
||||
ble dgemm_ncopy_L2_M4_40
|
||||
|
||||
dgemm_ncopy_L2_M4_20:
|
||||
|
||||
COPY4x2
|
||||
|
||||
subs I , I , #1
|
||||
bne dgemm_ncopy_L2_M4_20
|
||||
|
||||
|
||||
dgemm_ncopy_L2_M4_40:
|
||||
|
||||
ands I, M , #3
|
||||
ble dgemm_ncopy_L2_M4_END
|
||||
|
||||
dgemm_ncopy_L2_M4_60:
|
||||
|
||||
COPY1x2
|
||||
|
||||
subs I , I , #1
|
||||
bne dgemm_ncopy_L2_M4_60
|
||||
|
||||
|
||||
dgemm_ncopy_L2_M4_END:
|
||||
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
dgemm_ncopy_L1_BEGIN:
|
||||
|
||||
tst N, #1
|
||||
ble dgemm_ncopy_L999
|
||||
|
||||
|
||||
dgemm_ncopy_L1_M4_BEGIN:
|
||||
|
||||
mov AO1, A // AO1 = A
|
||||
ldr r4 , LDA
|
||||
add A , AO1, r4 // A = A + 1 * LDA
|
||||
|
||||
asrs I, M, #2 // I = M / 4
|
||||
ble dgemm_ncopy_L1_M4_40
|
||||
|
||||
dgemm_ncopy_L1_M4_20:
|
||||
|
||||
COPY4x1
|
||||
|
||||
subs I , I , #1
|
||||
bne dgemm_ncopy_L1_M4_20
|
||||
|
||||
|
||||
dgemm_ncopy_L1_M4_40:
|
||||
|
||||
ands I, M , #3
|
||||
ble dgemm_ncopy_L1_M4_END
|
||||
|
||||
dgemm_ncopy_L1_M4_60:
|
||||
|
||||
COPY1x1
|
||||
|
||||
subs I , I , #1
|
||||
bne dgemm_ncopy_L1_M4_60
|
||||
|
||||
|
||||
dgemm_ncopy_L1_M4_END:
|
||||
|
||||
|
||||
|
||||
dgemm_ncopy_L999:
|
||||
|
||||
sub r3, fp, #128
|
||||
vldm r3, { d8 - d15} // restore floating point registers
|
||||
|
||||
movs r0, #0 // set return value
|
||||
sub sp, fp, #24
|
||||
pop {r4 - r9, fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
408
kernel/arm/dgemm_tcopy_4_vfp.S
Normal file
408
kernel/arm/dgemm_tcopy_4_vfp.S
Normal file
@@ -0,0 +1,408 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/06 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define OLD_M r0
|
||||
#define OLD_N r1
|
||||
#define OLD_A r2
|
||||
#define OLD_LDA r3
|
||||
|
||||
|
||||
/******************************************************
|
||||
* [fp, #-128] - [fp, #-64] is reserved
|
||||
* for store and restore of floating point
|
||||
* registers
|
||||
*******************************************************/
|
||||
|
||||
#define B [fp, #4 ]
|
||||
#define A [fp, #-248 ]
|
||||
|
||||
#define M r0
|
||||
#define N r1
|
||||
#define M4 r2
|
||||
|
||||
#define LDA r5
|
||||
|
||||
#define AO1 r6
|
||||
#define BO1 r7
|
||||
#define BO2 r8
|
||||
#define BO3 r9
|
||||
|
||||
#define I r4
|
||||
#define J r12
|
||||
|
||||
#define A_PRE 256
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
.macro COPY4x4
|
||||
|
||||
pld [ AO1, #A_PRE ]
|
||||
fldmiad AO1, { d0 - d3 }
|
||||
|
||||
add r3, AO1, LDA
|
||||
pld [ r3, #A_PRE ]
|
||||
fldmiad r3, { d4 - d7 }
|
||||
|
||||
add r3, r3, LDA
|
||||
pld [ r3, #A_PRE ]
|
||||
fldmiad r3, { d8 - d11 }
|
||||
|
||||
add r3, r3, LDA
|
||||
pld [ r3, #A_PRE ]
|
||||
fldmiad r3, { d12 - d15 }
|
||||
|
||||
fstmiad BO1, { d0 - d15 }
|
||||
add AO1, AO1, #32
|
||||
add BO1, BO1, M4
|
||||
|
||||
.endm
|
||||
|
||||
.macro COPY2x4
|
||||
|
||||
fldmiad AO1, { d0 - d1 }
|
||||
|
||||
add r3, AO1, LDA
|
||||
fldmiad r3, { d2 - d3 }
|
||||
|
||||
add r3, r3, LDA
|
||||
fldmiad r3, { d4 - d5 }
|
||||
|
||||
add r3, r3, LDA
|
||||
fldmiad r3, { d6 - d7 }
|
||||
|
||||
fstmiad BO2, { d0 - d7 }
|
||||
add AO1, AO1, #16
|
||||
add BO2, BO2, #64
|
||||
|
||||
.endm
|
||||
|
||||
.macro COPY1x4
|
||||
|
||||
fldmiad AO1, { d0 }
|
||||
|
||||
add r3, AO1, LDA
|
||||
fldmiad r3, { d1 }
|
||||
|
||||
add r3, r3, LDA
|
||||
fldmiad r3, { d2 }
|
||||
|
||||
add r3, r3, LDA
|
||||
fldmiad r3, { d3 }
|
||||
|
||||
fstmiad BO3, { d0 - d3 }
|
||||
add AO1, AO1, #8
|
||||
add BO3, BO3, #32
|
||||
|
||||
.endm
|
||||
|
||||
/*************************************************************************************************************************/
|
||||
|
||||
.macro COPY4x2
|
||||
|
||||
pld [ AO1, #A_PRE ]
|
||||
fldmiad AO1, { d0 - d3 }
|
||||
|
||||
add r3, AO1, LDA
|
||||
pld [ r3, #A_PRE ]
|
||||
fldmiad r3, { d4 - d7 }
|
||||
|
||||
fstmiad BO1, { d0 - d7 }
|
||||
add AO1, AO1, #32
|
||||
add BO1, BO1, M4
|
||||
|
||||
.endm
|
||||
|
||||
.macro COPY2x2
|
||||
|
||||
fldmiad AO1, { d0 - d1 }
|
||||
|
||||
add r3, AO1, LDA
|
||||
fldmiad r3, { d2 - d3 }
|
||||
|
||||
fstmiad BO2, { d0 - d3 }
|
||||
add AO1, AO1, #16
|
||||
add BO2, BO2, #32
|
||||
|
||||
.endm
|
||||
|
||||
.macro COPY1x2
|
||||
|
||||
fldmiad AO1, { d0 }
|
||||
|
||||
add r3, AO1, LDA
|
||||
fldmiad r3, { d1 }
|
||||
|
||||
fstmiad BO3, { d0 - d1 }
|
||||
add AO1, AO1, #8
|
||||
add BO3, BO3, #16
|
||||
|
||||
.endm
|
||||
|
||||
/*************************************************************************************************************************/
|
||||
|
||||
.macro COPY4x1
|
||||
|
||||
pld [ AO1, #A_PRE ]
|
||||
fldmiad AO1, { d0 - d3 }
|
||||
|
||||
fstmiad BO1, { d0 - d3 }
|
||||
add AO1, AO1, #32
|
||||
add BO1, BO1, M4
|
||||
|
||||
.endm
|
||||
|
||||
.macro COPY2x1
|
||||
|
||||
fldmiad AO1, { d0 - d1 }
|
||||
|
||||
fstmiad BO2, { d0 - d1 }
|
||||
add AO1, AO1, #16
|
||||
add BO2, BO2, #16
|
||||
|
||||
.endm
|
||||
|
||||
.macro COPY1x1
|
||||
|
||||
fldmiad AO1, { d0 }
|
||||
|
||||
fstmiad BO3, { d0 }
|
||||
add AO1, AO1, #8
|
||||
add BO3, BO3, #8
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
|
||||
push {r4 - r9, fp}
|
||||
add fp, sp, #24
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
str OLD_A, A // store A
|
||||
|
||||
lsl LDA, OLD_LDA, #3 // lda = lda * SIZE
|
||||
|
||||
sub r4, fp, #128
|
||||
vstm r4, { d8 - d15} // store floating point registers
|
||||
|
||||
lsl r4 , M, #3 // M * SIZE
|
||||
|
||||
ldr r3, B
|
||||
|
||||
and BO2 , N , #-4
|
||||
and BO3 , N , #-2
|
||||
|
||||
mul BO2, BO2, r4
|
||||
mul BO3, BO3, r4
|
||||
|
||||
add BO2 , BO2, r3
|
||||
add BO3 , BO3, r3
|
||||
|
||||
lsl M4, M, #5 // M4 = M * 4 * SIZE
|
||||
|
||||
dgemm_tcopy_L4_BEGIN:
|
||||
|
||||
asrs J, M, #2 // J = N / 4
|
||||
ble dgemm_tcopy_L2_BEGIN
|
||||
|
||||
dgemm_tcopy_L4_M4_BEGIN:
|
||||
|
||||
ldr AO1, A // AO1 = A
|
||||
lsl r3, LDA, #2 // r3 = 4 * LDA
|
||||
add r3, r3 , AO1 // A = A + 4 * LDA
|
||||
str r3, A // store A
|
||||
|
||||
ldr BO1, B
|
||||
add r3, BO1, #128 // B = B + 16 * SIZE
|
||||
str r3, B
|
||||
|
||||
asrs I, N, #2 // I = M / 4
|
||||
ble dgemm_tcopy_L4_M4_40
|
||||
|
||||
dgemm_tcopy_L4_M4_20:
|
||||
|
||||
COPY4x4
|
||||
|
||||
subs I , I , #1
|
||||
bne dgemm_tcopy_L4_M4_20
|
||||
|
||||
|
||||
dgemm_tcopy_L4_M4_40:
|
||||
|
||||
tst N , #2
|
||||
ble dgemm_tcopy_L4_M4_60
|
||||
|
||||
COPY2x4
|
||||
|
||||
|
||||
dgemm_tcopy_L4_M4_60:
|
||||
|
||||
tst N, #1
|
||||
ble dgemm_tcopy_L4_M4_END
|
||||
|
||||
COPY1x4
|
||||
|
||||
|
||||
dgemm_tcopy_L4_M4_END:
|
||||
|
||||
subs J , J, #1 // j--
|
||||
bne dgemm_tcopy_L4_M4_BEGIN
|
||||
|
||||
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
dgemm_tcopy_L2_BEGIN:
|
||||
|
||||
tst M, #3
|
||||
ble dgemm_tcopy_L999
|
||||
|
||||
tst M, #2
|
||||
ble dgemm_tcopy_L1_BEGIN
|
||||
|
||||
dgemm_tcopy_L2_M4_BEGIN:
|
||||
|
||||
ldr AO1, A // AO1 = A
|
||||
lsl r3, LDA, #1 // r3 = 2 * LDA
|
||||
add r3, r3 , AO1 // A = A + 2 * LDA
|
||||
str r3, A // store A
|
||||
|
||||
ldr BO1, B
|
||||
add r3, BO1, #64 // B = B + 8 * SIZE
|
||||
str r3, B
|
||||
|
||||
asrs I, N, #2 // I = M / 4
|
||||
ble dgemm_tcopy_L2_M4_40
|
||||
|
||||
dgemm_tcopy_L2_M4_20:
|
||||
|
||||
COPY4x2
|
||||
|
||||
subs I , I , #1
|
||||
bne dgemm_tcopy_L2_M4_20
|
||||
|
||||
|
||||
dgemm_tcopy_L2_M4_40:
|
||||
|
||||
tst N , #2
|
||||
ble dgemm_tcopy_L2_M4_60
|
||||
|
||||
COPY2x2
|
||||
|
||||
dgemm_tcopy_L2_M4_60:
|
||||
|
||||
tst N , #1
|
||||
ble dgemm_tcopy_L2_M4_END
|
||||
|
||||
COPY1x2
|
||||
|
||||
|
||||
dgemm_tcopy_L2_M4_END:
|
||||
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
dgemm_tcopy_L1_BEGIN:
|
||||
|
||||
tst M, #1
|
||||
ble dgemm_tcopy_L999
|
||||
|
||||
|
||||
dgemm_tcopy_L1_M4_BEGIN:
|
||||
|
||||
ldr AO1, A // AO1 = A
|
||||
add r3, LDA , AO1 // A = A + 1 * LDA
|
||||
str r3, A // store A
|
||||
|
||||
ldr BO1, B
|
||||
add r3, BO1, #32 // B = B + 4 * SIZE
|
||||
str r3, B
|
||||
|
||||
asrs I, N, #2 // I = M / 4
|
||||
ble dgemm_tcopy_L1_M4_40
|
||||
|
||||
dgemm_tcopy_L1_M4_20:
|
||||
|
||||
COPY4x1
|
||||
|
||||
subs I , I , #1
|
||||
bne dgemm_tcopy_L1_M4_20
|
||||
|
||||
|
||||
dgemm_tcopy_L1_M4_40:
|
||||
|
||||
tst N , #2
|
||||
ble dgemm_tcopy_L1_M4_60
|
||||
|
||||
COPY2x1
|
||||
|
||||
dgemm_tcopy_L1_M4_60:
|
||||
|
||||
tst N , #1
|
||||
ble dgemm_tcopy_L1_M4_END
|
||||
|
||||
COPY1x1
|
||||
|
||||
|
||||
dgemm_tcopy_L1_M4_END:
|
||||
|
||||
|
||||
|
||||
dgemm_tcopy_L999:
|
||||
|
||||
sub r3, fp, #128
|
||||
vldm r3, { d8 - d15} // restore floating point registers
|
||||
|
||||
mov r0, #0 // set return value
|
||||
sub sp, fp, #24
|
||||
pop {r4 - r9, fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
64
kernel/arm/dot.c
Normal file
64
kernel/arm/dot.c
Normal file
@@ -0,0 +1,64 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/09/14 Saar
|
||||
* BLASTEST float : OK
|
||||
* BLASTEST double : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#if defined(DSDOT)
|
||||
double CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y)
|
||||
#else
|
||||
FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y)
|
||||
#endif
|
||||
{
|
||||
BLASLONG i=0;
|
||||
BLASLONG ix=0,iy=0;
|
||||
double dot = 0.0 ;
|
||||
|
||||
if ( n < 0 ) return(dot);
|
||||
|
||||
while(i < n)
|
||||
{
|
||||
|
||||
dot += y[iy] * x[ix] ;
|
||||
ix += inc_x ;
|
||||
iy += inc_y ;
|
||||
i++ ;
|
||||
|
||||
}
|
||||
return(dot);
|
||||
|
||||
}
|
||||
|
||||
|
||||
1089
kernel/arm/dtrmm_kernel_4x2_vfp.S
Normal file
1089
kernel/arm/dtrmm_kernel_4x2_vfp.S
Normal file
File diff suppressed because it is too large
Load Diff
1953
kernel/arm/dtrmm_kernel_4x4_vfpv3.S
Normal file
1953
kernel/arm/dtrmm_kernel_4x4_vfpv3.S
Normal file
File diff suppressed because it is too large
Load Diff
67
kernel/arm/gemv_n.c
Normal file
67
kernel/arm/gemv_n.c
Normal file
@@ -0,0 +1,67 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
* * 2013/09/14 Saar
|
||||
* * BLASTEST float : OK
|
||||
* * BLASTEST double : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
* *
|
||||
* **************************************************************************************/
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, FLOAT *a, BLASLONG lda, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *buffer)
|
||||
{
|
||||
BLASLONG i;
|
||||
BLASLONG ix,iy;
|
||||
BLASLONG j;
|
||||
FLOAT *a_ptr;
|
||||
FLOAT temp;
|
||||
|
||||
ix = 0;
|
||||
a_ptr = a;
|
||||
|
||||
for (j=0; j<n; j++)
|
||||
{
|
||||
temp = alpha * x[ix];
|
||||
iy = 0;
|
||||
for (i=0; i<m; i++)
|
||||
{
|
||||
y[iy] += temp * a_ptr[i];
|
||||
iy += inc_y;
|
||||
}
|
||||
a_ptr += lda;
|
||||
ix += inc_x;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
740
kernel/arm/gemv_n_vfp.S
Normal file
740
kernel/arm/gemv_n_vfp.S
Normal file
@@ -0,0 +1,740 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/28 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define OLD_LDA [fp, #0 ]
|
||||
#define X [fp, #4 ]
|
||||
#define OLD_INC_X [fp, #8 ]
|
||||
#define Y [fp, #12 ]
|
||||
#define OLD_INC_Y [fp, #16 ]
|
||||
#define OLD_A r3
|
||||
#define OLD_M r0
|
||||
|
||||
#define AO1 r0
|
||||
#define N r1
|
||||
#define J r2
|
||||
|
||||
#define AO2 r4
|
||||
#define XO r5
|
||||
#define YO r6
|
||||
#define LDA r7
|
||||
#define INC_X r8
|
||||
#define INC_Y r9
|
||||
|
||||
#define I r12
|
||||
|
||||
#define M [fp, #-252 ]
|
||||
#define A [fp, #-256 ]
|
||||
|
||||
|
||||
#define X_PRE 64
|
||||
#define Y_PRE 0
|
||||
#define A_PRE 0
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
|
||||
#if defined(DOUBLE)
|
||||
|
||||
.macro INIT_F8
|
||||
|
||||
pld [ YO , #Y_PRE ]
|
||||
pld [ YO , #Y_PRE+32 ]
|
||||
|
||||
vsub.f64 d8 , d8 , d8
|
||||
vmov.f64 d9 , d8
|
||||
vmov.f64 d10 , d8
|
||||
vmov.f64 d11 , d8
|
||||
vmov.f64 d12 , d8
|
||||
vmov.f64 d13 , d8
|
||||
vmov.f64 d14 , d8
|
||||
vmov.f64 d15 , d8
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F8X8
|
||||
|
||||
pld [ XO , #X_PRE ]
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
|
||||
pld [ XO , #X_PRE ]
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_F8X1
|
||||
|
||||
pld [ AO2 , #A_PRE ]
|
||||
fldmiad XO! , { d2 }
|
||||
fldmiad AO1 , { d4 - d7 }
|
||||
|
||||
vmla.f64 d8 , d2 , d4
|
||||
pld [ AO2 , #4*SIZE ]
|
||||
vmla.f64 d9 , d2 , d5
|
||||
add r3, AO1, #4*SIZE
|
||||
vmla.f64 d10 , d2 , d6
|
||||
vmla.f64 d11 , d2 , d7
|
||||
|
||||
|
||||
fldmiad r3 , { d4 - d7 }
|
||||
|
||||
vmla.f64 d12 , d2 , d4
|
||||
vmla.f64 d13 , d2 , d5
|
||||
add AO1, AO1, LDA
|
||||
vmla.f64 d14 , d2 , d6
|
||||
add AO2, AO2, LDA
|
||||
vmla.f64 d15 , d2 , d7
|
||||
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F8
|
||||
|
||||
fldmiad YO, { d4 - d7 }
|
||||
|
||||
vmla.f64 d4 , d0, d8
|
||||
vmla.f64 d5 , d0, d9
|
||||
vmla.f64 d6 , d0, d10
|
||||
vmla.f64 d7 , d0, d11
|
||||
|
||||
fstmiad YO!, { d4 - d7 }
|
||||
|
||||
fldmiad YO, { d4 - d7 }
|
||||
|
||||
vmla.f64 d4 , d0, d12
|
||||
vmla.f64 d5 , d0, d13
|
||||
vmla.f64 d6 , d0, d14
|
||||
vmla.f64 d7 , d0, d15
|
||||
|
||||
fstmiad YO!, { d4 - d7 }
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro INIT_F1
|
||||
|
||||
vsub.f64 d12 , d12 , d12
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
.macro KERNEL_F1X1
|
||||
|
||||
fldmiad XO! , { d2 }
|
||||
fldmiad AO1 , { d8 }
|
||||
vmla.f64 d12 , d2 , d8
|
||||
add AO1, AO1, LDA
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F1
|
||||
|
||||
fldmiad YO, { d4 }
|
||||
vmla.f64 d4, d0, d12
|
||||
fstmiad YO!, { d4 }
|
||||
|
||||
.endm
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
.macro INIT_S4
|
||||
|
||||
vsub.f64 d12 , d12 , d12
|
||||
vmov.f64 d13 , d12
|
||||
vmov.f64 d14 , d12
|
||||
vmov.f64 d15 , d12
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S4X4
|
||||
|
||||
KERNEL_S4X1
|
||||
KERNEL_S4X1
|
||||
KERNEL_S4X1
|
||||
KERNEL_S4X1
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S4X1
|
||||
|
||||
pld [ AO2 , #A_PRE ]
|
||||
fldmiad XO , { d2 }
|
||||
fldmiad AO1 , { d8 - d11 }
|
||||
|
||||
vmla.f64 d12 , d2 , d8
|
||||
add AO1, AO1, LDA
|
||||
vmla.f64 d13 , d2 , d9
|
||||
add AO2, AO2, LDA
|
||||
vmla.f64 d14 , d2 , d10
|
||||
vmla.f64 d15 , d2 , d11
|
||||
add XO, XO , INC_X
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S4
|
||||
|
||||
fldmiad YO, { d4 }
|
||||
vmla.f64 d4 , d0, d12
|
||||
fstmiad YO, { d4 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmiad YO, { d5 }
|
||||
vmla.f64 d5 , d0, d13
|
||||
fstmiad YO, { d5 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmiad YO, { d4 }
|
||||
vmla.f64 d4 , d0, d14
|
||||
fstmiad YO, { d4 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmiad YO, { d5 }
|
||||
vmla.f64 d5 , d0, d15
|
||||
fstmiad YO, { d5 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro INIT_S1
|
||||
|
||||
vsub.f64 d12 , d12 , d12
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
.macro KERNEL_S1X1
|
||||
|
||||
fldmiad XO , { d2 }
|
||||
fldmiad AO1 , { d8 }
|
||||
vmla.f64 d12 , d2 , d8
|
||||
add AO1, AO1, LDA
|
||||
add XO, XO , INC_X
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S1
|
||||
|
||||
fldmiad YO, { d4 }
|
||||
vmla.f64 d4, d0, d12
|
||||
fstmiad YO , { d4 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
|
||||
#else /************************* SINGLE PRECISION *****************************************/
|
||||
|
||||
.macro INIT_F8
|
||||
|
||||
pld [ YO , #Y_PRE ]
|
||||
|
||||
vsub.f32 s8 , s8 , s8
|
||||
vmov.f32 s9 , s8
|
||||
vmov.f32 s10 , s8
|
||||
vmov.f32 s11 , s8
|
||||
vmov.f32 s12 , s8
|
||||
vmov.f32 s13 , s8
|
||||
vmov.f32 s14 , s8
|
||||
vmov.f32 s15 , s8
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F8X8
|
||||
|
||||
pld [ XO , #X_PRE ]
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_F8X1
|
||||
|
||||
pld [ AO2, #A_PRE ]
|
||||
fldmias XO! , { s2 }
|
||||
fldmias AO1 , { s4 - s7 }
|
||||
|
||||
vmla.f32 s8 , s2 , s4
|
||||
vmla.f32 s9 , s2 , s5
|
||||
vmla.f32 s10 , s2 , s6
|
||||
vmla.f32 s11 , s2 , s7
|
||||
|
||||
add r3, AO1, #4*SIZE
|
||||
|
||||
fldmias r3 , { s4 - s7 }
|
||||
|
||||
vmla.f32 s12 , s2 , s4
|
||||
vmla.f32 s13 , s2 , s5
|
||||
vmla.f32 s14 , s2 , s6
|
||||
vmla.f32 s15 , s2 , s7
|
||||
|
||||
add AO1, AO1, LDA
|
||||
add AO2, AO2, LDA
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F8
|
||||
|
||||
fldmias YO, { s4 - s7 }
|
||||
|
||||
vmla.f32 s4 , s0, s8
|
||||
vmla.f32 s5 , s0, s9
|
||||
vmla.f32 s6 , s0, s10
|
||||
vmla.f32 s7 , s0, s11
|
||||
|
||||
fstmias YO!, { s4 - s7 }
|
||||
|
||||
|
||||
fldmias YO, { s4 - s7 }
|
||||
|
||||
vmla.f32 s4 , s0, s12
|
||||
vmla.f32 s5 , s0, s13
|
||||
vmla.f32 s6 , s0, s14
|
||||
vmla.f32 s7 , s0, s15
|
||||
|
||||
fstmias YO!, { s4 - s7 }
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro INIT_F1
|
||||
|
||||
vsub.f32 s12 , s12 , s12
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
.macro KERNEL_F1X1
|
||||
|
||||
fldmias XO! , { s2 }
|
||||
fldmias AO1 , { s8 }
|
||||
vmla.f32 s12 , s2 , s8
|
||||
add AO1, AO1, LDA
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F1
|
||||
|
||||
fldmias YO, { s4 }
|
||||
vmla.f32 s4, s0, s12
|
||||
fstmias YO!, { s4 }
|
||||
|
||||
.endm
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
.macro INIT_S4
|
||||
|
||||
vsub.f32 s12 , s12 , s12
|
||||
vmov.f32 s13 , s12
|
||||
vmov.f32 s14 , s12
|
||||
vmov.f32 s15 , s12
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S4X4
|
||||
|
||||
pld [ AO2 , #A_PRE ]
|
||||
KERNEL_S4X1
|
||||
KERNEL_S4X1
|
||||
pld [ AO2 , #A_PRE ]
|
||||
KERNEL_S4X1
|
||||
KERNEL_S4X1
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S4X1
|
||||
|
||||
fldmias XO , { s2 }
|
||||
fldmias AO1 , { s8 - s11 }
|
||||
|
||||
vmla.f32 s12 , s2 , s8
|
||||
vmla.f32 s13 , s2 , s9
|
||||
vmla.f32 s14 , s2 , s10
|
||||
vmla.f32 s15 , s2 , s11
|
||||
add AO1, AO1, LDA
|
||||
add AO2, AO2, LDA
|
||||
add XO, XO , INC_X
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S4
|
||||
|
||||
fldmias YO, { s4 }
|
||||
vmla.f32 s4 , s0, s12
|
||||
fstmias YO, { s4 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s5 }
|
||||
vmla.f32 s5 , s0, s13
|
||||
fstmias YO, { s5 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s4 }
|
||||
vmla.f32 s4 , s0, s14
|
||||
fstmias YO, { s4 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s5 }
|
||||
vmla.f32 s5 , s0, s15
|
||||
fstmias YO, { s5 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro INIT_S1
|
||||
|
||||
vsub.f32 s12 , s12 , s12
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
.macro KERNEL_S1X1
|
||||
|
||||
fldmias XO , { s2 }
|
||||
fldmias AO1 , { s8 }
|
||||
vmla.f32 s12 , s2 , s8
|
||||
add AO1, AO1, LDA
|
||||
add XO, XO , INC_X
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S1
|
||||
|
||||
fldmias YO, { s4 }
|
||||
vmla.f32 s4, s0, s12
|
||||
fstmias YO , { s4 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
push {r4 - r9 , fp}
|
||||
add fp, sp, #28
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
sub r12, fp, #192
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vstm r12, { d8 - d15 } // store floating point registers
|
||||
#else
|
||||
vstm r12, { s8 - s15 } // store floating point registers
|
||||
#endif
|
||||
|
||||
cmp OLD_M, #0
|
||||
ble gemvn_kernel_L999
|
||||
|
||||
cmp N, #0
|
||||
ble gemvn_kernel_L999
|
||||
|
||||
str OLD_A, A
|
||||
str OLD_M, M
|
||||
|
||||
ldr INC_X , OLD_INC_X
|
||||
ldr INC_Y , OLD_INC_Y
|
||||
|
||||
cmp INC_X, #0
|
||||
beq gemvn_kernel_L999
|
||||
|
||||
cmp INC_Y, #0
|
||||
beq gemvn_kernel_L999
|
||||
|
||||
ldr LDA, OLD_LDA
|
||||
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl LDA, LDA, #3 // LDA * SIZE
|
||||
#else
|
||||
lsl LDA, LDA, #2 // LDA * SIZE
|
||||
#endif
|
||||
|
||||
cmp INC_X, #1
|
||||
bne gemvn_kernel_S4_BEGIN
|
||||
|
||||
cmp INC_Y, #1
|
||||
bne gemvn_kernel_S4_BEGIN
|
||||
|
||||
|
||||
gemvn_kernel_F4_BEGIN:
|
||||
|
||||
ldr YO , Y
|
||||
|
||||
ldr I, M
|
||||
asrs I, I, #3 // I = M / 8
|
||||
ble gemvn_kernel_F1_BEGIN
|
||||
|
||||
gemvn_kernel_F4X4:
|
||||
|
||||
ldr AO1, A
|
||||
add AO2, AO1, LDA
|
||||
add r3 , AO1, #8*SIZE
|
||||
str r3 , A
|
||||
|
||||
add AO2, AO2, LDA
|
||||
add AO2, AO2, LDA
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_F8
|
||||
|
||||
asrs J, N, #3 // J = N / 8
|
||||
ble gemvn_kernel_F4X1
|
||||
|
||||
|
||||
gemvn_kernel_F4X4_10:
|
||||
|
||||
KERNEL_F8X8
|
||||
|
||||
subs J, J, #1
|
||||
bne gemvn_kernel_F4X4_10
|
||||
|
||||
|
||||
gemvn_kernel_F4X1:
|
||||
|
||||
ands J, N , #7
|
||||
ble gemvn_kernel_F4_END
|
||||
|
||||
gemvn_kernel_F4X1_10:
|
||||
|
||||
KERNEL_F8X1
|
||||
|
||||
subs J, J, #1
|
||||
bne gemvn_kernel_F4X1_10
|
||||
|
||||
|
||||
gemvn_kernel_F4_END:
|
||||
|
||||
SAVE_F8
|
||||
|
||||
subs I , I , #1
|
||||
bne gemvn_kernel_F4X4
|
||||
|
||||
|
||||
gemvn_kernel_F1_BEGIN:
|
||||
|
||||
ldr I, M
|
||||
ands I, I , #7
|
||||
ble gemvn_kernel_L999
|
||||
|
||||
gemvn_kernel_F1X1:
|
||||
|
||||
ldr AO1, A
|
||||
add r3, AO1, #SIZE
|
||||
str r3, A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_F1
|
||||
|
||||
mov J, N
|
||||
|
||||
|
||||
gemvn_kernel_F1X1_10:
|
||||
|
||||
KERNEL_F1X1
|
||||
|
||||
subs J, J, #1
|
||||
bne gemvn_kernel_F1X1_10
|
||||
|
||||
|
||||
gemvn_kernel_F1_END:
|
||||
|
||||
SAVE_F1
|
||||
|
||||
subs I , I , #1
|
||||
bne gemvn_kernel_F1X1
|
||||
|
||||
b gemvn_kernel_L999
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************************/
|
||||
|
||||
gemvn_kernel_S4_BEGIN:
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl INC_X, INC_X, #3 // INC_X * SIZE
|
||||
lsl INC_Y, INC_Y, #3 // INC_Y * SIZE
|
||||
#else
|
||||
lsl INC_X, INC_X, #2 // INC_X * SIZE
|
||||
lsl INC_Y, INC_Y, #2 // INC_Y * SIZE
|
||||
#endif
|
||||
|
||||
ldr YO , Y
|
||||
|
||||
ldr I, M
|
||||
asrs I, I, #2 // I = M / 4
|
||||
ble gemvn_kernel_S1_BEGIN
|
||||
|
||||
gemvn_kernel_S4X4:
|
||||
|
||||
ldr AO1, A
|
||||
add AO2, AO1, LDA
|
||||
add r3 , AO1, #4*SIZE
|
||||
str r3 , A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_S4
|
||||
|
||||
asrs J, N, #2 // J = N / 4
|
||||
ble gemvn_kernel_S4X1
|
||||
|
||||
|
||||
gemvn_kernel_S4X4_10:
|
||||
|
||||
KERNEL_S4X4
|
||||
|
||||
subs J, J, #1
|
||||
bne gemvn_kernel_S4X4_10
|
||||
|
||||
|
||||
gemvn_kernel_S4X1:
|
||||
|
||||
ands J, N , #3
|
||||
ble gemvn_kernel_S4_END
|
||||
|
||||
gemvn_kernel_S4X1_10:
|
||||
|
||||
KERNEL_S4X1
|
||||
|
||||
subs J, J, #1
|
||||
bne gemvn_kernel_S4X1_10
|
||||
|
||||
|
||||
gemvn_kernel_S4_END:
|
||||
|
||||
SAVE_S4
|
||||
|
||||
subs I , I , #1
|
||||
bne gemvn_kernel_S4X4
|
||||
|
||||
|
||||
gemvn_kernel_S1_BEGIN:
|
||||
|
||||
ldr I, M
|
||||
ands I, I , #3
|
||||
ble gemvn_kernel_L999
|
||||
|
||||
gemvn_kernel_S1X1:
|
||||
|
||||
ldr AO1, A
|
||||
add r3, AO1, #SIZE
|
||||
str r3, A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_S1
|
||||
|
||||
mov J, N
|
||||
|
||||
|
||||
gemvn_kernel_S1X1_10:
|
||||
|
||||
KERNEL_S1X1
|
||||
|
||||
subs J, J, #1
|
||||
bne gemvn_kernel_S1X1_10
|
||||
|
||||
|
||||
gemvn_kernel_S1_END:
|
||||
|
||||
SAVE_S1
|
||||
|
||||
subs I , I , #1
|
||||
bne gemvn_kernel_S1X1
|
||||
|
||||
|
||||
/*************************************************************************************************************/
|
||||
|
||||
gemvn_kernel_L999:
|
||||
|
||||
sub r3, fp, #192
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vldm r3, { d8 - d15 } // restore floating point registers
|
||||
#else
|
||||
vldm r3, { s8 - s15 } // restore floating point registers
|
||||
#endif
|
||||
|
||||
mov r0, #0 // set return value
|
||||
|
||||
sub sp, fp, #28
|
||||
pop {r4 -r9 ,fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
781
kernel/arm/gemv_n_vfpv3.S
Normal file
781
kernel/arm/gemv_n_vfpv3.S
Normal file
@@ -0,0 +1,781 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/19 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define OLD_LDA [fp, #0 ]
|
||||
#define X [fp, #4 ]
|
||||
#define OLD_INC_X [fp, #8 ]
|
||||
#define Y [fp, #12 ]
|
||||
#define OLD_INC_Y [fp, #16 ]
|
||||
#define OLD_A r3
|
||||
#define OLD_M r0
|
||||
|
||||
#define AO1 r0
|
||||
#define N r1
|
||||
#define J r2
|
||||
|
||||
#define AO2 r4
|
||||
#define XO r5
|
||||
#define YO r6
|
||||
#define LDA r7
|
||||
#define INC_X r8
|
||||
#define INC_Y r9
|
||||
|
||||
#define I r12
|
||||
|
||||
#define M [fp, #-252 ]
|
||||
#define A [fp, #-256 ]
|
||||
|
||||
|
||||
#define X_PRE 64
|
||||
#define Y_PRE 0
|
||||
#define A_PRE 0
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
|
||||
#if defined(DOUBLE)
|
||||
|
||||
.macro INIT_F8
|
||||
|
||||
pld [ YO , #Y_PRE ]
|
||||
pld [ YO , #Y_PRE+32 ]
|
||||
|
||||
vsub.f64 d24 , d24 , d24
|
||||
vmov.f64 d25 , d24
|
||||
vmov.f64 d26 , d24
|
||||
vmov.f64 d27 , d24
|
||||
vmov.f64 d28 , d24
|
||||
vmov.f64 d29 , d24
|
||||
vmov.f64 d30 , d24
|
||||
vmov.f64 d31 , d24
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F8X8
|
||||
|
||||
pld [ XO , #X_PRE ]
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
|
||||
pld [ XO , #X_PRE ]
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_F8X1
|
||||
|
||||
fldmiad XO! , { d4 }
|
||||
fldmiad AO1 , { d8 - d15 }
|
||||
|
||||
vmla.f64 d24 , d4 , d8
|
||||
pld [ AO2 , #A_PRE ]
|
||||
vmla.f64 d25 , d4 , d9
|
||||
pld [ AO2 , #A_PRE+32 ]
|
||||
vmla.f64 d26 , d4 , d10
|
||||
vmla.f64 d27 , d4 , d11
|
||||
vmla.f64 d28 , d4 , d12
|
||||
vmla.f64 d29 , d4 , d13
|
||||
add AO1, AO1, LDA
|
||||
vmla.f64 d30 , d4 , d14
|
||||
add AO2, AO2, LDA
|
||||
vmla.f64 d31 , d4 , d15
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F8
|
||||
|
||||
fldmiad YO, { d16 - d23 }
|
||||
|
||||
vmla.f64 d16, d0, d24
|
||||
vmla.f64 d17, d0, d25
|
||||
vmla.f64 d18, d0, d26
|
||||
vmla.f64 d19, d0, d27
|
||||
vmla.f64 d20, d0, d28
|
||||
vmla.f64 d21, d0, d29
|
||||
vmla.f64 d22, d0, d30
|
||||
vmla.f64 d23, d0, d31
|
||||
|
||||
fstmiad YO!, { d16 - d23 }
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro INIT_F1
|
||||
|
||||
vsub.f64 d24 , d24 , d24
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
.macro KERNEL_F1X1
|
||||
|
||||
fldmiad XO! , { d4 }
|
||||
fldmiad AO1 , { d8 }
|
||||
vmla.f64 d24 , d4 , d8
|
||||
add AO1, AO1, LDA
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F1
|
||||
|
||||
fldmiad YO, { d16 }
|
||||
vmla.f64 d16, d0, d24
|
||||
fstmiad YO!, { d16 }
|
||||
|
||||
.endm
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
|
||||
.macro INIT_S8
|
||||
|
||||
vsub.f64 d24 , d24 , d24
|
||||
vmov.f64 d25 , d24
|
||||
vmov.f64 d26 , d24
|
||||
vmov.f64 d27 , d24
|
||||
vmov.f64 d28 , d24
|
||||
vmov.f64 d29 , d24
|
||||
vmov.f64 d30 , d24
|
||||
vmov.f64 d31 , d24
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S8X8
|
||||
|
||||
KERNEL_S8X1
|
||||
KERNEL_S8X1
|
||||
KERNEL_S8X1
|
||||
KERNEL_S8X1
|
||||
|
||||
KERNEL_S8X1
|
||||
KERNEL_S8X1
|
||||
KERNEL_S8X1
|
||||
KERNEL_S8X1
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S8X1
|
||||
|
||||
pld [ AO2 , #A_PRE ]
|
||||
pld [ AO2 , #A_PRE+32 ]
|
||||
fldmiad XO , { d4 }
|
||||
fldmiad AO1 , { d8 - d15 }
|
||||
|
||||
vmla.f64 d24 , d4 , d8
|
||||
vmla.f64 d25 , d4 , d9
|
||||
vmla.f64 d26 , d4 , d10
|
||||
vmla.f64 d27 , d4 , d11
|
||||
vmla.f64 d28 , d4 , d12
|
||||
vmla.f64 d29 , d4 , d13
|
||||
vmla.f64 d30 , d4 , d14
|
||||
vmla.f64 d31 , d4 , d15
|
||||
add AO1, AO1, LDA
|
||||
add AO2, AO2, LDA
|
||||
add XO, XO, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S8
|
||||
|
||||
fldmiad YO, { d16 }
|
||||
vmla.f64 d16, d0, d24
|
||||
fstmiad YO, { d16 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmiad YO, { d17 }
|
||||
vmla.f64 d17, d0, d25
|
||||
fstmiad YO, { d17 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmiad YO, { d18 }
|
||||
vmla.f64 d18, d0, d26
|
||||
fstmiad YO, { d18 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmiad YO, { d19 }
|
||||
vmla.f64 d19, d0, d27
|
||||
fstmiad YO, { d19 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmiad YO, { d20 }
|
||||
vmla.f64 d20, d0, d28
|
||||
fstmiad YO, { d20 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmiad YO, { d21 }
|
||||
vmla.f64 d21, d0, d29
|
||||
fstmiad YO, { d21 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmiad YO, { d22 }
|
||||
vmla.f64 d22, d0, d30
|
||||
fstmiad YO, { d22 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmiad YO, { d23 }
|
||||
vmla.f64 d23, d0, d31
|
||||
fstmiad YO, { d23 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro INIT_S1
|
||||
|
||||
vsub.f64 d24 , d24 , d24
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
.macro KERNEL_S1X1
|
||||
|
||||
fldmiad XO , { d4 }
|
||||
fldmiad AO1 , { d8 }
|
||||
vmla.f64 d24 , d4 , d8
|
||||
add AO1, AO1, LDA
|
||||
add XO, XO, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S1
|
||||
|
||||
fldmiad YO, { d16 }
|
||||
vmla.f64 d16, d0, d24
|
||||
fstmiad YO, { d16 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
#else /************************* SINGLE PRECISION *****************************************/
|
||||
|
||||
.macro INIT_F8
|
||||
|
||||
pld [ YO , #Y_PRE ]
|
||||
|
||||
vsub.f32 s24 , s24 , s24
|
||||
vmov.f32 s25 , s24
|
||||
vmov.f32 s26 , s24
|
||||
vmov.f32 s27 , s24
|
||||
vmov.f32 s28 , s24
|
||||
vmov.f32 s29 , s24
|
||||
vmov.f32 s30 , s24
|
||||
vmov.f32 s31 , s24
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F8X8
|
||||
|
||||
pld [ XO , #X_PRE ]
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
KERNEL_F8X1
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_F8X1
|
||||
|
||||
pld [ AO2 , #A_PRE ]
|
||||
fldmias XO! , { s4 }
|
||||
fldmias AO1 , { s8 - s15 }
|
||||
|
||||
vmla.f32 s24 , s4 , s8
|
||||
vmla.f32 s25 , s4 , s9
|
||||
vmla.f32 s26 , s4 , s10
|
||||
vmla.f32 s27 , s4 , s11
|
||||
vmla.f32 s28 , s4 , s12
|
||||
vmla.f32 s29 , s4 , s13
|
||||
vmla.f32 s30 , s4 , s14
|
||||
vmla.f32 s31 , s4 , s15
|
||||
add AO1, AO1, LDA
|
||||
add AO2, AO2, LDA
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F8
|
||||
|
||||
fldmias YO, { s16 - s23 }
|
||||
|
||||
vmla.f32 s16, s0, s24
|
||||
vmla.f32 s17, s0, s25
|
||||
vmla.f32 s18, s0, s26
|
||||
vmla.f32 s19, s0, s27
|
||||
vmla.f32 s20, s0, s28
|
||||
vmla.f32 s21, s0, s29
|
||||
vmla.f32 s22, s0, s30
|
||||
vmla.f32 s23, s0, s31
|
||||
|
||||
fstmias YO!, { s16 - s23 }
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro INIT_F1
|
||||
|
||||
vsub.f32 s24 , s24 , s24
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
.macro KERNEL_F1X1
|
||||
|
||||
fldmias XO! , { s4 }
|
||||
fldmias AO1 , { s8 }
|
||||
vmla.f32 s24 , s4 , s8
|
||||
add AO1, AO1, LDA
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F1
|
||||
|
||||
fldmias YO, { s16 }
|
||||
vmla.f32 s16, s0, s24
|
||||
fstmias YO!, { s16 }
|
||||
|
||||
.endm
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
|
||||
.macro INIT_S8
|
||||
|
||||
vsub.f32 s24 , s24 , s24
|
||||
vmov.f32 s25 , s24
|
||||
vmov.f32 s26 , s24
|
||||
vmov.f32 s27 , s24
|
||||
vmov.f32 s28 , s24
|
||||
vmov.f32 s29 , s24
|
||||
vmov.f32 s30 , s24
|
||||
vmov.f32 s31 , s24
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S8X8
|
||||
|
||||
KERNEL_S8X1
|
||||
KERNEL_S8X1
|
||||
KERNEL_S8X1
|
||||
KERNEL_S8X1
|
||||
|
||||
KERNEL_S8X1
|
||||
KERNEL_S8X1
|
||||
KERNEL_S8X1
|
||||
KERNEL_S8X1
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S8X1
|
||||
|
||||
pld [ AO2 , #A_PRE ]
|
||||
fldmias XO , { s4 }
|
||||
fldmias AO1 , { s8 - s15 }
|
||||
|
||||
vmla.f32 s24 , s4 , s8
|
||||
vmla.f32 s25 , s4 , s9
|
||||
vmla.f32 s26 , s4 , s10
|
||||
vmla.f32 s27 , s4 , s11
|
||||
vmla.f32 s28 , s4 , s12
|
||||
vmla.f32 s29 , s4 , s13
|
||||
vmla.f32 s30 , s4 , s14
|
||||
vmla.f32 s31 , s4 , s15
|
||||
add AO1, AO1, LDA
|
||||
add AO2, AO2, LDA
|
||||
add XO, XO, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S8
|
||||
|
||||
fldmias YO, { s16 }
|
||||
vmla.f32 s16, s0, s24
|
||||
fstmias YO, { s16 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s17 }
|
||||
vmla.f32 s17, s0, s25
|
||||
fstmias YO, { s17 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s18 }
|
||||
vmla.f32 s18, s0, s26
|
||||
fstmias YO, { s18 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s19 }
|
||||
vmla.f32 s19, s0, s27
|
||||
fstmias YO, { s19 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s20 }
|
||||
vmla.f32 s20, s0, s28
|
||||
fstmias YO, { s20 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s21 }
|
||||
vmla.f32 s21, s0, s29
|
||||
fstmias YO, { s21 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s22 }
|
||||
vmla.f32 s22, s0, s30
|
||||
fstmias YO, { s22 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s23 }
|
||||
vmla.f32 s23, s0, s31
|
||||
fstmias YO, { s23 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro INIT_S1
|
||||
|
||||
vsub.f32 s24 , s24 , s24
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
.macro KERNEL_S1X1
|
||||
|
||||
fldmias XO , { s4 }
|
||||
fldmias AO1 , { s8 }
|
||||
vmla.f32 s24 , s4 , s8
|
||||
add AO1, AO1, LDA
|
||||
add XO, XO, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S1
|
||||
|
||||
fldmias YO, { s16 }
|
||||
vmla.f32 s16, s0, s24
|
||||
fstmias YO, { s16 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
push {r4 - r9 , fp}
|
||||
add fp, sp, #28
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
sub r12, fp, #192
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vstm r12, { d8 - d15 } // store floating point registers
|
||||
#else
|
||||
vstm r12, { s8 - s31 } // store floating point registers
|
||||
#endif
|
||||
|
||||
cmp OLD_M, #0
|
||||
ble gemvn_kernel_L999
|
||||
|
||||
cmp N, #0
|
||||
ble gemvn_kernel_L999
|
||||
|
||||
str OLD_A, A
|
||||
str OLD_M, M
|
||||
|
||||
ldr INC_X , OLD_INC_X
|
||||
ldr INC_Y , OLD_INC_Y
|
||||
|
||||
cmp INC_X, #0
|
||||
beq gemvn_kernel_L999
|
||||
|
||||
cmp INC_Y, #0
|
||||
beq gemvn_kernel_L999
|
||||
|
||||
ldr LDA, OLD_LDA
|
||||
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl LDA, LDA, #3 // LDA * SIZE
|
||||
#else
|
||||
lsl LDA, LDA, #2 // LDA * SIZE
|
||||
#endif
|
||||
|
||||
cmp INC_X, #1
|
||||
bne gemvn_kernel_S8_BEGIN
|
||||
|
||||
cmp INC_Y, #1
|
||||
bne gemvn_kernel_S8_BEGIN
|
||||
|
||||
|
||||
gemvn_kernel_F8_BEGIN:
|
||||
|
||||
ldr YO , Y
|
||||
|
||||
ldr I, M
|
||||
asrs I, I, #3 // I = M / 8
|
||||
ble gemvn_kernel_F1_BEGIN
|
||||
|
||||
gemvn_kernel_F8X8:
|
||||
|
||||
ldr AO1, A
|
||||
add AO2, AO1, LDA
|
||||
add r3 , AO1, #8*SIZE
|
||||
str r3 , A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_F8
|
||||
|
||||
asrs J, N, #3 // J = N / 8
|
||||
ble gemvn_kernel_F8X1
|
||||
|
||||
|
||||
gemvn_kernel_F8X8_10:
|
||||
|
||||
KERNEL_F8X8
|
||||
|
||||
subs J, J, #1
|
||||
bne gemvn_kernel_F8X8_10
|
||||
|
||||
|
||||
gemvn_kernel_F8X1:
|
||||
|
||||
ands J, N , #7
|
||||
ble gemvn_kernel_F8_END
|
||||
|
||||
gemvn_kernel_F8X1_10:
|
||||
|
||||
KERNEL_F8X1
|
||||
|
||||
subs J, J, #1
|
||||
bne gemvn_kernel_F8X1_10
|
||||
|
||||
|
||||
gemvn_kernel_F8_END:
|
||||
|
||||
SAVE_F8
|
||||
|
||||
subs I , I , #1
|
||||
bne gemvn_kernel_F8X8
|
||||
|
||||
|
||||
gemvn_kernel_F1_BEGIN:
|
||||
|
||||
ldr I, M
|
||||
ands I, I , #7
|
||||
ble gemvn_kernel_L999
|
||||
|
||||
gemvn_kernel_F1X1:
|
||||
|
||||
ldr AO1, A
|
||||
add r3, AO1, #SIZE
|
||||
str r3, A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_F1
|
||||
|
||||
mov J, N
|
||||
|
||||
|
||||
gemvn_kernel_F1X1_10:
|
||||
|
||||
KERNEL_F1X1
|
||||
|
||||
subs J, J, #1
|
||||
bne gemvn_kernel_F1X1_10
|
||||
|
||||
|
||||
gemvn_kernel_F1_END:
|
||||
|
||||
SAVE_F1
|
||||
|
||||
subs I , I , #1
|
||||
bne gemvn_kernel_F1X1
|
||||
|
||||
b gemvn_kernel_L999
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************************/
|
||||
|
||||
gemvn_kernel_S8_BEGIN:
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl INC_X, INC_X, #3 // INC_X * SIZE
|
||||
lsl INC_Y, INC_Y, #3 // INC_Y * SIZE
|
||||
#else
|
||||
lsl INC_X, INC_X, #2 // INC_X * SIZE
|
||||
lsl INC_Y, INC_Y, #2 // INC_Y * SIZE
|
||||
#endif
|
||||
|
||||
ldr YO , Y
|
||||
|
||||
ldr I, M
|
||||
asrs I, I, #3 // I = M / 8
|
||||
ble gemvn_kernel_S1_BEGIN
|
||||
|
||||
gemvn_kernel_S8X8:
|
||||
|
||||
ldr AO1, A
|
||||
add AO2, AO1, LDA
|
||||
add r3 , AO1, #8*SIZE
|
||||
str r3 , A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_S8
|
||||
|
||||
asrs J, N, #3 // J = N / 8
|
||||
ble gemvn_kernel_S8X1
|
||||
|
||||
|
||||
gemvn_kernel_S8X8_10:
|
||||
|
||||
KERNEL_S8X8
|
||||
|
||||
subs J, J, #1
|
||||
bne gemvn_kernel_S8X8_10
|
||||
|
||||
|
||||
gemvn_kernel_S8X1:
|
||||
|
||||
ands J, N , #7
|
||||
ble gemvn_kernel_S8_END
|
||||
|
||||
gemvn_kernel_S8X1_10:
|
||||
|
||||
KERNEL_S8X1
|
||||
|
||||
subs J, J, #1
|
||||
bne gemvn_kernel_S8X1_10
|
||||
|
||||
|
||||
gemvn_kernel_S8_END:
|
||||
|
||||
SAVE_S8
|
||||
|
||||
subs I , I , #1
|
||||
bne gemvn_kernel_S8X8
|
||||
|
||||
|
||||
gemvn_kernel_S1_BEGIN:
|
||||
|
||||
ldr I, M
|
||||
ands I, I , #7
|
||||
ble gemvn_kernel_L999
|
||||
|
||||
gemvn_kernel_S1X1:
|
||||
|
||||
ldr AO1, A
|
||||
add r3, AO1, #SIZE
|
||||
str r3, A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_S1
|
||||
|
||||
mov J, N
|
||||
|
||||
|
||||
gemvn_kernel_S1X1_10:
|
||||
|
||||
KERNEL_S1X1
|
||||
|
||||
subs J, J, #1
|
||||
bne gemvn_kernel_S1X1_10
|
||||
|
||||
|
||||
gemvn_kernel_S1_END:
|
||||
|
||||
SAVE_S1
|
||||
|
||||
subs I , I , #1
|
||||
bne gemvn_kernel_S1X1
|
||||
|
||||
|
||||
/*************************************************************************************************************/
|
||||
|
||||
gemvn_kernel_L999:
|
||||
|
||||
sub r3, fp, #192
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vldm r3, { d8 - d15 } // restore floating point registers
|
||||
#else
|
||||
vldm r3, { s8 - s31 } // restore floating point registers
|
||||
#endif
|
||||
|
||||
mov r0, #0 // set return value
|
||||
|
||||
sub sp, fp, #28
|
||||
pop {r4 -r9 ,fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
67
kernel/arm/gemv_t.c
Normal file
67
kernel/arm/gemv_t.c
Normal file
@@ -0,0 +1,67 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* * 2013/09/14 Saar
|
||||
* * BLASTEST float : OK
|
||||
* * BLASTEST double : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
* *
|
||||
* **************************************************************************************/
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, FLOAT *a, BLASLONG lda, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *buffer)
|
||||
{
|
||||
BLASLONG i;
|
||||
BLASLONG ix,iy;
|
||||
BLASLONG j;
|
||||
FLOAT *a_ptr;
|
||||
FLOAT temp;
|
||||
|
||||
iy = 0;
|
||||
a_ptr = a;
|
||||
|
||||
for (j=0; j<n; j++)
|
||||
{
|
||||
temp = 0.0;
|
||||
ix = 0;
|
||||
for (i=0; i<m; i++)
|
||||
{
|
||||
temp += a_ptr[i] * x[ix];
|
||||
ix += inc_x;
|
||||
}
|
||||
y[iy] += alpha * temp;
|
||||
iy += inc_y;
|
||||
a_ptr += lda;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
750
kernel/arm/gemv_t_vfp.S
Normal file
750
kernel/arm/gemv_t_vfp.S
Normal file
@@ -0,0 +1,750 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/25 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define OLD_LDA [fp, #0 ]
|
||||
#define X [fp, #4 ]
|
||||
#define OLD_INC_X [fp, #8 ]
|
||||
#define Y [fp, #12 ]
|
||||
#define OLD_INC_Y [fp, #16 ]
|
||||
#define OLD_A r3
|
||||
#define OLD_N r1
|
||||
|
||||
#define M r0
|
||||
#define AO1 r1
|
||||
#define J r2
|
||||
|
||||
#define AO2 r4
|
||||
#define XO r5
|
||||
#define YO r6
|
||||
#define LDA r7
|
||||
#define INC_X r8
|
||||
#define INC_Y r9
|
||||
|
||||
#define I r12
|
||||
|
||||
#define N [fp, #-252 ]
|
||||
#define A [fp, #-256 ]
|
||||
|
||||
|
||||
#define X_PRE 512
|
||||
#define A_PRE 512
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
|
||||
#if defined(DOUBLE)
|
||||
|
||||
.macro INIT_F2
|
||||
|
||||
vsub.f64 d2 , d2 , d2
|
||||
vsub.f64 d3 , d3 , d3
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F2X4
|
||||
|
||||
pld [ XO , #X_PRE ]
|
||||
fldmiad XO! , { d12 - d15 }
|
||||
pld [ AO1 , #A_PRE ]
|
||||
fldmiad AO1!, { d8 - d9 }
|
||||
pld [ AO2 , #A_PRE ]
|
||||
fldmiad AO2!, { d4 - d5 }
|
||||
fldmiad AO1!, { d10 - d11 }
|
||||
fldmiad AO2!, { d6 - d7 }
|
||||
|
||||
vmla.f64 d2 , d12 , d8
|
||||
vmla.f64 d3 , d12 , d4
|
||||
vmla.f64 d2 , d13 , d9
|
||||
vmla.f64 d3 , d13 , d5
|
||||
vmla.f64 d2 , d14, d10
|
||||
vmla.f64 d3 , d14, d6
|
||||
vmla.f64 d2 , d15, d11
|
||||
vmla.f64 d3 , d15, d7
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F2X1
|
||||
|
||||
fldmiad XO! , { d1 }
|
||||
fldmiad AO1!, { d8 }
|
||||
fldmiad AO2!, { d4 }
|
||||
vmla.f64 d2 , d1 , d8
|
||||
vmla.f64 d3 , d1 , d4
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F2
|
||||
|
||||
fldmiad YO, { d4 - d5 }
|
||||
vmla.f64 d4, d0, d2
|
||||
vmla.f64 d5, d0, d3
|
||||
fstmiad YO!, { d4 - d5 }
|
||||
|
||||
.endm
|
||||
|
||||
.macro INIT_F1
|
||||
|
||||
vsub.f64 d2 , d2 , d2
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F1X4
|
||||
|
||||
pld [ XO , #X_PRE ]
|
||||
fldmiad XO! , { d12 - d15 }
|
||||
pld [ AO1 , #A_PRE ]
|
||||
fldmiad AO1!, { d8 - d9 }
|
||||
fldmiad AO1!, { d10 - d11 }
|
||||
vmla.f64 d2 , d12 , d8
|
||||
vmla.f64 d2 , d13 , d9
|
||||
vmla.f64 d2 , d14, d10
|
||||
vmla.f64 d2 , d15, d11
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F1X1
|
||||
|
||||
fldmiad XO! , { d1 }
|
||||
fldmiad AO1!, { d8 }
|
||||
vmla.f64 d2 , d1 , d8
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F1
|
||||
|
||||
fldmiad YO, { d4 }
|
||||
vmla.f64 d4, d0, d2
|
||||
fstmiad YO!, { d4 }
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro INIT_S2
|
||||
|
||||
vsub.f64 d2 , d2 , d2
|
||||
vsub.f64 d3 , d3 , d3
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S2X4
|
||||
|
||||
fldmiad XO , { d12 }
|
||||
add XO, XO, INC_X
|
||||
|
||||
pld [ AO1 , #A_PRE ]
|
||||
fldmiad AO1!, { d8 - d9 }
|
||||
pld [ AO2 , #A_PRE ]
|
||||
fldmiad AO2!, { d4 - d5 }
|
||||
|
||||
fldmiad XO , { d13 }
|
||||
add XO, XO, INC_X
|
||||
fldmiad AO1!, { d10 - d11 }
|
||||
fldmiad AO2!, { d6 - d7 }
|
||||
|
||||
fldmiad XO , { d14 }
|
||||
add XO, XO, INC_X
|
||||
|
||||
fldmiad XO , { d15 }
|
||||
add XO, XO, INC_X
|
||||
|
||||
vmla.f64 d2 , d12 , d8
|
||||
vmla.f64 d3 , d12 , d4
|
||||
vmla.f64 d2 , d13 , d9
|
||||
vmla.f64 d3 , d13 , d5
|
||||
vmla.f64 d2 , d14, d10
|
||||
vmla.f64 d3 , d14, d6
|
||||
vmla.f64 d2 , d15, d11
|
||||
vmla.f64 d3 , d15, d7
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S2X1
|
||||
|
||||
fldmiad XO , { d1 }
|
||||
fldmiad AO1!, { d8 }
|
||||
fldmiad AO2!, { d4 }
|
||||
vmla.f64 d2 , d1 , d8
|
||||
add XO, XO, INC_X
|
||||
vmla.f64 d3 , d1 , d4
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S2
|
||||
|
||||
fldmiad YO, { d4 }
|
||||
vmla.f64 d4, d0, d2
|
||||
fstmiad YO, { d4 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmiad YO, { d5 }
|
||||
vmla.f64 d5, d0, d3
|
||||
fstmiad YO, { d5 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
.macro INIT_S1
|
||||
|
||||
vsub.f64 d2 , d2 , d2
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S1X4
|
||||
|
||||
fldmiad XO , { d12 }
|
||||
add XO, XO, INC_X
|
||||
|
||||
pld [ AO1 , #A_PRE ]
|
||||
fldmiad AO1!, { d8 - d9 }
|
||||
|
||||
fldmiad XO , { d13 }
|
||||
add XO, XO, INC_X
|
||||
fldmiad AO1!, { d10 - d11 }
|
||||
|
||||
fldmiad XO , { d14 }
|
||||
add XO, XO, INC_X
|
||||
|
||||
fldmiad XO , { d15 }
|
||||
add XO, XO, INC_X
|
||||
|
||||
vmla.f64 d2 , d12 , d8
|
||||
vmla.f64 d2 , d13 , d9
|
||||
vmla.f64 d2 , d14, d10
|
||||
vmla.f64 d2 , d15, d11
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S1X1
|
||||
|
||||
fldmiad XO , { d1 }
|
||||
fldmiad AO1!, { d8 }
|
||||
vmla.f64 d2 , d1 , d8
|
||||
add XO, XO, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S1
|
||||
|
||||
fldmiad YO, { d4 }
|
||||
vmla.f64 d4, d0, d2
|
||||
fstmiad YO, { d4 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
#else /************************* SINGLE PRECISION *****************************************/
|
||||
|
||||
.macro INIT_F2
|
||||
|
||||
vsub.f32 s2 , s2 , s2
|
||||
vsub.f32 s3 , s3 , s3
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F2X4
|
||||
|
||||
fldmias XO! , { s12 - s15 }
|
||||
fldmias AO1!, { s8 - s9 }
|
||||
fldmias AO2!, { s4 - s5 }
|
||||
fldmias AO1!, { s10 - s11 }
|
||||
fldmias AO2!, { s6 - s7 }
|
||||
|
||||
vmla.f32 s2 , s12 , s8
|
||||
vmla.f32 s3 , s12 , s4
|
||||
vmla.f32 s2 , s13 , s9
|
||||
vmla.f32 s3 , s13 , s5
|
||||
vmla.f32 s2 , s14, s10
|
||||
vmla.f32 s3 , s14, s6
|
||||
vmla.f32 s2 , s15, s11
|
||||
vmla.f32 s3 , s15, s7
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F2X1
|
||||
|
||||
fldmias XO! , { s1 }
|
||||
fldmias AO1!, { s8 }
|
||||
fldmias AO2!, { s4 }
|
||||
vmla.f32 s2 , s1 , s8
|
||||
vmla.f32 s3 , s1 , s4
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F2
|
||||
|
||||
fldmias YO, { s4 - s5 }
|
||||
vmla.f32 s4, s0, s2
|
||||
vmla.f32 s5, s0, s3
|
||||
fstmias YO!, { s4 - s5 }
|
||||
|
||||
.endm
|
||||
|
||||
.macro INIT_F1
|
||||
|
||||
vsub.f32 s2 , s2 , s2
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F1X4
|
||||
|
||||
fldmias XO! , { s12 - s15 }
|
||||
fldmias AO1!, { s8 - s9 }
|
||||
fldmias AO1!, { s10 - s11 }
|
||||
vmla.f32 s2 , s12 , s8
|
||||
vmla.f32 s2 , s13 , s9
|
||||
vmla.f32 s2 , s14, s10
|
||||
vmla.f32 s2 , s15, s11
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F1X1
|
||||
|
||||
fldmias XO! , { s1 }
|
||||
fldmias AO1!, { s8 }
|
||||
vmla.f32 s2 , s1 , s8
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F1
|
||||
|
||||
fldmias YO, { s4 }
|
||||
vmla.f32 s4, s0, s2
|
||||
fstmias YO!, { s4 }
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro INIT_S2
|
||||
|
||||
vsub.f32 s2 , s2 , s2
|
||||
vsub.f32 s3 , s3 , s3
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S2X4
|
||||
|
||||
fldmias XO , { s12 }
|
||||
add XO, XO, INC_X
|
||||
|
||||
fldmias AO1!, { s8 - s9 }
|
||||
fldmias AO2!, { s4 - s5 }
|
||||
|
||||
fldmias XO , { s13 }
|
||||
add XO, XO, INC_X
|
||||
fldmias AO1!, { s10 - s11 }
|
||||
fldmias AO2!, { s6 - s7 }
|
||||
|
||||
fldmias XO , { s14 }
|
||||
add XO, XO, INC_X
|
||||
|
||||
fldmias XO , { s15 }
|
||||
add XO, XO, INC_X
|
||||
|
||||
vmla.f32 s2 , s12 , s8
|
||||
vmla.f32 s3 , s12 , s4
|
||||
vmla.f32 s2 , s13 , s9
|
||||
vmla.f32 s3 , s13 , s5
|
||||
vmla.f32 s2 , s14, s10
|
||||
vmla.f32 s3 , s14, s6
|
||||
vmla.f32 s2 , s15, s11
|
||||
vmla.f32 s3 , s15, s7
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S2X1
|
||||
|
||||
fldmias XO , { s1 }
|
||||
fldmias AO1!, { s8 }
|
||||
fldmias AO2!, { s4 }
|
||||
vmla.f32 s2 , s1 , s8
|
||||
add XO, XO, INC_X
|
||||
vmla.f32 s3 , s1 , s4
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S2
|
||||
|
||||
fldmias YO, { s4 }
|
||||
vmla.f32 s4, s0, s2
|
||||
fstmias YO, { s4 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s5 }
|
||||
vmla.f32 s5, s0, s3
|
||||
fstmias YO, { s5 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
.macro INIT_S1
|
||||
|
||||
vsub.f32 s2 , s2 , s2
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S1X4
|
||||
|
||||
fldmias XO , { s12 }
|
||||
add XO, XO, INC_X
|
||||
|
||||
pld [ AO1 , #A_PRE ]
|
||||
fldmias AO1!, { s8 - s9 }
|
||||
|
||||
fldmias XO , { s13 }
|
||||
add XO, XO, INC_X
|
||||
fldmias AO1!, { s10 - s11 }
|
||||
|
||||
fldmias XO , { s14 }
|
||||
add XO, XO, INC_X
|
||||
|
||||
fldmias XO , { s15 }
|
||||
add XO, XO, INC_X
|
||||
|
||||
vmla.f32 s2 , s12 , s8
|
||||
vmla.f32 s2 , s13 , s9
|
||||
vmla.f32 s2 , s14, s10
|
||||
vmla.f32 s2 , s15, s11
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S1X1
|
||||
|
||||
fldmias XO , { s1 }
|
||||
fldmias AO1!, { s8 }
|
||||
vmla.f32 s2 , s1 , s8
|
||||
add XO, XO, INC_X
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S1
|
||||
|
||||
fldmias YO, { s4 }
|
||||
vmla.f32 s4, s0, s2
|
||||
fstmias YO, { s4 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
push {r4 - r9 , fp}
|
||||
add fp, sp, #28
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
sub r12, fp, #192
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vstm r12, { d8 - d15 } // store floating point registers
|
||||
#else
|
||||
vstm r12, { s8 - s15 } // store floating point registers
|
||||
#endif
|
||||
|
||||
cmp M, #0
|
||||
ble gemvt_kernel_L999
|
||||
|
||||
cmp OLD_N, #0
|
||||
ble gemvt_kernel_L999
|
||||
|
||||
str OLD_A, A
|
||||
str OLD_N, N
|
||||
|
||||
ldr INC_X , OLD_INC_X
|
||||
ldr INC_Y , OLD_INC_Y
|
||||
|
||||
cmp INC_X, #0
|
||||
beq gemvt_kernel_L999
|
||||
|
||||
cmp INC_Y, #0
|
||||
beq gemvt_kernel_L999
|
||||
|
||||
ldr LDA, OLD_LDA
|
||||
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl LDA, LDA, #3 // LDA * SIZE
|
||||
#else
|
||||
lsl LDA, LDA, #2 // LDA * SIZE
|
||||
#endif
|
||||
|
||||
cmp INC_X, #1
|
||||
bne gemvt_kernel_S2_BEGIN
|
||||
|
||||
cmp INC_Y, #1
|
||||
bne gemvt_kernel_S2_BEGIN
|
||||
|
||||
|
||||
gemvt_kernel_F2_BEGIN:
|
||||
|
||||
ldr YO , Y
|
||||
|
||||
ldr J, N
|
||||
asrs J, J, #1 // J = N / 2
|
||||
ble gemvt_kernel_F1_BEGIN
|
||||
|
||||
gemvt_kernel_F2X4:
|
||||
|
||||
ldr AO1, A
|
||||
add AO2, AO1, LDA
|
||||
add r3 , AO2, LDA
|
||||
str r3 , A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_F2
|
||||
|
||||
asrs I, M, #2 // I = M / 4
|
||||
ble gemvt_kernel_F2X1
|
||||
|
||||
|
||||
gemvt_kernel_F2X4_10:
|
||||
|
||||
KERNEL_F2X4
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_F2X4_10
|
||||
|
||||
|
||||
gemvt_kernel_F2X1:
|
||||
|
||||
ands I, M , #3
|
||||
ble gemvt_kernel_F2_END
|
||||
|
||||
gemvt_kernel_F2X1_10:
|
||||
|
||||
KERNEL_F2X1
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_F2X1_10
|
||||
|
||||
|
||||
gemvt_kernel_F2_END:
|
||||
|
||||
SAVE_F2
|
||||
|
||||
subs J , J , #1
|
||||
bne gemvt_kernel_F2X4
|
||||
|
||||
|
||||
gemvt_kernel_F1_BEGIN:
|
||||
|
||||
ldr J, N
|
||||
ands J, J, #1
|
||||
ble gemvt_kernel_L999
|
||||
|
||||
gemvt_kernel_F1X4:
|
||||
|
||||
ldr AO1, A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_F1
|
||||
|
||||
asrs I, M, #2 // I = M / 4
|
||||
ble gemvt_kernel_F1X1
|
||||
|
||||
|
||||
gemvt_kernel_F1X4_10:
|
||||
|
||||
KERNEL_F1X4
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_F1X4_10
|
||||
|
||||
|
||||
gemvt_kernel_F1X1:
|
||||
|
||||
ands I, M , #3
|
||||
ble gemvt_kernel_F1_END
|
||||
|
||||
gemvt_kernel_F1X1_10:
|
||||
|
||||
KERNEL_F1X1
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_F1X1_10
|
||||
|
||||
|
||||
gemvt_kernel_F1_END:
|
||||
|
||||
SAVE_F1
|
||||
|
||||
b gemvt_kernel_L999
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************************/
|
||||
|
||||
gemvt_kernel_S2_BEGIN:
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl INC_X, INC_X, #3 // INC_X * SIZE
|
||||
lsl INC_Y, INC_Y, #3 // INC_Y * SIZE
|
||||
#else
|
||||
lsl INC_X, INC_X, #2 // INC_X * SIZE
|
||||
lsl INC_Y, INC_Y, #2 // INC_Y * SIZE
|
||||
#endif
|
||||
|
||||
ldr YO , Y
|
||||
|
||||
ldr J, N
|
||||
asrs J, J, #1 // J = N / 2
|
||||
ble gemvt_kernel_S1_BEGIN
|
||||
|
||||
gemvt_kernel_S2X4:
|
||||
|
||||
ldr AO1, A
|
||||
add AO2, AO1, LDA
|
||||
add r3 , AO2, LDA
|
||||
str r3 , A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_S2
|
||||
|
||||
asrs I, M, #2 // I = M / 4
|
||||
ble gemvt_kernel_S2X1
|
||||
|
||||
|
||||
gemvt_kernel_S2X4_10:
|
||||
|
||||
KERNEL_S2X4
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_S2X4_10
|
||||
|
||||
|
||||
gemvt_kernel_S2X1:
|
||||
|
||||
ands I, M , #3
|
||||
ble gemvt_kernel_S2_END
|
||||
|
||||
gemvt_kernel_S2X1_10:
|
||||
|
||||
KERNEL_S2X1
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_S2X1_10
|
||||
|
||||
|
||||
gemvt_kernel_S2_END:
|
||||
|
||||
SAVE_S2
|
||||
|
||||
subs J , J , #1
|
||||
bne gemvt_kernel_S2X4
|
||||
|
||||
|
||||
gemvt_kernel_S1_BEGIN:
|
||||
|
||||
ldr J, N
|
||||
ands J, J, #1
|
||||
ble gemvt_kernel_L999
|
||||
|
||||
gemvt_kernel_S1X4:
|
||||
|
||||
ldr AO1, A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_S1
|
||||
|
||||
asrs I, M, #2 // I = M / 4
|
||||
ble gemvt_kernel_S1X1
|
||||
|
||||
|
||||
gemvt_kernel_S1X4_10:
|
||||
|
||||
KERNEL_S1X4
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_S1X4_10
|
||||
|
||||
|
||||
gemvt_kernel_S1X1:
|
||||
|
||||
ands I, M , #3
|
||||
ble gemvt_kernel_S1_END
|
||||
|
||||
gemvt_kernel_S1X1_10:
|
||||
|
||||
KERNEL_S1X1
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_S1X1_10
|
||||
|
||||
|
||||
gemvt_kernel_S1_END:
|
||||
|
||||
SAVE_S1
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************************/
|
||||
|
||||
gemvt_kernel_L999:
|
||||
|
||||
sub r3, fp, #192
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vldm r3, { d8 - d15 } // restore floating point registers
|
||||
#else
|
||||
vldm r3, { s8 - s15 } // restore floating point registers
|
||||
#endif
|
||||
|
||||
mov r0, #0 // set return value
|
||||
|
||||
sub sp, fp, #28
|
||||
pop {r4 -r9 ,fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
732
kernel/arm/gemv_t_vfpv3.S
Normal file
732
kernel/arm/gemv_t_vfpv3.S
Normal file
@@ -0,0 +1,732 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2013, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
/**************************************************************************************
|
||||
* 2013/11/18 Saar
|
||||
* BLASTEST : OK
|
||||
* CTEST : OK
|
||||
* TEST : OK
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
#define ASSEMBLER
|
||||
#include "common.h"
|
||||
|
||||
#define STACKSIZE 256
|
||||
|
||||
#define OLD_LDA [fp, #0 ]
|
||||
#define X [fp, #4 ]
|
||||
#define OLD_INC_X [fp, #8 ]
|
||||
#define Y [fp, #12 ]
|
||||
#define OLD_INC_Y [fp, #16 ]
|
||||
#define OLD_A r3
|
||||
#define OLD_N r1
|
||||
|
||||
#define M r0
|
||||
#define AO1 r1
|
||||
#define J r2
|
||||
|
||||
#define AO2 r4
|
||||
#define XO r5
|
||||
#define YO r6
|
||||
#define LDA r7
|
||||
#define INC_X r8
|
||||
#define INC_Y r9
|
||||
|
||||
#define I r12
|
||||
|
||||
#define N [fp, #-252 ]
|
||||
#define A [fp, #-256 ]
|
||||
|
||||
|
||||
#define X_PRE 512
|
||||
#define A_PRE 512
|
||||
|
||||
/**************************************************************************************
|
||||
* Macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
|
||||
#if defined(DOUBLE)
|
||||
|
||||
.macro INIT_F2
|
||||
|
||||
vsub.f64 d4 , d4 , d4
|
||||
vsub.f64 d5 , d5 , d5
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F2X4
|
||||
|
||||
pld [ XO , #X_PRE ]
|
||||
fldmiad XO! , { d28 - d31 }
|
||||
pld [ AO1 , #A_PRE ]
|
||||
fldmiad AO1!, { d8 - d9 }
|
||||
pld [ AO2 , #A_PRE ]
|
||||
fldmiad AO2!, { d16 - d17 }
|
||||
vmla.f64 d4 , d28 , d8
|
||||
vmla.f64 d5 , d28 , d16
|
||||
fldmiad AO1!, { d10 - d11 }
|
||||
vmla.f64 d4 , d29 , d9
|
||||
vmla.f64 d5 , d29 , d17
|
||||
fldmiad AO2!, { d18 - d19 }
|
||||
vmla.f64 d4 , d30, d10
|
||||
vmla.f64 d5 , d30, d18
|
||||
vmla.f64 d4 , d31, d11
|
||||
vmla.f64 d5 , d31, d19
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_F2X1
|
||||
|
||||
fldmiad XO! , { d2 }
|
||||
fldmiad AO1!, { d8 }
|
||||
fldmiad AO2!, { d16 }
|
||||
vmla.f64 d4 , d2 , d8
|
||||
vmla.f64 d5 , d2 , d16
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F2
|
||||
|
||||
fldmiad YO, { d24 - d25 }
|
||||
vmla.f64 d24, d0, d4
|
||||
vmla.f64 d25, d0, d5
|
||||
fstmiad YO!, { d24 - d25 }
|
||||
|
||||
.endm
|
||||
|
||||
.macro INIT_S2
|
||||
|
||||
vsub.f64 d4 , d4 , d4
|
||||
vsub.f64 d5 , d5 , d5
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S2X4
|
||||
|
||||
pld [ AO1 , #A_PRE ]
|
||||
fldmiad XO , { d28 }
|
||||
add XO, XO, INC_X
|
||||
fldmiad AO1!, { d8 - d9 }
|
||||
pld [ AO2 , #A_PRE ]
|
||||
fldmiad AO2!, { d16 - d17 }
|
||||
vmla.f64 d4 , d28 , d8
|
||||
fldmiad XO , { d29 }
|
||||
add XO, XO, INC_X
|
||||
vmla.f64 d5 , d28 , d16
|
||||
fldmiad AO1!, { d10 - d11 }
|
||||
vmla.f64 d4 , d29 , d9
|
||||
fldmiad XO , { d30 }
|
||||
add XO, XO, INC_X
|
||||
vmla.f64 d5 , d29 , d17
|
||||
fldmiad AO2!, { d18 - d19 }
|
||||
vmla.f64 d4 , d30, d10
|
||||
fldmiad XO , { d31 }
|
||||
add XO, XO, INC_X
|
||||
vmla.f64 d5 , d30, d18
|
||||
vmla.f64 d4 , d31, d11
|
||||
vmla.f64 d5 , d31, d19
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S2X1
|
||||
|
||||
fldmiad XO , { d2 }
|
||||
fldmiad AO1!, { d8 }
|
||||
add XO, XO, INC_X
|
||||
fldmiad AO2!, { d16 }
|
||||
vmla.f64 d4 , d2 , d8
|
||||
vmla.f64 d5 , d2 , d16
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S2
|
||||
|
||||
fldmiad YO, { d24 }
|
||||
vmla.f64 d24, d0, d4
|
||||
fstmiad YO, { d24 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmiad YO, { d24 }
|
||||
vmla.f64 d24, d0, d5
|
||||
fstmiad YO, { d24 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
.macro INIT_F1
|
||||
|
||||
vsub.f64 d4 , d4 , d4
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F1X4
|
||||
|
||||
pld [ XO , #X_PRE ]
|
||||
fldmiad XO! , { d28 - d31 }
|
||||
pld [ AO1 , #A_PRE ]
|
||||
fldmiad AO1!, { d8 - d9 }
|
||||
vmla.f64 d4 , d28 , d8
|
||||
fldmiad AO1!, { d10 - d11 }
|
||||
vmla.f64 d4 , d29 , d9
|
||||
vmla.f64 d4 , d30, d10
|
||||
vmla.f64 d4 , d31, d11
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_F1X1
|
||||
|
||||
fldmiad XO! , { d2 }
|
||||
fldmiad AO1!, { d8 }
|
||||
vmla.f64 d4 , d2 , d8
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F1
|
||||
|
||||
fldmiad YO, { d24 }
|
||||
vmla.f64 d24, d0, d4
|
||||
fstmiad YO!, { d24 }
|
||||
|
||||
.endm
|
||||
|
||||
.macro INIT_S1
|
||||
|
||||
vsub.f64 d4 , d4 , d4
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S1X4
|
||||
|
||||
pld [ AO1 , #A_PRE ]
|
||||
fldmiad XO , { d28 }
|
||||
add XO, XO, INC_X
|
||||
fldmiad AO1!, { d8 - d9 }
|
||||
vmla.f64 d4 , d28 , d8
|
||||
fldmiad XO , { d29 }
|
||||
add XO, XO, INC_X
|
||||
fldmiad AO1!, { d10 - d11 }
|
||||
vmla.f64 d4 , d29 , d9
|
||||
fldmiad XO , { d30 }
|
||||
add XO, XO, INC_X
|
||||
vmla.f64 d4 , d30, d10
|
||||
fldmiad XO , { d31 }
|
||||
add XO, XO, INC_X
|
||||
vmla.f64 d4 , d31, d11
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S1X1
|
||||
|
||||
fldmiad XO , { d2 }
|
||||
fldmiad AO1!, { d8 }
|
||||
add XO, XO, INC_X
|
||||
vmla.f64 d4 , d2 , d8
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S1
|
||||
|
||||
fldmiad YO, { d24 }
|
||||
vmla.f64 d24, d0, d4
|
||||
fstmiad YO, { d24 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
#else /************************* SINGLE PRECISION *****************************************/
|
||||
|
||||
.macro INIT_F2
|
||||
|
||||
vsub.f32 s4 , s4 , s4
|
||||
vsub.f32 s5 , s5 , s5
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F2X4
|
||||
|
||||
fldmias XO! , { s28 - s31 }
|
||||
fldmias AO1!, { s8 - s9 }
|
||||
fldmias AO2!, { s16 - s17 }
|
||||
vmla.f32 s4 , s28 , s8
|
||||
vmla.f32 s5 , s28 , s16
|
||||
fldmias AO1!, { s10 - s11 }
|
||||
vmla.f32 s4 , s29 , s9
|
||||
vmla.f32 s5 , s29 , s17
|
||||
fldmias AO2!, { s18 - s19 }
|
||||
vmla.f32 s4 , s30, s10
|
||||
vmla.f32 s5 , s30, s18
|
||||
vmla.f32 s4 , s31, s11
|
||||
vmla.f32 s5 , s31, s19
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_F2X1
|
||||
|
||||
fldmias XO! , { s2 }
|
||||
fldmias AO1!, { s8 }
|
||||
fldmias AO2!, { s16 }
|
||||
vmla.f32 s4 , s2 , s8
|
||||
vmla.f32 s5 , s2 , s16
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F2
|
||||
|
||||
fldmias YO, { s24 - s25 }
|
||||
vmla.f32 s24, s0, s4
|
||||
vmla.f32 s25, s0, s5
|
||||
fstmias YO!, { s24 - s25 }
|
||||
|
||||
.endm
|
||||
|
||||
.macro INIT_S2
|
||||
|
||||
vsub.f32 s4 , s4 , s4
|
||||
vsub.f32 s5 , s5 , s5
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S2X4
|
||||
|
||||
fldmias XO , { s28 }
|
||||
add XO, XO, INC_X
|
||||
fldmias AO1!, { s8 - s9 }
|
||||
fldmias AO2!, { s16 - s17 }
|
||||
vmla.f32 s4 , s28 , s8
|
||||
fldmias XO , { s29 }
|
||||
add XO, XO, INC_X
|
||||
vmla.f32 s5 , s28 , s16
|
||||
fldmias AO1!, { s10 - s11 }
|
||||
vmla.f32 s4 , s29 , s9
|
||||
fldmias XO , { s30 }
|
||||
add XO, XO, INC_X
|
||||
vmla.f32 s5 , s29 , s17
|
||||
fldmias AO2!, { s18 - s19 }
|
||||
vmla.f32 s4 , s30, s10
|
||||
fldmias XO , { s31 }
|
||||
add XO, XO, INC_X
|
||||
vmla.f32 s5 , s30, s18
|
||||
vmla.f32 s4 , s31, s11
|
||||
vmla.f32 s5 , s31, s19
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S2X1
|
||||
|
||||
fldmias XO , { s2 }
|
||||
fldmias AO1!, { s8 }
|
||||
add XO, XO, INC_X
|
||||
fldmias AO2!, { s16 }
|
||||
vmla.f32 s4 , s2 , s8
|
||||
vmla.f32 s5 , s2 , s16
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S2
|
||||
|
||||
fldmias YO, { s24 }
|
||||
vmla.f32 s24, s0, s4
|
||||
fstmias YO, { s24 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
fldmias YO, { s24 }
|
||||
vmla.f32 s24, s0, s5
|
||||
fstmias YO, { s24 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
.macro INIT_F1
|
||||
|
||||
vsub.f32 s4 , s4 , s4
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_F1X4
|
||||
|
||||
fldmias XO! , { s28 - s31 }
|
||||
fldmias AO1!, { s8 - s9 }
|
||||
vmla.f32 s4 , s28 , s8
|
||||
fldmias AO1!, { s10 - s11 }
|
||||
vmla.f32 s4 , s29 , s9
|
||||
vmla.f32 s4 , s30, s10
|
||||
vmla.f32 s4 , s31, s11
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_F1X1
|
||||
|
||||
fldmias XO! , { s2 }
|
||||
fldmias AO1!, { s8 }
|
||||
vmla.f32 s4 , s2 , s8
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_F1
|
||||
|
||||
fldmias YO, { s24 }
|
||||
vmla.f32 s24, s0, s4
|
||||
fstmias YO!, { s24 }
|
||||
|
||||
.endm
|
||||
|
||||
.macro INIT_S1
|
||||
|
||||
vsub.f32 s4 , s4 , s4
|
||||
|
||||
.endm
|
||||
|
||||
.macro KERNEL_S1X4
|
||||
|
||||
fldmias XO , { s28 }
|
||||
add XO, XO, INC_X
|
||||
fldmias AO1!, { s8 - s9 }
|
||||
vmla.f32 s4 , s28 , s8
|
||||
fldmias XO , { s29 }
|
||||
add XO, XO, INC_X
|
||||
fldmias AO1!, { s10 - s11 }
|
||||
vmla.f32 s4 , s29 , s9
|
||||
fldmias XO , { s30 }
|
||||
add XO, XO, INC_X
|
||||
vmla.f32 s4 , s30, s10
|
||||
fldmias XO , { s31 }
|
||||
add XO, XO, INC_X
|
||||
vmla.f32 s4 , s31, s11
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
.macro KERNEL_S1X1
|
||||
|
||||
fldmias XO , { s2 }
|
||||
fldmias AO1!, { s8 }
|
||||
add XO, XO, INC_X
|
||||
vmla.f32 s4 , s2 , s8
|
||||
|
||||
.endm
|
||||
|
||||
.macro SAVE_S1
|
||||
|
||||
fldmias YO, { s24 }
|
||||
vmla.f32 s24, s0, s4
|
||||
fstmias YO, { s24 }
|
||||
add YO, YO, INC_Y
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
/**************************************************************************************
|
||||
* End of macro definitions
|
||||
**************************************************************************************/
|
||||
|
||||
PROLOGUE
|
||||
|
||||
.align 5
|
||||
push {r4 - r9 , fp}
|
||||
add fp, sp, #28
|
||||
sub sp, sp, #STACKSIZE // reserve stack
|
||||
|
||||
sub r12, fp, #192
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vstm r12, { d8 - d15 } // store floating point registers
|
||||
#else
|
||||
vstm r12, { s8 - s31 } // store floating point registers
|
||||
#endif
|
||||
|
||||
cmp M, #0
|
||||
ble gemvt_kernel_L999
|
||||
|
||||
cmp OLD_N, #0
|
||||
ble gemvt_kernel_L999
|
||||
|
||||
str OLD_A, A
|
||||
str OLD_N, N
|
||||
|
||||
ldr INC_X , OLD_INC_X
|
||||
ldr INC_Y , OLD_INC_Y
|
||||
|
||||
cmp INC_X, #0
|
||||
beq gemvt_kernel_L999
|
||||
|
||||
cmp INC_Y, #0
|
||||
beq gemvt_kernel_L999
|
||||
|
||||
ldr LDA, OLD_LDA
|
||||
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl LDA, LDA, #3 // LDA * SIZE
|
||||
#else
|
||||
lsl LDA, LDA, #2 // LDA * SIZE
|
||||
#endif
|
||||
|
||||
cmp INC_X, #1
|
||||
bne gemvt_kernel_S2_BEGIN
|
||||
|
||||
cmp INC_Y, #1
|
||||
bne gemvt_kernel_S2_BEGIN
|
||||
|
||||
|
||||
gemvt_kernel_F2_BEGIN:
|
||||
|
||||
ldr YO , Y
|
||||
|
||||
ldr J, N
|
||||
asrs J, J, #1 // J = N / 2
|
||||
ble gemvt_kernel_F1_BEGIN
|
||||
|
||||
gemvt_kernel_F2X4:
|
||||
|
||||
ldr AO1, A
|
||||
add AO2, AO1, LDA
|
||||
add r3 , AO2, LDA
|
||||
str r3 , A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_F2
|
||||
|
||||
asrs I, M, #2 // I = M / 4
|
||||
ble gemvt_kernel_F2X1
|
||||
|
||||
|
||||
gemvt_kernel_F2X4_10:
|
||||
|
||||
KERNEL_F2X4
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_F2X4_10
|
||||
|
||||
|
||||
gemvt_kernel_F2X1:
|
||||
|
||||
ands I, M , #3
|
||||
ble gemvt_kernel_F2_END
|
||||
|
||||
gemvt_kernel_F2X1_10:
|
||||
|
||||
KERNEL_F2X1
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_F2X1_10
|
||||
|
||||
|
||||
gemvt_kernel_F2_END:
|
||||
|
||||
SAVE_F2
|
||||
|
||||
subs J , J , #1
|
||||
bne gemvt_kernel_F2X4
|
||||
|
||||
|
||||
gemvt_kernel_F1_BEGIN:
|
||||
|
||||
ldr J, N
|
||||
ands J, J, #1
|
||||
ble gemvt_kernel_L999
|
||||
|
||||
gemvt_kernel_F1X4:
|
||||
|
||||
ldr AO1, A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_F1
|
||||
|
||||
asrs I, M, #2 // I = M / 4
|
||||
ble gemvt_kernel_F1X1
|
||||
|
||||
|
||||
gemvt_kernel_F1X4_10:
|
||||
|
||||
KERNEL_F1X4
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_F1X4_10
|
||||
|
||||
|
||||
gemvt_kernel_F1X1:
|
||||
|
||||
ands I, M , #3
|
||||
ble gemvt_kernel_F1_END
|
||||
|
||||
gemvt_kernel_F1X1_10:
|
||||
|
||||
KERNEL_F1X1
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_F1X1_10
|
||||
|
||||
|
||||
gemvt_kernel_F1_END:
|
||||
|
||||
SAVE_F1
|
||||
|
||||
b gemvt_kernel_L999
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************************/
|
||||
|
||||
gemvt_kernel_S2_BEGIN:
|
||||
|
||||
#if defined(DOUBLE)
|
||||
lsl INC_X, INC_X, #3 // INC_X * SIZE
|
||||
lsl INC_Y, INC_Y, #3 // INC_Y * SIZE
|
||||
#else
|
||||
lsl INC_X, INC_X, #2 // INC_X * SIZE
|
||||
lsl INC_Y, INC_Y, #2 // INC_Y * SIZE
|
||||
#endif
|
||||
|
||||
ldr YO , Y
|
||||
|
||||
ldr J, N
|
||||
asrs J, J, #1 // J = N / 2
|
||||
ble gemvt_kernel_S1_BEGIN
|
||||
|
||||
gemvt_kernel_S2X4:
|
||||
|
||||
ldr AO1, A
|
||||
add AO2, AO1, LDA
|
||||
add r3 , AO2, LDA
|
||||
str r3 , A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_S2
|
||||
|
||||
asrs I, M, #2 // I = M / 4
|
||||
ble gemvt_kernel_S2X1
|
||||
|
||||
|
||||
gemvt_kernel_S2X4_10:
|
||||
|
||||
KERNEL_S2X4
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_S2X4_10
|
||||
|
||||
|
||||
gemvt_kernel_S2X1:
|
||||
|
||||
ands I, M , #3
|
||||
ble gemvt_kernel_S2_END
|
||||
|
||||
gemvt_kernel_S2X1_10:
|
||||
|
||||
KERNEL_S2X1
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_S2X1_10
|
||||
|
||||
|
||||
gemvt_kernel_S2_END:
|
||||
|
||||
SAVE_S2
|
||||
|
||||
subs J , J , #1
|
||||
bne gemvt_kernel_S2X4
|
||||
|
||||
|
||||
gemvt_kernel_S1_BEGIN:
|
||||
|
||||
ldr J, N
|
||||
ands J, J, #1
|
||||
ble gemvt_kernel_L999
|
||||
|
||||
gemvt_kernel_S1X4:
|
||||
|
||||
ldr AO1, A
|
||||
|
||||
ldr XO , X
|
||||
|
||||
INIT_S1
|
||||
|
||||
asrs I, M, #2 // I = M / 4
|
||||
ble gemvt_kernel_S1X1
|
||||
|
||||
|
||||
gemvt_kernel_S1X4_10:
|
||||
|
||||
KERNEL_S1X4
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_S1X4_10
|
||||
|
||||
|
||||
gemvt_kernel_S1X1:
|
||||
|
||||
ands I, M , #3
|
||||
ble gemvt_kernel_S1_END
|
||||
|
||||
gemvt_kernel_S1X1_10:
|
||||
|
||||
KERNEL_S1X1
|
||||
|
||||
subs I, I, #1
|
||||
bne gemvt_kernel_S1X1_10
|
||||
|
||||
|
||||
gemvt_kernel_S1_END:
|
||||
|
||||
SAVE_S1
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************************/
|
||||
|
||||
gemvt_kernel_L999:
|
||||
|
||||
sub r3, fp, #192
|
||||
|
||||
#if defined(DOUBLE)
|
||||
vldm r3, { d8 - d15 } // restore floating point registers
|
||||
#else
|
||||
vldm r3, { s8 - s31 } // restore floating point registers
|
||||
#endif
|
||||
|
||||
mov r0, #0 // set return value
|
||||
|
||||
sub sp, fp, #28
|
||||
pop {r4 -r9 ,fp}
|
||||
bx lr
|
||||
|
||||
EPILOGUE
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user