equal
deleted
inserted
replaced
31 #include "oops/klass.inline.hpp" |
31 #include "oops/klass.inline.hpp" |
32 #include "oops/instanceKlass.inline.hpp" |
32 #include "oops/instanceKlass.inline.hpp" |
33 #include "oops/method.hpp" |
33 #include "oops/method.hpp" |
34 #include "oops/oop.inline.hpp" |
34 #include "oops/oop.inline.hpp" |
35 #include "runtime/atomic.hpp" |
35 #include "runtime/atomic.hpp" |
36 #include "runtime/orderAccess.hpp" |
|
37 #include "runtime/vm_version.hpp" |
36 #include "runtime/vm_version.hpp" |
38 #include "runtime/jniHandles.inline.hpp" |
37 #include "runtime/jniHandles.inline.hpp" |
39 #include "runtime/thread.inline.hpp" |
38 #include "runtime/thread.inline.hpp" |
40 #include "utilities/debug.hpp" |
39 #include "utilities/debug.hpp" |
41 |
40 |
43 static traceid atomic_inc(traceid volatile* const dest) { |
42 static traceid atomic_inc(traceid volatile* const dest) { |
44 assert(VM_Version::supports_cx8(), "invariant"); |
43 assert(VM_Version::supports_cx8(), "invariant"); |
45 traceid compare_value; |
44 traceid compare_value; |
46 traceid exchange_value; |
45 traceid exchange_value; |
47 do { |
46 do { |
48 compare_value = OrderAccess::load_acquire(dest); |
47 compare_value = *dest; |
49 exchange_value = compare_value + 1; |
48 exchange_value = compare_value + 1; |
50 } while (Atomic::cmpxchg(exchange_value, dest, compare_value) != compare_value); |
49 } while (Atomic::cmpxchg(exchange_value, dest, compare_value) != compare_value); |
51 return exchange_value; |
50 return exchange_value; |
52 } |
51 } |
53 |
52 |