src/hotspot/share/opto/c2compiler.cpp
changeset 47216 71c04702a3d5
parent 46992 95000145dd81
child 47587 bf73ca31add9
equal deleted inserted replaced
47215:4ebc2e2fb97c 47216:71c04702a3d5
       
     1 /*
       
     2  * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.
       
     8  *
       
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    12  * version 2 for more details (a copy is included in the LICENSE file that
       
    13  * accompanied this code).
       
    14  *
       
    15  * You should have received a copy of the GNU General Public License version
       
    16  * 2 along with this work; if not, write to the Free Software Foundation,
       
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    18  *
       
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    20  * or visit www.oracle.com if you need additional information or have any
       
    21  * questions.
       
    22  *
       
    23  */
       
    24 
       
    25 #include "precompiled.hpp"
       
    26 #include "opto/c2compiler.hpp"
       
    27 #include "opto/compile.hpp"
       
    28 #include "opto/optoreg.hpp"
       
    29 #include "opto/output.hpp"
       
    30 #include "opto/runtime.hpp"
       
    31 
       
    32 // register information defined by ADLC
       
    33 extern const char register_save_policy[];
       
    34 extern const int  register_save_type[];
       
    35 
       
    36 const char* C2Compiler::retry_no_subsuming_loads() {
       
    37   return "retry without subsuming loads";
       
    38 }
       
    39 const char* C2Compiler::retry_no_escape_analysis() {
       
    40   return "retry without escape analysis";
       
    41 }
       
    42 const char* C2Compiler::retry_class_loading_during_parsing() {
       
    43   return "retry class loading during parsing";
       
    44 }
       
    45 bool C2Compiler::init_c2_runtime() {
       
    46 
       
    47   // Check assumptions used while running ADLC
       
    48   Compile::adlc_verification();
       
    49   assert(REG_COUNT <= ConcreteRegisterImpl::number_of_registers, "incompatible register counts");
       
    50 
       
    51   for (int i = 0; i < ConcreteRegisterImpl::number_of_registers ; i++ ) {
       
    52       OptoReg::vm2opto[i] = OptoReg::Bad;
       
    53   }
       
    54 
       
    55   for( OptoReg::Name i=OptoReg::Name(0); i<OptoReg::Name(REG_COUNT); i = OptoReg::add(i,1) ) {
       
    56     VMReg r = OptoReg::as_VMReg(i);
       
    57     if (r->is_valid()) {
       
    58       OptoReg::vm2opto[r->value()] = i;
       
    59     }
       
    60   }
       
    61 
       
    62   // Check that runtime and architecture description agree on callee-saved-floats
       
    63   bool callee_saved_floats = false;
       
    64   for( OptoReg::Name i=OptoReg::Name(0); i<OptoReg::Name(_last_Mach_Reg); i = OptoReg::add(i,1) ) {
       
    65     // Is there a callee-saved float or double?
       
    66     if( register_save_policy[i] == 'E' /* callee-saved */ &&
       
    67        (register_save_type[i] == Op_RegF || register_save_type[i] == Op_RegD) ) {
       
    68       callee_saved_floats = true;
       
    69     }
       
    70   }
       
    71 
       
    72   DEBUG_ONLY( Node::init_NodeProperty(); )
       
    73 
       
    74   Compile::pd_compiler2_init();
       
    75 
       
    76   CompilerThread* thread = CompilerThread::current();
       
    77 
       
    78   HandleMark handle_mark(thread);
       
    79   return OptoRuntime::generate(thread->env());
       
    80 }
       
    81 
       
    82 void C2Compiler::initialize() {
       
    83   // The first compiler thread that gets here will initialize the
       
    84   // small amount of global state (and runtime stubs) that C2 needs.
       
    85 
       
    86   // There is a race possible once at startup and then we're fine
       
    87 
       
    88   // Note that this is being called from a compiler thread not the
       
    89   // main startup thread.
       
    90   if (should_perform_init()) {
       
    91     bool successful = C2Compiler::init_c2_runtime();
       
    92     int new_state = (successful) ? initialized : failed;
       
    93     set_state(new_state);
       
    94   }
       
    95 }
       
    96 
       
    97 void C2Compiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci, DirectiveSet* directive) {
       
    98   assert(is_initialized(), "Compiler thread must be initialized");
       
    99 
       
   100   bool subsume_loads = SubsumeLoads;
       
   101   bool do_escape_analysis = DoEscapeAnalysis && !env->should_retain_local_variables();
       
   102   bool eliminate_boxing = EliminateAutoBox;
       
   103 
       
   104   while (!env->failing()) {
       
   105     // Attempt to compile while subsuming loads into machine instructions.
       
   106     Compile C(env, this, target, entry_bci, subsume_loads, do_escape_analysis, eliminate_boxing, directive);
       
   107 
       
   108     // Check result and retry if appropriate.
       
   109     if (C.failure_reason() != NULL) {
       
   110       if (C.failure_reason_is(retry_class_loading_during_parsing())) {
       
   111         env->report_failure(C.failure_reason());
       
   112         continue;  // retry
       
   113       }
       
   114       if (C.failure_reason_is(retry_no_subsuming_loads())) {
       
   115         assert(subsume_loads, "must make progress");
       
   116         subsume_loads = false;
       
   117         env->report_failure(C.failure_reason());
       
   118         continue;  // retry
       
   119       }
       
   120       if (C.failure_reason_is(retry_no_escape_analysis())) {
       
   121         assert(do_escape_analysis, "must make progress");
       
   122         do_escape_analysis = false;
       
   123         env->report_failure(C.failure_reason());
       
   124         continue;  // retry
       
   125       }
       
   126       if (C.has_boxed_value()) {
       
   127         // Recompile without boxing elimination regardless failure reason.
       
   128         assert(eliminate_boxing, "must make progress");
       
   129         eliminate_boxing = false;
       
   130         env->report_failure(C.failure_reason());
       
   131         continue;  // retry
       
   132       }
       
   133       // Pass any other failure reason up to the ciEnv.
       
   134       // Note that serious, irreversible failures are already logged
       
   135       // on the ciEnv via env->record_method_not_compilable().
       
   136       env->record_failure(C.failure_reason());
       
   137     }
       
   138     if (StressRecompilation) {
       
   139       if (subsume_loads) {
       
   140         subsume_loads = false;
       
   141         continue;  // retry
       
   142       }
       
   143       if (do_escape_analysis) {
       
   144         do_escape_analysis = false;
       
   145         continue;  // retry
       
   146       }
       
   147     }
       
   148 
       
   149     // print inlining for last compilation only
       
   150     C.dump_print_inlining();
       
   151 
       
   152     // No retry; just break the loop.
       
   153     break;
       
   154   }
       
   155 }
       
   156 
       
   157 void C2Compiler::print_timers() {
       
   158   Compile::print_timers();
       
   159 }
       
   160 
       
   161 bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virtual) {
       
   162   vmIntrinsics::ID id = method->intrinsic_id();
       
   163   assert(id != vmIntrinsics::_none, "must be a VM intrinsic");
       
   164 
       
   165   if (id < vmIntrinsics::FIRST_ID || id > vmIntrinsics::LAST_COMPILER_INLINE) {
       
   166     return false;
       
   167   }
       
   168 
       
   169   // Only Object.hashCode and Object.clone intrinsics implement also a virtual
       
   170   // dispatch because calling both methods is expensive but both methods are
       
   171   // frequently overridden. All other intrinsics implement only a non-virtual
       
   172   // dispatch.
       
   173   if (is_virtual) {
       
   174     switch (id) {
       
   175     case vmIntrinsics::_hashCode:
       
   176     case vmIntrinsics::_clone:
       
   177       break;
       
   178     default:
       
   179       return false;
       
   180     }
       
   181   }
       
   182 
       
   183   switch (id) {
       
   184   case vmIntrinsics::_compressStringC:
       
   185   case vmIntrinsics::_compressStringB:
       
   186     if (!Matcher::has_match_rule(Op_StrCompressedCopy)) return false;
       
   187     break;
       
   188   case vmIntrinsics::_inflateStringC:
       
   189   case vmIntrinsics::_inflateStringB:
       
   190     if (!Matcher::has_match_rule(Op_StrInflatedCopy)) return false;
       
   191     break;
       
   192   case vmIntrinsics::_compareToL:
       
   193   case vmIntrinsics::_compareToU:
       
   194   case vmIntrinsics::_compareToLU:
       
   195   case vmIntrinsics::_compareToUL:
       
   196     if (!Matcher::match_rule_supported(Op_StrComp)) return false;
       
   197     break;
       
   198   case vmIntrinsics::_equalsL:
       
   199   case vmIntrinsics::_equalsU:
       
   200     if (!Matcher::match_rule_supported(Op_StrEquals)) return false;
       
   201     break;
       
   202   case vmIntrinsics::_equalsB:
       
   203   case vmIntrinsics::_equalsC:
       
   204     if (!Matcher::match_rule_supported(Op_AryEq)) return false;
       
   205     break;
       
   206   case vmIntrinsics::_copyMemory:
       
   207     if (StubRoutines::unsafe_arraycopy() == NULL) return false;
       
   208     break;
       
   209   case vmIntrinsics::_encodeISOArray:
       
   210   case vmIntrinsics::_encodeByteISOArray:
       
   211     if (!Matcher::match_rule_supported(Op_EncodeISOArray)) return false;
       
   212     break;
       
   213   case vmIntrinsics::_hasNegatives:
       
   214     if (!Matcher::match_rule_supported(Op_HasNegatives))  return false;
       
   215     break;
       
   216   case vmIntrinsics::_bitCount_i:
       
   217     if (!Matcher::match_rule_supported(Op_PopCountI)) return false;
       
   218     break;
       
   219   case vmIntrinsics::_bitCount_l:
       
   220     if (!Matcher::match_rule_supported(Op_PopCountL)) return false;
       
   221     break;
       
   222   case vmIntrinsics::_numberOfLeadingZeros_i:
       
   223     if (!Matcher::match_rule_supported(Op_CountLeadingZerosI)) return false;
       
   224     break;
       
   225   case vmIntrinsics::_numberOfLeadingZeros_l:
       
   226     if (!Matcher::match_rule_supported(Op_CountLeadingZerosL)) return false;
       
   227     break;
       
   228   case vmIntrinsics::_numberOfTrailingZeros_i:
       
   229     if (!Matcher::match_rule_supported(Op_CountTrailingZerosI)) return false;
       
   230     break;
       
   231   case vmIntrinsics::_numberOfTrailingZeros_l:
       
   232     if (!Matcher::match_rule_supported(Op_CountTrailingZerosL)) return false;
       
   233     break;
       
   234   case vmIntrinsics::_reverseBytes_c:
       
   235     if (!Matcher::match_rule_supported(Op_ReverseBytesUS)) return false;
       
   236     break;
       
   237   case vmIntrinsics::_reverseBytes_s:
       
   238     if (!Matcher::match_rule_supported(Op_ReverseBytesS)) return false;
       
   239     break;
       
   240   case vmIntrinsics::_reverseBytes_i:
       
   241     if (!Matcher::match_rule_supported(Op_ReverseBytesI)) return false;
       
   242     break;
       
   243   case vmIntrinsics::_reverseBytes_l:
       
   244     if (!Matcher::match_rule_supported(Op_ReverseBytesL)) return false;
       
   245     break;
       
   246 
       
   247   /* CompareAndSet, Object: */
       
   248   case vmIntrinsics::_compareAndSetObject:
       
   249 #ifdef _LP64
       
   250     if ( UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndSwapN)) return false;
       
   251     if (!UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndSwapP)) return false;
       
   252 #else
       
   253     if (!Matcher::match_rule_supported(Op_CompareAndSwapP)) return false;
       
   254 #endif
       
   255     break;
       
   256   case vmIntrinsics::_weakCompareAndSetObjectPlain:
       
   257   case vmIntrinsics::_weakCompareAndSetObjectAcquire:
       
   258   case vmIntrinsics::_weakCompareAndSetObjectRelease:
       
   259   case vmIntrinsics::_weakCompareAndSetObject:
       
   260 #ifdef _LP64
       
   261     if ( UseCompressedOops && !Matcher::match_rule_supported(Op_WeakCompareAndSwapN)) return false;
       
   262     if (!UseCompressedOops && !Matcher::match_rule_supported(Op_WeakCompareAndSwapP)) return false;
       
   263 #else
       
   264     if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapP)) return false;
       
   265 #endif
       
   266     break;
       
   267   /* CompareAndSet, Long: */
       
   268   case vmIntrinsics::_compareAndSetLong:
       
   269     if (!Matcher::match_rule_supported(Op_CompareAndSwapL)) return false;
       
   270     break;
       
   271   case vmIntrinsics::_weakCompareAndSetLongPlain:
       
   272   case vmIntrinsics::_weakCompareAndSetLongAcquire:
       
   273   case vmIntrinsics::_weakCompareAndSetLongRelease:
       
   274   case vmIntrinsics::_weakCompareAndSetLong:
       
   275     if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapL)) return false;
       
   276     break;
       
   277 
       
   278   /* CompareAndSet, Int: */
       
   279   case vmIntrinsics::_compareAndSetInt:
       
   280     if (!Matcher::match_rule_supported(Op_CompareAndSwapI)) return false;
       
   281     break;
       
   282   case vmIntrinsics::_weakCompareAndSetIntPlain:
       
   283   case vmIntrinsics::_weakCompareAndSetIntAcquire:
       
   284   case vmIntrinsics::_weakCompareAndSetIntRelease:
       
   285   case vmIntrinsics::_weakCompareAndSetInt:
       
   286     if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapI)) return false;
       
   287     break;
       
   288 
       
   289   /* CompareAndSet, Byte: */
       
   290   case vmIntrinsics::_compareAndSetByte:
       
   291     if (!Matcher::match_rule_supported(Op_CompareAndSwapB)) return false;
       
   292     break;
       
   293   case vmIntrinsics::_weakCompareAndSetBytePlain:
       
   294   case vmIntrinsics::_weakCompareAndSetByteAcquire:
       
   295   case vmIntrinsics::_weakCompareAndSetByteRelease:
       
   296   case vmIntrinsics::_weakCompareAndSetByte:
       
   297     if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapB)) return false;
       
   298     break;
       
   299 
       
   300   /* CompareAndSet, Short: */
       
   301   case vmIntrinsics::_compareAndSetShort:
       
   302     if (!Matcher::match_rule_supported(Op_CompareAndSwapS)) return false;
       
   303     break;
       
   304   case vmIntrinsics::_weakCompareAndSetShortPlain:
       
   305   case vmIntrinsics::_weakCompareAndSetShortAcquire:
       
   306   case vmIntrinsics::_weakCompareAndSetShortRelease:
       
   307   case vmIntrinsics::_weakCompareAndSetShort:
       
   308     if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapS)) return false;
       
   309     break;
       
   310 
       
   311   /* CompareAndExchange, Object: */
       
   312   case vmIntrinsics::_compareAndExchangeObject:
       
   313   case vmIntrinsics::_compareAndExchangeObjectAcquire:
       
   314   case vmIntrinsics::_compareAndExchangeObjectRelease:
       
   315 #ifdef _LP64
       
   316     if ( UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndExchangeN)) return false;
       
   317     if (!UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndExchangeP)) return false;
       
   318 #else
       
   319     if (!Matcher::match_rule_supported(Op_CompareAndExchangeP)) return false;
       
   320 #endif
       
   321     break;
       
   322 
       
   323   /* CompareAndExchange, Long: */
       
   324   case vmIntrinsics::_compareAndExchangeLong:
       
   325   case vmIntrinsics::_compareAndExchangeLongAcquire:
       
   326   case vmIntrinsics::_compareAndExchangeLongRelease:
       
   327     if (!Matcher::match_rule_supported(Op_CompareAndExchangeL)) return false;
       
   328     break;
       
   329 
       
   330   /* CompareAndExchange, Int: */
       
   331   case vmIntrinsics::_compareAndExchangeInt:
       
   332   case vmIntrinsics::_compareAndExchangeIntAcquire:
       
   333   case vmIntrinsics::_compareAndExchangeIntRelease:
       
   334     if (!Matcher::match_rule_supported(Op_CompareAndExchangeI)) return false;
       
   335     break;
       
   336 
       
   337   /* CompareAndExchange, Byte: */
       
   338   case vmIntrinsics::_compareAndExchangeByte:
       
   339   case vmIntrinsics::_compareAndExchangeByteAcquire:
       
   340   case vmIntrinsics::_compareAndExchangeByteRelease:
       
   341     if (!Matcher::match_rule_supported(Op_CompareAndExchangeB)) return false;
       
   342     break;
       
   343 
       
   344   /* CompareAndExchange, Short: */
       
   345   case vmIntrinsics::_compareAndExchangeShort:
       
   346   case vmIntrinsics::_compareAndExchangeShortAcquire:
       
   347   case vmIntrinsics::_compareAndExchangeShortRelease:
       
   348     if (!Matcher::match_rule_supported(Op_CompareAndExchangeS)) return false;
       
   349     break;
       
   350 
       
   351   case vmIntrinsics::_getAndAddByte:
       
   352     if (!Matcher::match_rule_supported(Op_GetAndAddB)) return false;
       
   353     break;
       
   354   case vmIntrinsics::_getAndAddShort:
       
   355     if (!Matcher::match_rule_supported(Op_GetAndAddS)) return false;
       
   356     break;
       
   357   case vmIntrinsics::_getAndAddInt:
       
   358     if (!Matcher::match_rule_supported(Op_GetAndAddI)) return false;
       
   359     break;
       
   360   case vmIntrinsics::_getAndAddLong:
       
   361     if (!Matcher::match_rule_supported(Op_GetAndAddL)) return false;
       
   362     break;
       
   363 
       
   364   case vmIntrinsics::_getAndSetByte:
       
   365     if (!Matcher::match_rule_supported(Op_GetAndSetB)) return false;
       
   366     break;
       
   367   case vmIntrinsics::_getAndSetShort:
       
   368     if (!Matcher::match_rule_supported(Op_GetAndSetS)) return false;
       
   369     break;
       
   370   case vmIntrinsics::_getAndSetInt:
       
   371     if (!Matcher::match_rule_supported(Op_GetAndSetI)) return false;
       
   372     break;
       
   373   case vmIntrinsics::_getAndSetLong:
       
   374     if (!Matcher::match_rule_supported(Op_GetAndSetL)) return false;
       
   375     break;
       
   376   case vmIntrinsics::_getAndSetObject:
       
   377 #ifdef _LP64
       
   378     if (!UseCompressedOops && !Matcher::match_rule_supported(Op_GetAndSetP)) return false;
       
   379     if (UseCompressedOops && !Matcher::match_rule_supported(Op_GetAndSetN)) return false;
       
   380     break;
       
   381 #else
       
   382     if (!Matcher::match_rule_supported(Op_GetAndSetP)) return false;
       
   383     break;
       
   384 #endif
       
   385   case vmIntrinsics::_incrementExactI:
       
   386   case vmIntrinsics::_addExactI:
       
   387     if (!Matcher::match_rule_supported(Op_OverflowAddI)) return false;
       
   388     break;
       
   389   case vmIntrinsics::_incrementExactL:
       
   390   case vmIntrinsics::_addExactL:
       
   391     if (!Matcher::match_rule_supported(Op_OverflowAddL)) return false;
       
   392     break;
       
   393   case vmIntrinsics::_decrementExactI:
       
   394   case vmIntrinsics::_subtractExactI:
       
   395     if (!Matcher::match_rule_supported(Op_OverflowSubI)) return false;
       
   396     break;
       
   397   case vmIntrinsics::_decrementExactL:
       
   398   case vmIntrinsics::_subtractExactL:
       
   399     if (!Matcher::match_rule_supported(Op_OverflowSubL)) return false;
       
   400     break;
       
   401   case vmIntrinsics::_negateExactI:
       
   402     if (!Matcher::match_rule_supported(Op_OverflowSubI)) return false;
       
   403     break;
       
   404   case vmIntrinsics::_negateExactL:
       
   405     if (!Matcher::match_rule_supported(Op_OverflowSubL)) return false;
       
   406     break;
       
   407   case vmIntrinsics::_multiplyExactI:
       
   408     if (!Matcher::match_rule_supported(Op_OverflowMulI)) return false;
       
   409     break;
       
   410   case vmIntrinsics::_multiplyExactL:
       
   411     if (!Matcher::match_rule_supported(Op_OverflowMulL)) return false;
       
   412     break;
       
   413   case vmIntrinsics::_getCallerClass:
       
   414     if (SystemDictionary::reflect_CallerSensitive_klass() == NULL) return false;
       
   415     break;
       
   416   case vmIntrinsics::_onSpinWait:
       
   417     if (!Matcher::match_rule_supported(Op_OnSpinWait)) return false;
       
   418     break;
       
   419   case vmIntrinsics::_fmaD:
       
   420     if (!UseFMA || !Matcher::match_rule_supported(Op_FmaD)) return false;
       
   421     break;
       
   422   case vmIntrinsics::_fmaF:
       
   423     if (!UseFMA || !Matcher::match_rule_supported(Op_FmaF)) return false;
       
   424     break;
       
   425   case vmIntrinsics::_hashCode:
       
   426   case vmIntrinsics::_identityHashCode:
       
   427   case vmIntrinsics::_getClass:
       
   428   case vmIntrinsics::_dsin:
       
   429   case vmIntrinsics::_dcos:
       
   430   case vmIntrinsics::_dtan:
       
   431   case vmIntrinsics::_dabs:
       
   432   case vmIntrinsics::_datan2:
       
   433   case vmIntrinsics::_dsqrt:
       
   434   case vmIntrinsics::_dexp:
       
   435   case vmIntrinsics::_dlog:
       
   436   case vmIntrinsics::_dlog10:
       
   437   case vmIntrinsics::_dpow:
       
   438   case vmIntrinsics::_min:
       
   439   case vmIntrinsics::_max:
       
   440   case vmIntrinsics::_arraycopy:
       
   441   case vmIntrinsics::_indexOfL:
       
   442   case vmIntrinsics::_indexOfU:
       
   443   case vmIntrinsics::_indexOfUL:
       
   444   case vmIntrinsics::_indexOfIL:
       
   445   case vmIntrinsics::_indexOfIU:
       
   446   case vmIntrinsics::_indexOfIUL:
       
   447   case vmIntrinsics::_indexOfU_char:
       
   448   case vmIntrinsics::_toBytesStringU:
       
   449   case vmIntrinsics::_getCharsStringU:
       
   450   case vmIntrinsics::_getCharStringU:
       
   451   case vmIntrinsics::_putCharStringU:
       
   452   case vmIntrinsics::_getObject:
       
   453   case vmIntrinsics::_getBoolean:
       
   454   case vmIntrinsics::_getByte:
       
   455   case vmIntrinsics::_getShort:
       
   456   case vmIntrinsics::_getChar:
       
   457   case vmIntrinsics::_getInt:
       
   458   case vmIntrinsics::_getLong:
       
   459   case vmIntrinsics::_getFloat:
       
   460   case vmIntrinsics::_getDouble:
       
   461   case vmIntrinsics::_putObject:
       
   462   case vmIntrinsics::_putBoolean:
       
   463   case vmIntrinsics::_putByte:
       
   464   case vmIntrinsics::_putShort:
       
   465   case vmIntrinsics::_putChar:
       
   466   case vmIntrinsics::_putInt:
       
   467   case vmIntrinsics::_putLong:
       
   468   case vmIntrinsics::_putFloat:
       
   469   case vmIntrinsics::_putDouble:
       
   470   case vmIntrinsics::_getObjectVolatile:
       
   471   case vmIntrinsics::_getBooleanVolatile:
       
   472   case vmIntrinsics::_getByteVolatile:
       
   473   case vmIntrinsics::_getShortVolatile:
       
   474   case vmIntrinsics::_getCharVolatile:
       
   475   case vmIntrinsics::_getIntVolatile:
       
   476   case vmIntrinsics::_getLongVolatile:
       
   477   case vmIntrinsics::_getFloatVolatile:
       
   478   case vmIntrinsics::_getDoubleVolatile:
       
   479   case vmIntrinsics::_putObjectVolatile:
       
   480   case vmIntrinsics::_putBooleanVolatile:
       
   481   case vmIntrinsics::_putByteVolatile:
       
   482   case vmIntrinsics::_putShortVolatile:
       
   483   case vmIntrinsics::_putCharVolatile:
       
   484   case vmIntrinsics::_putIntVolatile:
       
   485   case vmIntrinsics::_putLongVolatile:
       
   486   case vmIntrinsics::_putFloatVolatile:
       
   487   case vmIntrinsics::_putDoubleVolatile:
       
   488   case vmIntrinsics::_getObjectAcquire:
       
   489   case vmIntrinsics::_getBooleanAcquire:
       
   490   case vmIntrinsics::_getByteAcquire:
       
   491   case vmIntrinsics::_getShortAcquire:
       
   492   case vmIntrinsics::_getCharAcquire:
       
   493   case vmIntrinsics::_getIntAcquire:
       
   494   case vmIntrinsics::_getLongAcquire:
       
   495   case vmIntrinsics::_getFloatAcquire:
       
   496   case vmIntrinsics::_getDoubleAcquire:
       
   497   case vmIntrinsics::_putObjectRelease:
       
   498   case vmIntrinsics::_putBooleanRelease:
       
   499   case vmIntrinsics::_putByteRelease:
       
   500   case vmIntrinsics::_putShortRelease:
       
   501   case vmIntrinsics::_putCharRelease:
       
   502   case vmIntrinsics::_putIntRelease:
       
   503   case vmIntrinsics::_putLongRelease:
       
   504   case vmIntrinsics::_putFloatRelease:
       
   505   case vmIntrinsics::_putDoubleRelease:
       
   506   case vmIntrinsics::_getObjectOpaque:
       
   507   case vmIntrinsics::_getBooleanOpaque:
       
   508   case vmIntrinsics::_getByteOpaque:
       
   509   case vmIntrinsics::_getShortOpaque:
       
   510   case vmIntrinsics::_getCharOpaque:
       
   511   case vmIntrinsics::_getIntOpaque:
       
   512   case vmIntrinsics::_getLongOpaque:
       
   513   case vmIntrinsics::_getFloatOpaque:
       
   514   case vmIntrinsics::_getDoubleOpaque:
       
   515   case vmIntrinsics::_putObjectOpaque:
       
   516   case vmIntrinsics::_putBooleanOpaque:
       
   517   case vmIntrinsics::_putByteOpaque:
       
   518   case vmIntrinsics::_putShortOpaque:
       
   519   case vmIntrinsics::_putCharOpaque:
       
   520   case vmIntrinsics::_putIntOpaque:
       
   521   case vmIntrinsics::_putLongOpaque:
       
   522   case vmIntrinsics::_putFloatOpaque:
       
   523   case vmIntrinsics::_putDoubleOpaque:
       
   524   case vmIntrinsics::_getShortUnaligned:
       
   525   case vmIntrinsics::_getCharUnaligned:
       
   526   case vmIntrinsics::_getIntUnaligned:
       
   527   case vmIntrinsics::_getLongUnaligned:
       
   528   case vmIntrinsics::_putShortUnaligned:
       
   529   case vmIntrinsics::_putCharUnaligned:
       
   530   case vmIntrinsics::_putIntUnaligned:
       
   531   case vmIntrinsics::_putLongUnaligned:
       
   532   case vmIntrinsics::_loadFence:
       
   533   case vmIntrinsics::_storeFence:
       
   534   case vmIntrinsics::_fullFence:
       
   535   case vmIntrinsics::_currentThread:
       
   536   case vmIntrinsics::_isInterrupted:
       
   537 #ifdef TRACE_HAVE_INTRINSICS
       
   538   case vmIntrinsics::_counterTime:
       
   539   case vmIntrinsics::_getClassId:
       
   540   case vmIntrinsics::_getBufferWriter:
       
   541 #endif
       
   542   case vmIntrinsics::_currentTimeMillis:
       
   543   case vmIntrinsics::_nanoTime:
       
   544   case vmIntrinsics::_allocateInstance:
       
   545   case vmIntrinsics::_allocateUninitializedArray:
       
   546   case vmIntrinsics::_newArray:
       
   547   case vmIntrinsics::_getLength:
       
   548   case vmIntrinsics::_copyOf:
       
   549   case vmIntrinsics::_copyOfRange:
       
   550   case vmIntrinsics::_clone:
       
   551   case vmIntrinsics::_isAssignableFrom:
       
   552   case vmIntrinsics::_isInstance:
       
   553   case vmIntrinsics::_getModifiers:
       
   554   case vmIntrinsics::_isInterface:
       
   555   case vmIntrinsics::_isArray:
       
   556   case vmIntrinsics::_isPrimitive:
       
   557   case vmIntrinsics::_getSuperclass:
       
   558   case vmIntrinsics::_getClassAccessFlags:
       
   559   case vmIntrinsics::_floatToRawIntBits:
       
   560   case vmIntrinsics::_floatToIntBits:
       
   561   case vmIntrinsics::_intBitsToFloat:
       
   562   case vmIntrinsics::_doubleToRawLongBits:
       
   563   case vmIntrinsics::_doubleToLongBits:
       
   564   case vmIntrinsics::_longBitsToDouble:
       
   565   case vmIntrinsics::_Reference_get:
       
   566   case vmIntrinsics::_Class_cast:
       
   567   case vmIntrinsics::_aescrypt_encryptBlock:
       
   568   case vmIntrinsics::_aescrypt_decryptBlock:
       
   569   case vmIntrinsics::_cipherBlockChaining_encryptAESCrypt:
       
   570   case vmIntrinsics::_cipherBlockChaining_decryptAESCrypt:
       
   571   case vmIntrinsics::_counterMode_AESCrypt:
       
   572   case vmIntrinsics::_sha_implCompress:
       
   573   case vmIntrinsics::_sha2_implCompress:
       
   574   case vmIntrinsics::_sha5_implCompress:
       
   575   case vmIntrinsics::_digestBase_implCompressMB:
       
   576   case vmIntrinsics::_multiplyToLen:
       
   577   case vmIntrinsics::_squareToLen:
       
   578   case vmIntrinsics::_mulAdd:
       
   579   case vmIntrinsics::_montgomeryMultiply:
       
   580   case vmIntrinsics::_montgomerySquare:
       
   581   case vmIntrinsics::_vectorizedMismatch:
       
   582   case vmIntrinsics::_ghash_processBlocks:
       
   583   case vmIntrinsics::_updateCRC32:
       
   584   case vmIntrinsics::_updateBytesCRC32:
       
   585   case vmIntrinsics::_updateByteBufferCRC32:
       
   586   case vmIntrinsics::_updateBytesCRC32C:
       
   587   case vmIntrinsics::_updateDirectByteBufferCRC32C:
       
   588   case vmIntrinsics::_updateBytesAdler32:
       
   589   case vmIntrinsics::_updateByteBufferAdler32:
       
   590   case vmIntrinsics::_profileBoolean:
       
   591   case vmIntrinsics::_isCompileConstant:
       
   592   case vmIntrinsics::_Preconditions_checkIndex:
       
   593     break;
       
   594   default:
       
   595     return false;
       
   596   }
       
   597   return true;
       
   598 }
       
   599 
       
   600 int C2Compiler::initial_code_buffer_size() {
       
   601   assert(SegmentedCodeCache, "Should be only used with a segmented code cache");
       
   602   return Compile::MAX_inst_size + Compile::MAX_locs_size + initial_const_capacity;
       
   603 }