aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel Seither <[email protected]>2015-10-13 12:50:31 +0200
committerDaniel Seither <[email protected]>2015-10-13 12:50:31 +0200
commit29b560eba79631436fa475dde1f18ece434befed (patch)
treea2eea6be7b6c7f3c97ad4af8740dcb84ee694a1c /src
parentaad256035d4ecb9c4e87a7698f74f6f3178da0e2 (diff)
Initial support for 64 bit ARM
This adds support for 64 bit ARM cores as used in many high-end phones such as all iPhones beginning with the 5s. While these newer phones still run 32 bit ARM code, Apple doesn't allow apps to be submitted to the app store if they don't provide a 64 bit build. This commit adds a new arm64 arch and renames arm to arm32 to stay consistent with the other architectures. The name arm can still be used for configuring because it has been added as an alias for arm32. Additionally, the one piece of ARM inline assembly that can be found in Botan doesn't work on 64 bit ARM, so I use the solution that has been proposed in #180: Use __builtin_bswap32 instead of inline assembly.
Diffstat (limited to 'src')
-rw-r--r--src/build-data/arch/arm32.txt (renamed from src/build-data/arch/arm.txt)2
-rw-r--r--src/build-data/arch/arm64.txt12
-rw-r--r--src/lib/utils/bswap.h4
3 files changed, 15 insertions, 3 deletions
diff --git a/src/build-data/arch/arm.txt b/src/build-data/arch/arm32.txt
index 81ecc05c3..67be376d6 100644
--- a/src/build-data/arch/arm.txt
+++ b/src/build-data/arch/arm32.txt
@@ -1,8 +1,8 @@
-
endian little
family arm
<aliases>
+arm
armel # For Debian
armhf # For Debian
evbarm # For NetBSD
diff --git a/src/build-data/arch/arm64.txt b/src/build-data/arch/arm64.txt
new file mode 100644
index 000000000..362cf88d3
--- /dev/null
+++ b/src/build-data/arch/arm64.txt
@@ -0,0 +1,12 @@
+endian little
+wordsize 64
+
+family arm
+
+<aliases>
+aarch64
+</aliases>
+
+<submodels>
+armv8-a
+</submodels>
diff --git a/src/lib/utils/bswap.h b/src/lib/utils/bswap.h
index 6773b196d..beb3f9555 100644
--- a/src/lib/utils/bswap.h
+++ b/src/lib/utils/bswap.h
@@ -31,7 +31,7 @@ inline u16bit reverse_bytes(u16bit val)
*/
inline u32bit reverse_bytes(u32bit val)
{
-#if BOTAN_GCC_VERSION >= 430 && !defined(BOTAN_TARGET_CPU_IS_ARM_FAMILY)
+#if BOTAN_GCC_VERSION >= 430 && !defined(BOTAN_TARGET_ARCH_IS_ARM32)
/*
GCC intrinsic added in 4.3, works for a number of CPUs
@@ -47,7 +47,7 @@ inline u32bit reverse_bytes(u32bit val)
asm("bswapl %0" : "=r" (val) : "0" (val));
return val;
-#elif defined(BOTAN_USE_GCC_INLINE_ASM) && defined(BOTAN_TARGET_CPU_IS_ARM_FAMILY)
+#elif defined(BOTAN_USE_GCC_INLINE_ASM) && defined(BOTAN_TARGET_ARCH_IS_ARM32)
asm ("eor r3, %1, %1, ror #16\n\t"
"bic r3, r3, #0x00FF0000\n\t"