< prev index next >
src/share/vm/gc/shared/c2_BarrierSetCodeGen.cpp
Print this page
rev 13551 : imported patch gcinterface-aarch64-5.patch
*** 271,290 ****
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;
}
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) {
--- 271,281 ----
default:
ShouldNotReachHere();
}
}
! 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,361 ****
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,
--- 341,350 ----
*** 433,452 ****
--- 422,454 ----
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 >