mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 11:04:34 +02:00
8087333: Optionally Pre-Generate the HotSpot Template Interpreter
Optional support for pregenerated template interpreter Reviewed-by: coleenp, dholmes, kvn
This commit is contained in:
parent
a7f0956201
commit
5aec2dc9fc
39 changed files with 716 additions and 257 deletions
|
@ -33,6 +33,7 @@
|
|||
#include "classfile/systemDictionary.hpp"
|
||||
#include "classfile/vmSymbols.hpp"
|
||||
#include "code/codeBlob.hpp"
|
||||
#include "code/codeCacheExtensions.hpp"
|
||||
#include "code/compiledIC.hpp"
|
||||
#include "code/pcDesc.hpp"
|
||||
#include "code/scopeDesc.hpp"
|
||||
|
@ -183,20 +184,25 @@ void Runtime1::generate_blob_for(BufferBlob* buffer_blob, StubID id) {
|
|||
// create code buffer for code storage
|
||||
CodeBuffer code(buffer_blob);
|
||||
|
||||
Compilation::setup_code_buffer(&code, 0);
|
||||
|
||||
// create assembler for code generation
|
||||
StubAssembler* sasm = new StubAssembler(&code, name_for(id), id);
|
||||
// generate code for runtime stub
|
||||
OopMapSet* oop_maps;
|
||||
oop_maps = generate_code_for(id, sasm);
|
||||
assert(oop_maps == NULL || sasm->frame_size() != no_frame_size,
|
||||
"if stub has an oop map it must have a valid frame size");
|
||||
int frame_size;
|
||||
bool must_gc_arguments;
|
||||
|
||||
if (!CodeCacheExtensions::skip_compiler_support()) {
|
||||
// bypass useless code generation
|
||||
Compilation::setup_code_buffer(&code, 0);
|
||||
|
||||
// create assembler for code generation
|
||||
StubAssembler* sasm = new StubAssembler(&code, name_for(id), id);
|
||||
// generate code for runtime stub
|
||||
oop_maps = generate_code_for(id, sasm);
|
||||
assert(oop_maps == NULL || sasm->frame_size() != no_frame_size,
|
||||
"if stub has an oop map it must have a valid frame size");
|
||||
|
||||
#ifdef ASSERT
|
||||
// Make sure that stubs that need oopmaps have them
|
||||
switch (id) {
|
||||
// These stubs don't need to have an oopmap
|
||||
// Make sure that stubs that need oopmaps have them
|
||||
switch (id) {
|
||||
// These stubs don't need to have an oopmap
|
||||
case dtrace_object_alloc_id:
|
||||
case g1_pre_barrier_slow_id:
|
||||
case g1_post_barrier_slow_id:
|
||||
|
@ -209,23 +215,32 @@ void Runtime1::generate_blob_for(BufferBlob* buffer_blob, StubID id) {
|
|||
#endif
|
||||
break;
|
||||
|
||||
// All other stubs should have oopmaps
|
||||
// All other stubs should have oopmaps
|
||||
default:
|
||||
assert(oop_maps != NULL, "must have an oopmap");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// align so printing shows nop's instead of random code at the end (SimpleStubs are aligned)
|
||||
sasm->align(BytesPerWord);
|
||||
// make sure all code is in code buffer
|
||||
sasm->flush();
|
||||
// align so printing shows nop's instead of random code at the end (SimpleStubs are aligned)
|
||||
sasm->align(BytesPerWord);
|
||||
// make sure all code is in code buffer
|
||||
sasm->flush();
|
||||
|
||||
frame_size = sasm->frame_size();
|
||||
must_gc_arguments = sasm->must_gc_arguments();
|
||||
} else {
|
||||
/* ignored values */
|
||||
oop_maps = NULL;
|
||||
frame_size = 0;
|
||||
must_gc_arguments = false;
|
||||
}
|
||||
// create blob - distinguish a few special cases
|
||||
CodeBlob* blob = RuntimeStub::new_runtime_stub(name_for(id),
|
||||
&code,
|
||||
CodeOffsets::frame_never_safe,
|
||||
sasm->frame_size(),
|
||||
frame_size,
|
||||
oop_maps,
|
||||
sasm->must_gc_arguments());
|
||||
must_gc_arguments);
|
||||
// install blob
|
||||
assert(blob != NULL, "blob must exist");
|
||||
_blobs[id] = blob;
|
||||
|
@ -399,7 +414,7 @@ static nmethod* counter_overflow_helper(JavaThread* THREAD, int branch_bci, Meth
|
|||
CompLevel level = (CompLevel)nm->comp_level();
|
||||
int bci = InvocationEntryBci;
|
||||
if (branch_bci != InvocationEntryBci) {
|
||||
// Compute desination bci
|
||||
// Compute destination bci
|
||||
address pc = method()->code_base() + branch_bci;
|
||||
Bytecodes::Code branch = Bytecodes::code_at(method(), pc);
|
||||
int offset = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue