Skip site navigation (1) Skip section navigation (2)

Re: postgreSQL-8.0.1 compilation with icc-8.1 on Itanium-2 gives "error: asm statements not supported"

From: Vikram Kalsi <vikramkalsi(at)gmail(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Re: postgreSQL-8.0.1 compilation with icc-8.1 on Itanium-2 gives "error: asm statements not supported"
Date: 2005-03-06 01:24:31
Message-ID: ed5f0fd70503051724bf7d902@mail.gmail.com (view raw or flat)
Thread:
Lists: 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(at)gmail(dot)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(at)gmx(dot)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/
> >
>

In response to

Responses

pgsql-hackers by date

Next:From: Christopher Kings-LynneDate: 2005-03-06 03:26:55
Subject: Re: Manual vs automatic functionality
Previous:From: Michael FuhrDate: 2005-03-05 20:16:08
Subject: Re: Explicit Transaction Priority

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group