152 address StubRoutines::_squareToLen = nullptr;
153 address StubRoutines::_mulAdd = nullptr;
154 address StubRoutines::_montgomeryMultiply = nullptr;
155 address StubRoutines::_montgomerySquare = nullptr;
156 address StubRoutines::_bigIntegerRightShiftWorker = nullptr;
157 address StubRoutines::_bigIntegerLeftShiftWorker = nullptr;
158
159 address StubRoutines::_vectorizedMismatch = nullptr;
160
161 address StubRoutines::_dexp = nullptr;
162 address StubRoutines::_dlog = nullptr;
163 address StubRoutines::_dlog10 = nullptr;
164 address StubRoutines::_dpow = nullptr;
165 address StubRoutines::_dsin = nullptr;
166 address StubRoutines::_dcos = nullptr;
167 address StubRoutines::_dlibm_sin_cos_huge = nullptr;
168 address StubRoutines::_dlibm_reduce_pi04l = nullptr;
169 address StubRoutines::_dlibm_tan_cot_huge = nullptr;
170 address StubRoutines::_dtan = nullptr;
171
172 address StubRoutines::_f2hf = nullptr;
173 address StubRoutines::_hf2f = nullptr;
174
175 address StubRoutines::_vector_f_math[VectorSupport::NUM_VEC_SIZES][VectorSupport::NUM_SVML_OP] = {{nullptr}, {nullptr}};
176 address StubRoutines::_vector_d_math[VectorSupport::NUM_VEC_SIZES][VectorSupport::NUM_SVML_OP] = {{nullptr}, {nullptr}};
177
178 address StubRoutines::_cont_thaw = nullptr;
179 address StubRoutines::_cont_returnBarrier = nullptr;
180 address StubRoutines::_cont_returnBarrierExc = nullptr;
181
182 JFR_ONLY(RuntimeStub* StubRoutines::_jfr_write_checkpoint_stub = nullptr;)
183 JFR_ONLY(address StubRoutines::_jfr_write_checkpoint = nullptr;)
184
185 // Initialization
186 //
187 // Note: to break cycle with universe initialization, stubs are generated in two phases.
188 // The first one generates stubs needed during universe init (e.g., _handle_must_compile_first_entry).
189 // The second phase includes all other stubs (which may depend on universe being initialized.)
190
191 extern void StubGenerator_generate(CodeBuffer* code, StubCodeGenerator::StubsKind kind); // only interface to generators
519 #define RETURN_STUB(xxx_fill) { \
520 name = #xxx_fill; \
521 return StubRoutines::xxx_fill(); }
522
523 switch (t) {
524 case T_BYTE:
525 case T_BOOLEAN:
526 if (!aligned) RETURN_STUB(jbyte_fill);
527 RETURN_STUB(arrayof_jbyte_fill);
528 case T_CHAR:
529 case T_SHORT:
530 if (!aligned) RETURN_STUB(jshort_fill);
531 RETURN_STUB(arrayof_jshort_fill);
532 case T_INT:
533 case T_FLOAT:
534 if (!aligned) RETURN_STUB(jint_fill);
535 RETURN_STUB(arrayof_jint_fill);
536 case T_DOUBLE:
537 case T_LONG:
538 case T_ARRAY:
539 case T_OBJECT:
540 case T_NARROWOOP:
541 case T_NARROWKLASS:
542 case T_ADDRESS:
543 case T_VOID:
544 // Currently unsupported
545 return nullptr;
546
547 default:
548 ShouldNotReachHere();
549 return nullptr;
550 }
551
552 #undef RETURN_STUB
553 }
554
555 // constants for computing the copy function
556 enum {
557 COPYFUNC_UNALIGNED = 0,
558 COPYFUNC_ALIGNED = 1, // src, dest aligned to HeapWordSize
|
152 address StubRoutines::_squareToLen = nullptr;
153 address StubRoutines::_mulAdd = nullptr;
154 address StubRoutines::_montgomeryMultiply = nullptr;
155 address StubRoutines::_montgomerySquare = nullptr;
156 address StubRoutines::_bigIntegerRightShiftWorker = nullptr;
157 address StubRoutines::_bigIntegerLeftShiftWorker = nullptr;
158
159 address StubRoutines::_vectorizedMismatch = nullptr;
160
161 address StubRoutines::_dexp = nullptr;
162 address StubRoutines::_dlog = nullptr;
163 address StubRoutines::_dlog10 = nullptr;
164 address StubRoutines::_dpow = nullptr;
165 address StubRoutines::_dsin = nullptr;
166 address StubRoutines::_dcos = nullptr;
167 address StubRoutines::_dlibm_sin_cos_huge = nullptr;
168 address StubRoutines::_dlibm_reduce_pi04l = nullptr;
169 address StubRoutines::_dlibm_tan_cot_huge = nullptr;
170 address StubRoutines::_dtan = nullptr;
171
172 address StubRoutines::_load_inline_type_fields_in_regs = nullptr;
173 address StubRoutines::_store_inline_type_fields_to_buf = nullptr;
174
175 address StubRoutines::_f2hf = nullptr;
176 address StubRoutines::_hf2f = nullptr;
177
178 address StubRoutines::_vector_f_math[VectorSupport::NUM_VEC_SIZES][VectorSupport::NUM_SVML_OP] = {{nullptr}, {nullptr}};
179 address StubRoutines::_vector_d_math[VectorSupport::NUM_VEC_SIZES][VectorSupport::NUM_SVML_OP] = {{nullptr}, {nullptr}};
180
181 address StubRoutines::_cont_thaw = nullptr;
182 address StubRoutines::_cont_returnBarrier = nullptr;
183 address StubRoutines::_cont_returnBarrierExc = nullptr;
184
185 JFR_ONLY(RuntimeStub* StubRoutines::_jfr_write_checkpoint_stub = nullptr;)
186 JFR_ONLY(address StubRoutines::_jfr_write_checkpoint = nullptr;)
187
188 // Initialization
189 //
190 // Note: to break cycle with universe initialization, stubs are generated in two phases.
191 // The first one generates stubs needed during universe init (e.g., _handle_must_compile_first_entry).
192 // The second phase includes all other stubs (which may depend on universe being initialized.)
193
194 extern void StubGenerator_generate(CodeBuffer* code, StubCodeGenerator::StubsKind kind); // only interface to generators
522 #define RETURN_STUB(xxx_fill) { \
523 name = #xxx_fill; \
524 return StubRoutines::xxx_fill(); }
525
526 switch (t) {
527 case T_BYTE:
528 case T_BOOLEAN:
529 if (!aligned) RETURN_STUB(jbyte_fill);
530 RETURN_STUB(arrayof_jbyte_fill);
531 case T_CHAR:
532 case T_SHORT:
533 if (!aligned) RETURN_STUB(jshort_fill);
534 RETURN_STUB(arrayof_jshort_fill);
535 case T_INT:
536 case T_FLOAT:
537 if (!aligned) RETURN_STUB(jint_fill);
538 RETURN_STUB(arrayof_jint_fill);
539 case T_DOUBLE:
540 case T_LONG:
541 case T_ARRAY:
542 case T_PRIMITIVE_OBJECT:
543 case T_OBJECT:
544 case T_NARROWOOP:
545 case T_NARROWKLASS:
546 case T_ADDRESS:
547 case T_VOID:
548 // Currently unsupported
549 return nullptr;
550
551 default:
552 ShouldNotReachHere();
553 return nullptr;
554 }
555
556 #undef RETURN_STUB
557 }
558
559 // constants for computing the copy function
560 enum {
561 COPYFUNC_UNALIGNED = 0,
562 COPYFUNC_ALIGNED = 1, // src, dest aligned to HeapWordSize
|