mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 11:34:38 +02:00
6961690: load oops from constant table on SPARC
Oops should be loaded from the constant table of an nmethod instead of materializing them with a long code sequence. Reviewed-by: never, kvn
This commit is contained in:
parent
ab725dba1d
commit
ffaadcecea
31 changed files with 1795 additions and 830 deletions
|
@ -114,32 +114,4 @@ inline void Label::bind_loc(int pos, int sect) {
|
|||
bind_loc(CodeBuffer::locator(pos, sect));
|
||||
}
|
||||
|
||||
address AbstractAssembler::address_constant(Label& L) {
|
||||
address c = NULL;
|
||||
address ptr = start_a_const(sizeof(c), sizeof(c));
|
||||
if (ptr != NULL) {
|
||||
relocate(Relocation::spec_simple(relocInfo::internal_word_type));
|
||||
*(address*)ptr = c = code_section()->target(L, ptr);
|
||||
_code_pos = ptr + sizeof(c);
|
||||
end_a_const();
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
|
||||
address AbstractAssembler::address_table_constant(GrowableArray<Label*> labels) {
|
||||
int addressSize = sizeof(address);
|
||||
int sizeLabel = addressSize * labels.length();
|
||||
address ptr = start_a_const(sizeLabel, addressSize);
|
||||
|
||||
if (ptr != NULL) {
|
||||
address *labelLoc = (address*)ptr;
|
||||
for (int i=0; i < labels.length(); i++) {
|
||||
emit_address(code_section()->target(*labels.at(i), (address)&labelLoc[i]));
|
||||
code_section()->relocate((address)&labelLoc[i], relocInfo::internal_word_type);
|
||||
}
|
||||
end_a_const();
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
|
||||
#endif // SHARE_VM_ASM_ASSEMBLER_INLINE_HPP
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue