comparison src/share/vm/opto/library_call.cpp @ 6266:1d7922586cf6

7023639: JSR 292 method handle invocation needs a fast path for compiled code 6984705: JSR 292 method handle creation should not go through JNI Summary: remove assembly code for JDK 7 chained method handles Reviewed-by: jrose, twisti, kvn, mhaupt Contributed-by: John Rose <john.r.rose@oracle.com>, Christian Thalinger <christian.thalinger@oracle.com>, Michael Haupt <michael.haupt@oracle.com>
author twisti
date Tue, 24 Jul 2012 10:51:00 -0700
parents d50605d9417e
children 09aad8452938
comparison
equal deleted inserted replaced
6241:aba91a731143 6266:1d7922586cf6
2169 "not reverse Bytes"); 2169 "not reverse Bytes");
2170 if (id == vmIntrinsics::_reverseBytes_i && !Matcher::has_match_rule(Op_ReverseBytesI)) return false; 2170 if (id == vmIntrinsics::_reverseBytes_i && !Matcher::has_match_rule(Op_ReverseBytesI)) return false;
2171 if (id == vmIntrinsics::_reverseBytes_l && !Matcher::has_match_rule(Op_ReverseBytesL)) return false; 2171 if (id == vmIntrinsics::_reverseBytes_l && !Matcher::has_match_rule(Op_ReverseBytesL)) return false;
2172 if (id == vmIntrinsics::_reverseBytes_c && !Matcher::has_match_rule(Op_ReverseBytesUS)) return false; 2172 if (id == vmIntrinsics::_reverseBytes_c && !Matcher::has_match_rule(Op_ReverseBytesUS)) return false;
2173 if (id == vmIntrinsics::_reverseBytes_s && !Matcher::has_match_rule(Op_ReverseBytesS)) return false; 2173 if (id == vmIntrinsics::_reverseBytes_s && !Matcher::has_match_rule(Op_ReverseBytesS)) return false;
2174 _sp += arg_size(); // restore stack pointer 2174 _sp += arg_size(); // restore stack pointer
2175 switch (id) { 2175 switch (id) {
2176 case vmIntrinsics::_reverseBytes_i: 2176 case vmIntrinsics::_reverseBytes_i:
2177 push(_gvn.transform(new (C, 2) ReverseBytesINode(0, pop()))); 2177 push(_gvn.transform(new (C, 2) ReverseBytesINode(0, pop())));
2178 break; 2178 break;
2179 case vmIntrinsics::_reverseBytes_l: 2179 case vmIntrinsics::_reverseBytes_l:
2342 2342
2343 int type_words = type2size[ (type == T_ADDRESS) ? T_LONG : type ]; 2343 int type_words = type2size[ (type == T_ADDRESS) ? T_LONG : type ];
2344 2344
2345 // Argument words: "this" plus (oop/offset) or (lo/hi) args plus maybe 1 or 2 value words 2345 // Argument words: "this" plus (oop/offset) or (lo/hi) args plus maybe 1 or 2 value words
2346 int nargs = 1 + (is_native_ptr ? 2 : 3) + (is_store ? type_words : 0); 2346 int nargs = 1 + (is_native_ptr ? 2 : 3) + (is_store ? type_words : 0);
2347 assert(callee()->arg_size() == nargs, "must be");
2347 2348
2348 debug_only(int saved_sp = _sp); 2349 debug_only(int saved_sp = _sp);
2349 _sp += nargs; 2350 _sp += nargs;
2350 2351
2351 Node* val; 2352 Node* val;
4045 ik == env()->find_system_klass(ik->name())) { 4046 ik == env()->find_system_klass(ik->name())) {
4046 return true; 4047 return true;
4047 } 4048 }
4048 } 4049 }
4049 } 4050 }
4050 else if (method->is_method_handle_adapter()) { 4051 else if (method->is_method_handle_intrinsic() ||
4052 method->is_compiled_lambda_form()) {
4051 // This is an internal adapter frame from the MethodHandleCompiler -- skip it 4053 // This is an internal adapter frame from the MethodHandleCompiler -- skip it
4052 return true; 4054 return true;
4053 } 4055 }
4054 4056
4055 return false; 4057 return false;