< prev index next >
src/share/vm/gc/shared/c2_BarrierSetCodeGen.cpp
Print this page
rev 13551 : imported patch gcinterface-aarch64-5.patch
@@ -271,20 +271,11 @@
default:
ShouldNotReachHere();
}
}
- pin_atomic_op(kit, load_store, alias_idx);
-
- Node* result = load_store;
-#ifdef _LP64
- if (is_obj && adr->bottom_type()->is_ptr_to_narrowoop()) {
- result = kit->gvn().transform(new DecodeNNode(load_store, load_store->get_ptr_type()));
- }
-#endif
-
- return result;
+ return load_store;
}
Node* C2BarrierSetCodeGen::cas_bool_at_resolved(GraphKit* kit, Node* obj, Node* adr, const TypePtr* adr_type, int alias_idx,
Node* expected_val, Node* new_val, const Type* value_type,
Node* mem, BasicType bt, C2DecoratorSet decorators) {
@@ -350,12 +341,10 @@
default:
ShouldNotReachHere();
}
}
- pin_atomic_op(kit, load_store, alias_idx);
-
return load_store;
}
Node* C2BarrierSetCodeGen::swap_at_resolved(GraphKit* kit, Node* obj, Node* adr, const TypePtr* adr_type, int alias_idx,
Node* new_val, const Type* value_type,
@@ -433,20 +422,33 @@
BasicType bt, C2DecoratorSet decorators) {
decorators = fixup_decorators(decorators);
Node* mem = atomic_op_membar_prologue(kit, decorators, alias_idx);
Node* load_store = NULL;
Node* result = cas_val_at_resolved(kit, obj, adr, adr_type, alias_idx, expected_val, new_val, value_type, mem, load_store, bt, decorators);
+
+ pin_atomic_op(kit, result, alias_idx);
+
+#ifdef _LP64
+ bool is_obj = bt == T_OBJECT || bt == T_ARRAY;
+ if (is_obj && adr->bottom_type()->is_ptr_to_narrowoop()) {
+ result = kit->gvn().transform(new DecodeNNode(load_store, load_store->get_ptr_type()));
+ }
+#endif
+
atomic_op_membar_epilogue(kit, decorators);
return result;
}
Node* C2BarrierSetCodeGen::cas_bool_at(GraphKit* kit, Node* obj, Node* adr, const TypePtr* adr_type, int alias_idx,
Node* expected_val, Node* new_val, const Type* value_type,
BasicType bt, C2DecoratorSet decorators) {
decorators = fixup_decorators(decorators);
Node* mem = atomic_op_membar_prologue(kit, decorators, alias_idx);
Node* result = cas_bool_at_resolved(kit, obj, adr, adr_type, alias_idx, expected_val, new_val, value_type, mem, bt, decorators);
+
+ pin_atomic_op(kit, result, alias_idx);
+
atomic_op_membar_epilogue(kit, decorators);
return result;
}
Node* C2BarrierSetCodeGen::swap_at(GraphKit* kit, Node* obj, Node* adr, const TypePtr* adr_type, int alias_idx,
< prev index next >