Skip to content

Commit

Permalink
AArch64 version
Browse files Browse the repository at this point in the history
  • Loading branch information
shipilev committed Oct 18, 2024
1 parent c51a086 commit b7375fa
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 18 deletions.
10 changes: 6 additions & 4 deletions src/hotspot/cpu/aarch64/aarch64.ad
Original file line number Diff line number Diff line change
Expand Up @@ -16020,16 +16020,18 @@ instruct cmpFastUnlockLightweight(rFlagsReg cr, iRegP object, iRegP box, iRegPNo
// TODO
// provide a near and far version of this code

instruct safePoint(rFlagsReg cr, iRegP poll)
instruct safePoint(rFlagsReg cr)
%{
match(SafePoint poll);
match(SafePoint);
effect(KILL cr);

format %{
"ldrw zr, [$poll]\t# Safepoint: poll for GC"
"ldr rscratch1, [rthread, #polling_page_offset]\n\t"
"ldrw zr, [rscratch1]\t# Safepoint: poll for GC"
%}
ins_encode %{
__ read_polling_page(as_Register($poll$$reg), relocInfo::poll_type);
__ get_polling_page(rscratch1, relocInfo::poll_type);
__ read_polling_page(rscratch1, relocInfo::poll_type);
%}
ins_pipe(pipe_serial); // ins_pipe(iload_reg_mem);
%}
Expand Down
2 changes: 1 addition & 1 deletion src/hotspot/share/opto/callnode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1450,7 +1450,7 @@ Node* SafePointNode::peek_operand(uint off) const {

// Do we Match on this edge index or not? Match no edges
uint SafePointNode::match_edge(uint idx) const {
return (TypeFunc::Parms == idx);
return 0;
}

void SafePointNode::disconnect_from_root(PhaseIterGVN *igvn) {
Expand Down
5 changes: 0 additions & 5 deletions src/hotspot/share/opto/machnode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -694,11 +694,6 @@ const RegMask &MachSafePointNode::in_RegMask( uint idx ) const {
// _in_rms array of RegMasks.
if( idx < TypeFunc::Parms ) return _in_rms[idx];

if (idx == TypeFunc::Parms &&
ideal_Opcode() == Op_SafePoint) {
return MachNode::in_RegMask(idx);
}

// Values outside the domain represent debug info
assert(in(idx)->ideal_reg() != Op_RegFlags, "flags register is not spillable");
return *Compile::current()->matcher()->idealreg2spillmask[in(idx)->ideal_reg()];
Expand Down
9 changes: 1 addition & 8 deletions src/hotspot/share/opto/parse1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2235,7 +2235,7 @@ void Parse::return_current(Node* value) {

//------------------------------add_safepoint----------------------------------
void Parse::add_safepoint() {
uint parms = TypeFunc::Parms+1;
uint parms = TypeFunc::Parms;

// Clear out dead values from the debug info.
kill_dead_locals();
Expand Down Expand Up @@ -2268,13 +2268,6 @@ void Parse::add_safepoint() {
sfpnt->init_req(TypeFunc::ReturnAdr, top() );
sfpnt->init_req(TypeFunc::FramePtr , top() );

// Create a node for the polling address
Node *polladr;
Node *thread = _gvn.transform(new ThreadLocalNode());
Node *polling_page_load_addr = _gvn.transform(basic_plus_adr(top(), thread, in_bytes(JavaThread::polling_page_offset())));
polladr = make_load(control(), polling_page_load_addr, TypeRawPtr::BOTTOM, T_ADDRESS, Compile::AliasIdxRaw, MemNode::unordered);
sfpnt->init_req(TypeFunc::Parms+0, _gvn.transform(polladr));

// Fix up the JVM State edges
add_safepoint_edges(sfpnt);
Node *transformed_sfpnt = _gvn.transform(sfpnt);
Expand Down

0 comments on commit b7375fa

Please sign in to comment.