6829187: compiler optimizations required for JSR 292

C2 implementation for invokedynamic support.

Reviewed-by: kvn, never
This commit is contained in:
Christian Thalinger 2010-01-05 13:05:58 +01:00
parent 9be2e29930
commit 375527d84e
31 changed files with 566 additions and 89 deletions

View file

@ -636,7 +636,9 @@ uint MachCallJavaNode::cmp( const Node &n ) const {
}
#ifndef PRODUCT
void MachCallJavaNode::dump_spec(outputStream *st) const {
if( _method ) {
if (_method_handle_invoke)
st->print("MethodHandle ");
if (_method) {
_method->print_short_name(st);
st->print(" ");
}
@ -644,6 +646,20 @@ void MachCallJavaNode::dump_spec(outputStream *st) const {
}
#endif
//------------------------------Registers--------------------------------------
const RegMask &MachCallJavaNode::in_RegMask(uint idx) const {
// Values in the domain use the users calling convention, embodied in the
// _in_rms array of RegMasks.
if (idx < tf()->domain()->cnt()) return _in_rms[idx];
// Values outside the domain represent debug info
Matcher* m = Compile::current()->matcher();
// If this call is a MethodHandle invoke we have to use a different
// debugmask which does not include the register we use to save the
// SP over MH invokes.
RegMask** debugmask = _method_handle_invoke ? m->idealreg2mhdebugmask : m->idealreg2debugmask;
return *debugmask[in(idx)->ideal_reg()];
}
//=============================================================================
uint MachCallStaticJavaNode::size_of() const { return sizeof(*this); }
uint MachCallStaticJavaNode::cmp( const Node &n ) const {