[gmx-developers] MSVC 32bit + SSE

Roland Schulz roland at utk.edu
Mon Jul 26 07:00:46 CEST 2010


gmx_sse2_single.h doesn't compile with MSVC 2010 on 32bit. As the COMPILER
RANT in the file states MSVC doesn't support more than 3 __m128 parameters.
In the rant it also says that  some compilers don't support pointers to
__m128. For what compiler is this still true? If none, I suggest to change
the arguments to const pointers.

If there are still, some: Are there also compilers which don't support
either pointers nor unlimited __m128 parameters?

If not, I suggest a mixed approach. Where we detect which version is
supported and use macros to have to write each function only once. See the
below example. I think this is much less error prone than converting all
functions to macros as the rant suggests. Mainly because of the double
evaluation pitfall of macros.


#include <xmmintrin.h>

#define SSE_M128(a) const __m128 *a
#define SSE_REF(a) (&a)
#define SSE_IND(a) (*a)
#define SSE_M128(a) __m128 a
#define SSE_REF(a) (a)
#define SSE_IND(a) (a)

static inline void f(SSE_M128(b)) {
  __m128 x = SSE_IND(b);

int main() {
  __m128 x;
  return 0;

ORNL/UT Center for Molecular Biophysics cmb.ornl.gov
865-241-1537, ORNL PO BOX 2008 MS6309
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://maillist.sys.kth.se/pipermail/gromacs.org_gmx-developers/attachments/20100726/92302da6/attachment.html>

More information about the gromacs.org_gmx-developers mailing list