1.1 --- a/epoc32/include/tools/stlport/stl/_sparc_atomic.h Wed Mar 31 12:27:01 2010 +0100
1.2 +++ b/epoc32/include/tools/stlport/stl/_sparc_atomic.h Wed Mar 31 12:33:34 2010 +0100
1.3 @@ -1,60 +1,60 @@
1.4 -
1.5 -// Currently, SUN CC requires object file
1.6 -
1.7 -#if defined (__GNUC__)
1.8 -
1.9 -/*
1.10 -** int _STLP_atomic_exchange (__stl_atomic_t *pvalue, __stl_atomic_t value)
1.11 -*/
1.12 -
1.13 -# ifdef __sparc_v9__
1.14 -
1.15 -# ifdef __arch64__
1.16 -
1.17 -# define _STLP_EXCH_ASM asm volatile ("casx [%3], %4, %0 ; membar #LoadLoad | #LoadStore " : \
1.18 - "=r" (_L_value2), "=m" (*_L_pvalue1) : \
1.19 - "m" (*_L_pvalue1), "r" (_L_pvalue1), "r" (_L_value1), "0" (_L_value2) )
1.20 -
1.21 -# else /* __arch64__ */
1.22 -
1.23 -# define _STLP_EXCH_ASM asm volatile ("cas [%3], %4, %0" : \
1.24 - "=r" (_L_value2), "=m" (*_L_pvalue1) : \
1.25 - "m" (*_L_pvalue1), "r" (_L_pvalue1), "r" (_L_value1), "0" (_L_value2) )
1.26 -# endif
1.27 -
1.28 -# else /* __sparc_v9__ */
1.29 -
1.30 -# define _STLP_EXCH_ASM asm volatile ("swap [%3], %0 " : \
1.31 - "=r" (_L_value2), "=m" (*_L_pvalue1) : \
1.32 - "m" (*_L_pvalue1), "r" (_L_pvalue1), "0" (_L_value2) )
1.33 -# endif
1.34 -
1.35 -
1.36 -# define _STLP_ATOMIC_EXCHANGE(__pvalue1, __value2) \
1.37 - ({ register volatile __stl_atomic_t *_L_pvalue1 = __pvalue1; \
1.38 - register __stl_atomic_t _L_value1, _L_value2 = __value2 ; \
1.39 - do { _L_value1 = *_L_pvalue1; _STLP_EXCH_ASM; } while ( _L_value1 != _L_value2 ) ; \
1.40 - _L_value1; })
1.41 -
1.42 -# define _STLP_ATOMIC_INCREMENT(__pvalue1) \
1.43 - { register volatile __stl_atomic_t *_L_pvalue1 = __pvalue1; \
1.44 - register __stl_atomic_t _L_value1, _L_value2; \
1.45 - do { _L_value1 = *_L_pvalue1; _L_value2 = _L_value1+1; _STLP_EXCH_ASM; } while ( _L_value1 != _L_value2 ) ; }
1.46 -
1.47 -# define _STLP_ATOMIC_DECREMENT(__pvalue1) \
1.48 - { register volatile __stl_atomic_t *_L_pvalue1 = __pvalue1; \
1.49 - register __stl_atomic_t _L_value1, _L_value2; \
1.50 - do { _L_value1 = *_L_pvalue1; _L_value2 = _L_value1-1; _STLP_EXCH_ASM; } while ( _L_value1 != _L_value2 ) ; }
1.51 -
1.52 -# elif ! defined (_STLP_NO_EXTERN_INLINE)
1.53 -
1.54 -extern "C" __stl_atomic_t _STLP_atomic_exchange(__stl_atomic_t * __x, __stl_atomic_t __v);
1.55 -extern "C" void _STLP_atomic_decrement(__stl_atomic_t* i);
1.56 -extern "C" void _STLP_atomic_increment(__stl_atomic_t* i);
1.57 -
1.58 -# define _STLP_ATOMIC_INCREMENT(__x) _STLP_atomic_increment((__stl_atomic_t*)__x)
1.59 -# define _STLP_ATOMIC_DECREMENT(__x) _STLP_atomic_decrement((__stl_atomic_t*)__x)
1.60 -# define _STLP_ATOMIC_EXCHANGE(__x, __y) _STLP_atomic_exchange((__stl_atomic_t*)__x, (__stl_atomic_t)__y)
1.61 -
1.62 -# endif
1.63 -
1.64 +
1.65 +// Currently, SUN CC requires object file
1.66 +
1.67 +#if defined (__GNUC__)
1.68 +
1.69 +/*
1.70 +** int _STLP_atomic_exchange (__stl_atomic_t *pvalue, __stl_atomic_t value)
1.71 +*/
1.72 +
1.73 +# ifdef __sparc_v9__
1.74 +
1.75 +# ifdef __arch64__
1.76 +
1.77 +# define _STLP_EXCH_ASM asm volatile ("casx [%3], %4, %0 ; membar #LoadLoad | #LoadStore " : \
1.78 + "=r" (_L_value2), "=m" (*_L_pvalue1) : \
1.79 + "m" (*_L_pvalue1), "r" (_L_pvalue1), "r" (_L_value1), "0" (_L_value2) )
1.80 +
1.81 +# else /* __arch64__ */
1.82 +
1.83 +# define _STLP_EXCH_ASM asm volatile ("cas [%3], %4, %0" : \
1.84 + "=r" (_L_value2), "=m" (*_L_pvalue1) : \
1.85 + "m" (*_L_pvalue1), "r" (_L_pvalue1), "r" (_L_value1), "0" (_L_value2) )
1.86 +# endif
1.87 +
1.88 +# else /* __sparc_v9__ */
1.89 +
1.90 +# define _STLP_EXCH_ASM asm volatile ("swap [%3], %0 " : \
1.91 + "=r" (_L_value2), "=m" (*_L_pvalue1) : \
1.92 + "m" (*_L_pvalue1), "r" (_L_pvalue1), "0" (_L_value2) )
1.93 +# endif
1.94 +
1.95 +
1.96 +# define _STLP_ATOMIC_EXCHANGE(__pvalue1, __value2) \
1.97 + ({ register volatile __stl_atomic_t *_L_pvalue1 = __pvalue1; \
1.98 + register __stl_atomic_t _L_value1, _L_value2 = __value2 ; \
1.99 + do { _L_value1 = *_L_pvalue1; _STLP_EXCH_ASM; } while ( _L_value1 != _L_value2 ) ; \
1.100 + _L_value1; })
1.101 +
1.102 +# define _STLP_ATOMIC_INCREMENT(__pvalue1) \
1.103 + { register volatile __stl_atomic_t *_L_pvalue1 = __pvalue1; \
1.104 + register __stl_atomic_t _L_value1, _L_value2; \
1.105 + do { _L_value1 = *_L_pvalue1; _L_value2 = _L_value1+1; _STLP_EXCH_ASM; } while ( _L_value1 != _L_value2 ) ; }
1.106 +
1.107 +# define _STLP_ATOMIC_DECREMENT(__pvalue1) \
1.108 + { register volatile __stl_atomic_t *_L_pvalue1 = __pvalue1; \
1.109 + register __stl_atomic_t _L_value1, _L_value2; \
1.110 + do { _L_value1 = *_L_pvalue1; _L_value2 = _L_value1-1; _STLP_EXCH_ASM; } while ( _L_value1 != _L_value2 ) ; }
1.111 +
1.112 +# elif ! defined (_STLP_NO_EXTERN_INLINE)
1.113 +
1.114 +extern "C" __stl_atomic_t _STLP_atomic_exchange(__stl_atomic_t * __x, __stl_atomic_t __v);
1.115 +extern "C" void _STLP_atomic_decrement(__stl_atomic_t* i);
1.116 +extern "C" void _STLP_atomic_increment(__stl_atomic_t* i);
1.117 +
1.118 +# define _STLP_ATOMIC_INCREMENT(__x) _STLP_atomic_increment((__stl_atomic_t*)__x)
1.119 +# define _STLP_ATOMIC_DECREMENT(__x) _STLP_atomic_decrement((__stl_atomic_t*)__x)
1.120 +# define _STLP_ATOMIC_EXCHANGE(__x, __y) _STLP_atomic_exchange((__stl_atomic_t*)__x, (__stl_atomic_t)__y)
1.121 +
1.122 +# endif
1.123 +