aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheo Buehler <tb@openbsd.org>2025-04-12 15:02:41 +0200
committerTheo Buehler <tb@openbsd.org>2025-04-12 15:02:41 +0200
commit34480a7eba9b3af01bf5ccbd844dc749147c9341 (patch)
treeae7680622519077af36d2fa49696b8d120f35b69
parentf625098f8b64b917b239afd72d1317139bef1e3b (diff)
parent031c2f1722f9af10299de3d22ff3c1467d541241 (diff)
downloadportable-34480a7eba9b3af01bf5ccbd844dc749147c9341.tar.gz
portable-34480a7eba9b3af01bf5ccbd844dc749147c9341.tar.bz2
portable-34480a7eba9b3af01bf5ccbd844dc749147c9341.zip
Land #1146 - Basic longarch64 support
-rw-r--r--CMakeLists.txt2
-rw-r--r--configure.ac21
-rw-r--r--crypto/CMakeLists.txt3
-rw-r--r--crypto/Makefile.am7
-rw-r--r--crypto/arch/loongarch64/crypto_arch.h21
-rw-r--r--crypto/bn/arch/loongarch64/bn_arch.h23
-rw-r--r--include/CMakeLists.txt2
-rw-r--r--include/arch/loongarch64/opensslconf.h154
-rw-r--r--include/openssl/Makefile.am.tpl3
-rw-r--r--ssl/CMakeLists.txt2
-rw-r--r--ssl/Makefile.am5
-rw-r--r--tests/CMakeLists.txt2
-rw-r--r--tests/Makefile.am4
13 files changed, 239 insertions, 10 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 437570b..3673922 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -389,6 +389,8 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64|amd64|AMD64)")
389elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(i[3-6]86|[xX]86)") 389elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(i[3-6]86|[xX]86)")
390 set(ENABLE_ASM false) 390 set(ENABLE_ASM false)
391 set(HOST_I386 true) 391 set(HOST_I386 true)
392elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64")
393 set(HOST_LOONGARCH64 true)
392elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips64") 394elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips64")
393 set(HOST_MIPS64 true) 395 set(HOST_MIPS64 true)
394elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips") 396elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips")
diff --git a/configure.ac b/configure.ac
index 864a4ad..7a88f27 100644
--- a/configure.ac
+++ b/configure.ac
@@ -86,16 +86,17 @@ AS_CASE([$host_cpu],
86) 86)
87AM_CONDITIONAL([HOST_CPU_IS_INTEL], [test "x$HOSTARCH" = "xintel"]) 87AM_CONDITIONAL([HOST_CPU_IS_INTEL], [test "x$HOSTARCH" = "xintel"])
88 88
89AM_CONDITIONAL([HOST_AARCH64], [test "$host_cpu" = "aarch64"]) 89AM_CONDITIONAL([HOST_AARCH64], [test "$host_cpu" = "aarch64"])
90AM_CONDITIONAL([HOST_ARM], [test "$host_cpu" = "arm"]) 90AM_CONDITIONAL([HOST_ARM], [test "$host_cpu" = "arm"])
91AM_CONDITIONAL([HOST_I386], [test "$host_cpu" = "i386"]) 91AM_CONDITIONAL([HOST_I386], [test "$host_cpu" = "i386"])
92AM_CONDITIONAL([HOST_MIPS], [test "$host_cpu" = "mips"]) 92AM_CONDITIONAL([HOST_LOONGARCH64], [test "$host_cpu" = "loongarch64"])
93AM_CONDITIONAL([HOST_MIPS64], [test "$host_cpu" = "mips64"]) 93AM_CONDITIONAL([HOST_MIPS], [test "$host_cpu" = "mips"])
94AM_CONDITIONAL([HOST_POWERPC], [test "$host_cpu" = "powerpc"]) 94AM_CONDITIONAL([HOST_MIPS64], [test "$host_cpu" = "mips64"])
95AM_CONDITIONAL([HOST_POWERPC64], [test "$host_cpu" = "ppc64"]) 95AM_CONDITIONAL([HOST_POWERPC], [test "$host_cpu" = "powerpc"])
96AM_CONDITIONAL([HOST_RISCV64], [test "$host_cpu" = "riscv64"]) 96AM_CONDITIONAL([HOST_POWERPC64], [test "$host_cpu" = "ppc64"])
97AM_CONDITIONAL([HOST_SPARC64], [test "$host_cpu" = "sparc64"]) 97AM_CONDITIONAL([HOST_RISCV64], [test "$host_cpu" = "riscv64"])
98AM_CONDITIONAL([HOST_X86_64], [test "$host_cpu" = "x86_64"]) 98AM_CONDITIONAL([HOST_SPARC64], [test "$host_cpu" = "sparc64"])
99AM_CONDITIONAL([HOST_X86_64], [test "$host_cpu" = "x86_64"])
99 100
100AC_MSG_CHECKING([if .gnu.warning accepts long strings]) 101AC_MSG_CHECKING([if .gnu.warning accepts long strings])
101AC_LINK_IFELSE([AC_LANG_SOURCE([[ 102AC_LINK_IFELSE([AC_LANG_SOURCE([[
diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt
index e642b01..a714059 100644
--- a/crypto/CMakeLists.txt
+++ b/crypto/CMakeLists.txt
@@ -774,6 +774,9 @@ elseif(HOST_ARM)
774elseif(HOST_I386) 774elseif(HOST_I386)
775 target_include_directories(crypto_obj PRIVATE arch/i386/) 775 target_include_directories(crypto_obj PRIVATE arch/i386/)
776 target_include_directories(crypto_obj PRIVATE bn/arch/i386/) 776 target_include_directories(crypto_obj PRIVATE bn/arch/i386/)
777elseif(HOST_LOONGARCH64)
778 target_include_directories(crypto_obj PRIVATE arch/loongarch64)
779 target_include_directories(crypto_obj PRIVATE bn/arch/loongarch64)
777elseif(HOST_MIPS64) 780elseif(HOST_MIPS64)
778 target_include_directories(crypto_obj PRIVATE arch/mips64) 781 target_include_directories(crypto_obj PRIVATE arch/mips64)
779 target_include_directories(crypto_obj PRIVATE bn/arch/mips64) 782 target_include_directories(crypto_obj PRIVATE bn/arch/mips64)
diff --git a/crypto/Makefile.am b/crypto/Makefile.am
index 438da8b..0952494 100644
--- a/crypto/Makefile.am
+++ b/crypto/Makefile.am
@@ -396,6 +396,13 @@ endif
396noinst_HEADERS += arch/i386/crypto_arch.h 396noinst_HEADERS += arch/i386/crypto_arch.h
397noinst_HEADERS += bn/arch/i386/bn_arch.h 397noinst_HEADERS += bn/arch/i386/bn_arch.h
398 398
399if HOST_LOONGARCH64
400libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/loongarch64/
401libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/loongarch64/
402endif
403noinst_HEADERS += arch/loongarch64/crypto_arch.h
404noinst_HEADERS += bn/arch/loongarch64/bn_arch.h
405
399# XXX - do we still need this? 406# XXX - do we still need this?
400if HOST_MIPS 407if HOST_MIPS
401libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/mips/ 408libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/mips/
diff --git a/crypto/arch/loongarch64/crypto_arch.h b/crypto/arch/loongarch64/crypto_arch.h
new file mode 100644
index 0000000..a3dd98d
--- /dev/null
+++ b/crypto/arch/loongarch64/crypto_arch.h
@@ -0,0 +1,21 @@
1/* $OpenBSD: crypto_arch.h,v 1.1 2024/08/11 13:02:39 jsing Exp $ */
2/*
3 * Copyright (c) 2024 Joel Sing <jsing@openbsd.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#ifndef HEADER_CRYPTO_ARCH_H
19#define HEADER_CRYPTO_ARCH_H
20
21#endif
diff --git a/crypto/bn/arch/loongarch64/bn_arch.h b/crypto/bn/arch/loongarch64/bn_arch.h
new file mode 100644
index 0000000..672ac12
--- /dev/null
+++ b/crypto/bn/arch/loongarch64/bn_arch.h
@@ -0,0 +1,23 @@
1/* $OpenBSD: bn_arch.h,v 1.7 2023/07/09 10:37:32 jsing Exp $ */
2/*
3 * Copyright (c) 2023 Joel Sing <jsing@openbsd.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#include <openssl/bn.h>
19
20#ifndef HEADER_BN_ARCH_H
21#define HEADER_BN_ARCH_H
22
23#endif
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
index 59f5b62..11ab7c2 100644
--- a/include/CMakeLists.txt
+++ b/include/CMakeLists.txt
@@ -24,6 +24,8 @@ elseif(HOST_ARM)
24 file(READ arch/arm/opensslconf.h OPENSSLCONF) 24 file(READ arch/arm/opensslconf.h OPENSSLCONF)
25elseif(HOST_I386) 25elseif(HOST_I386)
26 file(READ arch/i386/opensslconf.h OPENSSLCONF) 26 file(READ arch/i386/opensslconf.h OPENSSLCONF)
27elseif(HOST_LOONGARCH64)
28 file(READ arch/loongarch64/opensslconf.h OPENSSLCONF)
27elseif(HOST_MIPS) 29elseif(HOST_MIPS)
28 file(READ arch/mips/opensslconf.h OPENSSLCONF) 30 file(READ arch/mips/opensslconf.h OPENSSLCONF)
29elseif(HOST_MIPS64) 31elseif(HOST_MIPS64)
diff --git a/include/arch/loongarch64/opensslconf.h b/include/arch/loongarch64/opensslconf.h
new file mode 100644
index 0000000..731b06a
--- /dev/null
+++ b/include/arch/loongarch64/opensslconf.h
@@ -0,0 +1,154 @@
1#include <openssl/opensslfeatures.h>
2/* crypto/opensslconf.h.in */
3
4#if defined(HEADER_CRYPTO_LOCAL_H) && !defined(OPENSSLDIR)
5#define OPENSSLDIR "/etc/ssl"
6#endif
7
8#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
9
10#ifndef OPENSSL_FILE
11#ifdef OPENSSL_NO_FILENAMES
12#define OPENSSL_FILE ""
13#define OPENSSL_LINE 0
14#else
15#define OPENSSL_FILE __FILE__
16#define OPENSSL_LINE __LINE__
17#endif
18#endif
19
20#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)
21#define IDEA_INT unsigned int
22#endif
23
24#if defined(HEADER_MD2_H) && !defined(MD2_INT)
25#define MD2_INT unsigned int
26#endif
27
28#if defined(HEADER_RC2_H) && !defined(RC2_INT)
29/* I need to put in a mod for the alpha - eay */
30#define RC2_INT unsigned int
31#endif
32
33#if defined(HEADER_RC4_H)
34#if !defined(RC4_INT)
35/* using int types make the structure larger but make the code faster
36 * on most boxes I have tested - up to %20 faster. */
37/*
38 * I don't know what does "most" mean, but declaring "int" is a must on:
39 * - Intel P6 because partial register stalls are very expensive;
40 * - elder Alpha because it lacks byte load/store instructions;
41 */
42#define RC4_INT unsigned int
43#endif
44#if !defined(RC4_CHUNK)
45/*
46 * This enables code handling data aligned at natural CPU word
47 * boundary. See crypto/rc4/rc4_enc.c for further details.
48 */
49#define RC4_CHUNK unsigned long
50#endif
51#endif
52
53#if (defined(HEADER_NEW_DES_H) || defined(HEADER_DES_H)) && !defined(DES_LONG)
54/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a
55 * %20 speed up (longs are 8 bytes, int's are 4). */
56#ifndef DES_LONG
57#define DES_LONG unsigned int
58#endif
59#endif
60
61#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)
62#define CONFIG_HEADER_BN_H
63#undef BN_LLONG
64
65/* Should we define BN_DIV2W here? */
66
67/* Only one for the following should be defined */
68/* The prime number generation stuff may not work when
69 * EIGHT_BIT but I don't care since I've only used this mode
70 * for debugging the bignum libraries */
71#define SIXTY_FOUR_BIT_LONG
72#undef SIXTY_FOUR_BIT
73#undef THIRTY_TWO_BIT
74#undef SIXTEEN_BIT
75#undef EIGHT_BIT
76#endif
77
78#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
79#define CONFIG_HEADER_BF_LOCL_H
80#undef BF_PTR
81#endif /* HEADER_BF_LOCL_H */
82
83#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
84#define CONFIG_HEADER_DES_LOCL_H
85#ifndef DES_DEFAULT_OPTIONS
86/* the following is tweaked from a config script, that is why it is a
87 * protected undef/define */
88#ifndef DES_PTR
89#undef DES_PTR
90#endif
91
92/* This helps C compiler generate the correct code for multiple functional
93 * units. It reduces register dependencies at the expense of 2 more
94 * registers */
95#ifndef DES_RISC1
96#undef DES_RISC1
97#endif
98
99#ifndef DES_RISC2
100#undef DES_RISC2
101#endif
102
103#if defined(DES_RISC1) && defined(DES_RISC2)
104YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
105#endif
106
107/* Unroll the inner loop, this sometimes helps, sometimes hinders.
108 * Very much CPU dependent */
109#ifndef DES_UNROLL
110#define DES_UNROLL
111#endif
112
113/* These default values were supplied by
114 * Peter Gutman <pgut001@cs.auckland.ac.nz>
115 * They are only used if nothing else has been defined */
116#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL)
117/* Special defines which change the way the code is built depending on the
118 CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find
119 even newer MIPS CPU's, but at the moment one size fits all for
120 optimization options. Older Sparc's work better with only UNROLL, but
121 there's no way to tell at compile time what it is you're running on */
122
123#if defined( sun ) /* Newer Sparc's */
124# define DES_PTR
125# define DES_RISC1
126# define DES_UNROLL
127#elif defined( __ultrix ) /* Older MIPS */
128# define DES_PTR
129# define DES_RISC2
130# define DES_UNROLL
131#elif defined( __osf1__ ) /* Alpha */
132# define DES_PTR
133# define DES_RISC2
134#elif defined ( _AIX ) /* RS6000 */
135 /* Unknown */
136#elif defined( __hpux ) /* HP-PA */
137 /* Unknown */
138#elif defined( __aux ) /* 68K */
139 /* Unknown */
140#elif defined( __dgux ) /* 88K (but P6 in latest boxes) */
141# define DES_UNROLL
142#elif defined( __sgi ) /* Newer MIPS */
143# define DES_PTR
144# define DES_RISC2
145# define DES_UNROLL
146#elif defined(i386) || defined(__i386__) /* x86 boxes, should be gcc */
147# define DES_PTR
148# define DES_RISC1
149# define DES_UNROLL
150#endif /* Systems-specific speed defines */
151#endif
152
153#endif /* DES_DEFAULT_OPTIONS */
154#endif /* HEADER_DES_LOCL_H */
diff --git a/include/openssl/Makefile.am.tpl b/include/openssl/Makefile.am.tpl
index 303d0b9..4bbbd60 100644
--- a/include/openssl/Makefile.am.tpl
+++ b/include/openssl/Makefile.am.tpl
@@ -17,6 +17,9 @@ endif
17if HOST_I386 17if HOST_I386
18 -cp $(top_srcdir)/include/arch/i386/opensslconf.h opensslconf.h 18 -cp $(top_srcdir)/include/arch/i386/opensslconf.h opensslconf.h
19endif 19endif
20if HOST_LOONGARCH64
21 -cp $(top_srcdir)/include/arch/loongarch64/opensslconf.h opensslconf.h
22endif
20if HOST_MIPS 23if HOST_MIPS
21 -cp $(top_srcdir)/include/arch/mips/opensslconf.h opensslconf.h 24 -cp $(top_srcdir)/include/arch/mips/opensslconf.h opensslconf.h
22endif 25endif
diff --git a/ssl/CMakeLists.txt b/ssl/CMakeLists.txt
index bdcfbb2..5baa5bc 100644
--- a/ssl/CMakeLists.txt
+++ b/ssl/CMakeLists.txt
@@ -117,6 +117,8 @@ elseif(HOST_ARM)
117 target_include_directories(ssl_obj PRIVATE ../crypto/arch/arm/) 117 target_include_directories(ssl_obj PRIVATE ../crypto/arch/arm/)
118elseif(HOST_I386) 118elseif(HOST_I386)
119 target_include_directories(ssl_obj PRIVATE ../crypto/arch/i386/) 119 target_include_directories(ssl_obj PRIVATE ../crypto/arch/i386/)
120elseif(HOST_LOONGARCH64)
121 target_include_directories(ssl_obj PRIVATE ../crypto/arch/loongarch64)
120elseif(HOST_MIPS64) 122elseif(HOST_MIPS64)
121 target_include_directories(ssl_obj PRIVATE ../crypto/arch/mips64) 123 target_include_directories(ssl_obj PRIVATE ../crypto/arch/mips64)
122elseif(HOST_MIPS) 124elseif(HOST_MIPS)
diff --git a/ssl/Makefile.am b/ssl/Makefile.am
index f9a66a3..8beb65a 100644
--- a/ssl/Makefile.am
+++ b/ssl/Makefile.am
@@ -131,6 +131,11 @@ libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/i386/
131endif 131endif
132noinst_HEADERS += $(top_srcdir)/crypto/arch/i386/crypto_arch.h 132noinst_HEADERS += $(top_srcdir)/crypto/arch/i386/crypto_arch.h
133 133
134if HOST_LOONGARCH64
135libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/loongarch64/
136endif
137noinst_HEADERS += $(top_srcdir)/crypto/arch/loongarch64/crypto_arch.h
138
134# XXX - do we still need this? 139# XXX - do we still need this?
135if HOST_MIPS 140if HOST_MIPS
136endif 141endif
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 8d6fa9d..f38486c 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -30,6 +30,8 @@ elseif(HOST_I386)
30 include_directories(../crypto/arch/i386/) 30 include_directories(../crypto/arch/i386/)
31elseif(HOST_MIPS64) 31elseif(HOST_MIPS64)
32 include_directories(../crypto/arch/mips64) 32 include_directories(../crypto/arch/mips64)
33elseif(HOST_LOONGARCH64)
34 include_directories(../crypto/arch/loongarch64)
33elseif(HOST_MIPS) 35elseif(HOST_MIPS)
34 # XXX - can this go away? the directory doesn't exist... 36 # XXX - can this go away? the directory doesn't exist...
35elseif(HOST_POWERPC) 37elseif(HOST_POWERPC)
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 8153fc9..217f445 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -36,6 +36,10 @@ if HOST_I386
36AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/i386/ 36AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/i386/
37endif 37endif
38 38
39if HOST_LOONGARCH64
40AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/loongarch64/
41endif
42
39# XXX - do we still need this? 43# XXX - do we still need this?
40if HOST_MIPS 44if HOST_MIPS
41endif 45endif