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