Back to index

glibc  2.9
Defines | Functions
pt-machine.h File Reference
#include <ia64intrin.h>
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define PT_EI   extern inline __attribute__ ((always_inline))
#define __atomic_fool_gcc(x)   (*(volatile struct { int a[100]; } *)x)
#define NEED_SEPARATE_REGISTER_STACK
#define FLOATING_STACKS   1
#define ARCH_STACK_MAX_SIZE   32*1024*1024
#define CURRENT_STACK_FRAME   stack_pointer
#define THREAD_SELF   __thread_self
#define INIT_THREAD_SELF(descr, nr)   (__thread_self = (descr))
#define THREAD_GETMEM(descr, member)   ((void) sizeof (descr), THREAD_SELF->member)
#define THREAD_GETMEM_NC(descr, member)   ((void) sizeof (descr), THREAD_SELF->member)
#define THREAD_SETMEM(descr, member, value)   ((void) sizeof (descr), THREAD_SELF->member = (value))
#define THREAD_SETMEM_NC(descr, member, value)   ((void) sizeof (descr), THREAD_SELF->member = (value))
#define MEMORY_BARRIER()   __sync_synchronize ()
#define HAS_COMPARE_AND_SWAP_WITH_RELEASE_SEMANTICS
#define BUSY_WAIT_NOP   __asm__ ("hint @pause")

Functions

long int testandset (int *spinlock)
int __compare_and_swap (long int *p, long int oldval, long int newval)
register char *stack_pointer __asm__ ("sp")
register struct
_pthread_descr_struct
*__thread_self 
__asm__ ("r13")
PT_EI int __compare_and_swap_with_release_semantics (long int *p, long int oldval, long int newval)

Define Documentation

#define __atomic_fool_gcc (   x)    (*(volatile struct { int a[100]; } *)x)

Definition at line 36 of file pt-machine.h.

#define ARCH_STACK_MAX_SIZE   32*1024*1024

Definition at line 46 of file pt-machine.h.

#define BUSY_WAIT_NOP   __asm__ ("hint @pause")

Definition at line 131 of file pt-machine.h.

#define CURRENT_STACK_FRAME   stack_pointer

Definition at line 51 of file pt-machine.h.

#define FLOATING_STACKS   1

Definition at line 43 of file pt-machine.h.

Definition at line 81 of file pt-machine.h.

#define INIT_THREAD_SELF (   descr,
  nr 
)    (__thread_self = (descr))

Definition at line 63 of file pt-machine.h.

#define MEMORY_BARRIER ( )    __sync_synchronize ()

Definition at line 78 of file pt-machine.h.

Definition at line 40 of file pt-machine.h.

#define PT_EI   extern inline __attribute__ ((always_inline))

Definition at line 27 of file pt-machine.h.

#define THREAD_GETMEM (   descr,
  member 
)    ((void) sizeof (descr), THREAD_SELF->member)

Definition at line 67 of file pt-machine.h.

#define THREAD_GETMEM_NC (   descr,
  member 
)    ((void) sizeof (descr), THREAD_SELF->member)

Definition at line 69 of file pt-machine.h.

#define THREAD_SELF   __thread_self

Definition at line 60 of file pt-machine.h.

#define THREAD_SETMEM (   descr,
  member,
  value 
)    ((void) sizeof (descr), THREAD_SELF->member = (value))

Definition at line 71 of file pt-machine.h.

#define THREAD_SETMEM_NC (   descr,
  member,
  value 
)    ((void) sizeof (descr), THREAD_SELF->member = (value))

Definition at line 73 of file pt-machine.h.


Function Documentation

register char* stack_pointer __asm__ ( "sp"  )
register struct _pthread_descr_struct* __thread_self __asm__ ( "r13"  ) [read]
int __compare_and_swap ( long int p,
long int  oldval,
long int  newval 
) [inline]

Definition at line 100 of file pt-machine.h.

{
  long int ret;

  __asm__ __volatile__ (
       "/* Inline compare & swap */\n"
       "1:\t"
       "ldq_l %0,%4\n\t"
       "cmpeq %0,%2,%0\n\t"
       "beq %0,2f\n\t"
       "mov %3,%0\n\t"
       "stq_c %0,%1\n\t"
       "beq %0,1b\n\t"
       "2:\tmb\n"
       "/* End compare & swap */"
       : "=&r"(ret), "=m"(*p)
       : "r"(oldval), "r"(newval), "m"(*p)
        : "memory");

  return ret;
}
PT_EI int __compare_and_swap_with_release_semantics ( long int p,
long int  oldval,
long int  newval 
)

Definition at line 98 of file pt-machine.h.

{
  long int readval;

  __asm__ __volatile__
       ("mov ar.ccv=%4;;\n\t"
       "cmpxchg8.rel %0=%1,%2,ar.ccv"
       : "=r" (readval), "=m" (__atomic_fool_gcc (p))
       : "r"(newval), "m" (__atomic_fool_gcc (p)), "r" (oldval)
       : "memory");
  return readval == oldval;
}

Here is the call graph for this function:

long int testandset ( int spinlock)

Definition at line 53 of file pt-machine.h.

{
  long int ret, temp;

  __asm__ __volatile__(
       "/* Inline spinlock test & set */\n"
       "1:\t"
       "ldl_l %0,%3\n\t"
       "bne %0,2f\n\t"
       "or $31,1,%1\n\t"
       "stl_c %1,%2\n\t"
       "beq %1,1b\n"
       "2:\tmb\n"
       "/* End spinlock test & set */"
       : "=&r"(ret), "=&r"(temp), "=m"(*spinlock)
       : "m"(*spinlock)
        : "memory");

  return ret;
}