add cmpxchg
refactor