17 INLINE 
void AtomicAdjustI386Impl::
    18 inc(TVOLATILE AtomicAdjustI386Impl::Integer &var) {
    19   assert((((
size_t)&var) & (
sizeof(Integer) - 1)) == 0);
    22   TVOLATILE Integer *var_ptr = &var;
    25     lock inc dword ptr [edx];
    27 #elif !defined(__EDG__)    29   __asm__ __volatile__(
"lock; incl %0"    39 INLINE 
bool AtomicAdjustI386Impl::
    40 dec(TVOLATILE AtomicAdjustI386Impl::Integer &var) {
    41   assert((((
size_t)&var) & (
sizeof(Integer) - 1)) == 0);
    45   TVOLATILE Integer *var_ptr = &var;
    48     lock dec dword ptr [edx];
    51 #elif !defined(__EDG__)    53   __asm__ __volatile__(
"lock; decl %0; sete %1"    54                        :
"=m" (var), 
"=qm" (c)
    55                        :
"m" (&var) : 
"memory");
    64 INLINE AtomicAdjustI386Impl::Integer AtomicAdjustI386Impl::
    65 add(TVOLATILE AtomicAdjustI386Impl::Integer &var, AtomicAdjustI386Impl::Integer delta) {
    66   assert((((
size_t)&var) & (
sizeof(Integer) - 1)) == 0);
    67   Integer orig_value = var;
    68   Integer new_value = orig_value + delta;
    69   while (compare_and_exchange(var, orig_value, new_value) != orig_value) {
    71     new_value = orig_value + delta;
    79 INLINE AtomicAdjustI386Impl::Integer AtomicAdjustI386Impl::
    80 set(TVOLATILE AtomicAdjustI386Impl::Integer &var,
    81     AtomicAdjustI386Impl::Integer new_value) {
    82   assert((((
size_t)&var) & (
sizeof(Integer) - 1)) == 0);
    83   Integer orig_value = var;
    94 INLINE AtomicAdjustI386Impl::Integer AtomicAdjustI386Impl::
    95 get(
const TVOLATILE AtomicAdjustI386Impl::Integer &var) {
    96   assert((((
size_t)&var) & (
sizeof(Integer) - 1)) == 0);
   103 INLINE AtomicAdjustI386Impl::Pointer AtomicAdjustI386Impl::
   104 set_ptr(TVOLATILE AtomicAdjustI386Impl::Pointer &var,
   105         AtomicAdjustI386Impl::Pointer new_value) {
   106   assert((((
size_t)&var) & (
sizeof(Pointer) - 1)) == 0);
   107   Pointer orig_value = var;
   118 INLINE AtomicAdjustI386Impl::Pointer AtomicAdjustI386Impl::
   119 get_ptr(
const TVOLATILE AtomicAdjustI386Impl::Pointer &var) {
   120   assert((((
size_t)&var) & (
sizeof(Pointer) - 1)) == 0);
   137 INLINE AtomicAdjustI386Impl::Integer AtomicAdjustI386Impl::
   138 compare_and_exchange(TVOLATILE AtomicAdjustI386Impl::Integer &mem,
   139                      AtomicAdjustI386Impl::Integer old_value,
   140                      AtomicAdjustI386Impl::Integer new_value) {
   141   assert((((
size_t)&mem) & (
sizeof(Integer) - 1)) == 0);
   145   TVOLATILE Integer *mem_ptr = &mem;
   150     lock cmpxchg dword ptr [edx], ecx;
   153 #elif !defined(__EDG__)   155   __asm__ __volatile__(
"lock; cmpxchgl %1,%2"   157                        : 
"r"(new_value), 
"m"(mem), 
"0"(old_value)
   168 INLINE AtomicAdjustI386Impl::Pointer AtomicAdjustI386Impl::
   169 compare_and_exchange_ptr(TVOLATILE AtomicAdjustI386Impl::Pointer &mem,
   170                          AtomicAdjustI386Impl::Pointer old_value,
   171                          AtomicAdjustI386Impl::Pointer new_value) {
   172   assert((((
size_t)&mem) & (
sizeof(Pointer) - 1)) == 0);
   176   TVOLATILE Pointer *mem_ptr = &mem;
   181     lock cmpxchg dword ptr [edx], ecx;
   184 #elif !defined(__EDG__)   186   __asm__ __volatile__(
"lock; cmpxchgl %1,%2"   188                        : 
"r"(new_value), 
"m"(mem), 
"0"(old_value)