< prev index next >

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

Print this page

  31 #include "gc/shenandoah/mode/shenandoahMode.hpp"
  32 #include "gc/shenandoah/shenandoahBarrierSet.hpp"
  33 #include "gc/shenandoah/shenandoahBarrierSetAssembler.hpp"
  34 #include "gc/shenandoah/shenandoahForwarding.hpp"
  35 #include "gc/shenandoah/shenandoahHeap.hpp"
  36 #include "gc/shenandoah/shenandoahHeap.inline.hpp"
  37 #include "gc/shenandoah/shenandoahHeapRegion.hpp"
  38 #include "gc/shenandoah/shenandoahRuntime.hpp"
  39 #include "gc/shenandoah/shenandoahThreadLocalData.hpp"
  40 #include "interpreter/interpreter.hpp"
  41 #include "macroAssembler_ppc.hpp"
  42 #include "runtime/javaThread.hpp"
  43 #include "runtime/sharedRuntime.hpp"
  44 #include "utilities/globalDefinitions.hpp"
  45 #include "vm_version_ppc.hpp"
  46 #ifdef COMPILER1
  47 #include "c1/c1_LIRAssembler.hpp"
  48 #include "c1/c1_MacroAssembler.hpp"
  49 #include "gc/shenandoah/c1/shenandoahBarrierSetC1.hpp"
  50 #endif



  51 
  52 #define __ masm->
  53 
  54 void ShenandoahBarrierSetAssembler::satb_barrier(MacroAssembler *masm,
  55                                                  Register base, RegisterOrConstant ind_or_offs,
  56                                                  Register tmp1, Register tmp2, Register tmp3,
  57                                                  MacroAssembler::PreservationLevel preservation_level) {
  58   if (ShenandoahSATBBarrier) {
  59     __ block_comment("satb_barrier (shenandoahgc) {");
  60     satb_barrier_impl(masm, 0, base, ind_or_offs, tmp1, tmp2, tmp3, preservation_level);
  61     __ block_comment("} satb_barrier (shenandoahgc)");
  62   }
  63 }
  64 
  65 void ShenandoahBarrierSetAssembler::load_reference_barrier(MacroAssembler *masm, DecoratorSet decorators,
  66                                                            Register base, RegisterOrConstant ind_or_offs,
  67                                                            Register dst,
  68                                                            Register tmp1, Register tmp2,
  69                                                            MacroAssembler::PreservationLevel preservation_level) {
  70   if (ShenandoahLoadRefBarrier) {

1072   assert(jrt_address != nullptr, "load reference barrier runtime routine cannot be found");
1073 
1074   __ save_LR(R11_tmp);
1075   __ push_frame_reg_args(nbytes_save, R11_tmp);
1076 
1077   // Invoke runtime.  Arguments are already stored in the corresponding registers.
1078   __ call_VM_leaf(jrt_address, R3_obj, R4_load_addr);
1079 
1080   // Restore to-be-preserved registers.
1081   __ pop_frame();
1082   __ restore_LR(R11_tmp);
1083   __ restore_volatile_gprs(R1_SP, -nbytes_save, true, false); // Skip 'R3_RET' register.
1084 
1085   __ blr();
1086   __ block_comment("} generate_c1_load_reference_barrier_runtime_stub (shenandoahgc)");
1087 }
1088 
1089 #undef __
1090 
1091 #endif // COMPILER1






















  31 #include "gc/shenandoah/mode/shenandoahMode.hpp"
  32 #include "gc/shenandoah/shenandoahBarrierSet.hpp"
  33 #include "gc/shenandoah/shenandoahBarrierSetAssembler.hpp"
  34 #include "gc/shenandoah/shenandoahForwarding.hpp"
  35 #include "gc/shenandoah/shenandoahHeap.hpp"
  36 #include "gc/shenandoah/shenandoahHeap.inline.hpp"
  37 #include "gc/shenandoah/shenandoahHeapRegion.hpp"
  38 #include "gc/shenandoah/shenandoahRuntime.hpp"
  39 #include "gc/shenandoah/shenandoahThreadLocalData.hpp"
  40 #include "interpreter/interpreter.hpp"
  41 #include "macroAssembler_ppc.hpp"
  42 #include "runtime/javaThread.hpp"
  43 #include "runtime/sharedRuntime.hpp"
  44 #include "utilities/globalDefinitions.hpp"
  45 #include "vm_version_ppc.hpp"
  46 #ifdef COMPILER1
  47 #include "c1/c1_LIRAssembler.hpp"
  48 #include "c1/c1_MacroAssembler.hpp"
  49 #include "gc/shenandoah/c1/shenandoahBarrierSetC1.hpp"
  50 #endif
  51 #ifdef COMPILER2
  52 #include "gc/shenandoah/c2/shenandoahBarrierSetC2.hpp"
  53 #endif
  54 
  55 #define __ masm->
  56 
  57 void ShenandoahBarrierSetAssembler::satb_barrier(MacroAssembler *masm,
  58                                                  Register base, RegisterOrConstant ind_or_offs,
  59                                                  Register tmp1, Register tmp2, Register tmp3,
  60                                                  MacroAssembler::PreservationLevel preservation_level) {
  61   if (ShenandoahSATBBarrier) {
  62     __ block_comment("satb_barrier (shenandoahgc) {");
  63     satb_barrier_impl(masm, 0, base, ind_or_offs, tmp1, tmp2, tmp3, preservation_level);
  64     __ block_comment("} satb_barrier (shenandoahgc)");
  65   }
  66 }
  67 
  68 void ShenandoahBarrierSetAssembler::load_reference_barrier(MacroAssembler *masm, DecoratorSet decorators,
  69                                                            Register base, RegisterOrConstant ind_or_offs,
  70                                                            Register dst,
  71                                                            Register tmp1, Register tmp2,
  72                                                            MacroAssembler::PreservationLevel preservation_level) {
  73   if (ShenandoahLoadRefBarrier) {

1075   assert(jrt_address != nullptr, "load reference barrier runtime routine cannot be found");
1076 
1077   __ save_LR(R11_tmp);
1078   __ push_frame_reg_args(nbytes_save, R11_tmp);
1079 
1080   // Invoke runtime.  Arguments are already stored in the corresponding registers.
1081   __ call_VM_leaf(jrt_address, R3_obj, R4_load_addr);
1082 
1083   // Restore to-be-preserved registers.
1084   __ pop_frame();
1085   __ restore_LR(R11_tmp);
1086   __ restore_volatile_gprs(R1_SP, -nbytes_save, true, false); // Skip 'R3_RET' register.
1087 
1088   __ blr();
1089   __ block_comment("} generate_c1_load_reference_barrier_runtime_stub (shenandoahgc)");
1090 }
1091 
1092 #undef __
1093 
1094 #endif // COMPILER1
1095 
1096 #ifdef COMPILER2
1097 
1098 #undef __
1099 #define __ masm.
1100 
1101 bool ShenandoahBarrierStubC2::has_live_vector_registers() {
1102   // TODO: Implement; currently assumes vector registers.
1103   return true;
1104 }
1105 
1106 void ShenandoahBarrierStubC2::emit_code(MacroAssembler& masm) {
1107   assert(_needs_keep_alive_barrier || _needs_load_ref_barrier, "Why are you here?");
1108   Unimplemented();
1109 }
1110 
1111 void ShenandoahBarrierStubC2::post_init(int offset) {
1112   // Do nothing.
1113 }
1114 
1115 #endif // COMPILER2
< prev index next >