equal
deleted
inserted
replaced
1 /* |
1 /* |
2 * Copyright (c) 2018, Red Hat, Inc. All rights reserved. |
2 * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved. |
3 * |
3 * |
4 * This code is free software; you can redistribute it and/or modify it |
4 * This code is free software; you can redistribute it and/or modify it |
5 * under the terms of the GNU General Public License version 2 only, as |
5 * under the terms of the GNU General Public License version 2 only, as |
6 * published by the Free Software Foundation. |
6 * published by the Free Software Foundation. |
7 * |
7 * |
92 |
92 |
93 if (access.is_oop()) { |
93 if (access.is_oop()) { |
94 value_opr = storeval_barrier(access.gen(), value_opr, access.access_emit_info(), access.decorators()); |
94 value_opr = storeval_barrier(access.gen(), value_opr, access.access_emit_info(), access.decorators()); |
95 } |
95 } |
96 |
96 |
97 assert(type == T_INT || type == T_OBJECT || type == T_ARRAY LP64_ONLY( || type == T_LONG ), "unexpected type"); |
97 assert(type == T_INT || is_reference_type(type) LP64_ONLY( || type == T_LONG ), "unexpected type"); |
98 LIR_Opr tmp = gen->new_register(T_INT); |
98 LIR_Opr tmp = gen->new_register(T_INT); |
99 __ xchg(access.resolved_addr(), value_opr, result, tmp); |
99 __ xchg(access.resolved_addr(), value_opr, result, tmp); |
100 |
100 |
101 if (access.is_oop()) { |
101 if (access.is_oop()) { |
102 result = load_reference_barrier(access.gen(), result, LIR_OprFact::addressConst(0)); |
102 result = load_reference_barrier(access.gen(), result, LIR_OprFact::addressConst(0)); |