diff -r ae5b2f1dcf12 -r 2a241e764894 src/share/vm/runtime/atomic.cpp --- a/src/share/vm/runtime/atomic.cpp Wed Jun 08 21:48:38 2011 -0400 +++ b/src/share/vm/runtime/atomic.cpp Fri Jun 10 15:08:36 2011 -0700 @@ -83,3 +83,13 @@ return (unsigned int)Atomic::cmpxchg((jint)exchange_value, (volatile jint*)dest, (jint)compare_value); } + +jlong Atomic::add(jlong add_value, volatile jlong* dest) { + jlong old = load(dest); + jlong new_value = old + add_value; + while (old != cmpxchg(new_value, dest, old)) { + old = load(dest); + new_value = old + add_value; + } + return old; +}