]> source.dussan.org Git - rspamd.git/commitdiff
Check for SSE3, SSSE3 and SSE4.1 instructions.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 8 Apr 2015 11:01:40 +0000 (12:01 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 8 Apr 2015 11:01:40 +0000 (12:01 +0100)
src/libcryptobox/CMakeLists.txt
src/libcryptobox/cryptobox.c
src/libcryptobox/platform_config.h.in
src/libcryptobox/siphash/siphash.c

index 59e5133beec818f9dd8832a30fa4e94725f4b2fc..491d7f9b5fd9f3dff62924a9a4eabdfba742f081 100644 (file)
@@ -14,6 +14,9 @@ IF(${ARCH} STREQUAL "x86_64")
        ASM_OP(HAVE_AVX2 "vpaddq %ymm0, %ymm0, %ymm0" "avx2")
        ASM_OP(HAVE_AVX "vpaddq %xmm0, %xmm0, %xmm0" "avx")
        ASM_OP(HAVE_SSE2 "pmuludq %xmm0, %xmm0" "sse2")
+       ASM_OP(HAVE_SSE3 "lddqu 0(%esi), %xmm0" "sse3")
+       ASM_OP(HAVE_SSSE3 "pshufb %xmm0, %xmm0" "ssse3")
+       ASM_OP(HAVE_SSE41 "pblendw \$0, %xmm0, %xmm0" "sse41")
        
        ASM_OP(HAVE_SLASHMACRO "
        .macro TEST1 op
index 70e6992c6a8298e3da9f15f472060642c0fdd835..847f005f15d12af3d41fd751b895def084e24489 100644 (file)
@@ -87,7 +87,6 @@ rspamd_cryptobox_cpuid (gint cpu[4], gint info)
 #endif
 }
 
-
 void
 rspamd_cryptobox_init (void)
 {
@@ -106,6 +105,16 @@ rspamd_cryptobox_init (void)
                        if ((cpu[2] & ((gint)1 << 28))) {
                                cpu_config |= CPUID_AVX;
                        }
+                       if ((cpu[2] & ((gint)1 << 0))) {
+                               cpu_config |= CPUID_SSE3;
+                       }
+                       if ((cpu[2] & ((gint)1 << 9))) {
+                               cpu_config |= CPUID_SSSE3;
+                       }
+                       if ((cpu[2] & ((gint)1 << 19))) {
+                               cpu_config |= CPUID_SSE41;
+                       }
+
                        if (nid > 7) {
                                rspamd_cryptobox_cpuid (cpu, 7);
                                if ((cpu[1] & ((gint)1 <<  5))) {
index d109a7cd0d5ae05c6ba094f005b8bd7fff6ea720..8feecb22969e22895473ac55418418db779172fd 100644 (file)
@@ -5,11 +5,17 @@
 #cmakedefine HAVE_AVX2 1
 #cmakedefine HAVE_AVX  1
 #cmakedefine HAVE_SSE2 1
+#cmakedefine HAVE_SSE41        1
+#cmakedefine HAVE_SSE3 1
+#cmakedefine HAVE_SSSE3        1
 #cmakedefine HAVE_SLASHMACRO 1
 #cmakedefine HAVE_DOLLARMACRO 1
 
 #define CPUID_AVX2 0x1
 #define CPUID_AVX 0x2
 #define CPUID_SSE2 0x4
+#define CPUID_SSE3 0x8
+#define CPUID_SSSE3 0x16
+#define CPUID_SSE41 0x32
 
 #endif
\ No newline at end of file
index 68c4ba1cc64d422fe25faee765fcd16df369928a..f4c8a1854b2976e9a5d0449f08250158987954a9 100644 (file)
@@ -144,10 +144,11 @@ siphash24_test (void) {
                { 0x72, 0x45, 0x06, 0xeb, 0x4c, 0x32, 0x8a, 0x95, }
        };
        unsigned char in[64];
-       static const unsigned char k[] =
-       {'\000', '\001', '\002', '\003', '\004',
-                       '\005', '\006', '\007', '\010', '\011',
-                       '\012', '\013', '\014', '\015', '\016', '\017'};
+       static const unsigned char k[] ={
+               '\000', '\001', '\002', '\003', '\004',
+               '\005', '\006', '\007', '\010', '\011',
+               '\012', '\013', '\014', '\015', '\016', '\017'
+       };
        size_t i, cycles;
        union {
                guint64 m;