]> wagner.pp.ru Git - openssl-gost/engine.git/blobdiff - gosthash2012.c
gost_omac: Rework registration of magma/kuznyechik OMAC digests
[openssl-gost/engine.git] / gosthash2012.c
index 5a4c64e488d0830beefa34c36c7192114d8ba99f..9548bfb5492318313b83e631256479bbc4d43cc8 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #include "gosthash2012.h"
-#ifdef __x86_64__
+#if defined(__x86_64__) || defined(__e2k__)
 # ifdef _MSC_VER
 #  include <intrin.h>
 # else
@@ -135,6 +135,11 @@ static void g(union uint512_u *h, const union uint512_u * RESTRICT N,
     X128R(xmm0, xmm2, xmm4, xmm6, xmm1, xmm3, xmm5, xmm7);
 
     STORE(h, xmm0, xmm2, xmm4, xmm6);
+# ifndef __i386__
+    /* Restore the Floating-point status on the CPU */
+    /* This is only required on MMX, but EXTRACT32 is using MMX */
+    _mm_empty();
+# endif
 #else
     union uint512_u Ki, data;
     unsigned int i;
@@ -190,7 +195,6 @@ static INLINE void stage3(gost2012_hash_ctx * CTX)
 void gost2012_hash_block(gost2012_hash_ctx * CTX,
                          const unsigned char *data, size_t len)
 {
-    register size_t chunksize;
     register size_t bufsize = CTX->bufsize;
 
     if (bufsize == 0) {
@@ -203,7 +207,7 @@ void gost2012_hash_block(gost2012_hash_ctx * CTX,
     }
 
     while (len) {
-        chunksize = 64 - bufsize;
+        register size_t chunksize = 64 - bufsize;
         if (chunksize > len)
             chunksize = len;