/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2014, by the GROMACS development team, led by
+ * Copyright (c) 2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
* SINGLE PRECISION SIMD IMPLEMENTATION *
****************************************************/
#define gmx_simd_float_t __vector float
-#define gmx_simd_load_f(m) vec_ld(0, (const __vector float *)m)
+#define gmx_simd_load_f(m) vec_ld(0, (const __vector float *)(m))
#define gmx_simd_load1_f(m) gmx_simd_load1_f_ibm_vmx(m)
#define gmx_simd_set1_f(x) gmx_simd_set1_f_ibm_vmx(x)
-#define gmx_simd_store_f(m, x) vec_st(x, 0, (__vector float *)m)
+#define gmx_simd_store_f(m, x) vec_st(x, 0, (__vector float *)(m))
#undef gmx_simd_loadu_f
#undef gmx_simd_storeu_f
#define gmx_simd_setzero_f() ((__vector float)vec_splat_u32(0))
#define gmx_simd_set_exponent_f(a) gmx_simd_set_exponent_f_ibm_vmx(a)
/* integer datatype corresponding to float: gmx_simd_fint32_t */
#define gmx_simd_fint32_t __vector int
-#define gmx_simd_load_fi(m) vec_ld(0, (const __vector int *)m)
-#define gmx_simd_set1_fi(i) gmx_simd_set1_fi_ibm_vmx((int)i)
-#define gmx_simd_store_fi(m, x) vec_st(x, 0, (__vector int *)m)
+#define gmx_simd_load_fi(m) vec_ld(0, (const __vector int *)(m))
+#define gmx_simd_set1_fi(i) gmx_simd_set1_fi_ibm_vmx((int)(i))
+#define gmx_simd_store_fi(m, x) vec_st(x, 0, (__vector int *)(m))
#undef gmx_simd_loadu_fi
#undef gmx_simd_storeu_fi
#define gmx_simd_setzero_fi() vec_splat_s32(0)
/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2014, by the GROMACS development team, led by
+ * Copyright (c) 2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
****************************************************/
#define gmx_simd_float_t __vector float
#ifdef __GNUC__
-# define gmx_simd_load_f(m) vec_vsx_ld(0, (const float *)m)
-# define gmx_simd_store_f(m, x) vec_vsx_st(x, 0, (float *)m)
+# define gmx_simd_load_f(m) vec_vsx_ld(0, (const float *)(m))
+# define gmx_simd_store_f(m, x) vec_vsx_st(x, 0, (float *)(m))
#else
/* IBM xlC */
# define gmx_simd_load_f(m) vec_xlw4(0, (float *)(m))
/* integer datatype corresponding to float: gmx_simd_fint32_t */
#define gmx_simd_fint32_t __vector signed int
#ifdef __GNUC__
-# define gmx_simd_load_fi(m) vec_vsx_ld(0, (const int *)m)
-# define gmx_simd_store_fi(m, x) vec_vsx_st(x, 0, (int *)m)
+# define gmx_simd_load_fi(m) vec_vsx_ld(0, (const int *)(m))
+# define gmx_simd_store_fi(m, x) vec_vsx_st(x, 0, (int *)(m))
#else
/* IBM xlC */
-# define gmx_simd_load_fi(m) vec_xlw4(0, (int *)m)
-# define gmx_simd_store_fi(m, x) vec_xstw4(x, 0, (int *)m)
+# define gmx_simd_load_fi(m) vec_xlw4(0, (int *)(m))
+# define gmx_simd_store_fi(m, x) vec_xstw4(x, 0, (int *)(m))
#endif
#define gmx_simd_set1_fi(i) vec_splats((int)(i))
#define gmx_simd_loadu_fi gmx_simd_load_fi
#define gmx_simd_cvt_i2f(a) vec_ctf(a, 0)
#define gmx_simd_extract_fi(a, i) gmx_simd_extract_fi_ibm_vsx(a, i)
/* Integer logical ops on gmx_simd_fint32_t */
-#define gmx_simd_slli_fi(a, i) vec_sl(a, vec_splats((unsigned int)i))
-#define gmx_simd_srli_fi(a, i) vec_sr(a, vec_splats((unsigned int)i))
+#define gmx_simd_slli_fi(a, i) vec_sl(a, vec_splats((unsigned int)(i)))
+#define gmx_simd_srli_fi(a, i) vec_sr(a, vec_splats((unsigned int)(i)))
#define gmx_simd_and_fi(a, b) vec_and(a, b)
#define gmx_simd_andnot_fi(a, b) vec_andc(b, a)
#define gmx_simd_or_fi(a, b) vec_or(a, b)
#define gmx_simd_cvt_d2i(a) gmx_simd_cvtt_d2i(gmx_simd_round_d(a))
#define gmx_simd_extract_di(a, i) gmx_simd_extract_fi_ibm_vsx(a, (i)*2)
/* Integer logical ops on gmx_simd_dint32_t */
-#define gmx_simd_slli_di(a, i) vec_sl(a, vec_splats((unsigned int)i))
-#define gmx_simd_srli_di(a, i) vec_sr(a, vec_splats((unsigned int)i))
+#define gmx_simd_slli_di(a, i) vec_sl(a, vec_splats((unsigned int)(i)))
+#define gmx_simd_srli_di(a, i) vec_sr(a, vec_splats((unsigned int)(i)))
#define gmx_simd_and_di(a, b) vec_and(a, b)
#define gmx_simd_andnot_di(a, b) vec_andc(b, a)
#define gmx_simd_or_di(a, b) vec_or(a, b)
/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2014, by the GROMACS development team, led by
+ * Copyright (c) 2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
#define gmx_simd_set_exponent_f gmx_simd_set_exponent_f_avx_256
/* integer datatype corresponding to float: gmx_simd_fint32_t */
#define gmx_simd_fint32_t __m256i
-#define gmx_simd_load_fi(m) _mm256_load_si256((__m256i const*)m)
+#define gmx_simd_load_fi(m) _mm256_load_si256((__m256i const*)(m))
#define gmx_simd_set1_fi _mm256_set1_epi32
-#define gmx_simd_store_fi(m, x) _mm256_store_si256((__m256i *)m, x)
-#define gmx_simd_loadu_fi(m) _mm256_loadu_si256((__m256i const*)m)
-#define gmx_simd_storeu_fi(m, x) _mm256_storeu_si256((__m256i *)m, x)
+#define gmx_simd_store_fi(m, x) _mm256_store_si256((__m256i *)(m), x)
+#define gmx_simd_loadu_fi(m) _mm256_loadu_si256((__m256i const*)(m))
+#define gmx_simd_storeu_fi(m, x) _mm256_storeu_si256((__m256i *)(m), x)
#define gmx_simd_setzero_fi _mm256_setzero_si256
#define gmx_simd_cvt_f2i _mm256_cvtps_epi32
#define gmx_simd_cvtt_f2i _mm256_cvttps_epi32
#define gmx_simd_set_exponent_d gmx_simd_set_exponent_d_avx_256
/* integer datatype corresponding to double: gmx_simd_dint32_t */
#define gmx_simd_dint32_t __m128i
-#define gmx_simd_load_di(m) _mm_load_si128((const __m128i *)m)
+#define gmx_simd_load_di(m) _mm_load_si128((const __m128i *)(m))
#define gmx_simd_set1_di _mm_set1_epi32
-#define gmx_simd_store_di(m, x) _mm_store_si128((__m128i *)m, x)
-#define gmx_simd_loadu_di(m) _mm_loadu_si128((const __m128i *)m)
-#define gmx_simd_storeu_di(m, x) _mm_storeu_si128((__m128i *)m, x)
+#define gmx_simd_store_di(m, x) _mm_store_si128((__m128i *)(m), x)
+#define gmx_simd_loadu_di(m) _mm_loadu_si128((const __m128i *)(m))
+#define gmx_simd_storeu_di(m, x) _mm_storeu_si128((__m128i *)(m), x)
#define gmx_simd_setzero_di _mm_setzero_si128
#define gmx_simd_cvt_d2i _mm256_cvtpd_epi32
#define gmx_simd_cvtt_d2i _mm256_cvttpd_epi32
/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2014, by the GROMACS development team, led by
+ * Copyright (c) 2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
#define gmx_simd_set_exponent_f gmx_simd_set_exponent_f_sse2
/* integer datatype corresponding to float: gmx_simd_fint32_t */
#define gmx_simd_fint32_t __m128i
-#define gmx_simd_load_fi(m) _mm_load_si128((const __m128i *)m)
+#define gmx_simd_load_fi(m) _mm_load_si128((const __m128i *)(m))
#define gmx_simd_set1_fi _mm_set1_epi32
-#define gmx_simd_store_fi(m, x) _mm_store_si128((__m128i *)m, x)
-#define gmx_simd_loadu_fi(m) _mm_loadu_si128((const __m128i *)m)
-#define gmx_simd_storeu_fi(m, x) _mm_storeu_si128((__m128i *)m, x)
+#define gmx_simd_store_fi(m, x) _mm_store_si128((__m128i *)(m), x)
+#define gmx_simd_loadu_fi(m) _mm_loadu_si128((const __m128i *)(m))
+#define gmx_simd_storeu_fi(m, x) _mm_storeu_si128((__m128i *)(m), x)
#define gmx_simd_setzero_fi _mm_setzero_si128
#define gmx_simd_cvt_f2i _mm_cvtps_epi32
#define gmx_simd_cvtt_f2i _mm_cvttps_epi32
#define gmx_simd_set_exponent_d gmx_simd_set_exponent_d_sse2
/* integer datatype corresponding to double: gmx_simd_dint32_t */
#define gmx_simd_dint32_t __m128i
-#define gmx_simd_load_di(m) _mm_loadl_epi64((const __m128i *)m)
+#define gmx_simd_load_di(m) _mm_loadl_epi64((const __m128i *)(m))
#define gmx_simd_set1_di _mm_set1_epi32
-#define gmx_simd_store_di(m, x) _mm_storel_epi64((__m128i *)m, x)
-#define gmx_simd_loadu_di(m) _mm_loadl_epi64((const __m128i *)m)
-#define gmx_simd_storeu_di(m, x) _mm_storel_epi64((__m128i *)m, x)
+#define gmx_simd_store_di(m, x) _mm_storel_epi64((__m128i *)(m), x)
+#define gmx_simd_loadu_di(m) _mm_loadl_epi64((const __m128i *)(m))
+#define gmx_simd_storeu_di(m, x) _mm_storel_epi64((__m128i *)(m), x)
#define gmx_simd_setzero_di _mm_setzero_si128
#define gmx_simd_cvt_d2i _mm_cvtpd_epi32
#define gmx_simd_cvtt_d2i _mm_cvttpd_epi32