1 /* |
1 /* |
2 * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
68 Address cnt_addr(O3, cnt_addrlit.low10()); |
68 Address cnt_addr(O3, cnt_addrlit.low10()); |
69 __ ld (cnt_addr, G4); |
69 __ ld (cnt_addr, G4); |
70 __ andcc (G4, 1, G0); |
70 __ andcc (G4, 1, G0); |
71 __ br (Assembler::notZero, false, Assembler::pn, label1); |
71 __ br (Assembler::notZero, false, Assembler::pn, label1); |
72 __ delayed()->srl (O2, 2, O4); |
72 __ delayed()->srl (O2, 2, O4); |
|
73 |
|
74 if (JvmtiExport::can_post_field_access()) { |
|
75 // Check to see if a field access watch has been set before we |
|
76 // take the fast path. |
|
77 AddressLiteral get_field_access_count_addr(JvmtiExport::get_field_access_count_addr()); |
|
78 __ load_contents(get_field_access_count_addr, O5); |
|
79 __ cmp_and_br_short(O5, 0, Assembler::notEqual, Assembler::pn, label1); |
|
80 } |
|
81 |
73 __ mov(O1, O5); |
82 __ mov(O1, O5); |
74 |
83 |
75 // Both O5 and G3 are clobbered by try_resolve_jobject_in_native. |
84 // Both O5 and G3 are clobbered by try_resolve_jobject_in_native. |
76 BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler(); |
85 BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler(); |
77 bs->try_resolve_jobject_in_native(masm, /* jni_env */ O0, /* obj */ O5, /* tmp */ G3, label1); |
86 bs->try_resolve_jobject_in_native(masm, /* jni_env */ O0, /* obj */ O5, /* tmp */ G3, label1); |
151 Address cnt_addr(G3, cnt_addrlit.low10()); |
160 Address cnt_addr(G3, cnt_addrlit.low10()); |
152 __ ld (cnt_addr, G4); |
161 __ ld (cnt_addr, G4); |
153 __ andcc (G4, 1, G0); |
162 __ andcc (G4, 1, G0); |
154 __ br (Assembler::notZero, false, Assembler::pn, label1); |
163 __ br (Assembler::notZero, false, Assembler::pn, label1); |
155 __ delayed()->srl (O2, 2, O4); |
164 __ delayed()->srl (O2, 2, O4); |
|
165 |
|
166 if (JvmtiExport::can_post_field_access()) { |
|
167 // Check to see if a field access watch has been set before we |
|
168 // take the fast path. |
|
169 AddressLiteral get_field_access_count_addr(JvmtiExport::get_field_access_count_addr()); |
|
170 __ load_contents(get_field_access_count_addr, O5); |
|
171 __ cmp_and_br_short(O5, 0, Assembler::notEqual, Assembler::pn, label1); |
|
172 } |
|
173 |
156 __ mov(O1, O5); |
174 __ mov(O1, O5); |
157 |
175 |
158 // Both O5 and G1 are clobbered by try_resolve_jobject_in_native. |
176 // Both O5 and G1 are clobbered by try_resolve_jobject_in_native. |
159 BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler(); |
177 BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler(); |
160 bs->try_resolve_jobject_in_native(masm, /* jni_env */ O0, /* obj */ O5, /* tmp */ G1, label1); |
178 bs->try_resolve_jobject_in_native(masm, /* jni_env */ O0, /* obj */ O5, /* tmp */ G1, label1); |
209 Address cnt_addr(O3, cnt_addrlit.low10()); |
227 Address cnt_addr(O3, cnt_addrlit.low10()); |
210 __ ld (cnt_addr, G4); |
228 __ ld (cnt_addr, G4); |
211 __ andcc (G4, 1, G0); |
229 __ andcc (G4, 1, G0); |
212 __ br (Assembler::notZero, false, Assembler::pn, label1); |
230 __ br (Assembler::notZero, false, Assembler::pn, label1); |
213 __ delayed()->srl (O2, 2, O4); |
231 __ delayed()->srl (O2, 2, O4); |
|
232 |
|
233 if (JvmtiExport::can_post_field_access()) { |
|
234 // Check to see if a field access watch has been set before we |
|
235 // take the fast path. |
|
236 AddressLiteral get_field_access_count_addr(JvmtiExport::get_field_access_count_addr()); |
|
237 __ load_contents(get_field_access_count_addr, O5); |
|
238 __ cmp_and_br_short(O5, 0, Assembler::notEqual, Assembler::pn, label1); |
|
239 } |
|
240 |
214 __ mov(O1, O5); |
241 __ mov(O1, O5); |
215 |
242 |
216 // Both O5 and G3 are clobbered by try_resolve_jobject_in_native. |
243 // Both O5 and G3 are clobbered by try_resolve_jobject_in_native. |
217 BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler(); |
244 BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler(); |
218 bs->try_resolve_jobject_in_native(masm, /* jni_env */ O0, /* obj */ O5, /* tmp */ G3, label1); |
245 bs->try_resolve_jobject_in_native(masm, /* jni_env */ O0, /* obj */ O5, /* tmp */ G3, label1); |