]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
Add arm endianness-aware assembly infrastructure
authorMichael Weiser <michael.weiser@gmx.de>
Tue, 13 Feb 2018 21:13:12 +0000 (22:13 +0100)
committerNiels Möller <nisse@lysator.liu.se>
Sun, 25 Mar 2018 09:27:28 +0000 (11:27 +0200)
Introduce m4 macros to conditionally handle differences of little- and
big-endian arm in assembler code.

asm.m4
config.m4.in
configure.ac

diff --git a/asm.m4 b/asm.m4
index 4018c2356a1dcfe57c5978d8ef1bfe04b24f0d07..8da472013cb8e04f73d5c5cec8cdd8d8fa054177 100644 (file)
--- a/asm.m4
+++ b/asm.m4
@@ -51,6 +51,14 @@ define(<ALIGN>,
 <.align ifelse(ALIGN_LOG,yes,<m4_log2($1)>,$1)
 >)
 
+define(<IF_BE>, <ifelse(
+WORDS_BIGENDIAN,yes,<$1>,
+WORDS_BIGENDIAN,no,<$2>,
+<errprint(<Unsupported endianness value>,WORDS_BIGENDIAN,<
+>)
+  m4exit(1)>)>)
+define(<IF_LE>, <IF_BE(<$2>, <$1>)>)
+
 dnl Struct defining macros
 
 dnl STRUCTURE(prefix) 
index e39c880c625af6111d3184902210a983694856c6..11f90a4099e272dc7f77ebb5983514cc145441f3 100644 (file)
@@ -7,6 +7,7 @@ define(<TYPE_PROGBITS>, <@ASM_TYPE_PROGBITS@>)dnl
 define(<ALIGN_LOG>, <@ASM_ALIGN_LOG@>)dnl
 define(<W64_ABI>, <@W64_ABI@>)dnl
 define(<RODATA>, <@ASM_RODATA@>)dnl
+define(<WORDS_BIGENDIAN>, <@ASM_WORDS_BIGENDIAN@>)dnl
 divert(1)
 @ASM_MARK_NOEXEC_STACK@
 divert
index 0a35d3dd6fa3f6664331a4773a4087dcaf640517..a34608537850b781af2e313fa1c85a4e6268f621 100644 (file)
@@ -205,7 +205,11 @@ LSH_FUNC_STRERROR
 # getenv_secure is used for fat overrides,
 # getline is used in the testsuite
 AC_CHECK_FUNCS(secure_getenv getline)
-AC_C_BIGENDIAN
+
+ASM_WORDS_BIGENDIAN=unknown
+AC_C_BIGENDIAN([AC_DEFINE([WORDS_BIGENDIAN], 1)
+               ASM_WORDS_BIGENDIAN=yes],
+       [ASM_WORDS_BIGENDIAN=no])
 
 AC_CACHE_CHECK([for __builtin_bswap64],
                nettle_cv_c_builtin_bswap64,
@@ -820,6 +824,7 @@ AC_SUBST(ASM_TYPE_PROGBITS)
 AC_SUBST(ASM_MARK_NOEXEC_STACK)
 AC_SUBST(ASM_ALIGN_LOG)
 AC_SUBST(W64_ABI)
+AC_SUBST(ASM_WORDS_BIGENDIAN)
 AC_SUBST(EMULATOR)
 
 AC_SUBST(LIBNETTLE_MAJOR)