summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Kroeker <martin@ruby.chemie.uni-freiburg.de>2022-01-22 18:53:38 +0100
committerGitHub <noreply@github.com>2022-01-22 18:53:38 +0100
commitbc93f468ef98c7bb76bdcaf779e9dbe7231303b4 (patch)
tree0d21019146dc7f951a351f0976b499a9a6e6c0ad
parent1937b4e435cce48dbf8d7d124800e03e1ba5d30d (diff)
downloadopenblas-bc93f468ef98c7bb76bdcaf779e9dbe7231303b4.tar.gz
openblas-bc93f468ef98c7bb76bdcaf779e9dbe7231303b4.tar.bz2
openblas-bc93f468ef98c7bb76bdcaf779e9dbe7231303b4.zip
Add Elbrus E2000 architecture as generic x86_64 compatible
-rw-r--r--Makefile.e2k1
-rw-r--r--TargetList.txt4
-rw-r--r--common.h4
-rw-r--r--common_e2k.h64
-rw-r--r--common_macro.h2
-rw-r--r--getarch.c11
6 files changed, 85 insertions, 1 deletions
diff --git a/Makefile.e2k b/Makefile.e2k
new file mode 100644
index 000000000..a5e50b1f0
--- /dev/null
+++ b/Makefile.e2k
@@ -0,0 +1 @@
+COPT = -Wall -O2 # -DGEMMTEST
diff --git a/TargetList.txt b/TargetList.txt
index 97c8a8f06..a5a07a661 100644
--- a/TargetList.txt
+++ b/TargetList.txt
@@ -115,3 +115,7 @@ C910V
11.LOONGARCH64:
LOONGSON3R5
+
+12. Elbrus E2000:
+E2K
+
diff --git a/common.h b/common.h
index ff5254a5c..00d1d0baf 100644
--- a/common.h
+++ b/common.h
@@ -474,6 +474,10 @@ please https://github.com/xianyi/OpenBLAS/issues/246
#include "common_loongarch64.h"
#endif
+#ifdef ARCH_E2K
+#include "common_e2k.h"
+#endif
+
#ifndef ASSEMBLER
#ifdef OS_WINDOWSSTORE
typedef char env_var_t[MAX_PATH];
diff --git a/common_e2k.h b/common_e2k.h
new file mode 100644
index 000000000..0739c9473
--- /dev/null
+++ b/common_e2k.h
@@ -0,0 +1,64 @@
+/*****************************************************************************
+Copyright (c) 2011-2016, 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 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.
+**********************************************************************************/
+
+#ifndef COMMON_E2K
+#define COMMON_E2K
+
+#ifdef ASSEMBLER
+#error
+#endif
+
+#define MB do { __asm__ __volatile__("": : :"memory"); } while (0)
+#define WMB do { __asm__ __volatile__("": : :"memory"); } while (0)
+#define RMB
+
+#define INLINE __attribute__((__always_inline__)) inline
+
+static inline int blas_quickdivide(blasint x, blasint y) {
+ return x / y;
+}
+
+#ifndef PAGESIZE
+#define PAGESIZE ( 4 << 10)
+#endif
+#define HUGE_PAGESIZE ( 2 << 20)
+
+#ifndef BUFFERSIZE
+#define BUFFER_SIZE (32 << 20)
+#else
+#define BUFFER_SIZE (32 << BUFFERSIZE)
+#endif
+
+#define SEEK_ADDRESS
+
+#endif
+
diff --git a/common_macro.h b/common_macro.h
index cf2a3fd88..9826f1809 100644
--- a/common_macro.h
+++ b/common_macro.h
@@ -2611,7 +2611,7 @@
#ifndef ASSEMBLER
#if defined(ARCH_X86) || defined(ARCH_X86_64) || defined(ARCH_IA64) || defined(ARCH_MIPS64) || defined(ARCH_ARM64)\
-|| defined(ARCH_LOONGARCH64)
+|| defined(ARCH_LOONGARCH64) || defined(ARCH_E2K)
extern BLASLONG gemm_offset_a;
extern BLASLONG gemm_offset_b;
extern BLASLONG sbgemm_p;
diff --git a/getarch.c b/getarch.c
index 73bbf1892..00e544bc7 100644
--- a/getarch.c
+++ b/getarch.c
@@ -1536,6 +1536,17 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#endif
+#if defined(FORCE_E2K) || defined(__e2k__)
+#define FORCE
+#define ARCHITECTURE "E2K"
+#define ARCHCONFIG "-DGENERIC " \
+ "-DL1_DATA_SIZE=16384 -DL1_DATA_LINESIZE=64 " \
+ "-DL2_SIZE=524288 -DL2_LINESIZE=64 " \
+ "-DDTB_DEFAULT_ENTRIES=64 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=8 "
+#define LIBNAME "generic"
+#define CORENAME "generic"
+#endif
+
#ifndef FORCE
#ifdef USER_TARGET