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::_fmod = nullptr;
165 address StubRoutines::_dpow = nullptr;
166 address StubRoutines::_dsin = nullptr;
167 address StubRoutines::_dcos = nullptr;
168 address StubRoutines::_dlibm_sin_cos_huge = nullptr;
169 address StubRoutines::_dlibm_reduce_pi04l = nullptr;
170 address StubRoutines::_dlibm_tan_cot_huge = nullptr;
171 address StubRoutines::_dtan = nullptr;
172
173 address StubRoutines::_f2hf = nullptr;
174 address StubRoutines::_hf2f = nullptr;
175
176 address StubRoutines::_vector_f_math[VectorSupport::NUM_VEC_SIZES][VectorSupport::NUM_SVML_OP] = {{nullptr}, {nullptr}};
177 address StubRoutines::_vector_d_math[VectorSupport::NUM_VEC_SIZES][VectorSupport::NUM_SVML_OP] = {{nullptr}, {nullptr}};
178
179 address StubRoutines::_cont_thaw = nullptr;
180 address StubRoutines::_cont_returnBarrier = nullptr;
181 address StubRoutines::_cont_returnBarrierExc = nullptr;
182
183 JFR_ONLY(RuntimeStub* StubRoutines::_jfr_write_checkpoint_stub = nullptr;)
184 JFR_ONLY(address StubRoutines::_jfr_write_checkpoint = nullptr;)
185 JFR_ONLY(RuntimeStub* StubRoutines::_jfr_return_lease_stub = nullptr;)
186 JFR_ONLY(address StubRoutines::_jfr_return_lease = 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.)
403 #define RETURN_STUB(xxx_fill) { \
404 name = #xxx_fill; \
405 return StubRoutines::xxx_fill(); }
406
407 switch (t) {
408 case T_BYTE:
409 case T_BOOLEAN:
410 if (!aligned) RETURN_STUB(jbyte_fill);
411 RETURN_STUB(arrayof_jbyte_fill);
412 case T_CHAR:
413 case T_SHORT:
414 if (!aligned) RETURN_STUB(jshort_fill);
415 RETURN_STUB(arrayof_jshort_fill);
416 case T_INT:
417 case T_FLOAT:
418 if (!aligned) RETURN_STUB(jint_fill);
419 RETURN_STUB(arrayof_jint_fill);
420 case T_DOUBLE:
421 case T_LONG:
422 case T_ARRAY:
423 case T_OBJECT:
424 case T_NARROWOOP:
425 case T_NARROWKLASS:
426 case T_ADDRESS:
427 case T_VOID:
428 // Currently unsupported
429 return nullptr;
430
431 default:
432 ShouldNotReachHere();
433 return nullptr;
434 }
435
436 #undef RETURN_STUB
437 }
438
439 // constants for computing the copy function
440 enum {
441 COPYFUNC_UNALIGNED = 0,
442 COPYFUNC_ALIGNED = 1, // src, dest aligned to HeapWordSize
|
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::_fmod = nullptr;
165 address StubRoutines::_dpow = nullptr;
166 address StubRoutines::_dsin = nullptr;
167 address StubRoutines::_dcos = nullptr;
168 address StubRoutines::_dlibm_sin_cos_huge = nullptr;
169 address StubRoutines::_dlibm_reduce_pi04l = nullptr;
170 address StubRoutines::_dlibm_tan_cot_huge = nullptr;
171 address StubRoutines::_dtan = nullptr;
172
173 address StubRoutines::_load_inline_type_fields_in_regs = nullptr;
174 address StubRoutines::_store_inline_type_fields_to_buf = nullptr;
175
176 address StubRoutines::_f2hf = nullptr;
177 address StubRoutines::_hf2f = nullptr;
178
179 address StubRoutines::_vector_f_math[VectorSupport::NUM_VEC_SIZES][VectorSupport::NUM_SVML_OP] = {{nullptr}, {nullptr}};
180 address StubRoutines::_vector_d_math[VectorSupport::NUM_VEC_SIZES][VectorSupport::NUM_SVML_OP] = {{nullptr}, {nullptr}};
181
182 address StubRoutines::_cont_thaw = nullptr;
183 address StubRoutines::_cont_returnBarrier = nullptr;
184 address StubRoutines::_cont_returnBarrierExc = nullptr;
185
186 JFR_ONLY(RuntimeStub* StubRoutines::_jfr_write_checkpoint_stub = nullptr;)
187 JFR_ONLY(address StubRoutines::_jfr_write_checkpoint = nullptr;)
188 JFR_ONLY(RuntimeStub* StubRoutines::_jfr_return_lease_stub = nullptr;)
189 JFR_ONLY(address StubRoutines::_jfr_return_lease = nullptr;)
190
191 // Initialization
192 //
193 // Note: to break cycle with universe initialization, stubs are generated in two phases.
194 // The first one generates stubs needed during universe init (e.g., _handle_must_compile_first_entry).
195 // The second phase includes all other stubs (which may depend on universe being initialized.)
406 #define RETURN_STUB(xxx_fill) { \
407 name = #xxx_fill; \
408 return StubRoutines::xxx_fill(); }
409
410 switch (t) {
411 case T_BYTE:
412 case T_BOOLEAN:
413 if (!aligned) RETURN_STUB(jbyte_fill);
414 RETURN_STUB(arrayof_jbyte_fill);
415 case T_CHAR:
416 case T_SHORT:
417 if (!aligned) RETURN_STUB(jshort_fill);
418 RETURN_STUB(arrayof_jshort_fill);
419 case T_INT:
420 case T_FLOAT:
421 if (!aligned) RETURN_STUB(jint_fill);
422 RETURN_STUB(arrayof_jint_fill);
423 case T_DOUBLE:
424 case T_LONG:
425 case T_ARRAY:
426 case T_PRIMITIVE_OBJECT:
427 case T_OBJECT:
428 case T_NARROWOOP:
429 case T_NARROWKLASS:
430 case T_ADDRESS:
431 case T_VOID:
432 // Currently unsupported
433 return nullptr;
434
435 default:
436 ShouldNotReachHere();
437 return nullptr;
438 }
439
440 #undef RETURN_STUB
441 }
442
443 // constants for computing the copy function
444 enum {
445 COPYFUNC_UNALIGNED = 0,
446 COPYFUNC_ALIGNED = 1, // src, dest aligned to HeapWordSize
|