< prev index next >
src/share/vm/opto/library_call.cpp
Print this page
@@ -2695,10 +2695,11 @@
assert(rtype == type, "get and set must return the expected type");
assert(sig->count() == 3, "get and set has 3 arguments");
assert(sig->type_at(0)->basic_type() == T_OBJECT, "get and set base is object");
assert(sig->type_at(1)->basic_type() == T_LONG, "get and set offset is long");
assert(sig->type_at(2)->basic_type() == type, "get and set must take expected type as new value/delta");
+ assert(access_kind == Volatile, "mo is not passed to intrinsic nodes in current implementation");
#endif // ASSERT
break;
}
case LS_cmp_swap:
case LS_cmp_swap_weak: {
@@ -2820,12 +2821,18 @@
switch (access_kind) {
case Relaxed:
case Acquire:
break;
case Release:
+ insert_mem_bar(Op_MemBarRelease);
+ break;
case Volatile:
+ if (support_IRIW_for_not_multiple_copy_atomic_cpu) {
+ insert_mem_bar(Op_MemBarVolatile);
+ } else {
insert_mem_bar(Op_MemBarRelease);
+ }
break;
default:
ShouldNotReachHere();
}
insert_mem_bar(Op_MemBarCPUOrder);
@@ -3033,10 +3040,11 @@
case Release:
break; // do nothing
case Acquire:
case Volatile:
insert_mem_bar(Op_MemBarAcquire);
+ // !support_IRIW_for_not_multiple_copy_atomic_cpu handled in platform code
break;
default:
ShouldNotReachHere();
}
< prev index next >