parent
							
								
									94b257df3c
								
							
						
					
					
						commit
						d413d8cfa9
					
				| 
						 | 
				
			
			@ -115,7 +115,10 @@ static morder ConvertOrder(morder mo) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
template<typename T> T func_xchg(volatile T *v, T op) {
 | 
			
		||||
  return __sync_lock_test_and_set(v, op);
 | 
			
		||||
  T res = __sync_lock_test_and_set(v, op);
 | 
			
		||||
  // __sync_lock_test_and_set does not contain full barrier.
 | 
			
		||||
  __sync_synchronize();
 | 
			
		||||
  return res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename T> T func_add(volatile T *v, T op) {
 | 
			
		||||
| 
						 | 
				
			
			@ -255,6 +258,9 @@ static void AtomicStore(ThreadState *thr, uptr pc, volatile T *a, T v,
 | 
			
		|||
  thr->clock.ReleaseStore(&s->clock);
 | 
			
		||||
  *a = v;
 | 
			
		||||
  s->mtx.Unlock();
 | 
			
		||||
  // Trainling memory barrier to provide sequential consistency
 | 
			
		||||
  // for Dekker-like store-load synchronization.
 | 
			
		||||
  __sync_synchronize();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename T, T (*F)(volatile T *v, T op)>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue