< 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 >