< prev index next >
src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp
Print this page
rev 50922 : Don't generate arraycopy pre-barrier calls for traversal GC
*** 25,34 ****
--- 25,35 ----
#include "gc/shenandoah/brooksPointer.hpp"
#include "gc/shenandoah/shenandoahBarrierSetAssembler.hpp"
#include "gc/shenandoah/shenandoahConnectionMatrix.hpp"
#include "gc/shenandoah/shenandoahHeap.hpp"
#include "gc/shenandoah/shenandoahHeapRegion.hpp"
+ #include "gc/shenandoah/shenandoahHeuristics.hpp"
#include "gc/shenandoah/shenandoahRuntime.hpp"
#include "gc/shenandoah/shenandoahThreadLocalData.hpp"
#include "interpreter/interpreter.hpp"
#include "interpreter/interp_masm.hpp"
#include "runtime/sharedRuntime.hpp"
*** 44,53 ****
--- 45,59 ----
address ShenandoahBarrierSetAssembler::_shenandoah_wb = NULL;
address ShenandoahBarrierSetAssembler::_shenandoah_wb_C = NULL;
void ShenandoahBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop,
Register addr, Register count, RegSet saved_regs) {
+ if (ShenandoahHeap::heap()->heuristics()->can_do_traversal_gc()) {
+ // Don't need arraycopy-pre-barrier for traversal. No need to pointlessly
+ // call out to runtime.
+ return;
+ }
if (is_oop) {
bool dest_uninitialized = (decorators & AS_DEST_NOT_INITIALIZED) != 0;
if (!dest_uninitialized) {
__ push(saved_regs, sp);
if (count == c_rarg0) {
< prev index next >