8255397: x86: coalesce reference and int entry points into vtos bytecodes

Reviewed-by: shade, coleenp
This commit is contained in:
Claes Redestad 2020-10-28 14:13:31 +00:00
parent 3bd5b80761
commit bbf0a31e9e
3 changed files with 15 additions and 5 deletions

@ -605,6 +605,10 @@ void InterpreterMacroAssembler::push_i(Register r) {
push(r);
}
void InterpreterMacroAssembler::push_i_or_ptr(Register r) {
push(r);
}
void InterpreterMacroAssembler::push_f(XMMRegister r) {
subptr(rsp, wordSize);
movflt(Address(rsp, 0), r);

@ -139,9 +139,18 @@ class InterpreterMacroAssembler: public MacroAssembler {
// Expression stack
void pop_ptr(Register r = rax);
void pop_i(Register r = rax);
// On x86, pushing a ptr or an int is semantically identical, but we
// maintain a distinction for clarity and for making it easier to change
// semantics in the future
void push_ptr(Register r = rax);
void push_i(Register r = rax);
// push_i_or_ptr is provided for when explicitly allowing either a ptr or
// an int might have some advantage, while still documenting the fact that a
// ptr might be pushed to the stack.
void push_i_or_ptr(Register r = rax);
void push_f(XMMRegister r);
void pop_f(XMMRegister r);
void pop_d(XMMRegister r);

@ -1761,9 +1761,6 @@ void TemplateInterpreterGenerator::set_vtos_entry_points(Template* t,
address& vep) {
assert(t->is_valid() && t->tos_in() == vtos, "illegal template");
Label L;
aep = __ pc(); // atos entry point
__ push_ptr();
__ jmp(L);
#ifndef _LP64
fep = __ pc(); // ftos entry point
__ push(ftos);
@ -1782,8 +1779,8 @@ void TemplateInterpreterGenerator::set_vtos_entry_points(Template* t,
lep = __ pc(); // ltos entry point
__ push_l();
__ jmp(L);
bep = cep = sep = iep = __ pc(); // [bcsi]tos entry point
__ push_i();
aep = bep = cep = sep = iep = __ pc(); // [abcsi]tos entry point
__ push_i_or_ptr();
vep = __ pc(); // vtos entry point
__ bind(L);
generate_and_dispatch(t);