8240302: x64: Assembler::reachable redundantly call Relocation::type() more than once
Reviewed-by: kvn, iklam, thartmann
This commit is contained in:
parent
2a79146791
commit
3fdf26d8dc
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -480,7 +480,7 @@ void Assembler::emit_operand(Register reg, Register base, Register index,
|
||||
Address::ScaleFactor scale, int disp,
|
||||
RelocationHolder const& rspec,
|
||||
int rip_relative_correction) {
|
||||
relocInfo::relocType rtype = (relocInfo::relocType) rspec.type();
|
||||
relocInfo::relocType rtype = rspec.type();
|
||||
|
||||
// Encode the registers as needed in the fields they are used in
|
||||
|
||||
@ -8170,29 +8170,31 @@ void Assembler::set_byte_if_not_zero(Register dst) {
|
||||
|
||||
bool Assembler::reachable(AddressLiteral adr) {
|
||||
int64_t disp;
|
||||
relocInfo::relocType relocType = adr.reloc();
|
||||
|
||||
// None will force a 64bit literal to the code stream. Likely a placeholder
|
||||
// for something that will be patched later and we need to certain it will
|
||||
// always be reachable.
|
||||
if (adr.reloc() == relocInfo::none) {
|
||||
if (relocType == relocInfo::none) {
|
||||
return false;
|
||||
}
|
||||
if (adr.reloc() == relocInfo::internal_word_type) {
|
||||
if (relocType == relocInfo::internal_word_type) {
|
||||
// This should be rip relative and easily reachable.
|
||||
return true;
|
||||
}
|
||||
if (adr.reloc() == relocInfo::virtual_call_type ||
|
||||
adr.reloc() == relocInfo::opt_virtual_call_type ||
|
||||
adr.reloc() == relocInfo::static_call_type ||
|
||||
adr.reloc() == relocInfo::static_stub_type ) {
|
||||
if (relocType == relocInfo::virtual_call_type ||
|
||||
relocType == relocInfo::opt_virtual_call_type ||
|
||||
relocType == relocInfo::static_call_type ||
|
||||
relocType == relocInfo::static_stub_type ) {
|
||||
// This should be rip relative within the code cache and easily
|
||||
// reachable until we get huge code caches. (At which point
|
||||
// ic code is going to have issues).
|
||||
return true;
|
||||
}
|
||||
if (adr.reloc() != relocInfo::external_word_type &&
|
||||
adr.reloc() != relocInfo::poll_return_type && // these are really external_word but need special
|
||||
adr.reloc() != relocInfo::poll_type && // relocs to identify them
|
||||
adr.reloc() != relocInfo::runtime_call_type ) {
|
||||
if (relocType != relocInfo::external_word_type &&
|
||||
relocType != relocInfo::poll_return_type && // these are really external_word but need special
|
||||
relocType != relocInfo::poll_type && // relocs to identify them
|
||||
relocType != relocInfo::runtime_call_type ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user