30 #include "asm/macroAssembler.hpp" |
30 #include "asm/macroAssembler.hpp" |
31 #include "asm/codeBuffer.hpp" |
31 #include "asm/codeBuffer.hpp" |
32 #include "code/codeCache.hpp" |
32 #include "code/codeCache.hpp" |
33 #include "gc/shared/barrierSet.hpp" |
33 #include "gc/shared/barrierSet.hpp" |
34 #include "gc/shared/barrierSetAssembler.hpp" |
34 #include "gc/shared/barrierSetAssembler.hpp" |
|
35 #include "oops/accessDecorators.hpp" |
35 #include "runtime/safepointMechanism.hpp" |
36 #include "runtime/safepointMechanism.hpp" |
36 |
37 |
37 inline bool MacroAssembler::is_ld_largeoffset(address a) { |
38 inline bool MacroAssembler::is_ld_largeoffset(address a) { |
38 const int inst1 = *(int *)a; |
39 const int inst1 = *(int *)a; |
39 const int inst2 = *(int *)(a+4); |
40 const int inst2 = *(int *)(a+4); |
330 Register tmp1, Register tmp2, Register tmp3, bool needs_frame) { |
331 Register tmp1, Register tmp2, Register tmp3, bool needs_frame) { |
331 assert((decorators & ~(AS_RAW | IN_HEAP | IN_HEAP_ARRAY | IN_ROOT | OOP_NOT_NULL | |
332 assert((decorators & ~(AS_RAW | IN_HEAP | IN_HEAP_ARRAY | IN_ROOT | OOP_NOT_NULL | |
332 ON_UNKNOWN_OOP_REF)) == 0, "unsupported decorator"); |
333 ON_UNKNOWN_OOP_REF)) == 0, "unsupported decorator"); |
333 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); |
334 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); |
334 bool as_raw = (decorators & AS_RAW) != 0; |
335 bool as_raw = (decorators & AS_RAW) != 0; |
|
336 decorators = AccessInternal::decorator_fixup(decorators); |
335 if (as_raw) { |
337 if (as_raw) { |
336 bs->BarrierSetAssembler::store_at(this, decorators, type, |
338 bs->BarrierSetAssembler::store_at(this, decorators, type, |
337 base, ind_or_offs, val, |
339 base, ind_or_offs, val, |
338 tmp1, tmp2, tmp3, needs_frame); |
340 tmp1, tmp2, tmp3, needs_frame); |
339 } else { |
341 } else { |
347 Register base, RegisterOrConstant ind_or_offs, Register dst, |
349 Register base, RegisterOrConstant ind_or_offs, Register dst, |
348 Register tmp1, Register tmp2, bool needs_frame, Label *L_handle_null) { |
350 Register tmp1, Register tmp2, bool needs_frame, Label *L_handle_null) { |
349 assert((decorators & ~(AS_RAW | IN_HEAP | IN_HEAP_ARRAY | IN_ROOT | OOP_NOT_NULL | |
351 assert((decorators & ~(AS_RAW | IN_HEAP | IN_HEAP_ARRAY | IN_ROOT | OOP_NOT_NULL | |
350 ON_PHANTOM_OOP_REF | ON_WEAK_OOP_REF)) == 0, "unsupported decorator"); |
352 ON_PHANTOM_OOP_REF | ON_WEAK_OOP_REF)) == 0, "unsupported decorator"); |
351 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); |
353 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); |
|
354 decorators = AccessInternal::decorator_fixup(decorators); |
352 bool as_raw = (decorators & AS_RAW) != 0; |
355 bool as_raw = (decorators & AS_RAW) != 0; |
353 if (as_raw) { |
356 if (as_raw) { |
354 bs->BarrierSetAssembler::load_at(this, decorators, type, |
357 bs->BarrierSetAssembler::load_at(this, decorators, type, |
355 base, ind_or_offs, dst, |
358 base, ind_or_offs, dst, |
356 tmp1, tmp2, needs_frame, L_handle_null); |
359 tmp1, tmp2, needs_frame, L_handle_null); |