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 ed5f0fd705030321576628b411@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"  (Peter Eisentraut <peter_e@gmx.net>)
Responses Re: postgreSQL-8.0.1 compilation with icc-8.1 on Itanium-2 gives "error: asm statements not supported"
Re: postgreSQL-8.0.1 compilation with icc-8.1 on Itanium-2
List pgsql-hackers
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:

Previous
From: Neil Conway
Date:
Subject: refactoring fork() and EXEC_BACKEND
Next
From: Vikram Kalsi
Date:
Subject: postgreSQL-8.0.1 configure --enable-thread-safety with icc-8.1 on RHEL-AS3 Itanium-2 gives error