From: Michael R. Crusoe <michael.crusoe@gmail.com>
Description: use the simde header library for greater compatibility
--- hisat2.orig/aligner_sw.h
+++ hisat2/aligner_sw.h
@@ -70,7 +70,8 @@
 #include <iostream>
 #include <limits>
 #include "threading.h"
-#include <emmintrin.h>
+#define SIMDE_ENABLE_NATIVE_ALIASES
+#include <simde/x86/sse2.h>
 #include "aligner_sw_common.h"
 #include "aligner_sw_nuc.h"
 #include "ds.h"
--- hisat2.orig/aligner_swsse_ee_i16.cpp
+++ hisat2/aligner_swsse_ee_i16.cpp
@@ -228,10 +228,7 @@
 #ifdef NDEBUG
 
 #define assert_all_eq0(x)
-#define assert_all_gt(x, y)
-#define assert_all_gt_lo(x)
 #define assert_all_lt(x, y)
-#define assert_all_lt_hi(x)
 
 #else
 
@@ -243,19 +240,6 @@
 	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
 }
 
-#define assert_all_gt(x, y) { \
-	__m128i tmp = _mm_cmpgt_epi16(x, y); \
-	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
-}
-
-#define assert_all_gt_lo(x) { \
-	__m128i z = _mm_setzero_si128(); \
-	__m128i tmp = _mm_setzero_si128(); \
-	z = _mm_xor_si128(z, z); \
-	tmp = _mm_cmpgt_epi16(x, z); \
-	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
-}
-
 #define assert_all_lt(x, y) { \
 	__m128i tmp = _mm_cmplt_epi16(x, y); \
 	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
@@ -265,15 +249,6 @@
 	__m128i tmp = _mm_cmpgt_epi16(x, y); \
 	assert_eq(0x0000, _mm_movemask_epi8(tmp)); \
 }
-
-#define assert_all_lt_hi(x) { \
-	__m128i z = _mm_setzero_si128(); \
-	__m128i tmp = _mm_setzero_si128(); \
-	z = _mm_cmpeq_epi16(z, z); \
-	z = _mm_srli_epi16(z, 1); \
-	tmp = _mm_cmplt_epi16(x, z); \
-	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
-}
 #endif
 
 /**
--- hisat2.orig/aligner_swsse_ee_u8.cpp
+++ hisat2/aligner_swsse_ee_u8.cpp
@@ -231,10 +231,7 @@
 #ifdef NDEBUG
 
 #define assert_all_eq0(x)
-#define assert_all_gt(x, y)
-#define assert_all_gt_lo(x)
 #define assert_all_lt(x, y)
-#define assert_all_lt_hi(x)
 
 #else
 
@@ -246,19 +243,6 @@
 	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
 }
 
-#define assert_all_gt(x, y) { \
-	__m128i tmp = _mm_cmpgt_epu8(x, y); \
-	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
-}
-
-#define assert_all_gt_lo(x) { \
-	__m128i z = _mm_setzero_si128(); \
-	__m128i tmp = _mm_setzero_si128(); \
-	z = _mm_xor_si128(z, z); \
-	tmp = _mm_cmpgt_epu8(x, z); \
-	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
-}
-
 #define assert_all_lt(x, y) { \
 	__m128i z = _mm_setzero_si128(); \
 	z = _mm_xor_si128(z, z); \
@@ -266,15 +250,6 @@
 	tmp = _mm_cmpeq_epi16(tmp, z); \
 	assert_eq(0x0000, _mm_movemask_epi8(tmp)); \
 }
-
-#define assert_all_lt_hi(x) { \
-	__m128i z = _mm_setzero_si128(); \
-	__m128i tmp = _mm_setzero_si128(); \
-	z = _mm_cmpeq_epu8(z, z); \
-	z = _mm_srli_epu8(z, 1); \
-	tmp = _mm_cmplt_epu8(x, z); \
-	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
-}
 #endif
 
 /**
--- hisat2.orig/aligner_swsse_loc_i16.cpp
+++ hisat2/aligner_swsse_loc_i16.cpp
@@ -226,10 +226,7 @@
 #ifdef NDEBUG
 
 #define assert_all_eq0(x)
-#define assert_all_gt(x, y)
-#define assert_all_gt_lo(x)
 #define assert_all_lt(x, y)
-#define assert_all_lt_hi(x)
 
 #else
 
@@ -241,19 +238,6 @@
 	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
 }
 
-#define assert_all_gt(x, y) { \
-	__m128i tmp = _mm_cmpgt_epi16(x, y); \
-	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
-}
-
-#define assert_all_gt_lo(x) { \
-	__m128i z = _mm_setzero_si128(); \
-	__m128i tmp = _mm_setzero_si128(); \
-	z = _mm_xor_si128(z, z); \
-	tmp = _mm_cmpgt_epi16(x, z); \
-	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
-}
-
 #define assert_all_lt(x, y) { \
 	__m128i tmp = _mm_cmplt_epi16(x, y); \
 	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
@@ -263,15 +247,6 @@
 	__m128i tmp = _mm_cmpgt_epi16(x, y); \
 	assert_eq(0x0000, _mm_movemask_epi8(tmp)); \
 }
-
-#define assert_all_lt_hi(x) { \
-	__m128i z = _mm_setzero_si128(); \
-	__m128i tmp = _mm_setzero_si128(); \
-	z = _mm_cmpeq_epi16(z, z); \
-	z = _mm_srli_epi16(z, 1); \
-	tmp = _mm_cmplt_epi16(x, z); \
-	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
-}
 #endif
 
 /**
--- hisat2.orig/aligner_swsse_loc_u8.cpp
+++ hisat2/aligner_swsse_loc_u8.cpp
@@ -240,10 +240,7 @@
 #ifdef NDEBUG
 
 #define assert_all_eq0(x)
-#define assert_all_gt(x, y)
-#define assert_all_gt_lo(x)
 #define assert_all_lt(x, y)
-#define assert_all_lt_hi(x)
 
 #else
 
@@ -255,19 +252,6 @@
 	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
 }
 
-#define assert_all_gt(x, y) { \
-	__m128i tmp = _mm_cmpgt_epu8(x, y); \
-	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
-}
-
-#define assert_all_gt_lo(x) { \
-	__m128i z = _mm_setzero_si128(); \
-	__m128i tmp = _mm_setzero_si128(); \
-	z = _mm_xor_si128(z, z); \
-	tmp = _mm_cmpgt_epu8(x, z); \
-	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
-}
-
 #define assert_all_lt(x, y) { \
 	__m128i z = _mm_setzero_si128(); \
 	z = _mm_xor_si128(z, z); \
@@ -275,15 +259,6 @@
 	tmp = _mm_cmpeq_epi16(tmp, z); \
 	assert_eq(0x0000, _mm_movemask_epi8(tmp)); \
 }
-
-#define assert_all_lt_hi(x) { \
-	__m128i z = _mm_setzero_si128(); \
-	__m128i tmp = _mm_setzero_si128(); \
-	z = _mm_cmpeq_epu8(z, z); \
-	z = _mm_srli_epu8(z, 1); \
-	tmp = _mm_cmplt_epu8(x, z); \
-	assert_eq(0xffff, _mm_movemask_epi8(tmp)); \
-}
 #endif
 
 /**
--- hisat2.orig/sse_util.h
+++ hisat2/sse_util.h
@@ -24,7 +24,8 @@
 #include "ds.h"
 #include "limit.h"
 #include <iostream>
-#include <emmintrin.h>
+#define SIMDE_ENABLE_NATIVE_ALIASES
+#include <simde/x86/sse2.h>
 
 class EList_m128i {
 public:
--- hisat2.orig/Makefile
+++ hisat2/Makefile
@@ -55,7 +55,7 @@
 	MACOS = 1
 endif
 
-EXTRA_FLAGS += -DPOPCNT_CAPABILITY -std=c++11
+EXTRA_FLAGS += -std=c++11
 INC += -I. -I third_party 
 
 MM_DEF = 
--- hisat2.orig/processor_support.h
+++ hisat2/processor_support.h
@@ -12,7 +12,7 @@
 
 #if defined(__INTEL_COMPILER)
 #   define USING_INTEL_COMPILER
-#elif defined(__GNUC__)
+#elif defined(__GNUC__) && defined(__x86_64__) || defined(__i386__)
 #   define USING_GCC_COMPILER
 #   include <cpuid.h>
 #elif defined(_MSC_VER)
@@ -52,8 +52,7 @@
 #elif defined(USING_GCC_COMPILER)
         __get_cpuid(0x1, &regs.EAX, &regs.EBX, &regs.ECX, &regs.EDX);
 #else
-        std::cerr << "ERROR: please define __cpuid() for this build.\n"; 
-        assert(0);
+	return false;
 #endif
         if( !( (regs.ECX & BIT(20)) && (regs.ECX & BIT(23)) ) ) return false;
     }
