402N/A+#if defined(_RWSTD_STRICT_SPARCV8_MUTEX_ALIGNMENT)
402N/A+# pragma align 8(__rw_mutex_base)
402N/A // POD type with no user-defined ctor or dtor facilitates static
402N/A // initialization of mutex objects with static storage duration
402N/A #endif // _RWSTD_NO_STATIC_MUTEX_INIT
402N/A+#if defined(_RWSTD_STRICT_SPARCV8_MUTEX_ALIGNMENT)
402N/A+# pragma align 8(_C_mutex)
402N/A _RWSTD_MUTEX_T _C_mutex; // the real thing
402N/A+#if defined(_RWSTD_STRICT_SPARCV8_MUTEX_ALIGNMENT)
402N/A+# pragma align 8(__rw_mutex)
402N/A // non-POD type, always initializes mutex data member via a function call
402N/A class _RWSTD_EXPORT __rw_mutex: public __rw_mutex_base
402N/A #ifndef _RWSTD_NO_STATIC_MUTEX_INIT
402N/A+#if defined(_RWSTD_STRICT_SPARCV8_MUTEX_ALIGNMENT)
402N/A+# pragma align 8(__rw_static_mutex)
402N/A // helper factory class - static member is guranteed to be constructed
402N/A // during static initialization; objects of this POD class are not
402N/A // destroyed during program termination (important to allow them
402N/A template <class _TypeT>
402N/A struct __rw_static_mutex
402N/A+#if defined(_RWSTD_STRICT_SPARCV8_MUTEX_ALIGNMENT)
402N/A+# pragma align 8(_C_mutex)
402N/A static __rw_mutex_base _C_mutex;
402N/A #endif // _INLINE_WITH_STATICS
402N/A+#if defined(_RWSTD_STRICT_SPARCV8_MUTEX_ALIGNMENT)
402N/A+# pragma align 8(__mutex_buf_t)
402N/A // allocate properly aligned memory for static mutex (necessary
402N/A // to prevent static local mutex from being destroyed during
402N/A // program termination)
402N/A+#if defined(_RWSTD_STRICT_SPARCV8_MUTEX_ALIGNMENT)
402N/A+ unsigned long long __pad; // force alignment (must be first)
402N/A+ unsigned char __buf [sizeof (__rw_mutex_base)];
402N/A long double __pad; // force alignment (must be first)
402N/A char __buf [sizeof (__rw_mutex_base)];
402N/A+#if defined(_RWSTD_STRICT_SPARCV8_MUTEX_ALIGNMENT)
402N/A+# pragma align 8(__mutex_buf)
402N/A // using a named union to work around a bug in HP aCC 3.14.10 (JAGad03246)
402N/A static __mutex_buf_t __mutex_buf;
402N/A+#if defined(_RWSTD_STRICT_SPARCV8_MUTEX_ALIGNMENT)
402N/A+# pragma align 8(__mutex)
402N/A // initialize mutex reference to refer to the static buffer space
402N/A __rw_mutex_base &__mutex =
402N/A _RWSTD_REINTERPRET_CAST (__rw_mutex_base&, __mutex_buf);
402N/A+#if defined(_RWSTD_STRICT_SPARCV8_MUTEX_ALIGNMENT)
402N/A+# pragma align 8(__rw_guard)
402N/A // allows safe use of a mutex in the presence of exceptions
402N/A+#if defined(_RWSTD_STRICT_SPARCV8_MUTEX_ALIGNMENT)
402N/A+# pragma align 8(__rw_synchronized)
402N/A // base class for obects required to guarantee some degree of MT safety
402N/A struct _RWSTD_EXPORT __rw_synchronized
402N/A // helper functions for atomic value [in|de]crement and exchange
402N/A // the functions are atomic with respect to each other as long as
402N/A // they are passed the same mutex by the callers
402N/A __rw_get_static_mutex ((_TypeT*)0));
402N/A+#if defined(_RWSTD_STRICT_SPARCV8_MUTEX_ALIGNMENT)
402N/A /********************** no atomic ops ********************************/
402N/A #if defined (_RWSTD_NO_ATOMIC_OPS)