13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "gc/shared/barrierSetAssembler.hpp"
27
28 #define __ masm->
29
30 void BarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
31 Register dst, Address src, Register tmp1, Register tmp2, Register tmp3) {
32 bool on_heap = (decorators & IN_HEAP) != 0;
33 bool on_root = (decorators & IN_ROOT) != 0;
34 switch (type) {
35 case T_OBJECT:
36 case T_ARRAY: {
37 if (on_heap) {
38 #ifdef AARCH64
39 if (UseCompressedOops) {
40 __ ldr_w(dst, src);
41 __ decode_heap_oop(dst);
42 } else
43 #endif // AARCH64
44 {
45 __ ldr(dst, src);
46 }
47 } else {
48 assert(on_root, "why else?");
49 __ ldr(dst, src);
50 }
51 break;
52 }
53 default: Unimplemented();
54 }
55
56 }
57
58 void BarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
59 Address obj, Register val, Register tmp1, Register tmp2, Register tmp3, bool is_null) {
60 bool on_heap = (decorators & IN_HEAP) != 0;
61 bool on_root = (decorators & IN_ROOT) != 0;
62 switch (type) {
63 case T_OBJECT:
64 case T_ARRAY: {
65 if (on_heap) {
66 #ifdef AARCH64
67 if (UseCompressedOops) {
68 assert(!dst.uses(src), "not enough registers");
69 if (!is_null) {
70 __ encode_heap_oop(src);
71 }
72 __ str_w(val, obj);
73 } else
74 #endif // AARCH64
75 {
76 __ str(val, obj);
77 }
78 } else {
79 assert(on_root, "why else?");
80 __ str(val, obj);
81 }
|
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "gc/shared/barrierSetAssembler.hpp"
27
28 #define __ masm->
29
30 void BarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
31 Register dst, Address src, Register tmp1, Register tmp2, Register tmp3) {
32 bool on_heap = (decorators & IN_HEAP) != 0;
33 bool on_root = (decorators & IN_NATIVE) != 0;
34 switch (type) {
35 case T_OBJECT:
36 case T_ARRAY: {
37 if (on_heap) {
38 #ifdef AARCH64
39 if (UseCompressedOops) {
40 __ ldr_w(dst, src);
41 __ decode_heap_oop(dst);
42 } else
43 #endif // AARCH64
44 {
45 __ ldr(dst, src);
46 }
47 } else {
48 assert(on_root, "why else?");
49 __ ldr(dst, src);
50 }
51 break;
52 }
53 default: Unimplemented();
54 }
55
56 }
57
58 void BarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
59 Address obj, Register val, Register tmp1, Register tmp2, Register tmp3, bool is_null) {
60 bool on_heap = (decorators & IN_HEAP) != 0;
61 bool on_root = (decorators & IN_NATIVE) != 0;
62 switch (type) {
63 case T_OBJECT:
64 case T_ARRAY: {
65 if (on_heap) {
66 #ifdef AARCH64
67 if (UseCompressedOops) {
68 assert(!dst.uses(src), "not enough registers");
69 if (!is_null) {
70 __ encode_heap_oop(src);
71 }
72 __ str_w(val, obj);
73 } else
74 #endif // AARCH64
75 {
76 __ str(val, obj);
77 }
78 } else {
79 assert(on_root, "why else?");
80 __ str(val, obj);
81 }
|