Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
sunos_sparc.h File Reference
#include <stdint.h>
#include <unistd.h>
Include dependency graph for sunos_sparc.h:

Go to the source code of this file.

Macros

#define __TBB_WORDSIZE   8
 
#define __TBB_ENDIANNESS   __TBB_ENDIAN_BIG
 
#define __TBB_compiler_fence()   __asm__ __volatile__ ("": : :"memory")
 
#define __TBB_control_consistency_helper()   __TBB_compiler_fence()
 
#define __TBB_acquire_consistency_helper()   __TBB_compiler_fence()
 
#define __TBB_release_consistency_helper()   __TBB_compiler_fence()
 
#define __TBB_full_memory_fence()   __asm__ __volatile__("membar #LoadLoad|#LoadStore|#StoreStore|#StoreLoad": : : "memory")
 
#define __TBB_USE_GENERIC_PART_WORD_CAS   1
 
#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD   1
 
#define __TBB_USE_GENERIC_FETCH_STORE   1
 
#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE   1
 
#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE   1
 
#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE   1
 
#define __TBB_AtomicOR(P, V)   __TBB_machine_or(P,V)
 
#define __TBB_AtomicAND(P, V)   __TBB_machine_and(P,V)
 
#define __TBB_Pause(V)   __TBB_machine_pause(V)
 
#define __TBB_Log2(V)   __TBB_machine_lg(V)
 
#define __TBB_TryLockByte(P)   __TBB_machine_trylockbyte(P)
 

Functions

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 int32_t __TBB_machine_fetchadd4 (volatile void *ptr, int32_t addend)
 
static int64_t __TBB_machine_fetchadd8 (volatile void *ptr, int64_t addend)
 
static int64_t __TBB_machine_lg (uint64_t x)
 
static void __TBB_machine_or (volatile void *ptr, uint64_t value)
 
static void __TBB_machine_and (volatile void *ptr, uint64_t value)
 
static void __TBB_machine_pause (int32_t delay)
 
static bool __TBB_machine_trylockbyte (unsigned char &flag)
 

Macro Definition Documentation

◆ __TBB_acquire_consistency_helper

#define __TBB_acquire_consistency_helper ( )    __TBB_compiler_fence()

Definition at line 40 of file sunos_sparc.h.

◆ __TBB_AtomicAND

#define __TBB_AtomicAND (   P,
 
)    __TBB_machine_and(P,V)

Definition at line 197 of file sunos_sparc.h.

◆ __TBB_AtomicOR

#define __TBB_AtomicOR (   P,
 
)    __TBB_machine_or(P,V)

Definition at line 196 of file sunos_sparc.h.

◆ __TBB_compiler_fence

#define __TBB_compiler_fence ( )    __asm__ __volatile__ ("": : :"memory")

To those working on SPARC hardware. Consider relaxing acquire and release consistency helpers to no-op (as this port covers TSO mode only).

Definition at line 38 of file sunos_sparc.h.

◆ __TBB_control_consistency_helper

#define __TBB_control_consistency_helper ( )    __TBB_compiler_fence()

Definition at line 39 of file sunos_sparc.h.

◆ __TBB_ENDIANNESS

#define __TBB_ENDIANNESS   __TBB_ENDIAN_BIG

Definition at line 34 of file sunos_sparc.h.

◆ __TBB_full_memory_fence

#define __TBB_full_memory_fence ( )    __asm__ __volatile__("membar #LoadLoad|#LoadStore|#StoreStore|#StoreLoad": : : "memory")

Definition at line 42 of file sunos_sparc.h.

◆ __TBB_Log2

#define __TBB_Log2 (   V)    __TBB_machine_lg(V)

Definition at line 201 of file sunos_sparc.h.

◆ __TBB_Pause

#define __TBB_Pause (   V)    __TBB_machine_pause(V)

Definition at line 200 of file sunos_sparc.h.

◆ __TBB_release_consistency_helper

#define __TBB_release_consistency_helper ( )    __TBB_compiler_fence()

Definition at line 41 of file sunos_sparc.h.

◆ __TBB_TryLockByte

#define __TBB_TryLockByte (   P)    __TBB_machine_trylockbyte(P)

Definition at line 203 of file sunos_sparc.h.

◆ __TBB_USE_GENERIC_FETCH_STORE

#define __TBB_USE_GENERIC_FETCH_STORE   1

Definition at line 191 of file sunos_sparc.h.

◆ __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE

#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE   1

Definition at line 192 of file sunos_sparc.h.

◆ __TBB_USE_GENERIC_PART_WORD_CAS

#define __TBB_USE_GENERIC_PART_WORD_CAS   1

Definition at line 189 of file sunos_sparc.h.

◆ __TBB_USE_GENERIC_PART_WORD_FETCH_ADD

#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD   1

Definition at line 190 of file sunos_sparc.h.

◆ __TBB_USE_GENERIC_RELAXED_LOAD_STORE

#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE   1

Definition at line 193 of file sunos_sparc.h.

◆ __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE

#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE   1

Definition at line 194 of file sunos_sparc.h.

◆ __TBB_WORDSIZE

#define __TBB_WORDSIZE   8

Definition at line 31 of file sunos_sparc.h.

Function Documentation

◆ __TBB_machine_and()

static void __TBB_machine_and ( volatile void ptr,
uint64_t  value 
)
inlinestatic

Definition at line 159 of file sunos_sparc.h.

159  {
160  __asm__ __volatile__ (
161  "0:\t and\t %2, %3, %%g1\n" // do operation
162  "\t casx\t [%1], %2, %%g1\n" // cas to store result in memory
163  "\t cmp\t %2, %%g1\n" // check if value from memory is original
164  "\t bne,a,pn\t %%xcc, 0b\n" // if not try again
165  "\t mov %%g1, %2\n" // use branch delay slot to move new value in memory to be added
166  : "=m"(*(int64_t *)ptr)
167  : "r"(ptr), "r"(*(int64_t *)ptr), "r"(value), "m"(*(int64_t *)ptr)
168  : "ccr", "g1", "memory");
169 }
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long value

References value.

◆ __TBB_machine_cmpswp4()

static int32_t __TBB_machine_cmpswp4 ( volatile void ptr,
int32_t  value,
int32_t  comparand 
)
inlinestatic

Atomic CAS for 32 bit values, if *ptr==comparand, then *ptr=value, returns *ptr

Parameters
ptrpointer to value in memory to be swapped with value if *ptr==comparand
valuevalue to assign *ptr to if *ptr==comparand
comparandvalue to compare with *ptr (
Returns
value originally in memory at ptr, regardless of success

Definition at line 55 of file sunos_sparc.h.

55  {
56  int32_t result;
57  __asm__ __volatile__(
58  "cas\t[%5],%4,%1"
59  : "=m"(*(int32_t *)ptr), "=r"(result)
60  : "m"(*(int32_t *)ptr), "1"(value), "r"(comparand), "r"(ptr)
61  : "memory");
62  return result;
63 }
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long value

References value.

◆ __TBB_machine_cmpswp8()

static int64_t __TBB_machine_cmpswp8 ( volatile void ptr,
int64_t  value,
int64_t  comparand 
)
inlinestatic

Atomic CAS for 64 bit values, if *ptr==comparand, then *ptr=value, returns *ptr

Parameters
ptrpointer to value in memory to be swapped with value if *ptr==comparand
valuevalue to assign *ptr to if *ptr==comparand
comparandvalue to compare with *ptr (
Returns
value originally in memory at ptr, regardless of success

Definition at line 72 of file sunos_sparc.h.

72  {
73  int64_t result;
74  __asm__ __volatile__(
75  "casx\t[%5],%4,%1"
76  : "=m"(*(int64_t *)ptr), "=r"(result)
77  : "m"(*(int64_t *)ptr), "1"(value), "r"(comparand), "r"(ptr)
78  : "memory");
79  return result;
80 }
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long value

References value.

◆ __TBB_machine_fetchadd4()

static int32_t __TBB_machine_fetchadd4 ( volatile void ptr,
int32_t  addend 
)
inlinestatic

Atomic fetch and add for 32 bit values, in this case implemented by continuously checking success of atomicity

Parameters
ptrpointer to value to add addend to
addenedvalue to add to *ptr
Returns
value at ptr before addened was added

Definition at line 92 of file sunos_sparc.h.

92  {
93  int32_t result;
94  __asm__ __volatile__ (
95  "0:\t add\t %3, %4, %0\n" // do addition
96  "\t cas\t [%2], %3, %0\n" // cas to store result in memory
97  "\t cmp\t %3, %0\n" // check if value from memory is original
98  "\t bne,a,pn\t %%icc, 0b\n" // if not try again
99  "\t mov %0, %3\n" // use branch delay slot to move new value in memory to be added
100  : "=&r"(result), "=m"(*(int32_t *)ptr)
101  : "r"(ptr), "r"(*(int32_t *)ptr), "r"(addend), "m"(*(int32_t *)ptr)
102  : "ccr", "memory");
103  return result;
104 }

◆ __TBB_machine_fetchadd8()

static int64_t __TBB_machine_fetchadd8 ( volatile void ptr,
int64_t  addend 
)
inlinestatic

Atomic fetch and add for 64 bit values, in this case implemented by continuously checking success of atomicity

Parameters
ptrpointer to value to add addend to
addenedvalue to add to *ptr
Returns
value at ptr before addened was added

Definition at line 112 of file sunos_sparc.h.

112  {
113  int64_t result;
114  __asm__ __volatile__ (
115  "0:\t add\t %3, %4, %0\n" // do addition
116  "\t casx\t [%2], %3, %0\n" // cas to store result in memory
117  "\t cmp\t %3, %0\n" // check if value from memory is original
118  "\t bne,a,pn\t %%xcc, 0b\n" // if not try again
119  "\t mov %0, %3\n" // use branch delay slot to move new value in memory to be added
120  : "=&r"(result), "=m"(*(int64_t *)ptr)
121  : "r"(ptr), "r"(*(int64_t *)ptr), "r"(addend), "m"(*(int64_t *)ptr)
122  : "ccr", "memory");
123  return result;
124 }

◆ __TBB_machine_lg()

static int64_t __TBB_machine_lg ( uint64_t  x)
inlinestatic

Definition at line 130 of file sunos_sparc.h.

130  {
131  __TBB_ASSERT(x, "__TBB_Log2(0) undefined");
132  uint64_t count;
133  // one hot encode
134  x |= (x >> 1);
135  x |= (x >> 2);
136  x |= (x >> 4);
137  x |= (x >> 8);
138  x |= (x >> 16);
139  x |= (x >> 32);
140  // count 1's
141  __asm__ ("popc %1, %0" : "=r"(count) : "r"(x) );
142  return count-1;
143 }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t count

References __TBB_ASSERT, and count.

◆ __TBB_machine_or()

static void __TBB_machine_or ( volatile void ptr,
uint64_t  value 
)
inlinestatic

Definition at line 147 of file sunos_sparc.h.

147  {
148  __asm__ __volatile__ (
149  "0:\t or\t %2, %3, %%g1\n" // do operation
150  "\t casx\t [%1], %2, %%g1\n" // cas to store result in memory
151  "\t cmp\t %2, %%g1\n" // check if value from memory is original
152  "\t bne,a,pn\t %%xcc, 0b\n" // if not try again
153  "\t mov %%g1, %2\n" // use branch delay slot to move new value in memory to be added
154  : "=m"(*(int64_t *)ptr)
155  : "r"(ptr), "r"(*(int64_t *)ptr), "r"(value), "m"(*(int64_t *)ptr)
156  : "ccr", "g1", "memory");
157 }
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long value

References value.

◆ __TBB_machine_pause()

static void __TBB_machine_pause ( int32_t  delay)
inlinestatic

Definition at line 172 of file sunos_sparc.h.

172  {
173  // do nothing, inlined, doesn't matter
174 }

◆ __TBB_machine_trylockbyte()

static bool __TBB_machine_trylockbyte ( unsigned char &  flag)
inlinestatic

Definition at line 179 of file sunos_sparc.h.

179  {
180  unsigned char result;
181  __asm__ __volatile__ (
182  "ldstub\t [%2], %0\n"
183  : "=r"(result), "=m"(flag)
184  : "r"(&flag), "m"(flag)
185  : "memory");
186  return result == 0;
187 }

Copyright © 2005-2019 Intel Corporation. All Rights Reserved.

Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are registered trademarks or trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

* Other names and brands may be claimed as the property of others.