aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt3
-rw-r--r--external/db_drivers/liblmdb/mdb.c6
-rw-r--r--external/unbound/validator/val_secalgo.c4
-rw-r--r--src/crypto/slow-hash.c40
-rw-r--r--src/cryptonote_core/blockchain.cpp4
5 files changed, 28 insertions, 29 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ceebd49ef..d584e41c0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -80,9 +80,10 @@ if (ARM_TEST STREQUAL "arm")
endif()
endif()
-if (ARM_ID STREQUAL "aarch64" OR ARM_ID STREQUAL "arm64")
+if (ARM_ID STREQUAL "aarch64" OR ARM_ID STREQUAL "arm64" OR ARM_ID STREQUAL "armv8-a")
set(ARM 1)
set(ARM8 1)
+ set(ARCH "armv8-a")
endif()
if(WIN32 OR ARM)
diff --git a/external/db_drivers/liblmdb/mdb.c b/external/db_drivers/liblmdb/mdb.c
index c2408f917..3552bd2a9 100644
--- a/external/db_drivers/liblmdb/mdb.c
+++ b/external/db_drivers/liblmdb/mdb.c
@@ -137,7 +137,7 @@ typedef SSIZE_T ssize_t;
#include <unistd.h>
#endif
-#if defined(__sun) || defined(ANDROID)
+#if defined(__sun) || defined(__ANDROID__)
/* Most platforms have posix_memalign, older may only have memalign */
#define HAVE_MEMALIGN 1
#include <malloc.h>
@@ -153,7 +153,7 @@ typedef SSIZE_T ssize_t;
# define MDB_USE_SYSV_SEM 1
# endif
# define MDB_FDATASYNC fsync
-#elif defined(ANDROID)
+#elif defined(__ANDROID__)
# define MDB_FDATASYNC fsync
#endif
@@ -298,7 +298,7 @@ union semun {
*/
#ifndef MDB_USE_ROBUST
/* Android currently lacks Robust Mutex support. So does glibc < 2.4. */
-# if defined(MDB_USE_POSIX_MUTEX) && (defined(ANDROID) || \
+# if defined(MDB_USE_POSIX_MUTEX) && (defined(__ANDROID__) || \
(defined(__GLIBC__) && GLIBC_VER < 0x020004))
# define MDB_USE_ROBUST 0
# else
diff --git a/external/unbound/validator/val_secalgo.c b/external/unbound/validator/val_secalgo.c
index 7c8d7b287..256c3ff92 100644
--- a/external/unbound/validator/val_secalgo.c
+++ b/external/unbound/validator/val_secalgo.c
@@ -345,7 +345,11 @@ setup_key_digest(int algo, EVP_PKEY** evp_key, const EVP_MD** digest_type,
"EVP_PKEY_assign_DSA failed");
return 0;
}
+#ifdef HAVE_EVP_DSS1
*digest_type = EVP_dss1();
+#else
+ *digest_type = EVP_sha1();
+#endif
break;
case LDNS_RSASHA1:
diff --git a/src/crypto/slow-hash.c b/src/crypto/slow-hash.c
index 117f158ee..6afa28934 100644
--- a/src/crypto/slow-hash.c
+++ b/src/crypto/slow-hash.c
@@ -722,32 +722,24 @@ union cn_slow_hash_state
* key schedule. Don't try to use this for vanilla AES.
*/
static void aes_expand_key(const uint8_t *key, uint8_t *expandedKey) {
-__asm__("mov x2, %1\n\t" : : "r"(key), "r"(expandedKey));
+static const int rcon[] = {
+ 0x01,0x01,0x01,0x01,
+ 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d, // rotate-n-splat
+ 0x1b,0x1b,0x1b,0x1b };
__asm__(
-" adr x3,Lrcon\n"
-"\n"
" eor v0.16b,v0.16b,v0.16b\n"
-" ld1 {v3.16b},[x0],#16\n"
-" ld1 {v1.4s,v2.4s},[x3],#32\n"
-" b L256\n"
-".align 5\n"
-"Lrcon:\n"
-".long 0x01,0x01,0x01,0x01\n"
-".long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d // rotate-n-splat\n"
-".long 0x1b,0x1b,0x1b,0x1b\n"
-"\n"
-".align 4\n"
-"L256:\n"
-" ld1 {v4.16b},[x0]\n"
-" mov w1,#5\n"
-" st1 {v3.4s},[x2],#16\n"
+" ld1 {v3.16b},[%0],#16\n"
+" ld1 {v1.4s,v2.4s},[%2],#32\n"
+" ld1 {v4.16b},[%0]\n"
+" mov w2,#5\n"
+" st1 {v3.4s},[%1],#16\n"
"\n"
-"Loop256:\n"
+"1:\n"
" tbl v6.16b,{v4.16b},v2.16b\n"
" ext v5.16b,v0.16b,v3.16b,#12\n"
-" st1 {v4.4s},[x2],#16\n"
+" st1 {v4.4s},[%1],#16\n"
" aese v6.16b,v0.16b\n"
-" subs w1,w1,#1\n"
+" subs w2,w2,#1\n"
"\n"
" eor v3.16b,v3.16b,v5.16b\n"
" ext v5.16b,v0.16b,v5.16b,#12\n"
@@ -757,8 +749,8 @@ __asm__(
" eor v3.16b,v3.16b,v5.16b\n"
" shl v1.16b,v1.16b,#1\n"
" eor v3.16b,v3.16b,v6.16b\n"
-" st1 {v3.4s},[x2],#16\n"
-" b.eq Ldone\n"
+" st1 {v3.4s},[%1],#16\n"
+" b.eq 2f\n"
"\n"
" dup v6.4s,v3.s[3] // just splat\n"
" ext v5.16b,v0.16b,v4.16b,#12\n"
@@ -771,9 +763,9 @@ __asm__(
" eor v4.16b,v4.16b,v5.16b\n"
"\n"
" eor v4.16b,v4.16b,v6.16b\n"
-" b Loop256\n"
+" b 1b\n"
"\n"
-"Ldone:\n");
+"2:\n" : : "r"(key), "r"(expandedKey), "r"(rcon));
}
/* An ordinary AES round is a sequence of SubBytes, ShiftRows, MixColumns, AddRoundKey. There
diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp
index 8fe7da6b4..74c5b3b83 100644
--- a/src/cryptonote_core/blockchain.cpp
+++ b/src/cryptonote_core/blockchain.cpp
@@ -3665,6 +3665,8 @@ bool Blockchain::prepare_handle_incoming_blocks(const std::list<block_complete_e
std::vector<std::unordered_map<crypto::hash, crypto::hash>> maps(threads);
std::vector < std::vector < block >> blocks(threads);
auto it = blocks_entry.begin();
+ boost::thread::attributes attrs;
+ attrs.set_stack_size(THREAD_STACK_SIZE);
for (uint64_t i = 0; i < threads; i++)
{
@@ -3724,7 +3726,7 @@ bool Blockchain::prepare_handle_incoming_blocks(const std::list<block_complete_e
m_blocks_longhash_table.clear();
for (uint64_t i = 0; i < threads; i++)
{
- thread_list.push_back(new boost::thread(&Blockchain::block_longhash_worker, this, height + (i * batches), std::cref(blocks[i]), std::ref(maps[i])));
+ thread_list.push_back(new boost::thread(attrs, boost::bind(&Blockchain::block_longhash_worker, this, height + (i * batches), std::cref(blocks[i]), std::ref(maps[i]))));
}
for (size_t j = 0; j < thread_list.size(); j++)