diff --git a/GNUmakefile b/GNUmakefile index 7b45f5b4..bd6e90c3 100755 --- a/GNUmakefile +++ b/GNUmakefile @@ -394,6 +394,7 @@ ifeq ($(IS_NEON),1) SIMECK_FLAG = -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon SIMON_FLAG = -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon SPECK_FLAG = -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon + SM4_FLAG = -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon endif endif @@ -408,6 +409,7 @@ ifeq ($(IS_ARMV8),1) SIMECK_FLAG = -march=armv8-a SIMON_FLAG = -march=armv8-a SPECK_FLAG = -march=armv8-a + SM4_FLAG = -march=armv8-a endif HAVE_CRC = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -march=armv8-a+crc -dM -E - 2>/dev/null | $(GREP) -i -c __ARM_FEATURE_CRC32) ifeq ($(HAVE_CRC),1) @@ -419,6 +421,10 @@ ifeq ($(IS_ARMV8),1) GCM_FLAG = -march=armv8-a+crypto SHA_FLAG = -march=armv8-a+crypto endif + HAVE_CRYPTO = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -march=armv8.4-a+crypto -dM -E - 2>/dev/null | $(GREP) -i -c __ARM_FEATURE_CRYPTO) + ifeq ($(HAVE_CRYPTO),1) + SM4_FLAG = -march=armv8.4-a+crypto + endif endif # PowerPC and PowerPC-64 diff --git a/GNUmakefile-cross b/GNUmakefile-cross index 48a364a2..7611d24d 100755 --- a/GNUmakefile-cross +++ b/GNUmakefile-cross @@ -276,6 +276,10 @@ ifneq ($(IS_ARMv8),0) GCM_FLAG = -march=armv8-a+crypto SHA_FLAG = -march=armv8-a+crypto endif + HAVE_CRYPTO := $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -march=armv8.4-a+crypto -dM -E - 2>/dev/null | $(EGREP) -i -c __ARM_FEATURE_CRYPTO) + ifeq ($(HAVE_CRYPTO),1) + SM4_FLAG = -march=armv8.4-a+crypto + endif endif # i686 and x86_64 diff --git a/sm4-simd.cpp b/sm4-simd.cpp index 7347962a..fca4a941 100644 --- a/sm4-simd.cpp +++ b/sm4-simd.cpp @@ -6,8 +6,9 @@ // source file is needed because additional CXXFLAGS are required to enable // the appropriate instructions sets in some build configurations. // -// Based on Markku-Juhani O. Saarinen work at https://github.com/mjosaarinen/sm4ni. +// AES-NI based on Markku-Juhani O. Saarinen work at https://github.com/mjosaarinen/sm4ni. // +// ARMv8 is upcoming. #include "pch.h" #include "config.h" @@ -25,7 +26,7 @@ # include #endif -#if (CRYPTOPP_ARM_NEON_AVAILABLE) +#if (CRYPTOPP_ARM_NEON_AVAILABLE) && 0 # include #endif @@ -329,7 +330,7 @@ size_t SM4_Enc_AdvancedProcessBlocks_AESNI(const word32* subKeys, size_t rounds, } #endif // CRYPTOPP_AESNI_AVAILABLE -#if defined(CRYPTOPP_ARM_NEON_AVAILABLE) +#if defined(CRYPTOPP_ARM_NEON_AVAILABLE) && 0 size_t SM4_Enc_AdvancedProcessBlocks_NEON(const word32* subKeys, size_t rounds, const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) {