static void test_static_and_dynamic_initialization(void) { #if (__SIZEOF_INT__ == 2) #define UINT_CONSTANT 0xc0feU #else #define UINT_CONSTANT 0xc01dc0feU #endif static Atomic_Uint static_uint = ATOMIC_INITIALIZER_UINT(UINT_CONSTANT); static Atomic_Ulong static_ulong = ATOMIC_INITIALIZER_ULONG(0xdeadbeefUL); static Atomic_Uintptr static_uintptr = ATOMIC_INITIALIZER_UINTPTR((uintptr_t) &static_uintptr); static Atomic_Flag static_flag = ATOMIC_INITIALIZER_FLAG; Atomic_Uint stack_uint; Atomic_Ulong stack_ulong; Atomic_Uintptr stack_uintptr; Atomic_Flag stack_flag; puts("=== static and dynamic initialization test case ==="); _Atomic_Init_uint(&stack_uint, UINT_CONSTANT); _Atomic_Init_ulong(&stack_ulong, 0xdeadbeefUL); _Atomic_Init_uintptr(&stack_uintptr, (uintptr_t) &static_uintptr); _Atomic_Flag_clear(&stack_flag, ATOMIC_ORDER_RELAXED); rtems_test_assert( memcmp(&stack_uint, &static_uint, sizeof(stack_uint)) == 0 ); rtems_test_assert( memcmp(&stack_ulong, &static_ulong, sizeof(stack_ulong)) == 0 ); rtems_test_assert( memcmp(&stack_uintptr, &static_uintptr, sizeof(stack_uintptr)) == 0 ); rtems_test_assert( memcmp(&stack_flag, &static_flag, sizeof(stack_flag)) == 0 ); rtems_test_assert( _Atomic_Load_uint(&stack_uint, ATOMIC_ORDER_RELAXED) == 0xc01dc0feU ); rtems_test_assert( _Atomic_Load_ulong(&stack_ulong, ATOMIC_ORDER_RELAXED) == 0xdeadbeefUL ); rtems_test_assert( _Atomic_Load_uintptr(&stack_uintptr, ATOMIC_ORDER_RELAXED) == (uintptr_t) &static_uintptr ); rtems_test_assert( !_Atomic_Flag_test_and_set(&stack_flag, ATOMIC_ORDER_RELAXED) ); }
__uint32_t _Libatomic_Protect_start( void *ptr ) { ISR_Level isr_level; (void) ptr; _ISR_Local_disable( isr_level ); #if defined(RTEMS_SMP) while ( _Atomic_Flag_test_and_set( &_Libatomic_The_one_lock, ATOMIC_ORDER_SEQ_CST ) ) { /* Next try. Yes, a TAS spin lock implementation is stupid. */ } #endif return isr_level; }