diff --git a/cbits/siphash.c b/cbits/siphash.c
--- a/cbits/siphash.c
+++ b/cbits/siphash.c
@@ -109,7 +109,7 @@
 
     if (edx & (1 << 26))
 	_siphash24 = hashable_siphash24_sse2;
-    if (ecx & (1 << 19))
+    else if (ecx & (1 << 19))
 	_siphash24 = hashable_siphash24_sse41;
     else
 	_siphash24 = plain_siphash24;
diff --git a/cbits/siphash.h b/cbits/siphash.h
--- a/cbits/siphash.h
+++ b/cbits/siphash.h
@@ -14,9 +14,19 @@
 u64 hashable_siphash(int, int, u64, u64, const u8 *, size_t);
 u64 hashable_siphash24(u64, u64, const u8 *, size_t);
 
-#if defined(__i386)
-u64 hashable_siphash24_sse2(u64, u64, const u8 *, size_t);
-u64 hashable_siphash24_sse41(u64, u64, const u8 *, size_t);
+#if defined(__i386) || defined(__x86_64)
+
+/* To use SSE instructions on Windows, we have to adjust the stack
+   from its default of 4-byte alignment to use 16-byte alignment. */
+
+# if defined(_WIN32)
+#  define ALIGNED_STACK __attribute__((force_align_arg_pointer))
+# else
+#  define ALIGNED_STACK
+# endif
+
+u64 hashable_siphash24_sse2(u64, u64, const u8 *, size_t) ALIGNED_STACK;
+u64 hashable_siphash24_sse41(u64, u64, const u8 *, size_t) ALIGNED_STACK;
 #endif
 
 #endif /* _hashable_siphash_h */
diff --git a/hashable.cabal b/hashable.cabal
--- a/hashable.cabal
+++ b/hashable.cabal
@@ -1,5 +1,5 @@
 Name:                hashable
-Version:             1.2.0.0
+Version:             1.2.0.1
 Synopsis:            A class for types that can be converted to a hash value
 Description:         This package defines a class, 'Hashable', for types that
                      can be converted to a hash value.  This class
