--- a/src/hotspot/cpu/x86/macroAssembler_x86.cpp Thu May 09 07:21:32 2019 -0400
+++ b/src/hotspot/cpu/x86/macroAssembler_x86.cpp Thu May 09 14:26:03 2019 +0200
@@ -34,6 +34,7 @@
#include "memory/resourceArea.hpp"
#include "memory/universe.hpp"
#include "oops/accessDecorators.hpp"
+#include "oops/compressedOops.inline.hpp"
#include "oops/klass.inline.hpp"
#include "prims/methodHandles.hpp"
#include "runtime/biasedLocking.hpp"
@@ -5278,7 +5279,7 @@
if (CheckCompressedOops) {
Label ok;
push(rscratch1); // cmpptr trashes rscratch1
- cmpptr(r12_heapbase, ExternalAddress((address)Universe::narrow_ptrs_base_addr()));
+ cmpptr(r12_heapbase, ExternalAddress((address)CompressedOops::ptrs_base_addr()));
jcc(Assembler::equal, ok);
STOP(msg);
bind(ok);
@@ -5293,9 +5294,9 @@
verify_heapbase("MacroAssembler::encode_heap_oop: heap base corrupted?");
#endif
verify_oop(r, "broken oop in encode_heap_oop");
- if (Universe::narrow_oop_base() == NULL) {
- if (Universe::narrow_oop_shift() != 0) {
- assert (LogMinObjAlignmentInBytes == Universe::narrow_oop_shift(), "decode alg wrong");
+ if (CompressedOops::base() == NULL) {
+ if (CompressedOops::shift() != 0) {
+ assert (LogMinObjAlignmentInBytes == CompressedOops::shift(), "decode alg wrong");
shrq(r, LogMinObjAlignmentInBytes);
}
return;
@@ -5318,11 +5319,11 @@
}
#endif
verify_oop(r, "broken oop in encode_heap_oop_not_null");
- if (Universe::narrow_oop_base() != NULL) {
+ if (CompressedOops::base() != NULL) {
subq(r, r12_heapbase);
}
- if (Universe::narrow_oop_shift() != 0) {
- assert (LogMinObjAlignmentInBytes == Universe::narrow_oop_shift(), "decode alg wrong");
+ if (CompressedOops::shift() != 0) {
+ assert (LogMinObjAlignmentInBytes == CompressedOops::shift(), "decode alg wrong");
shrq(r, LogMinObjAlignmentInBytes);
}
}
@@ -5342,11 +5343,11 @@
if (dst != src) {
movq(dst, src);
}
- if (Universe::narrow_oop_base() != NULL) {
+ if (CompressedOops::base() != NULL) {
subq(dst, r12_heapbase);
}
- if (Universe::narrow_oop_shift() != 0) {
- assert (LogMinObjAlignmentInBytes == Universe::narrow_oop_shift(), "decode alg wrong");
+ if (CompressedOops::shift() != 0) {
+ assert (LogMinObjAlignmentInBytes == CompressedOops::shift(), "decode alg wrong");
shrq(dst, LogMinObjAlignmentInBytes);
}
}
@@ -5355,9 +5356,9 @@
#ifdef ASSERT
verify_heapbase("MacroAssembler::decode_heap_oop: heap base corrupted?");
#endif
- if (Universe::narrow_oop_base() == NULL) {
- if (Universe::narrow_oop_shift() != 0) {
- assert (LogMinObjAlignmentInBytes == Universe::narrow_oop_shift(), "decode alg wrong");
+ if (CompressedOops::base() == NULL) {
+ if (CompressedOops::shift() != 0) {
+ assert (LogMinObjAlignmentInBytes == CompressedOops::shift(), "decode alg wrong");
shlq(r, LogMinObjAlignmentInBytes);
}
} else {
@@ -5377,14 +5378,14 @@
// Cannot assert, unverified entry point counts instructions (see .ad file)
// vtableStubs also counts instructions in pd_code_size_limit.
// Also do not verify_oop as this is called by verify_oop.
- if (Universe::narrow_oop_shift() != 0) {
- assert(LogMinObjAlignmentInBytes == Universe::narrow_oop_shift(), "decode alg wrong");
+ if (CompressedOops::shift() != 0) {
+ assert(LogMinObjAlignmentInBytes == CompressedOops::shift(), "decode alg wrong");
shlq(r, LogMinObjAlignmentInBytes);
- if (Universe::narrow_oop_base() != NULL) {
+ if (CompressedOops::base() != NULL) {
addq(r, r12_heapbase);
}
} else {
- assert (Universe::narrow_oop_base() == NULL, "sanity");
+ assert (CompressedOops::base() == NULL, "sanity");
}
}
@@ -5395,8 +5396,8 @@
// Cannot assert, unverified entry point counts instructions (see .ad file)
// vtableStubs also counts instructions in pd_code_size_limit.
// Also do not verify_oop as this is called by verify_oop.
- if (Universe::narrow_oop_shift() != 0) {
- assert(LogMinObjAlignmentInBytes == Universe::narrow_oop_shift(), "decode alg wrong");
+ if (CompressedOops::shift() != 0) {
+ assert(LogMinObjAlignmentInBytes == CompressedOops::shift(), "decode alg wrong");
if (LogMinObjAlignmentInBytes == Address::times_8) {
leaq(dst, Address(r12_heapbase, src, Address::times_8, 0));
} else {
@@ -5404,12 +5405,12 @@
movq(dst, src);
}
shlq(dst, LogMinObjAlignmentInBytes);
- if (Universe::narrow_oop_base() != NULL) {
+ if (CompressedOops::base() != NULL) {
addq(dst, r12_heapbase);
}
}
} else {
- assert (Universe::narrow_oop_base() == NULL, "sanity");
+ assert (CompressedOops::base() == NULL, "sanity");
if (dst != src) {
movq(dst, src);
}
@@ -5417,17 +5418,17 @@
}
void MacroAssembler::encode_klass_not_null(Register r) {
- if (Universe::narrow_klass_base() != NULL) {
+ if (CompressedKlassPointers::base() != NULL) {
// Use r12 as a scratch register in which to temporarily load the narrow_klass_base.
assert(r != r12_heapbase, "Encoding a klass in r12");
- mov64(r12_heapbase, (int64_t)Universe::narrow_klass_base());
+ mov64(r12_heapbase, (int64_t)CompressedKlassPointers::base());
subq(r, r12_heapbase);
}
- if (Universe::narrow_klass_shift() != 0) {
- assert (LogKlassAlignmentInBytes == Universe::narrow_klass_shift(), "decode alg wrong");
+ if (CompressedKlassPointers::shift() != 0) {
+ assert (LogKlassAlignmentInBytes == CompressedKlassPointers::shift(), "decode alg wrong");
shrq(r, LogKlassAlignmentInBytes);
}
- if (Universe::narrow_klass_base() != NULL) {
+ if (CompressedKlassPointers::base() != NULL) {
reinit_heapbase();
}
}
@@ -5436,15 +5437,15 @@
if (dst == src) {
encode_klass_not_null(src);
} else {
- if (Universe::narrow_klass_base() != NULL) {
- mov64(dst, (int64_t)Universe::narrow_klass_base());
+ if (CompressedKlassPointers::base() != NULL) {
+ mov64(dst, (int64_t)CompressedKlassPointers::base());
negq(dst);
addq(dst, src);
} else {
movptr(dst, src);
}
- if (Universe::narrow_klass_shift() != 0) {
- assert (LogKlassAlignmentInBytes == Universe::narrow_klass_shift(), "decode alg wrong");
+ if (CompressedKlassPointers::shift() != 0) {
+ assert (LogKlassAlignmentInBytes == CompressedKlassPointers::shift(), "decode alg wrong");
shrq(dst, LogKlassAlignmentInBytes);
}
}
@@ -5456,9 +5457,9 @@
// generate change, then this method needs to be updated.
int MacroAssembler::instr_size_for_decode_klass_not_null() {
assert (UseCompressedClassPointers, "only for compressed klass ptrs");
- if (Universe::narrow_klass_base() != NULL) {
+ if (CompressedKlassPointers::base() != NULL) {
// mov64 + addq + shlq? + mov64 (for reinit_heapbase()).
- return (Universe::narrow_klass_shift() == 0 ? 20 : 24);
+ return (CompressedKlassPointers::shift() == 0 ? 20 : 24);
} else {
// longest load decode klass function, mov64, leaq
return 16;
@@ -5474,13 +5475,13 @@
// Cannot assert, unverified entry point counts instructions (see .ad file)
// vtableStubs also counts instructions in pd_code_size_limit.
// Also do not verify_oop as this is called by verify_oop.
- if (Universe::narrow_klass_shift() != 0) {
- assert(LogKlassAlignmentInBytes == Universe::narrow_klass_shift(), "decode alg wrong");
+ if (CompressedKlassPointers::shift() != 0) {
+ assert(LogKlassAlignmentInBytes == CompressedKlassPointers::shift(), "decode alg wrong");
shlq(r, LogKlassAlignmentInBytes);
}
// Use r12 as a scratch register in which to temporarily load the narrow_klass_base.
- if (Universe::narrow_klass_base() != NULL) {
- mov64(r12_heapbase, (int64_t)Universe::narrow_klass_base());
+ if (CompressedKlassPointers::base() != NULL) {
+ mov64(r12_heapbase, (int64_t)CompressedKlassPointers::base());
addq(r, r12_heapbase);
reinit_heapbase();
}
@@ -5495,9 +5496,9 @@
// Cannot assert, unverified entry point counts instructions (see .ad file)
// vtableStubs also counts instructions in pd_code_size_limit.
// Also do not verify_oop as this is called by verify_oop.
- mov64(dst, (int64_t)Universe::narrow_klass_base());
- if (Universe::narrow_klass_shift() != 0) {
- assert(LogKlassAlignmentInBytes == Universe::narrow_klass_shift(), "decode alg wrong");
+ mov64(dst, (int64_t)CompressedKlassPointers::base());
+ if (CompressedKlassPointers::shift() != 0) {
+ assert(LogKlassAlignmentInBytes == CompressedKlassPointers::shift(), "decode alg wrong");
assert(LogKlassAlignmentInBytes == Address::times_8, "klass not aligned on 64bits?");
leaq(dst, Address(dst, src, Address::times_8, 0));
} else {
@@ -5529,7 +5530,7 @@
assert (oop_recorder() != NULL, "this assembler needs an OopRecorder");
int klass_index = oop_recorder()->find_index(k);
RelocationHolder rspec = metadata_Relocation::spec(klass_index);
- mov_narrow_oop(dst, Klass::encode_klass(k), rspec);
+ mov_narrow_oop(dst, CompressedKlassPointers::encode(k), rspec);
}
void MacroAssembler::set_narrow_klass(Address dst, Klass* k) {
@@ -5537,7 +5538,7 @@
assert (oop_recorder() != NULL, "this assembler needs an OopRecorder");
int klass_index = oop_recorder()->find_index(k);
RelocationHolder rspec = metadata_Relocation::spec(klass_index);
- mov_narrow_oop(dst, Klass::encode_klass(k), rspec);
+ mov_narrow_oop(dst, CompressedKlassPointers::encode(k), rspec);
}
void MacroAssembler::cmp_narrow_oop(Register dst, jobject obj) {
@@ -5563,7 +5564,7 @@
assert (oop_recorder() != NULL, "this assembler needs an OopRecorder");
int klass_index = oop_recorder()->find_index(k);
RelocationHolder rspec = metadata_Relocation::spec(klass_index);
- Assembler::cmp_narrow_oop(dst, Klass::encode_klass(k), rspec);
+ Assembler::cmp_narrow_oop(dst, CompressedKlassPointers::encode(k), rspec);
}
void MacroAssembler::cmp_narrow_klass(Address dst, Klass* k) {
@@ -5571,19 +5572,19 @@
assert (oop_recorder() != NULL, "this assembler needs an OopRecorder");
int klass_index = oop_recorder()->find_index(k);
RelocationHolder rspec = metadata_Relocation::spec(klass_index);
- Assembler::cmp_narrow_oop(dst, Klass::encode_klass(k), rspec);
+ Assembler::cmp_narrow_oop(dst, CompressedKlassPointers::encode(k), rspec);
}
void MacroAssembler::reinit_heapbase() {
if (UseCompressedOops || UseCompressedClassPointers) {
if (Universe::heap() != NULL) {
- if (Universe::narrow_oop_base() == NULL) {
+ if (CompressedOops::base() == NULL) {
MacroAssembler::xorptr(r12_heapbase, r12_heapbase);
} else {
- mov64(r12_heapbase, (int64_t)Universe::narrow_ptrs_base());
+ mov64(r12_heapbase, (int64_t)CompressedOops::ptrs_base());
}
} else {
- movptr(r12_heapbase, ExternalAddress((address)Universe::narrow_ptrs_base_addr()));
+ movptr(r12_heapbase, ExternalAddress((address)CompressedOops::ptrs_base_addr()));
}
}
}