[gmx-developers] Gromacs 3.2.1 PPC Altivec patch

Kyle Ellrott kellrott at csbl.bmb.uga.edu
Fri Oct 8 19:31:52 CEST 2004

The following is a patch that should allow gromacs-3.2.1 to compile 
with altivec support on a Linux based PPC system.
There are a couple difference between 'main-line' gcc and apple gcc.  
First, altivec support is enabled with a '-maltivec' rather then a 
'-faltivec'.  Next, you need to include a altivec.h header file (which 
doesn't exist in current apple gcc), finally Some versions of mainline 
gcc putz with the definition of bool (changes it to _bool) to get the 
vector bool definition that's available in apple gcc.  This of course 
conflicts with types/simple.h definition of bool.

The following patch compiles successfully with gcc 3.4.2 and gcc from 
MacOSX 10.3.  It fails to compile on standard Redhat AS 3 update 3 for 
PPC (because of bug noted at 
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134368 )

It has been tested on IBM JS20 (Redhat AS 3 update 3), and an Apple G5 
with MacOSX 10.3.5.  It has only been tested for compilation and 
runtime correctness.  I haven't tested scientific accuracy ;-)


diff -r gromacs-3.2.1/acinclude.m4 gromacs-3.2.1.mine/acinclude.m4
<  	        ACX_CHECK_CC_FLAGS(-faltivec,faltivec,xCFLAGS="$xCFLAGS 
 >  	        ACX_CHECK_CC_FLAGS(-faltivec,faltivec,xCFLAGS="$xCFLAGS 
ACX_CHECK_CC_FLAGS(-maltivec,maltivec,xCFLAGS="$xCFLAGS -maltivec",)))
diff -r gromacs-3.2.1/configure.ac gromacs-3.2.1.mine/configure.ac
< #ifndef __VEC__
 > #if !defined(__VEC__) || !defined(__ALTIVEC__)
<       AC_MSG_RESULT([no])
 >     AC_TRY_COMPILE([#include <altivec.h>],[
 > #if !defined(__VEC__) || !defined(__ALTIVEC__)
 > choke_me
 > #endif
 > ],[
 >     AC_MSG_RESULT([yes])
 >     GMXLIB_LIBOBJS="${GMXLIB_LIBOBJS} inner_altivec.lo"
 >     AC_DEFINE([USE_PPC_ALTIVEC],,[Use PowerPC Altivec inner loops])],[
 >      AC_MSG_RESULT([no])
 >      ]
 >    )
diff -r gromacs-3.2.1/include/ppc_altivec.h 
 > #if !defined(__APPLE_ALTIVEC__)
 > #if !defined(__ALTIVEC__) || !defined(__APPLE__)
 > #include <altivec.h>
 > #ifdef bool   //some versions of GCC putz with bool to be compatible 
with the apple vector bool
 > #undef bool  //this of course conflicts with Gromac's definition in 
 > #define bool int
 > #endif
 > #endif
 > #endif

More information about the gromacs.org_gmx-developers mailing list