1 /* |
1 /* |
2 * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2004, 2010, 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. |
66 Address cnt_addr(O3, cnt_addrlit.low10()); |
66 Address cnt_addr(O3, cnt_addrlit.low10()); |
67 __ ld (cnt_addr, G4); |
67 __ ld (cnt_addr, G4); |
68 __ andcc (G4, 1, G0); |
68 __ andcc (G4, 1, G0); |
69 __ br (Assembler::notZero, false, Assembler::pn, label1); |
69 __ br (Assembler::notZero, false, Assembler::pn, label1); |
70 __ delayed()->srl (O2, 2, O4); |
70 __ delayed()->srl (O2, 2, O4); |
71 __ andn (O1, JNIHandles::weak_tag_mask, O1); |
|
72 __ ld_ptr (O1, 0, O5); |
71 __ ld_ptr (O1, 0, O5); |
73 |
72 |
74 assert(count < LIST_CAPACITY, "LIST_CAPACITY too small"); |
73 assert(count < LIST_CAPACITY, "LIST_CAPACITY too small"); |
75 speculative_load_pclist[count] = __ pc(); |
74 speculative_load_pclist[count] = __ pc(); |
76 switch (type) { |
75 switch (type) { |
146 Address cnt_addr(G3, cnt_addrlit.low10()); |
145 Address cnt_addr(G3, cnt_addrlit.low10()); |
147 __ ld (cnt_addr, G4); |
146 __ ld (cnt_addr, G4); |
148 __ andcc (G4, 1, G0); |
147 __ andcc (G4, 1, G0); |
149 __ br (Assembler::notZero, false, Assembler::pn, label1); |
148 __ br (Assembler::notZero, false, Assembler::pn, label1); |
150 __ delayed()->srl (O2, 2, O4); |
149 __ delayed()->srl (O2, 2, O4); |
151 __ andn (O1, JNIHandles::weak_tag_mask, O1); |
|
152 __ ld_ptr (O1, 0, O5); |
150 __ ld_ptr (O1, 0, O5); |
153 __ add (O5, O4, O5); |
151 __ add (O5, O4, O5); |
154 |
152 |
155 #ifndef _LP64 |
153 #ifndef _LP64 |
156 assert(count < LIST_CAPACITY-1, "LIST_CAPACITY too small"); |
154 assert(count < LIST_CAPACITY-1, "LIST_CAPACITY too small"); |
219 Address cnt_addr(O3, cnt_addrlit.low10()); |
217 Address cnt_addr(O3, cnt_addrlit.low10()); |
220 __ ld (cnt_addr, G4); |
218 __ ld (cnt_addr, G4); |
221 __ andcc (G4, 1, G0); |
219 __ andcc (G4, 1, G0); |
222 __ br (Assembler::notZero, false, Assembler::pn, label1); |
220 __ br (Assembler::notZero, false, Assembler::pn, label1); |
223 __ delayed()->srl (O2, 2, O4); |
221 __ delayed()->srl (O2, 2, O4); |
224 __ andn (O1, JNIHandles::weak_tag_mask, O1); |
|
225 __ ld_ptr (O1, 0, O5); |
222 __ ld_ptr (O1, 0, O5); |
226 |
223 |
227 assert(count < LIST_CAPACITY, "LIST_CAPACITY too small"); |
224 assert(count < LIST_CAPACITY, "LIST_CAPACITY too small"); |
228 speculative_load_pclist[count] = __ pc(); |
225 speculative_load_pclist[count] = __ pc(); |
229 switch (type) { |
226 switch (type) { |