Re: postgreSQL-8.0.1 compilation with icc-8.1 on Itanium-2 gives "error: asm statements not supported" - Mailing list pgsql-hackers
From | Vikram Kalsi |
---|---|
Subject | Re: postgreSQL-8.0.1 compilation with icc-8.1 on Itanium-2 gives "error: asm statements not supported" |
Date | |
Msg-id | ed5f0fd70503051724bf7d902@mail.gmail.com Whole thread Raw |
In response to | Re: postgreSQL-8.0.1 compilation with icc-8.1 on Itanium-2 gives "error: asm statements not supported" (Vikram Kalsi <vikramkalsi@gmail.com>) |
Responses |
Re: postgreSQL-8.0.1 compilation with icc-8.1 on Itanium-2
|
List | pgsql-hackers |
Just an update, the __INTEL_COMPILER is true on Itanium if icc is being used. So, the following worked for me- ---------------------------BEGIN OLD s_lock.h------------------------------------------------- #if defined(__ia64__) || defined(__ia64) /* __ia64 used by ICC compiler? */ #define HAS_TEST_AND_SET typedef unsigned int slock_t; #define TAS(lock) tas(lock) static __inline__ int tas(volatile slock_t *lock) { long int ret; __asm__ __volatile__( " xchg4 %0=%1,%2 \n" : "=r"(ret), "+m"(*lock) : "r"(1) : "memory"); return (int) ret; } #endif /* __ia64__ || __ia64 */ -----------------------------END OLD s_lock.h------------------------------------------------- ---------------------------BEGIN NEW s_lock.h------------------------------------------------- #if defined(__ia64__) || defined(__ia64) /* __ia64 used by ICC compiler? */ /* Intel Itanium */ #define HAS_TEST_AND_SET typedef unsigned int slock_t; #define TAS(lock) tas(lock) #if defined(__INTEL_COMPILER) static __inline__ int tas(volatile slock_t *lock) { int ret; ret = _InterlockedExchange(lock,1); return ret; } #else /* __INTEL_COMPILER */ static __inline__ int tas(volatile slock_t *lock) { long int ret; __asm__ __volatile__( " xchg4 %0=%1,%2 \n" : "=r"(ret), "+m"(*lock) : "r"(1) : "memory"); return (int) ret; } #endif /* __INTEL_COMPILER */ #endif /* __ia64__ || __ia64 */ -----------------------------END NEW s_lock.h------------------------------------------------- Thanks and Regards, On Fri, 4 Mar 2005 00:57:15 -0500, Vikram Kalsi <vikramkalsi@gmail.com> wrote: > Tom, Peter, > > I have been able to compile and sucessfully run pgSQL after replacing > the asm statement in postgresql-8.0.1/src/include/storage/s_lock.h > with an equivalent intrinsic for the Itanium platform- > > -------------------------------------BEGIN OLD s_lock.h---------------------------------------- > #if defined(__ia64__) || defined(__ia64) /* __ia64 used by ICC compiler? */ > #define HAS_TEST_AND_SET > typedef unsigned int slock_t; > #define TAS(lock) tas(lock) > > static __inline__ int > tas(volatile slock_t *lock) > { > long int ret; > > __asm__ __volatile__( > " xchg4 %0=%1,%2 \n" > : "=r"(ret), "+m"(*lock) > : "r"(1) > : "memory"); > return (int) ret; > } > #endif /* __ia64__ || __ia64 */ > ---------------------------------------END OLD s_lock.h---------------------------------------- > > -------------------------------------BEGIN NEW s_lock.h-------------------------------------- > #if defined(__ia64__) || defined(__ia64) /* __ia64 used by ICC compiler? */ > #define HAS_TEST_AND_SET > typedef unsigned int slock_t; > #define TAS(lock) tas(lock) > > static __inline__ int > tas(volatile slock_t *lock) > { > int ret; > > ret = _InterlockedExchange(lock,1); > > return ret; > } > #endif /* __ia64__ || __ia64 */ > ---------------------------------------END NEW s_lock.h-------------------------------------- > > The binary appears to be stable and the tpc-H benchmark executed > successfully against it as well. I also ran the regression test but > the following tests failed, the reasons for which I haven't > investigated yet > (http://www.cse.psu.edu/~kalsi/files/regression.diffs)- > > test create_function_1 ... FAILED > test create_type ... FAILED > test create_table ... FAILED > test create_function_2 ... FAILED > test triggers ... FAILED > test create_operator ... FAILED > test create_view ... FAILED > test transactions ... FAILED > test misc ... FAILED > test select_views ... FAILED > test rules ... FAILED > test plpgsql ... failed (ignored) > test copy2 ... FAILED > test rangefuncs ... FAILED > test conversion ... FAILED > test stats ... FAILED > > The _InterlockedExchange() function is defined in ia64intrin.h header file > > int _InterlockedExchange(volatile int *Target, long value) > Do an exchange operation atomically. Maps to the xchg4 instruction. > > More information is available at > http://www.intel.com/software/products/compilers/clin/docs/ug_cpp/lin1072.htm > > Also, some other points to note, _ICC wasn't defined on my > installation when I was using icc by setting env var CC=icc. So, when > I tried to put a "#if defined" for using asm() for gcc and > _InterlockedExchange(), it didn't work. So, after this change gcc > compilation fails. > > As of now, I am trying to test the binary further to see if it is > stable. Would you be knowing some good way to test this change? > > I am not aware of the procedure of building patches but if this > resolves this issue and you would like me to make some sort of a > patch, then please let me know. > > Thanks, > -Vikram > > > On Thu, 3 Mar 2005 09:55:18 +0100, Peter Eisentraut <peter_e@gmx.net> wrote: > > Tom Lane wrote: > > > #if defined(__GNUC__) || defined(__ICC) > > > > > > Can anyone say a reason why the above #if is not wrong ... ie, > > > are there any platforms where icc does handle gcc asm syntax, > > > and if so exactly which ones are they? > > > > I believe I added that a few releases ago. The platform is IA32. > > Evidently, the GCC compatibility on IA64 is not quite as far yet. > > > > -- > > Peter Eisentraut > > http://developer.postgresql.org/~petere/ > > >
pgsql-hackers by date: