Shadowrun: Awakened 29 September 2011 - Build 871
Classes | Defines | Functions
linux_ia32.h File Reference
#include "linux_common.h"
Include dependency graph for Third Party Tech/TBB/tbb30_20100406oss_win/tbb30_20100406oss/include/tbb/machine/linux_ia32.h:

Go to the source code of this file.

Classes

struct  __TBB_machine_load_store< T, S >
struct  __TBB_machine_load_store< T, 8 >

Defines

#define __MACHINE_DECL_ATOMICS(S, T, X)
#define __TBB_AtomicAND(P, V)   __TBB_machine_and(P,V)
#define __TBB_AtomicOR(P, V)   __TBB_machine_or(P,V)
#define __TBB_BIG_ENDIAN   0
#define __TBB_CompareAndSwap1(P, V, C)   __TBB_machine_cmpswp1(P,V,C)
#define __TBB_CompareAndSwap2(P, V, C)   __TBB_machine_cmpswp2(P,V,C)
#define __TBB_CompareAndSwap4(P, V, C)   __TBB_machine_cmpswp4(P,V,C)
#define __TBB_CompareAndSwap8(P, V, C)   __TBB_machine_cmpswp8(P,V,C)
#define __TBB_CompareAndSwapW(P, V, C)   __TBB_machine_cmpswp4(P,V,C)
#define __TBB_FetchAndAdd1(P, V)   __TBB_machine_fetchadd1(P,V)
#define __TBB_FetchAndAdd2(P, V)   __TBB_machine_fetchadd2(P,V)
#define __TBB_FetchAndAdd4(P, V)   __TBB_machine_fetchadd4(P,V)
#define __TBB_FetchAndAddW(P, V)   __TBB_machine_fetchadd4(P,V)
#define __TBB_FetchAndAddWrelease(P, V)   __TBB_FetchAndAddW(P,V)
#define __TBB_FetchAndDecrementWrelease(P)   __TBB_FetchAndAddW(P,-1)
#define __TBB_FetchAndIncrementWacquire(P)   __TBB_FetchAndAddW(P,1)
#define __TBB_FetchAndStore1(P, V)   __TBB_machine_fetchstore1(P,V)
#define __TBB_FetchAndStore2(P, V)   __TBB_machine_fetchstore2(P,V)
#define __TBB_FetchAndStore4(P, V)   __TBB_machine_fetchstore4(P,V)
#define __TBB_FetchAndStoreW(P, V)   __TBB_machine_fetchstore4(P,V)
#define __TBB_Load8(P)   __TBB_machine_load8(P)
#define __TBB_load_with_acquire(L)   __TBB_machine_load_with_acquire((L))
#define __TBB_Log2(V)   __TBB_machine_lg(V)
#define __TBB_Pause(V)   __TBB_machine_pause(V)
#define __TBB_release_consistency_helper()   __asm__ __volatile__("": : :"memory")
#define __TBB_Store8(P, V)   __TBB_machine_store8(P,V)
#define __TBB_store_with_release(L, V)   __TBB_machine_store_with_release((L),(V))
#define __TBB_VOLATILE   volatile
#define __TBB_WORDSIZE   4

Functions

static void __TBB_machine_and (volatile void *ptr, uint32_t addend)
static int8_t __TBB_machine_cmpswp1 (volatile void *ptr, int8_t value, int8_t comparand)
static int16_t __TBB_machine_cmpswp2 (volatile void *ptr, int16_t value, int16_t comparand)
static int32_t __TBB_machine_cmpswp4 (volatile void *ptr, int32_t value, int32_t comparand)
static int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand)
static int8_t __TBB_machine_fetchadd1 (volatile void *ptr, int8_t addend)
static int16_t __TBB_machine_fetchadd2 (volatile void *ptr, int16_t addend)
static int32_t __TBB_machine_fetchadd4 (volatile void *ptr, int32_t addend)
static int8_t __TBB_machine_fetchstore1 (volatile void *ptr, int8_t value)
static int16_t __TBB_machine_fetchstore2 (volatile void *ptr, int16_t value)
static int32_t __TBB_machine_fetchstore4 (volatile void *ptr, int32_t value)
static int32_t __TBB_machine_lg (uint32_t x)
static int64_t __TBB_machine_load8 (const volatile void *ptr)
template<typename T >
T __TBB_machine_load_with_acquire (const volatile T &location)
static void __TBB_machine_or (volatile void *ptr, uint32_t addend)
static void __TBB_machine_pause (int32_t delay)
static void __TBB_machine_store8 (volatile void *ptr, int64_t value)
void __TBB_machine_store8_slow (volatile void *ptr, int64_t value)
 Handles misaligned 8-byte store.
void __TBB_machine_store8_slow_perf_warning (volatile void *ptr)
template<typename T , typename V >
void __TBB_machine_store_with_release (volatile T &location, V value)
void __TBB_rel_acq_fence ()

Define Documentation

#define __MACHINE_DECL_ATOMICS (   S,
  T,
 
)
Value:
static inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand )  \
{                                                                                    \
    T result;                                                                        \
                                                                                     \
    __asm__ __volatile__("lock\ncmpxchg" X " %2,%1"                                  \
                          : "=a"(result), "=m"(*(__TBB_VOLATILE T*)ptr)              \
                          : "q"(value), "0"(comparand), "m"(*(__TBB_VOLATILE T*)ptr) \
                          : "memory");                                               \
    return result;                                                                   \
}                                                                                    \
                                                                                     \
static inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend)              \
{                                                                                    \
    T result;                                                                        \
    __asm__ __volatile__("lock\nxadd" X " %0,%1"                                     \
                          : "=r"(result), "=m"(*(__TBB_VOLATILE T*)ptr)              \
                          : "0"(addend), "m"(*(__TBB_VOLATILE T*)ptr)                \
                          : "memory");                                               \
    return result;                                                                   \
}                                                                                    \
                                                                                     \
static inline  T __TBB_machine_fetchstore##S(volatile void *ptr, T value)            \
{                                                                                    \
    T result;                                                                        \
    __asm__ __volatile__("lock\nxchg" X " %0,%1"                                     \
                          : "=r"(result), "=m"(*(__TBB_VOLATILE T*)ptr)              \
                          : "0"(value), "m"(*(__TBB_VOLATILE T*)ptr)                 \
                          : "memory");                                               \
    return result;                                                                   \
}                                                                                    \

Definition at line 50 of file Third Party Tech/TBB/tbb30_20100406oss_win/tbb30_20100406oss/include/tbb/machine/linux_ia32.h.

#define __TBB_AtomicAND (   P,
  V 
)    __TBB_machine_and(P,V)
#define __TBB_AtomicOR (   P,
  V 
)    __TBB_machine_or(P,V)
#define __TBB_BIG_ENDIAN   0
#define __TBB_CompareAndSwap1 (   P,
  V,
 
)    __TBB_machine_cmpswp1(P,V,C)
#define __TBB_CompareAndSwap2 (   P,
  V,
 
)    __TBB_machine_cmpswp2(P,V,C)
#define __TBB_CompareAndSwap4 (   P,
  V,
 
)    __TBB_machine_cmpswp4(P,V,C)
#define __TBB_CompareAndSwap8 (   P,
  V,
 
)    __TBB_machine_cmpswp8(P,V,C)
#define __TBB_CompareAndSwapW (   P,
  V,
 
)    __TBB_machine_cmpswp4(P,V,C)
#define __TBB_FetchAndAdd1 (   P,
  V 
)    __TBB_machine_fetchadd1(P,V)
#define __TBB_FetchAndAdd2 (   P,
  V 
)    __TBB_machine_fetchadd2(P,V)
#define __TBB_FetchAndAdd4 (   P,
  V 
)    __TBB_machine_fetchadd4(P,V)
#define __TBB_FetchAndAddW (   P,
  V 
)    __TBB_machine_fetchadd4(P,V)
#define __TBB_FetchAndAddWrelease (   P,
  V 
)    __TBB_FetchAndAddW(P,V)
#define __TBB_FetchAndDecrementWrelease (   P)    __TBB_FetchAndAddW(P,-1)
#define __TBB_FetchAndIncrementWacquire (   P)    __TBB_FetchAndAddW(P,1)
#define __TBB_FetchAndStore1 (   P,
  V 
)    __TBB_machine_fetchstore1(P,V)
#define __TBB_FetchAndStore2 (   P,
  V 
)    __TBB_machine_fetchstore2(P,V)
#define __TBB_FetchAndStore4 (   P,
  V 
)    __TBB_machine_fetchstore4(P,V)
#define __TBB_FetchAndStoreW (   P,
  V 
)    __TBB_machine_fetchstore4(P,V)
#define __TBB_Load8 (   P)    __TBB_machine_load8(P)
#define __TBB_load_with_acquire (   L)    __TBB_machine_load_with_acquire((L))
#define __TBB_Log2 (   V)    __TBB_machine_lg(V)
#define __TBB_Pause (   V)    __TBB_machine_pause(V)
#define __TBB_release_consistency_helper ( )    __asm__ __volatile__("": : :"memory")
#define __TBB_Store8 (   P,
  V 
)    __TBB_machine_store8(P,V)
#define __TBB_store_with_release (   L,
  V 
)    __TBB_machine_store_with_release((L),(V))
#define __TBB_VOLATILE   volatile
#define __TBB_WORDSIZE   4

Function Documentation

static void __TBB_machine_and ( volatile void *  ptr,
uint32_t  addend 
) [inline, static]

Definition at line 135 of file Third Party Tech/TBB/tbb30_20100406oss_win/tbb30_20100406oss/include/tbb/machine/linux_ia32.h.

References __TBB_VOLATILE.

                                                                            {
    __asm__ __volatile__("lock\nandl %1,%0" : "=m"(*(__TBB_VOLATILE uint32_t *)ptr) : "r"(addend), "m"(*(__TBB_VOLATILE uint32_t *)ptr) : "memory");
}
static int8_t __TBB_machine_cmpswp1 ( volatile void *  ptr,
int8_t  value,
int8_t  comparand 
) [inline, static]
static int16_t __TBB_machine_cmpswp2 ( volatile void *  ptr,
int16_t  value,
int16_t  comparand 
) [inline, static]
static int32_t __TBB_machine_cmpswp4 ( volatile void *  ptr,
int32_t  value,
int32_t  comparand 
) [inline, static]
static int64_t __TBB_machine_cmpswp8 ( volatile void *  ptr,
int64_t  value,
int64_t  comparand 
) [inline, static]

Definition at line 86 of file Third Party Tech/TBB/tbb30_20100406oss_win/tbb30_20100406oss/include/tbb/machine/linux_ia32.h.

References __TBB_VOLATILE.

{
    int64_t result;
#if __PIC__ 
    /* compiling position-independent code */
    // EBX register preserved for compliance with position-independent code rules on IA32
    __asm__ __volatile__ (
            "pushl %%ebx\n\t"
            "movl  (%%ecx),%%ebx\n\t"
            "movl  4(%%ecx),%%ecx\n\t"
            "lock\n\t cmpxchg8b %1\n\t"
            "popl  %%ebx"
             : "=A"(result), "=m"(*(int64_t *)ptr)
             : "m"(*(int64_t *)ptr)
             , "0"(comparand)
             , "c"(&value)
             : "memory", "esp"
#if __INTEL_COMPILER
             ,"ebx"
#endif
    );
#else /* !__PIC__ */
    union {
        int64_t i64;
        int32_t i32[2];
    };
    i64 = value;
    __asm__ __volatile__ (
            "lock\n\t cmpxchg8b %1\n\t"
             : "=A"(result), "=m"(*(__TBB_VOLATILE int64_t *)ptr)
             : "m"(*(__TBB_VOLATILE int64_t *)ptr)
             , "0"(comparand)
             , "b"(i32[0]), "c"(i32[1])
             : "memory"
    );
#endif /* __PIC__ */
    return result;
}
static int8_t __TBB_machine_fetchadd1 ( volatile void *  ptr,
int8_t  addend 
) [inline, static]
static int16_t __TBB_machine_fetchadd2 ( volatile void *  ptr,
int16_t  addend 
) [inline, static]
static int32_t __TBB_machine_fetchadd4 ( volatile void *  ptr,
int32_t  addend 
) [inline, static]
static int8_t __TBB_machine_fetchstore1 ( volatile void *  ptr,
int8_t  value 
) [inline, static]
static int16_t __TBB_machine_fetchstore2 ( volatile void *  ptr,
int16_t  value 
) [inline, static]
static int32_t __TBB_machine_fetchstore4 ( volatile void *  ptr,
int32_t  value 
) [inline, static]
static int32_t __TBB_machine_lg ( uint32_t  x) [inline, static]

Definition at line 125 of file Third Party Tech/TBB/tbb30_20100406oss_win/tbb30_20100406oss/include/tbb/machine/linux_ia32.h.

                                                     {
    int32_t j;
    __asm__ ("bsr %1,%0" : "=r"(j) : "r"(x));
    return j;
}
static int64_t __TBB_machine_load8 ( const volatile void *  ptr) [inline, static]

Definition at line 146 of file Third Party Tech/TBB/tbb30_20100406oss_win/tbb30_20100406oss/include/tbb/machine/linux_ia32.h.

References __TBB_machine_cmpswp8(), and __TBB_VOLATILE.

                                                                     {
    int64_t result;
    if( ((uint32_t)ptr&7u)==0 ) {
        // Aligned load
        __asm__ __volatile__ ( "fildq %1\n\t"
                               "fistpq %0" :  "=m"(result) : "m"(*(const __TBB_VOLATILE uint64_t*)ptr) : "memory" );
    } else {
        // Unaligned load
        result = __TBB_machine_cmpswp8(const_cast<void*>(ptr),0,0);
    }
    return result;
}
template<typename T >
T __TBB_machine_load_with_acquire ( const volatile T location) [inline]
static void __TBB_machine_or ( volatile void *  ptr,
uint32_t  addend 
) [inline, static]

Definition at line 131 of file Third Party Tech/TBB/tbb30_20100406oss_win/tbb30_20100406oss/include/tbb/machine/linux_ia32.h.

References __TBB_VOLATILE.

                                                                           {
    __asm__ __volatile__("lock\norl %1,%0" : "=m"(*(__TBB_VOLATILE uint32_t *)ptr) : "r"(addend), "m"(*(__TBB_VOLATILE uint32_t *)ptr) : "memory");
}
static void __TBB_machine_pause ( int32_t  delay) [inline, static]

Definition at line 139 of file Third Party Tech/TBB/tbb30_20100406oss_win/tbb30_20100406oss/include/tbb/machine/linux_ia32.h.

                                                        {
    for (int32_t i = 0; i < delay; i++) {
       __asm__ __volatile__("pause;");
    }
    return;
}   
static void __TBB_machine_store8 ( volatile void *  ptr,
int64_t  value 
) [inline, static]

Definition at line 164 of file Third Party Tech/TBB/tbb30_20100406oss_win/tbb30_20100406oss/include/tbb/machine/linux_ia32.h.

References __TBB_machine_store8_slow(), __TBB_machine_store8_slow_perf_warning(), and __TBB_VOLATILE.

                                                                           {
    if( ((uint32_t)ptr&7u)==0 ) {
        // Aligned store
        __asm__ __volatile__ ( "fildq %1\n\t"
                               "fistpq %0" :  "=m"(*(__TBB_VOLATILE int64_t*)ptr) : "m"(value) : "memory" );
    } else {
        // Unaligned store
#if TBB_USE_PERFORMANCE_WARNINGS
        __TBB_machine_store8_slow_perf_warning(ptr);
#endif /* TBB_USE_PERFORMANCE_WARNINGS */
        __TBB_machine_store8_slow(ptr,value);
    }
}
void __TBB_machine_store8_slow ( volatile void *  ptr,
int64_t  value 
)

Defined in tbb_misc.cpp

void __TBB_machine_store8_slow_perf_warning ( volatile void *  ptr)
template<typename T , typename V >
void __TBB_machine_store_with_release ( volatile T location,
V  value 
) [inline]
void __TBB_rel_acq_fence ( ) [inline]

Definition at line 42 of file Third Party Tech/TBB/tbb30_20100406oss_win/tbb30_20100406oss/include/tbb/machine/linux_ia32.h.

{ __asm__ __volatile__("mfence": : :"memory"); }

Copyright © 2007-2010 by The Shadowrun: Awakened Team. This work is licensed under the GNU Lesser General Public License 3.

GNU Lesser General Public License 3 Sourceforge.net