Mercurial > hg > graal-jvmci-8
diff src/share/vm/graal/graalCompiler.cpp @ 14768:3e9a960f0da1
HSAIL: preliminary deopt support
Contributed-by: Tom Deneau <tom.deneau@amd.com>
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 26 Mar 2014 17:33:54 +0100 |
parents | cd22c8dbda4f |
children | 56704532e1cd |
line wrap: on
line diff
--- a/src/share/vm/graal/graalCompiler.cpp Wed Mar 26 17:30:40 2014 +0100 +++ b/src/share/vm/graal/graalCompiler.cpp Wed Mar 26 17:33:54 2014 +0100 @@ -97,6 +97,7 @@ VMToCompiler::finalizeOptions(CITime || CITimeEach); if (UseCompiler) { + _external_deopt_i2c_entry = create_external_deopt_i2c(); bool bootstrap = COMPILERGRAAL_PRESENT(BootstrapGraal) NOT_COMPILERGRAAL(false); VMToCompiler::startCompiler(bootstrap); _initialized = true; @@ -126,6 +127,34 @@ } } +address GraalCompiler::create_external_deopt_i2c() { + ResourceMark rm; + BufferBlob* buffer = BufferBlob::create("externalDeopt", 1*K); + CodeBuffer cb(buffer); + short buffer_locs[20]; + cb.insts()->initialize_shared_locs((relocInfo*)buffer_locs, sizeof(buffer_locs)/sizeof(relocInfo)); + MacroAssembler masm(&cb); + + int total_args_passed = 5; + + BasicType* sig_bt = NEW_RESOURCE_ARRAY(BasicType, total_args_passed); + VMRegPair* regs = NEW_RESOURCE_ARRAY(VMRegPair, total_args_passed); + int i = 0; + sig_bt[i++] = T_INT; + sig_bt[i++] = T_LONG; + sig_bt[i++] = T_VOID; // long stakes 2 slots + sig_bt[i++] = T_INT; + sig_bt[i++] = T_OBJECT; + + int comp_args_on_stack = SharedRuntime::java_calling_convention(sig_bt, regs, total_args_passed, false); + + SharedRuntime::gen_i2c_adapter(&masm, total_args_passed, comp_args_on_stack, sig_bt, regs); + masm.flush(); + + return AdapterBlob::create(&cb)->content_begin(); +} + + BufferBlob* GraalCompiler::initialize_buffer_blob() { JavaThread* THREAD = JavaThread::current(); BufferBlob* buffer_blob = THREAD->get_buffer_blob();