< prev index next >
src/cpu/aarch64/vm/macroAssembler_aarch64.cpp
Print this page
rev 10703 : [backport] More AArch64 assembler cleanups
rev 10719 : [backport] Fix up superfluous changes against upstream
rev 10764 : [backport] Rename BrooksPointer to ShenandoahBrooksPointer
rev 10777 : [backport] Remove ShenandoahWriteBarrierRB flag
*** 1,6 ****
-
/*
/*
* Copyright (c) 2013, Red Hat Inc.
* Copyright (c) 1997, 2012, Oracle and/or its affiliates.
* All rights reserved.
--- 1,5 ----
*** 33,43 ****
#include "asm/assembler.inline.hpp"
#include "interpreter/interpreter.hpp"
#include "compiler/disassembler.hpp"
#include "gc_interface/collectedHeap.inline.hpp"
! #include "gc_implementation/shenandoah/brooksPointer.hpp"
#include "gc_implementation/shenandoah/shenandoahHeap.hpp"
#include "gc_implementation/shenandoah/shenandoahHeap.inline.hpp"
#include "gc_implementation/shenandoah/shenandoahHeapRegion.hpp"
#include "memory/resourceArea.hpp"
#include "runtime/biasedLocking.hpp"
--- 32,42 ----
#include "asm/assembler.inline.hpp"
#include "interpreter/interpreter.hpp"
#include "compiler/disassembler.hpp"
#include "gc_interface/collectedHeap.inline.hpp"
! #include "gc_implementation/shenandoah/shenandoahBrooksPointer.hpp"
#include "gc_implementation/shenandoah/shenandoahHeap.hpp"
#include "gc_implementation/shenandoah/shenandoahHeap.inline.hpp"
#include "gc_implementation/shenandoah/shenandoahHeapRegion.hpp"
#include "memory/resourceArea.hpp"
#include "runtime/biasedLocking.hpp"
*** 1432,1442 ****
void MacroAssembler::null_check(Register reg, int offset) {
if (needs_explicit_null_check(offset)) {
// provoke OS NULL exception if reg = NULL by
// accessing M[reg] w/o changing any registers
// NOTE: this is plenty to provoke a segv
-
ldr(zr, Address(reg));
} else {
// nothing to do, (later) access of M[reg + offset]
// will provoke OS NULL exception if reg = NULL
}
--- 1431,1440 ----
*** 2018,2040 ****
}
#endif
}
#endif
! void MacroAssembler::stop(const char* msg, Label *l) {
address ip = pc();
pusha();
! // We use movptr rather than mov here because we need code size not
! // to depend on the pointer value of msg otherwise C2 can observe
! // the same node with different sizes when emitted in a scratch
! // buffer and later when emitted for good.
! movptr(c_rarg0, (uintptr_t)msg);
! if (! l) {
! adr(c_rarg1, (address)ip);
! } else {
! adr(c_rarg1, *l);
! }
mov(c_rarg2, sp);
mov(c_rarg3, CAST_FROM_FN_PTR(address, MacroAssembler::debug64));
// call(c_rarg3);
blrt(c_rarg3, 3, 0, 1);
hlt(0);
--- 2016,2030 ----
}
#endif
}
#endif
! void MacroAssembler::stop(const char* msg) {
address ip = pc();
pusha();
! mov(c_rarg0, (address)msg);
! mov(c_rarg1, (address)ip);
mov(c_rarg2, sp);
mov(c_rarg3, CAST_FROM_FN_PTR(address, MacroAssembler::debug64));
// call(c_rarg3);
blrt(c_rarg3, 3, 0, 1);
hlt(0);
*** 2392,2402 ****
if (CountBytecodes || TraceBytecodes || StopInterpreterAt) {
ttyLocker ttyl;
BytecodeCounter::print();
}
#endif
-
if (os::message_box(msg, "Execution stopped, print registers?")) {
ttyLocker ttyl;
tty->print_cr(" pc = 0x%016lx", pc);
#ifndef PRODUCT
tty->cr();
--- 2382,2391 ----
*** 3820,3832 ****
mov(rscratch2, ShenandoahHeap::HAS_FORWARDED | ShenandoahHeap::EVACUATION);
tst(rscratch1, rscratch2);
br(Assembler::EQ, done);
// Heap is unstable, need to perform the read-barrier even if WB is inactive
! if (ShenandoahWriteBarrierRB) {
! ldr(dst, Address(dst, BrooksPointer::byte_offset()));
! }
// Check for evacuation-in-progress and jump to WB slow-path if needed
mov(rscratch2, ShenandoahHeap::EVACUATION);
tst(rscratch1, rscratch2);
br(Assembler::EQ, done);
--- 3809,3819 ----
mov(rscratch2, ShenandoahHeap::HAS_FORWARDED | ShenandoahHeap::EVACUATION);
tst(rscratch1, rscratch2);
br(Assembler::EQ, done);
// Heap is unstable, need to perform the read-barrier even if WB is inactive
! ldr(dst, Address(dst, ShenandoahBrooksPointer::byte_offset()));
// Check for evacuation-in-progress and jump to WB slow-path if needed
mov(rscratch2, ShenandoahHeap::EVACUATION);
tst(rscratch1, rscratch2);
br(Assembler::EQ, done);
< prev index next >