Path: blob/master/src/hotspot/share/opto/c2compiler.cpp
40930 views
/*1* Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*22*/2324#include "precompiled.hpp"25#include "classfile/vmClasses.hpp"26#include "runtime/handles.inline.hpp"27#include "jfr/support/jfrIntrinsics.hpp"28#include "opto/c2compiler.hpp"29#include "opto/compile.hpp"30#include "opto/optoreg.hpp"31#include "opto/output.hpp"32#include "opto/runtime.hpp"33#include "runtime/stubRoutines.hpp"34#include "utilities/macros.hpp"353637// register information defined by ADLC38extern const char register_save_policy[];39extern const int register_save_type[];4041const char* C2Compiler::retry_no_subsuming_loads() {42return "retry without subsuming loads";43}44const char* C2Compiler::retry_no_escape_analysis() {45return "retry without escape analysis";46}47const char* C2Compiler::retry_class_loading_during_parsing() {48return "retry class loading during parsing";49}50bool C2Compiler::init_c2_runtime() {5152// Check assumptions used while running ADLC53Compile::adlc_verification();54assert(REG_COUNT <= ConcreteRegisterImpl::number_of_registers, "incompatible register counts");5556for (int i = 0; i < ConcreteRegisterImpl::number_of_registers ; i++ ) {57OptoReg::vm2opto[i] = OptoReg::Bad;58}5960for( OptoReg::Name i=OptoReg::Name(0); i<OptoReg::Name(REG_COUNT); i = OptoReg::add(i,1) ) {61VMReg r = OptoReg::as_VMReg(i);62if (r->is_valid()) {63OptoReg::vm2opto[r->value()] = i;64}65}6667DEBUG_ONLY( Node::init_NodeProperty(); )6869Compile::pd_compiler2_init();7071CompilerThread* thread = CompilerThread::current();7273HandleMark handle_mark(thread);74return OptoRuntime::generate(thread->env());75}7677void C2Compiler::initialize() {78assert(!CompilerConfig::is_c1_or_interpreter_only_no_jvmci(), "C2 compiler is launched, it's not c1/interpreter only mode");79// The first compiler thread that gets here will initialize the80// small amount of global state (and runtime stubs) that C2 needs.8182// There is a race possible once at startup and then we're fine8384// Note that this is being called from a compiler thread not the85// main startup thread.86if (should_perform_init()) {87bool successful = C2Compiler::init_c2_runtime();88int new_state = (successful) ? initialized : failed;89set_state(new_state);90}91}9293void C2Compiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci, bool install_code, DirectiveSet* directive) {94assert(is_initialized(), "Compiler thread must be initialized");9596bool subsume_loads = SubsumeLoads;97bool do_escape_analysis = DoEscapeAnalysis;98bool eliminate_boxing = EliminateAutoBox;99100while (!env->failing()) {101// Attempt to compile while subsuming loads into machine instructions.102Compile C(env, target, entry_bci, subsume_loads, do_escape_analysis, eliminate_boxing, install_code, directive);103104// Check result and retry if appropriate.105if (C.failure_reason() != NULL) {106if (C.failure_reason_is(retry_class_loading_during_parsing())) {107env->report_failure(C.failure_reason());108continue; // retry109}110if (C.failure_reason_is(retry_no_subsuming_loads())) {111assert(subsume_loads, "must make progress");112subsume_loads = false;113env->report_failure(C.failure_reason());114continue; // retry115}116if (C.failure_reason_is(retry_no_escape_analysis())) {117assert(do_escape_analysis, "must make progress");118do_escape_analysis = false;119env->report_failure(C.failure_reason());120continue; // retry121}122if (C.has_boxed_value()) {123// Recompile without boxing elimination regardless failure reason.124assert(eliminate_boxing, "must make progress");125eliminate_boxing = false;126env->report_failure(C.failure_reason());127continue; // retry128}129// Pass any other failure reason up to the ciEnv.130// Note that serious, irreversible failures are already logged131// on the ciEnv via env->record_method_not_compilable().132env->record_failure(C.failure_reason());133}134if (StressRecompilation) {135if (subsume_loads) {136subsume_loads = false;137continue; // retry138}139if (do_escape_analysis) {140do_escape_analysis = false;141continue; // retry142}143}144// print inlining for last compilation only145C.dump_print_inlining();146147// No retry; just break the loop.148break;149}150}151152void C2Compiler::print_timers() {153Compile::print_timers();154}155156bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virtual) {157vmIntrinsics::ID id = method->intrinsic_id();158assert(id != vmIntrinsics::_none, "must be a VM intrinsic");159160if (id < vmIntrinsics::FIRST_ID || id > vmIntrinsics::LAST_COMPILER_INLINE) {161return false;162}163164// Only Object.hashCode and Object.clone intrinsics implement also a virtual165// dispatch because calling both methods is expensive but both methods are166// frequently overridden. All other intrinsics implement only a non-virtual167// dispatch.168if (is_virtual) {169switch (id) {170case vmIntrinsics::_hashCode:171case vmIntrinsics::_clone:172break;173default:174return false;175}176}177178switch (id) {179case vmIntrinsics::_compressStringC:180case vmIntrinsics::_compressStringB:181if (!Matcher::match_rule_supported(Op_StrCompressedCopy)) return false;182break;183case vmIntrinsics::_inflateStringC:184case vmIntrinsics::_inflateStringB:185if (!Matcher::match_rule_supported(Op_StrInflatedCopy)) return false;186break;187case vmIntrinsics::_compareToL:188case vmIntrinsics::_compareToU:189case vmIntrinsics::_compareToLU:190case vmIntrinsics::_compareToUL:191if (!Matcher::match_rule_supported(Op_StrComp)) return false;192break;193case vmIntrinsics::_equalsL:194case vmIntrinsics::_equalsU:195if (!Matcher::match_rule_supported(Op_StrEquals)) return false;196break;197case vmIntrinsics::_equalsB:198case vmIntrinsics::_equalsC:199if (!Matcher::match_rule_supported(Op_AryEq)) return false;200break;201case vmIntrinsics::_copyMemory:202if (StubRoutines::unsafe_arraycopy() == NULL) return false;203break;204case vmIntrinsics::_encodeISOArray:205case vmIntrinsics::_encodeByteISOArray:206if (!Matcher::match_rule_supported(Op_EncodeISOArray)) return false;207break;208case vmIntrinsics::_hasNegatives:209if (!Matcher::match_rule_supported(Op_HasNegatives)) return false;210break;211case vmIntrinsics::_bitCount_i:212if (!Matcher::match_rule_supported(Op_PopCountI)) return false;213break;214case vmIntrinsics::_bitCount_l:215if (!Matcher::match_rule_supported(Op_PopCountL)) return false;216break;217case vmIntrinsics::_numberOfLeadingZeros_i:218if (!Matcher::match_rule_supported(Op_CountLeadingZerosI)) return false;219break;220case vmIntrinsics::_numberOfLeadingZeros_l:221if (!Matcher::match_rule_supported(Op_CountLeadingZerosL)) return false;222break;223case vmIntrinsics::_numberOfTrailingZeros_i:224if (!Matcher::match_rule_supported(Op_CountTrailingZerosI)) return false;225break;226case vmIntrinsics::_numberOfTrailingZeros_l:227if (!Matcher::match_rule_supported(Op_CountTrailingZerosL)) return false;228break;229case vmIntrinsics::_reverseBytes_c:230if (!Matcher::match_rule_supported(Op_ReverseBytesUS)) return false;231break;232case vmIntrinsics::_reverseBytes_s:233if (!Matcher::match_rule_supported(Op_ReverseBytesS)) return false;234break;235case vmIntrinsics::_reverseBytes_i:236if (!Matcher::match_rule_supported(Op_ReverseBytesI)) return false;237break;238case vmIntrinsics::_reverseBytes_l:239if (!Matcher::match_rule_supported(Op_ReverseBytesL)) return false;240break;241242/* CompareAndSet, Object: */243case vmIntrinsics::_compareAndSetReference:244#ifdef _LP64245if ( UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndSwapN)) return false;246if (!UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndSwapP)) return false;247#else248if (!Matcher::match_rule_supported(Op_CompareAndSwapP)) return false;249#endif250break;251case vmIntrinsics::_weakCompareAndSetReferencePlain:252case vmIntrinsics::_weakCompareAndSetReferenceAcquire:253case vmIntrinsics::_weakCompareAndSetReferenceRelease:254case vmIntrinsics::_weakCompareAndSetReference:255#ifdef _LP64256if ( UseCompressedOops && !Matcher::match_rule_supported(Op_WeakCompareAndSwapN)) return false;257if (!UseCompressedOops && !Matcher::match_rule_supported(Op_WeakCompareAndSwapP)) return false;258#else259if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapP)) return false;260#endif261break;262/* CompareAndSet, Long: */263case vmIntrinsics::_compareAndSetLong:264if (!Matcher::match_rule_supported(Op_CompareAndSwapL)) return false;265break;266case vmIntrinsics::_weakCompareAndSetLongPlain:267case vmIntrinsics::_weakCompareAndSetLongAcquire:268case vmIntrinsics::_weakCompareAndSetLongRelease:269case vmIntrinsics::_weakCompareAndSetLong:270if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapL)) return false;271break;272273/* CompareAndSet, Int: */274case vmIntrinsics::_compareAndSetInt:275if (!Matcher::match_rule_supported(Op_CompareAndSwapI)) return false;276break;277case vmIntrinsics::_weakCompareAndSetIntPlain:278case vmIntrinsics::_weakCompareAndSetIntAcquire:279case vmIntrinsics::_weakCompareAndSetIntRelease:280case vmIntrinsics::_weakCompareAndSetInt:281if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapI)) return false;282break;283284/* CompareAndSet, Byte: */285case vmIntrinsics::_compareAndSetByte:286if (!Matcher::match_rule_supported(Op_CompareAndSwapB)) return false;287break;288case vmIntrinsics::_weakCompareAndSetBytePlain:289case vmIntrinsics::_weakCompareAndSetByteAcquire:290case vmIntrinsics::_weakCompareAndSetByteRelease:291case vmIntrinsics::_weakCompareAndSetByte:292if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapB)) return false;293break;294295/* CompareAndSet, Short: */296case vmIntrinsics::_compareAndSetShort:297if (!Matcher::match_rule_supported(Op_CompareAndSwapS)) return false;298break;299case vmIntrinsics::_weakCompareAndSetShortPlain:300case vmIntrinsics::_weakCompareAndSetShortAcquire:301case vmIntrinsics::_weakCompareAndSetShortRelease:302case vmIntrinsics::_weakCompareAndSetShort:303if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapS)) return false;304break;305306/* CompareAndExchange, Object: */307case vmIntrinsics::_compareAndExchangeReference:308case vmIntrinsics::_compareAndExchangeReferenceAcquire:309case vmIntrinsics::_compareAndExchangeReferenceRelease:310#ifdef _LP64311if ( UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndExchangeN)) return false;312if (!UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndExchangeP)) return false;313#else314if (!Matcher::match_rule_supported(Op_CompareAndExchangeP)) return false;315#endif316break;317318/* CompareAndExchange, Long: */319case vmIntrinsics::_compareAndExchangeLong:320case vmIntrinsics::_compareAndExchangeLongAcquire:321case vmIntrinsics::_compareAndExchangeLongRelease:322if (!Matcher::match_rule_supported(Op_CompareAndExchangeL)) return false;323break;324325/* CompareAndExchange, Int: */326case vmIntrinsics::_compareAndExchangeInt:327case vmIntrinsics::_compareAndExchangeIntAcquire:328case vmIntrinsics::_compareAndExchangeIntRelease:329if (!Matcher::match_rule_supported(Op_CompareAndExchangeI)) return false;330break;331332/* CompareAndExchange, Byte: */333case vmIntrinsics::_compareAndExchangeByte:334case vmIntrinsics::_compareAndExchangeByteAcquire:335case vmIntrinsics::_compareAndExchangeByteRelease:336if (!Matcher::match_rule_supported(Op_CompareAndExchangeB)) return false;337break;338339/* CompareAndExchange, Short: */340case vmIntrinsics::_compareAndExchangeShort:341case vmIntrinsics::_compareAndExchangeShortAcquire:342case vmIntrinsics::_compareAndExchangeShortRelease:343if (!Matcher::match_rule_supported(Op_CompareAndExchangeS)) return false;344break;345346case vmIntrinsics::_getAndAddByte:347if (!Matcher::match_rule_supported(Op_GetAndAddB)) return false;348break;349case vmIntrinsics::_getAndAddShort:350if (!Matcher::match_rule_supported(Op_GetAndAddS)) return false;351break;352case vmIntrinsics::_getAndAddInt:353if (!Matcher::match_rule_supported(Op_GetAndAddI)) return false;354break;355case vmIntrinsics::_getAndAddLong:356if (!Matcher::match_rule_supported(Op_GetAndAddL)) return false;357break;358359case vmIntrinsics::_getAndSetByte:360if (!Matcher::match_rule_supported(Op_GetAndSetB)) return false;361break;362case vmIntrinsics::_getAndSetShort:363if (!Matcher::match_rule_supported(Op_GetAndSetS)) return false;364break;365case vmIntrinsics::_getAndSetInt:366if (!Matcher::match_rule_supported(Op_GetAndSetI)) return false;367break;368case vmIntrinsics::_getAndSetLong:369if (!Matcher::match_rule_supported(Op_GetAndSetL)) return false;370break;371case vmIntrinsics::_getAndSetReference:372#ifdef _LP64373if (!UseCompressedOops && !Matcher::match_rule_supported(Op_GetAndSetP)) return false;374if (UseCompressedOops && !Matcher::match_rule_supported(Op_GetAndSetN)) return false;375break;376#else377if (!Matcher::match_rule_supported(Op_GetAndSetP)) return false;378break;379#endif380case vmIntrinsics::_incrementExactI:381case vmIntrinsics::_addExactI:382if (!Matcher::match_rule_supported(Op_OverflowAddI)) return false;383break;384case vmIntrinsics::_incrementExactL:385case vmIntrinsics::_addExactL:386if (!Matcher::match_rule_supported(Op_OverflowAddL)) return false;387break;388case vmIntrinsics::_decrementExactI:389case vmIntrinsics::_subtractExactI:390if (!Matcher::match_rule_supported(Op_OverflowSubI)) return false;391break;392case vmIntrinsics::_decrementExactL:393case vmIntrinsics::_subtractExactL:394if (!Matcher::match_rule_supported(Op_OverflowSubL)) return false;395break;396case vmIntrinsics::_negateExactI:397if (!Matcher::match_rule_supported(Op_OverflowSubI)) return false;398break;399case vmIntrinsics::_negateExactL:400if (!Matcher::match_rule_supported(Op_OverflowSubL)) return false;401break;402case vmIntrinsics::_multiplyExactI:403if (!Matcher::match_rule_supported(Op_OverflowMulI)) return false;404break;405case vmIntrinsics::_multiplyExactL:406if (!Matcher::match_rule_supported(Op_OverflowMulL)) return false;407break;408case vmIntrinsics::_multiplyHigh:409if (!Matcher::match_rule_supported(Op_MulHiL)) return false;410break;411case vmIntrinsics::_getCallerClass:412if (vmClasses::reflect_CallerSensitive_klass() == NULL) return false;413break;414case vmIntrinsics::_onSpinWait:415if (!Matcher::match_rule_supported(Op_OnSpinWait)) return false;416break;417case vmIntrinsics::_fmaD:418if (!UseFMA || !Matcher::match_rule_supported(Op_FmaD)) return false;419break;420case vmIntrinsics::_fmaF:421if (!UseFMA || !Matcher::match_rule_supported(Op_FmaF)) return false;422break;423case vmIntrinsics::_isDigit:424if (!Matcher::match_rule_supported(Op_Digit)) return false;425break;426case vmIntrinsics::_isLowerCase:427if (!Matcher::match_rule_supported(Op_LowerCase)) return false;428break;429case vmIntrinsics::_isUpperCase:430if (!Matcher::match_rule_supported(Op_UpperCase)) return false;431break;432case vmIntrinsics::_isWhitespace:433if (!Matcher::match_rule_supported(Op_Whitespace)) return false;434break;435case vmIntrinsics::_maxF:436if (!Matcher::match_rule_supported(Op_MaxF)) return false;437break;438case vmIntrinsics::_minF:439if (!Matcher::match_rule_supported(Op_MinF)) return false;440break;441case vmIntrinsics::_maxD:442if (!Matcher::match_rule_supported(Op_MaxD)) return false;443break;444case vmIntrinsics::_minD:445if (!Matcher::match_rule_supported(Op_MinD)) return false;446break;447case vmIntrinsics::_writeback0:448if (!Matcher::match_rule_supported(Op_CacheWB)) return false;449break;450case vmIntrinsics::_writebackPreSync0:451if (!Matcher::match_rule_supported(Op_CacheWBPreSync)) return false;452break;453case vmIntrinsics::_writebackPostSync0:454if (!Matcher::match_rule_supported(Op_CacheWBPostSync)) return false;455break;456case vmIntrinsics::_rint:457case vmIntrinsics::_ceil:458case vmIntrinsics::_floor:459if (!Matcher::match_rule_supported(Op_RoundDoubleMode)) return false;460break;461case vmIntrinsics::_dcopySign:462if (!Matcher::match_rule_supported(Op_CopySignD)) return false;463break;464case vmIntrinsics::_fcopySign:465if (!Matcher::match_rule_supported(Op_CopySignF)) return false;466break;467case vmIntrinsics::_dsignum:468if (!Matcher::match_rule_supported(Op_SignumD)) return false;469break;470case vmIntrinsics::_fsignum:471if (!Matcher::match_rule_supported(Op_SignumF)) return false;472break;473case vmIntrinsics::_hashCode:474case vmIntrinsics::_identityHashCode:475case vmIntrinsics::_getClass:476case vmIntrinsics::_dsin:477case vmIntrinsics::_dcos:478case vmIntrinsics::_dtan:479case vmIntrinsics::_dabs:480case vmIntrinsics::_fabs:481case vmIntrinsics::_iabs:482case vmIntrinsics::_labs:483case vmIntrinsics::_datan2:484case vmIntrinsics::_dsqrt:485case vmIntrinsics::_dexp:486case vmIntrinsics::_dlog:487case vmIntrinsics::_dlog10:488case vmIntrinsics::_dpow:489case vmIntrinsics::_min:490case vmIntrinsics::_max:491case vmIntrinsics::_arraycopy:492case vmIntrinsics::_indexOfL:493case vmIntrinsics::_indexOfU:494case vmIntrinsics::_indexOfUL:495case vmIntrinsics::_indexOfIL:496case vmIntrinsics::_indexOfIU:497case vmIntrinsics::_indexOfIUL:498case vmIntrinsics::_indexOfU_char:499case vmIntrinsics::_indexOfL_char:500case vmIntrinsics::_toBytesStringU:501case vmIntrinsics::_getCharsStringU:502case vmIntrinsics::_getCharStringU:503case vmIntrinsics::_putCharStringU:504case vmIntrinsics::_getReference:505case vmIntrinsics::_getBoolean:506case vmIntrinsics::_getByte:507case vmIntrinsics::_getShort:508case vmIntrinsics::_getChar:509case vmIntrinsics::_getInt:510case vmIntrinsics::_getLong:511case vmIntrinsics::_getFloat:512case vmIntrinsics::_getDouble:513case vmIntrinsics::_putReference:514case vmIntrinsics::_putBoolean:515case vmIntrinsics::_putByte:516case vmIntrinsics::_putShort:517case vmIntrinsics::_putChar:518case vmIntrinsics::_putInt:519case vmIntrinsics::_putLong:520case vmIntrinsics::_putFloat:521case vmIntrinsics::_putDouble:522case vmIntrinsics::_getReferenceVolatile:523case vmIntrinsics::_getBooleanVolatile:524case vmIntrinsics::_getByteVolatile:525case vmIntrinsics::_getShortVolatile:526case vmIntrinsics::_getCharVolatile:527case vmIntrinsics::_getIntVolatile:528case vmIntrinsics::_getLongVolatile:529case vmIntrinsics::_getFloatVolatile:530case vmIntrinsics::_getDoubleVolatile:531case vmIntrinsics::_putReferenceVolatile:532case vmIntrinsics::_putBooleanVolatile:533case vmIntrinsics::_putByteVolatile:534case vmIntrinsics::_putShortVolatile:535case vmIntrinsics::_putCharVolatile:536case vmIntrinsics::_putIntVolatile:537case vmIntrinsics::_putLongVolatile:538case vmIntrinsics::_putFloatVolatile:539case vmIntrinsics::_putDoubleVolatile:540case vmIntrinsics::_getReferenceAcquire:541case vmIntrinsics::_getBooleanAcquire:542case vmIntrinsics::_getByteAcquire:543case vmIntrinsics::_getShortAcquire:544case vmIntrinsics::_getCharAcquire:545case vmIntrinsics::_getIntAcquire:546case vmIntrinsics::_getLongAcquire:547case vmIntrinsics::_getFloatAcquire:548case vmIntrinsics::_getDoubleAcquire:549case vmIntrinsics::_putReferenceRelease:550case vmIntrinsics::_putBooleanRelease:551case vmIntrinsics::_putByteRelease:552case vmIntrinsics::_putShortRelease:553case vmIntrinsics::_putCharRelease:554case vmIntrinsics::_putIntRelease:555case vmIntrinsics::_putLongRelease:556case vmIntrinsics::_putFloatRelease:557case vmIntrinsics::_putDoubleRelease:558case vmIntrinsics::_getReferenceOpaque:559case vmIntrinsics::_getBooleanOpaque:560case vmIntrinsics::_getByteOpaque:561case vmIntrinsics::_getShortOpaque:562case vmIntrinsics::_getCharOpaque:563case vmIntrinsics::_getIntOpaque:564case vmIntrinsics::_getLongOpaque:565case vmIntrinsics::_getFloatOpaque:566case vmIntrinsics::_getDoubleOpaque:567case vmIntrinsics::_putReferenceOpaque:568case vmIntrinsics::_putBooleanOpaque:569case vmIntrinsics::_putByteOpaque:570case vmIntrinsics::_putShortOpaque:571case vmIntrinsics::_putCharOpaque:572case vmIntrinsics::_putIntOpaque:573case vmIntrinsics::_putLongOpaque:574case vmIntrinsics::_putFloatOpaque:575case vmIntrinsics::_putDoubleOpaque:576case vmIntrinsics::_getShortUnaligned:577case vmIntrinsics::_getCharUnaligned:578case vmIntrinsics::_getIntUnaligned:579case vmIntrinsics::_getLongUnaligned:580case vmIntrinsics::_putShortUnaligned:581case vmIntrinsics::_putCharUnaligned:582case vmIntrinsics::_putIntUnaligned:583case vmIntrinsics::_putLongUnaligned:584case vmIntrinsics::_loadFence:585case vmIntrinsics::_storeFence:586case vmIntrinsics::_fullFence:587case vmIntrinsics::_currentThread:588#ifdef JFR_HAVE_INTRINSICS589case vmIntrinsics::_counterTime:590case vmIntrinsics::_getClassId:591case vmIntrinsics::_getEventWriter:592#endif593case vmIntrinsics::_currentTimeMillis:594case vmIntrinsics::_nanoTime:595case vmIntrinsics::_allocateInstance:596case vmIntrinsics::_allocateUninitializedArray:597case vmIntrinsics::_newArray:598case vmIntrinsics::_getLength:599case vmIntrinsics::_copyOf:600case vmIntrinsics::_copyOfRange:601case vmIntrinsics::_clone:602case vmIntrinsics::_isAssignableFrom:603case vmIntrinsics::_isInstance:604case vmIntrinsics::_getModifiers:605case vmIntrinsics::_isInterface:606case vmIntrinsics::_isArray:607case vmIntrinsics::_isPrimitive:608case vmIntrinsics::_isHidden:609case vmIntrinsics::_getSuperclass:610case vmIntrinsics::_getClassAccessFlags:611case vmIntrinsics::_floatToRawIntBits:612case vmIntrinsics::_floatToIntBits:613case vmIntrinsics::_intBitsToFloat:614case vmIntrinsics::_doubleToRawLongBits:615case vmIntrinsics::_doubleToLongBits:616case vmIntrinsics::_longBitsToDouble:617case vmIntrinsics::_Reference_get:618case vmIntrinsics::_Reference_refersTo0:619case vmIntrinsics::_PhantomReference_refersTo0:620case vmIntrinsics::_Class_cast:621case vmIntrinsics::_aescrypt_encryptBlock:622case vmIntrinsics::_aescrypt_decryptBlock:623case vmIntrinsics::_cipherBlockChaining_encryptAESCrypt:624case vmIntrinsics::_cipherBlockChaining_decryptAESCrypt:625case vmIntrinsics::_electronicCodeBook_encryptAESCrypt:626case vmIntrinsics::_electronicCodeBook_decryptAESCrypt:627case vmIntrinsics::_counterMode_AESCrypt:628case vmIntrinsics::_md5_implCompress:629case vmIntrinsics::_sha_implCompress:630case vmIntrinsics::_sha2_implCompress:631case vmIntrinsics::_sha5_implCompress:632case vmIntrinsics::_sha3_implCompress:633case vmIntrinsics::_digestBase_implCompressMB:634case vmIntrinsics::_multiplyToLen:635case vmIntrinsics::_squareToLen:636case vmIntrinsics::_mulAdd:637case vmIntrinsics::_montgomeryMultiply:638case vmIntrinsics::_montgomerySquare:639case vmIntrinsics::_bigIntegerRightShiftWorker:640case vmIntrinsics::_bigIntegerLeftShiftWorker:641case vmIntrinsics::_vectorizedMismatch:642case vmIntrinsics::_ghash_processBlocks:643case vmIntrinsics::_base64_encodeBlock:644case vmIntrinsics::_base64_decodeBlock:645case vmIntrinsics::_updateCRC32:646case vmIntrinsics::_updateBytesCRC32:647case vmIntrinsics::_updateByteBufferCRC32:648case vmIntrinsics::_updateBytesCRC32C:649case vmIntrinsics::_updateDirectByteBufferCRC32C:650case vmIntrinsics::_updateBytesAdler32:651case vmIntrinsics::_updateByteBufferAdler32:652case vmIntrinsics::_profileBoolean:653case vmIntrinsics::_isCompileConstant:654case vmIntrinsics::_Preconditions_checkIndex:655case vmIntrinsics::_Preconditions_checkLongIndex:656case vmIntrinsics::_getObjectSize:657break;658659case vmIntrinsics::_VectorUnaryOp:660case vmIntrinsics::_VectorBinaryOp:661case vmIntrinsics::_VectorTernaryOp:662case vmIntrinsics::_VectorBroadcastCoerced:663case vmIntrinsics::_VectorShuffleIota:664case vmIntrinsics::_VectorShuffleToVector:665case vmIntrinsics::_VectorLoadOp:666case vmIntrinsics::_VectorStoreOp:667case vmIntrinsics::_VectorGatherOp:668case vmIntrinsics::_VectorScatterOp:669case vmIntrinsics::_VectorReductionCoerced:670case vmIntrinsics::_VectorTest:671case vmIntrinsics::_VectorBlend:672case vmIntrinsics::_VectorRearrange:673case vmIntrinsics::_VectorCompare:674case vmIntrinsics::_VectorBroadcastInt:675case vmIntrinsics::_VectorConvert:676case vmIntrinsics::_VectorInsert:677case vmIntrinsics::_VectorExtract:678case vmIntrinsics::_VectorMaskOp:679return EnableVectorSupport;680case vmIntrinsics::_blackhole:681break;682683default:684return false;685}686return true;687}688689int C2Compiler::initial_code_buffer_size(int const_size) {690// See Compile::init_scratch_buffer_blob691int locs_size = sizeof(relocInfo) * PhaseOutput::MAX_locs_size;692int slop = 2 * CodeSection::end_slop(); // space between sections693return PhaseOutput::MAX_inst_size + PhaseOutput::MAX_stubs_size + const_size + slop + locs_size;694}695696697