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