]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
For memxor, make word_t be always 64 bits on x86_64.
authorNiels Möller <nisse@lysator.liu.se>
Thu, 23 Oct 2014 11:14:31 +0000 (13:14 +0200)
committerNiels Möller <nisse@lysator.liu.se>
Thu, 23 Oct 2014 11:14:31 +0000 (13:14 +0200)
ChangeLog
memxor.c

index 8ecfb343e235e7e722f7bfa34acfd93e7ab49a02..971b6d708103cba7089b7e91d7fe719ec6160f62 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,8 @@
        * memxor.c (memxor_common_alignment, memxor_different_alignment)
        (memxor): Change loop order, iterate from the end.
        (memxor3_common_alignment): Unroll twice.
+       (word_t): On x86_64, unconditionally define as uint64_t, to get 64
+       bits also in M$ windows. Replaced all uses of SIZEOF_LONG.
 
        * examples/nettle-benchmark.c (time_memxor): Allocate buffers as
        arrays of unsigned long, for more reliable alignment.
index 0e60e35d0a1ed43fc683a53fbfaf0f09391b4a75..940da0205962254c6908b49e5ac6758be25d5d02 100644 (file)
--- a/memxor.c
+++ b/memxor.c
 /* For uintptr_t */
 #include "nettle-types.h"
 
+#if defined(__x86_64__) || defined(__arch64__)
+/* Including on M$ windows, where unsigned long is only 32 bits */
+typedef uint64_t word_t;
+#else
 typedef unsigned long int word_t;
-
-#if SIZEOF_LONG & (SIZEOF_LONG - 1)
-#error Word size must be a power of two
 #endif
 
 #define ALIGN_OFFSET(p) ((uintptr_t) (p) % sizeof(word_t))
@@ -95,7 +96,7 @@ memxor_different_alignment (word_t *dst, const char *src, size_t n)
   shl = CHAR_BIT * offset;
   shr = CHAR_BIT * (sizeof(word_t) - offset);
 
-  src_word = (const word_t *) ((uintptr_t) src & -SIZEOF_LONG);
+  src_word = (const word_t *) ((uintptr_t) src & -sizeof(word_t));
 
   if (n & 1)
     {
@@ -191,7 +192,7 @@ memxor3_different_alignment_b (word_t *dst,
   shl = CHAR_BIT * offset;
   shr = CHAR_BIT * (sizeof(word_t) - offset);
 
-  b_word = (const word_t *) ((uintptr_t) b & -SIZEOF_LONG);
+  b_word = (const word_t *) ((uintptr_t) b & -sizeof(word_t));
 
   if (n & 1)
     {
@@ -227,8 +228,8 @@ memxor3_different_alignment_ab (word_t *dst,
   shl = CHAR_BIT * offset;
   shr = CHAR_BIT * (sizeof(word_t) - offset);
 
-  a_word = (const word_t *) ((uintptr_t) a & -SIZEOF_LONG);
-  b_word = (const word_t *) ((uintptr_t) b & -SIZEOF_LONG);
+  a_word = (const word_t *) ((uintptr_t) a & -sizeof(word_t));
+  b_word = (const word_t *) ((uintptr_t) b & -sizeof(word_t));
 
   if (n & 1)
     {
@@ -267,8 +268,8 @@ memxor3_different_alignment_all (word_t *dst,
   bl = CHAR_BIT * b_offset;
   br = CHAR_BIT * (sizeof(word_t) - b_offset);
 
-  a_word = (const word_t *) ((uintptr_t) a & -SIZEOF_LONG);
-  b_word = (const word_t *) ((uintptr_t) b & -SIZEOF_LONG);
+  a_word = (const word_t *) ((uintptr_t) a & -sizeof(word_t));
+  b_word = (const word_t *) ((uintptr_t) b & -sizeof(word_t));
 
   if (n & 1)
     {