Home | History | Annotate | Line # | Download | only in private
      1 #ifndef sse2_64_32_H
      2 #define sse2_64_32_H 1
      3 
      4 #include "common.h"
      5 
      6 #ifdef HAVE_INTRIN_H
      7 # include <intrin.h>
      8 #endif
      9 
     10 #if defined(HAVE_EMMINTRIN_H) && \
     11     !(defined(__amd64) || defined(__amd64__) || defined(__x86_64__) || \
     12       defined(_M_X64) || defined(_M_AMD64))
     13 
     14 # include <emmintrin.h>
     15 # include <stdint.h>
     16 
     17 # ifndef _mm_set_epi64x
     18 #  define _mm_set_epi64x(Q0, Q1) sodium__mm_set_epi64x((Q0), (Q1))
     19 static inline __m128i
     20 sodium__mm_set_epi64x(int64_t q1, int64_t q0)
     21 {
     22     union { int64_t as64; int32_t as32[2]; } x0, x1;
     23     x0.as64 = q0; x1.as64 = q1;
     24     return _mm_set_epi32(x1.as32[1], x1.as32[0], x0.as32[1], x0.as32[0]);
     25 }
     26 # endif
     27 
     28 # ifndef _mm_set1_epi64x
     29 #  define _mm_set1_epi64x(Q) sodium__mm_set1_epi64x(Q)
     30 static inline __m128i
     31 sodium__mm_set1_epi64x(int64_t q)
     32 {
     33     return _mm_set_epi64x(q, q);
     34 }
     35 # endif
     36 
     37 # ifndef _mm_cvtsi64_si128
     38 #  define _mm_cvtsi64_si128(Q) sodium__mm_cvtsi64_si128(Q)
     39 static inline __m128i
     40 sodium__mm_cvtsi64_si128(int64_t q)
     41 {
     42     union { int64_t as64; int32_t as32[2]; } x;
     43     x.as64 = q;
     44     return _mm_setr_epi32(x.as32[0], x.as32[1], 0, 0);
     45 }
     46 # endif
     47 
     48 #endif
     49 
     50 #endif
     51