< prev index next > src/hotspot/cpu/ppc/gc/shenandoah/shenandoahBarrierSetAssembler_ppc.cpp
Print this page
#ifdef COMPILER1
#include "c1/c1_LIRAssembler.hpp"
#include "c1/c1_MacroAssembler.hpp"
#include "gc/shenandoah/c1/shenandoahBarrierSetC1.hpp"
#endif
+ #ifdef COMPILER2
+ #include "gc/shenandoah/c2/shenandoahBarrierSetC2.hpp"
+ #endif
#define __ masm->
void ShenandoahBarrierSetAssembler::satb_barrier(MacroAssembler *masm,
Register base, RegisterOrConstant ind_or_offs,
}
#undef __
#endif // COMPILER1
+
+ #ifdef COMPILER2
+
+ #undef __
+ #define __ masm->
+
+ void ShenandoahBarrierSetAssembler::load_c2(const MachNode* node, MacroAssembler* masm,
+ Register dst, Register addr, int disp, bool narrow, bool acquire) {
+ if (narrow) {
+ __ lwz(dst, disp, addr);
+ } else {
+ __ ld(dst, disp, addr);
+ }
+ if (acquire) {
+ __ twi_0(dst);
+ __ isync();
+ }
+ }
+
+ void ShenandoahBarrierSetAssembler::store_c2(const MachNode* node, MacroAssembler* masm,
+ Register dst, int disp, bool dst_narrow,
+ Register src, bool src_narrow,
+ Register tmp) {
+
+ // Need to encode into tmp, because we cannot clobber src.
+ // TODO: Maybe there is a matcher way to test that src is unused after this?
+ if (dst_narrow && !src_narrow) {
+ __ mr(tmp, src);
+ if (ShenandoahBarrierStubC2::maybe_null(node)) {
+ __ encode_heap_oop(tmp, tmp);
+ } else {
+ __ encode_heap_oop_not_null(tmp);
+ }
+ src = tmp;
+ }
+ if (dst_narrow) {
+ __ stw(src, disp, dst);
+ } else {
+ __ std(src, disp, dst);
+ }
+ }
+
+ void ShenandoahBarrierStubC2::emit_code(MacroAssembler& masm) {
+ Assembler::InlineSkippedInstructionsCounter skip_counter(&masm);
+
+ assert(_needs_keep_alive_barrier || _needs_load_ref_barrier, "Why are you here?");
+ Unimplemented();
+ }
+
+ void ShenandoahBarrierStubC2::post_init() {
+ // Do nothing.
+ }
+
+ #endif // COMPILER2
< prev index next >