src/share/vm/prims/methodHandleWalk.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/prims/methodHandleWalk.hpp	Tue Aug 30 18:43:13 2011
--- new/src/share/vm/prims/methodHandleWalk.hpp	Tue Aug 30 18:43:13 2011

*** 72,81 **** --- 72,82 ---- void next(TRAPS) { assert(!is_last(), ""); set_method_handle(MethodHandle_vmtarget_oop(), THREAD); } + Handle root() { return _root; } Handle method_handle() { return _method_handle; } oop method_handle_oop() { return _method_handle(); } oop method_type_oop() { return MethodHandle_type_oop(); } oop vmtarget_oop() { return MethodHandle_vmtarget_oop(); }
*** 108,118 **** --- 109,118 ---- #ifdef ASSERT // Print a symbolic description of a method handle chain, including // the signature for each method. The signatures are printed in // slot order to make it easier to understand. void print(); static void print(Handle mh); static void print(oopDesc* mh); #endif };
*** 275,284 **** --- 275,288 ---- KlassHandle _rklass; // Return type for casting. BasicType _rtype; KlassHandle _target_klass; Thread* _thread; + int _selectAlternative_bci; // These are used for capturing profiles from GWTs + int _taken_count; + int _not_taken_count; + // Values used by the compiler. static jvalue zero_jvalue; static jvalue one_jvalue; // Fake constant pool entry.
*** 370,379 **** --- 374,384 ---- assert(_cur_stack >= 0, "sanity"); } unsigned char* bytecode() const { return _bytecode.adr_at(0); } int bytecode_length() const { return _bytecode.length(); } + int cur_bci() const { return _bytecode.length(); } // Fake constant pool. int cpool_oop_put(int tag, Handle con) { if (con.is_null()) return 0; ConstantValue* cv = new ConstantValue(tag, con);
*** 434,443 **** --- 439,450 ---- int cpool_name_and_type_put(int name_index, int signature_index) { return cpool_oop_reference_put(JVM_CONSTANT_NameAndType, name_index, signature_index, methodHandle()); } void emit_bc(Bytecodes::Code op, int index = 0, int args_size = -1); + void update_branch_dest(int src, int dst); + void emit_load(ArgToken arg); void emit_load(BasicType bt, int index); void emit_store(BasicType bt, int index); void emit_load_constant(ArgToken arg); virtual ArgToken make_parameter(BasicType type, klassOop tk, int argnum, TRAPS) {
*** 453,467 **** --- 460,477 ---- virtual ArgToken make_conversion(BasicType type, klassOop tk, Bytecodes::Code op, const ArgToken& src, TRAPS); virtual ArgToken make_fetch(BasicType type, klassOop tk, Bytecodes::Code op, const ArgToken& base, const ArgToken& offset, TRAPS); virtual ArgToken make_invoke(methodHandle m, vmIntrinsics::ID iid, Bytecodes::Code op, bool tailcall, int argc, ArgToken* argv, TRAPS); + // Check for profiling information on a GWT and return true if it's found + bool fetch_counts(ArgToken a1, ArgToken a2); + // Get a real constant pool. constantPoolHandle get_constant_pool(TRAPS) const; // Get a real methodOop. - methodHandle get_method_oop(TRAPS) const; public: MethodHandleCompiler(Handle root, Symbol* name, Symbol* signature, int invoke_count, bool for_invokedynamic, TRAPS); // Compile the given MH chain into bytecode.

src/share/vm/prims/methodHandleWalk.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File