From d34b0072a28682386c60b3ced265cdb4061330a5 Mon Sep 17 00:00:00 2001 From: Sean Parkinson Date: Mon, 7 Dec 2020 11:02:15 +1000 Subject: [PATCH] ARM: identify ARM CPU for Thumb and Cortex Better detailed check of CPU architecture for 32-bit byte reversal asm --- configure.ac | 19 +++++++++++++++---- wolfcrypt/src/misc.c | 10 ++++++---- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/configure.ac b/configure.ac index 5144db7fc..0f52e826f 100644 --- a/configure.ac +++ b/configure.ac @@ -4897,12 +4897,12 @@ if test "$ENABLED_SP_ASM" = "yes"; then ;; *arm*) if test $host_alias = "thumb"; then - AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_ARM_THUMB_ASM -mthumb -march=armv6" + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_ARM_THUMB_ASM" AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_SP_ARM_THUMB_ASM" ENABLED_SP_ARM_THUMB_ASM=yes else if test $host_alias = "cortex"; then - AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_ARM_CORTEX_M_ASM -mcpu=cortex-r5" + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_ARM_CORTEX_M_ASM" AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_SP_ARM_CORTEX_M_ASM" ENABLED_SP_ARM_CORTEX_ASM=yes else @@ -5008,10 +5008,10 @@ if test "$ENABLED_SP_MATH_ALL" = "yes"; then ;; *arm*) if test $host_alias = "thumb"; then - AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_ARM_THUMB -mthumb -march=armv6" + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_ARM_THUMB" else if test $host_alias = "cortex"; then - AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_ARM_CORTEX_M -mcpu=cortex-m4" + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_ARM_CORTEX_M" else AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_ARM32" fi @@ -5474,6 +5474,17 @@ do done AM_CFLAGS=$NEW_AM_CFLAGS]) +case $host_cpu in + *arm*) + if test $host_alias = "thumb"; then + AM_CFLAGS="$AM_CFLAGS -mthumb -march=armv6" + else + if test $host_alias = "cortex"; then + AM_CFLAGS="$AM_CFLAGS -mcpu=cortex-r5" + fi + fi + ;; +esac ################################################################################ # Check for build-type conflicts # diff --git a/wolfcrypt/src/misc.c b/wolfcrypt/src/misc.c index be8750b9c..99119dc93 100644 --- a/wolfcrypt/src/misc.c +++ b/wolfcrypt/src/misc.c @@ -127,16 +127,18 @@ WC_STATIC WC_INLINE word32 ByteReverseWord32(word32 value) #elif defined(WOLF_ALLOW_BUILTIN) && \ defined(__GNUC_PREREQ) && __GNUC_PREREQ(4, 3) return (word32)__builtin_bswap32(value); -#elif defined(__arm__) && defined(__GNUC__) +#elif defined(WOLFSSL_BYTESWAP32_ASM) && defined(__GNUC__) && \ + defined(__aarch64__) __asm__ volatile ( - "REV %0, %0 \n" + "REV32 %0, %0 \n" : "+r" (value) : ); return value; -#elif defined(__aarch64__) && defined(__GNUC__) +#elif defined(WOLFSSL_BYTESWAP32_ASM) && defined(__GNUC__) && \ + (defined(__thumb__) || defined(__arm__)) __asm__ volatile ( - "REV32 %0, %0 \n" + "REV %0, %0 \n" : "+r" (value) : );