Merge branch 'mdw/cpu-dispatch'
authorMark Wooding <mdw@distorted.org.uk>
Wed, 18 May 2016 09:29:03 +0000 (10:29 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 21 May 2016 16:56:04 +0000 (17:56 +0100)
* mdw/cpu-dispatch:
  Add support machinery for ARM hosts.
  base/dispatch.c: Add (unused) machinery for probing ELF auxilary vector.
  Add support for AMD64 processors and Microsoft Windows.
  symm/rijndael-x86-aseni.S: Unify encryption and decryption with a macro.
  symm/rijndael-x86-aesni.S: Use xmm5 instead of xmm7.
  symm/*.S: Symbolic names for shuffles.
  symm/chacha-x86-sse2.S: Fix the register allocation comment.
  Preprocess the assembler files.
  configure.ac: Improve the host CPU family detection.
  base/dispatch.c: Indent some preprocessor definitions properly.
  Add a pile of debug output around the CPU dispatching machinery.
  base/dispatch.c: Add documentation for some internal functions.
  base/dispatch.c: Add in more useful section markers.
  Support Intel's AES Native Instructions where available on x86 hardware.
  symm/: New SSE2 implementations of Salsa20 and ChaCha.
  symm/salsa20.c, symm/salsa20-core.h: Permute input matrix for SIMD.
  debian/rules: Run tests twice, once without any detected CPU features.
  base/dispatch.c: Check operating system support for XMM registers.
  configure.ac, base/dispatch.[ch]: CPU-specific implementations.
  configure.ac: Arrange to have an assembler available.

Conflicts:
configure.ac
symm/Makefile.am

1  2 
configure.ac
symm/Makefile.am
symm/chacha.c
symm/salsa20.c

diff --cc configure.ac
@@@ -31,7 -31,8 +31,8 @@@ mdw_AUTO_VERSIO
  AC_INIT([catacomb], AUTO_VERSION, [mdw@distorted.org.uk])
  AC_CONFIG_SRCDIR([catacomb.pc.in])
  AC_CONFIG_AUX_DIR([config])
 -AM_INIT_AUTOMAKE([foreign parallel-tests])
 +AM_INIT_AUTOMAKE([foreign parallel-tests color-tests subdir-objects])
+ AC_CANONICAL_HOST
  mdw_SILENT_RULES
  
  AC_PROG_CC
@@@ -182,18 -180,23 +182,24 @@@ BLKCS                   += rc
  ## Daemen and Rijmen's `Rijndael' block cipher, selected as AES.
  BLKCS                 += rijndael rijndael192 rijndael256
  libsymm_la_SOURCES    += rijndael-base.h rijndael-base.c
 -libsymm_la_SOURCES    += $(precomp)/rijndael-tab.c
 -PRECOMPS              += $(precomp)/rijndael-tab.c
+ if CPUFAM_X86
+ libsymm_la_SOURCES    += rijndael-x86ish-aesni.S
+ endif
+ if CPUFAM_AMD64
+ libsymm_la_SOURCES    += rijndael-x86ish-aesni.S
+ endif
 +nodist_libsymm_la_SOURCES += ../precomp/symm/rijndael-tab.c
 +PRECOMPS              += $(precomp)/symm/rijndael-tab.c
  PRECOMP_PROGS         += rijndael-mktab
  if !CROSS_COMPILING
 -$(precomp)/rijndael-tab.c:
 -      $(AM_V_at)$(MKDIR_P) $(precomp)
 -      $(AM_V_at)$(MAKE) rijndael-mktab$e
 -      $(AM_V_GEN)./rijndael-mktab >$(precomp)/rijndael-tab.c.new && \
 -              mv $(precomp)/rijndael-tab.c.new $(precomp)/rijndael-tab.c
 +$(precomp)/symm/rijndael-tab.c:
 +      $(AM_V_at)$(MKDIR_P) $(precomp)/symm
 +      $(AM_V_at)$(MAKE) rijndael-mktab$(EXEEXT)
 +      $(AM_V_GEN)./rijndael-mktab >$(precomp)/symm/rijndael-tab.c.new && \
 +              mv $(precomp)/symm/rijndael-tab.c.new \
 +                      $(precomp)/symm/rijndael-tab.c
  endif
 -rijndael.$t: t/rijndael
 +rijndael.t$(EXEEXT): t/rijndael
  EXTRA_DIST            += t/rijndael.aes
  MAINTAINERCLEANFILES  += $(srcdir)/t/rijndael
  t/rijndael: t/rijndael.aes
@@@ -388,7 -384,13 +394,13 @@@ ALL_CIPHERS              += sea
  EXTRA_DIST            += salsa20-tvconv
  pkginclude_HEADERS    += salsa20.h salsa20-core.h
  libsymm_la_SOURCES    += salsa20.c
 -TESTS                 += salsa20.$t
+ if CPUFAM_X86
+ libsymm_la_SOURCES    += salsa20-x86ish-sse2.S
+ endif
+ if CPUFAM_AMD64
+ libsymm_la_SOURCES    += salsa20-x86ish-sse2.S
+ endif
 +TESTS                 += salsa20.t$(EXEEXT)
  ALL_CIPHERS           += salsa20 salsa2012 salsa208
  ALL_CIPHERS           += xsalsa20 xsalsa2012 xsalsa208
  STUBS_HDR             += Salsa20/12,salsa2012,salsa20
@@@ -414,7 -416,13 +426,13 @@@ t/salsa20: salsa20-tvconv t/salsa20.loc
  ## Bernstein's `ChaCha' stream cipher.
  pkginclude_HEADERS    += chacha.h chacha-core.h
  libsymm_la_SOURCES    += chacha.c
 -TESTS                 += chacha.$t
+ if CPUFAM_X86
+ libsymm_la_SOURCES    += chacha-x86ish-sse2.S
+ endif
+ if CPUFAM_AMD64
+ libsymm_la_SOURCES    += chacha-x86ish-sse2.S
+ endif
 +TESTS                 += chacha.t$(EXEEXT)
  EXTRA_DIST            += t/chacha
  ALL_CIPHERS           += chacha20 chacha12 chacha8
  ALL_CIPHERS           += xchacha20 xchacha12 xchacha8
diff --cc symm/chacha.c
Simple merge
diff --cc symm/salsa20.c
Simple merge