Tue, 24 Jul 2012 10:51:00 -0700
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>
iveresov@2138 | 1 | /* |
iveresov@2138 | 2 | * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. |
iveresov@2138 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
iveresov@2138 | 4 | * |
iveresov@2138 | 5 | * This code is free software; you can redistribute it and/or modify it |
iveresov@2138 | 6 | * under the terms of the GNU General Public License version 2 only, as |
iveresov@2138 | 7 | * published by the Free Software Foundation. |
iveresov@2138 | 8 | * |
iveresov@2138 | 9 | * This code is distributed in the hope that it will be useful, but WITHOUT |
iveresov@2138 | 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
iveresov@2138 | 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
iveresov@2138 | 12 | * version 2 for more details (a copy is included in the LICENSE file that |
iveresov@2138 | 13 | * accompanied this code). |
iveresov@2138 | 14 | * |
iveresov@2138 | 15 | * You should have received a copy of the GNU General Public License version |
iveresov@2138 | 16 | * 2 along with this work; if not, write to the Free Software Foundation, |
iveresov@2138 | 17 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
iveresov@2138 | 18 | * |
iveresov@2138 | 19 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
iveresov@2138 | 20 | * or visit www.oracle.com if you need additional information or have any |
iveresov@2138 | 21 | * questions. |
iveresov@2138 | 22 | * |
iveresov@2138 | 23 | */ |
iveresov@2138 | 24 | |
stefank@2314 | 25 | #ifndef SHARE_VM_RUNTIME_SIMPLETHRESHOLDPOLICY_INLINE_HPP |
stefank@2314 | 26 | #define SHARE_VM_RUNTIME_SIMPLETHRESHOLDPOLICY_INLINE_HPP |
iveresov@2138 | 27 | |
iveresov@2138 | 28 | template<CompLevel level> |
iveresov@2138 | 29 | bool SimpleThresholdPolicy::call_predicate_helper(int i, int b, double scale) { |
iveresov@2138 | 30 | switch(level) { |
iveresov@2138 | 31 | case CompLevel_none: |
iveresov@2138 | 32 | case CompLevel_limited_profile: |
iveresov@2138 | 33 | return (i > Tier3InvocationThreshold * scale) || |
iveresov@2138 | 34 | (i > Tier3MinInvocationThreshold * scale && i + b > Tier3CompileThreshold * scale); |
iveresov@2138 | 35 | case CompLevel_full_profile: |
iveresov@2138 | 36 | return (i > Tier4InvocationThreshold * scale) || |
iveresov@2138 | 37 | (i > Tier4MinInvocationThreshold * scale && i + b > Tier4CompileThreshold * scale); |
iveresov@2138 | 38 | } |
iveresov@2138 | 39 | return true; |
iveresov@2138 | 40 | } |
iveresov@2138 | 41 | |
iveresov@2138 | 42 | template<CompLevel level> |
iveresov@2138 | 43 | bool SimpleThresholdPolicy::loop_predicate_helper(int i, int b, double scale) { |
iveresov@2138 | 44 | switch(level) { |
iveresov@2138 | 45 | case CompLevel_none: |
iveresov@2138 | 46 | case CompLevel_limited_profile: |
iveresov@2138 | 47 | return b > Tier3BackEdgeThreshold * scale; |
iveresov@2138 | 48 | case CompLevel_full_profile: |
iveresov@2138 | 49 | return b > Tier4BackEdgeThreshold * scale; |
iveresov@2138 | 50 | } |
iveresov@2138 | 51 | return true; |
iveresov@2138 | 52 | } |
iveresov@2138 | 53 | |
iveresov@2138 | 54 | // Simple methods are as good being compiled with C1 as C2. |
iveresov@2138 | 55 | // Determine if a given method is such a case. |
iveresov@2138 | 56 | bool SimpleThresholdPolicy::is_trivial(methodOop method) { |
iveresov@2138 | 57 | if (method->is_accessor()) return true; |
iveresov@2138 | 58 | if (method->code() != NULL) { |
iveresov@2138 | 59 | methodDataOop mdo = method->method_data(); |
iveresov@2138 | 60 | if (mdo != NULL && mdo->num_loops() == 0 && |
iveresov@2138 | 61 | (method->code_size() < 5 || (mdo->num_blocks() < 4) && (method->code_size() < 15))) { |
iveresov@2138 | 62 | return !mdo->would_profile(); |
iveresov@2138 | 63 | } |
iveresov@2138 | 64 | } |
iveresov@2138 | 65 | return false; |
iveresov@2138 | 66 | } |
stefank@2314 | 67 | |
stefank@2314 | 68 | #endif // SHARE_VM_RUNTIME_SIMPLETHRESHOLDPOLICY_INLINE_HPP |