--- a/arm_simd.h +++ b/arm_simd.h @@ -307,28 +307,32 @@ inline uint64x2_t PMULL_HIGH(const uint64x2_t a, const uint64x2_t b) #endif } +// This function will be removed in the next version of Crypto++: +// https://github.com/weidai11/cryptopp/commit/31fa3384160071793bc428a32383938551b3652c +#if !defined(_MSC_VER) || defined(_M_ARM) /// \brief Vector extraction /// \param a the first value /// \param b the second value /// \param c the byte count /// \return vector /// \details VEXT_U8() extracts the first c bytes of vector /// a and the remaining bytes in b. VEXT_U8 is provided /// as GCC inline assembly due to Clang and lack of support for the intrinsic. /// \since Crypto++ 8.0 inline uint64x2_t VEXT_U8(uint64x2_t a, uint64x2_t b, unsigned int c) { #if defined(_MSC_VER) return vreinterpretq_u64_u8(vextq_u8( vreinterpretq_u8_u64(a), vreinterpretq_u8_u64(b), c)); #else uint64x2_t r; __asm__ ("ext %0.16b, %1.16b, %2.16b, %3 \n\t" :"=w" (r) : "w" (a), "w" (b), "I" (c) ); return r; #endif } +#endif /// \brief Vector extraction /// \tparam C the byte count /// \param a the first value