Merge release-5-0 into master
[alexxy/gromacs.git] / src / gromacs / mdlib / nbnxn_kernels / simd_4xn / nbnxn_kernel_simd_4xn_common.h
index 146c95855be950c76df0f85aa910b34dd6994de0..70d6edff67ce522c8c678f1f7a8cab28bd5163e7 100644 (file)
 #include "gromacs/mdlib/nbnxn_kernels/nbnxn_kernel_simd_utils.h"
 
 static gmx_inline void gmx_simdcall
-gmx_load_simd_4xn_interactions(int gmx_unused             excl,
+gmx_load_simd_4xn_interactions(int                        excl,
                                gmx_exclfilter gmx_unused  filter_S0,
                                gmx_exclfilter gmx_unused  filter_S1,
                                gmx_exclfilter gmx_unused  filter_S2,
                                gmx_exclfilter gmx_unused  filter_S3,
-                               const char gmx_unused     *interaction_mask_indices,
                                real gmx_unused           *simd_interaction_array,
                                gmx_simd_bool_t           *interact_S0,
                                gmx_simd_bool_t           *interact_S1,
@@ -79,13 +78,14 @@ gmx_load_simd_4xn_interactions(int gmx_unused             excl,
     *interact_S1  = gmx_checkbitmask_pb(mask_pr_S, filter_S1);
     *interact_S2  = gmx_checkbitmask_pb(mask_pr_S, filter_S2);
     *interact_S3  = gmx_checkbitmask_pb(mask_pr_S, filter_S3);
-#endif
-#ifdef GMX_SIMD_IBM_QPX
+#elif defined GMX_SIMD_IBM_QPX
     const int size = GMX_SIMD_REAL_WIDTH * sizeof(real);
-    *interact_S0  = gmx_load_interaction_mask_pb(size*interaction_mask_indices[0], simd_interaction_array);
-    *interact_S1  = gmx_load_interaction_mask_pb(size*interaction_mask_indices[1], simd_interaction_array);
-    *interact_S2  = gmx_load_interaction_mask_pb(size*interaction_mask_indices[2], simd_interaction_array);
-    *interact_S3  = gmx_load_interaction_mask_pb(size*interaction_mask_indices[3], simd_interaction_array);
+    *interact_S0  = gmx_load_interaction_mask_pb(size*((excl >> (0 * UNROLLJ)) & 0xF), simd_interaction_array);
+    *interact_S1  = gmx_load_interaction_mask_pb(size*((excl >> (1 * UNROLLJ)) & 0xF), simd_interaction_array);
+    *interact_S2  = gmx_load_interaction_mask_pb(size*((excl >> (2 * UNROLLJ)) & 0xF), simd_interaction_array);
+    *interact_S3  = gmx_load_interaction_mask_pb(size*((excl >> (3 * UNROLLJ)) & 0xF), simd_interaction_array);
+#else
+#error "Need implementation of gmx_load_simd_4xn_interactions"
 #endif
 }