< prev index next >

src/hotspot/cpu/ppc/gc/shenandoah/shenandoahBarrierSetAssembler_ppc.cpp

Print this page
*** 46,10 ***
--- 46,13 ---
  #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,

*** 1087,5 ***
--- 1090,59 ---
  }
  
  #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 >