#include "../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,
*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
}
gmx_load_simd_4xn_interactions(l_cj[cjind].excl,
filter_S0, filter_S1,
filter_S2, filter_S3,
-#ifdef GMX_SIMD_IBM_QPX
- l_cj[cjind].interaction_mask_indices,
nbat->simd_interaction_array,
-#else
- /* The struct fields do not exist
- except on BlueGene/Q */
- NULL,
- NULL,
-#endif
&interact_S0, &interact_S1,
&interact_S2, &interact_S3);
#endif /* CHECK_EXCLS */
inner_e = ge - (se << na_cj_2log);
nbl->cj[found].excl &= ~(1U<<((inner_i<<na_cj_2log) + inner_e));
-/* The next code line is usually not needed. We do not want to version
- * away the above line, because there is logic that relies on being
- * able to detect easily whether any exclusions exist. */
-#if (defined GMX_SIMD_IBM_QPX)
- nbl->cj[found].interaction_mask_indices[inner_i] &= ~(1U << inner_e);
-#endif
}
}
}
/* Store cj and the interaction mask */
nbl->cj[nbl->ncj].cj = CI_TO_CJ_SIMD_4XN(gridj->cell0) + cj;
nbl->cj[nbl->ncj].excl = get_imask_simd_4xn(remove_sub_diag, ci, cj);
-#ifdef GMX_SIMD_IBM_QPX
- nbl->cj[nbl->ncj].interaction_mask_indices[0] = (nbl->cj[nbl->ncj].excl & 0x000F) >> (0 * 4);
- nbl->cj[nbl->ncj].interaction_mask_indices[1] = (nbl->cj[nbl->ncj].excl & 0x00F0) >> (1 * 4);
- nbl->cj[nbl->ncj].interaction_mask_indices[2] = (nbl->cj[nbl->ncj].excl & 0x0F00) >> (2 * 4);
- nbl->cj[nbl->ncj].interaction_mask_indices[3] = (nbl->cj[nbl->ncj].excl & 0xF000) >> (3 * 4);
-#endif
nbl->ncj++;
}
/* Increase the closing index in i super-cell list */