151 address StubRoutines::_squareToLen = NULL;
152 address StubRoutines::_mulAdd = NULL;
153 address StubRoutines::_montgomeryMultiply = NULL;
154 address StubRoutines::_montgomerySquare = NULL;
155 address StubRoutines::_bigIntegerRightShiftWorker = NULL;
156 address StubRoutines::_bigIntegerLeftShiftWorker = NULL;
157
158 address StubRoutines::_vectorizedMismatch = NULL;
159
160 address StubRoutines::_dexp = NULL;
161 address StubRoutines::_dlog = NULL;
162 address StubRoutines::_dlog10 = NULL;
163 address StubRoutines::_dpow = NULL;
164 address StubRoutines::_dsin = NULL;
165 address StubRoutines::_dcos = NULL;
166 address StubRoutines::_dlibm_sin_cos_huge = NULL;
167 address StubRoutines::_dlibm_reduce_pi04l = NULL;
168 address StubRoutines::_dlibm_tan_cot_huge = NULL;
169 address StubRoutines::_dtan = NULL;
170
171 address StubRoutines::_vector_f_math[VectorSupport::NUM_VEC_SIZES][VectorSupport::NUM_SVML_OP] = {{NULL}, {NULL}};
172 address StubRoutines::_vector_d_math[VectorSupport::NUM_VEC_SIZES][VectorSupport::NUM_SVML_OP] = {{NULL}, {NULL}};
173
174 address StubRoutines::_cont_thaw = NULL;
175 address StubRoutines::_cont_returnBarrier = NULL;
176 address StubRoutines::_cont_returnBarrierExc = NULL;
177
178 JFR_ONLY(RuntimeStub* StubRoutines::_jfr_write_checkpoint_stub = NULL;)
179 JFR_ONLY(address StubRoutines::_jfr_write_checkpoint = NULL;)
180
181 // Initialization
182 //
183 // Note: to break cycle with universe initialization, stubs are generated in two phases.
184 // The first one generates stubs needed during universe init (e.g., _handle_must_compile_first_entry).
185 // The second phase includes all other stubs (which may depend on universe being initialized.)
186
187 extern void StubGenerator_generate(CodeBuffer* code, int phase); // only interface to generators
188
189 void UnsafeCopyMemory::create_table(int max_size) {
190 UnsafeCopyMemory::_table = new UnsafeCopyMemory[max_size];
484 #define RETURN_STUB(xxx_fill) { \
485 name = #xxx_fill; \
486 return StubRoutines::xxx_fill(); }
487
488 switch (t) {
489 case T_BYTE:
490 case T_BOOLEAN:
491 if (!aligned) RETURN_STUB(jbyte_fill);
492 RETURN_STUB(arrayof_jbyte_fill);
493 case T_CHAR:
494 case T_SHORT:
495 if (!aligned) RETURN_STUB(jshort_fill);
496 RETURN_STUB(arrayof_jshort_fill);
497 case T_INT:
498 case T_FLOAT:
499 if (!aligned) RETURN_STUB(jint_fill);
500 RETURN_STUB(arrayof_jint_fill);
501 case T_DOUBLE:
502 case T_LONG:
503 case T_ARRAY:
504 case T_OBJECT:
505 case T_NARROWOOP:
506 case T_NARROWKLASS:
507 case T_ADDRESS:
508 case T_VOID:
509 // Currently unsupported
510 return NULL;
511
512 default:
513 ShouldNotReachHere();
514 return NULL;
515 }
516
517 #undef RETURN_STUB
518 }
519
520 // constants for computing the copy function
521 enum {
522 COPYFUNC_UNALIGNED = 0,
523 COPYFUNC_ALIGNED = 1, // src, dest aligned to HeapWordSize
|
151 address StubRoutines::_squareToLen = NULL;
152 address StubRoutines::_mulAdd = NULL;
153 address StubRoutines::_montgomeryMultiply = NULL;
154 address StubRoutines::_montgomerySquare = NULL;
155 address StubRoutines::_bigIntegerRightShiftWorker = NULL;
156 address StubRoutines::_bigIntegerLeftShiftWorker = NULL;
157
158 address StubRoutines::_vectorizedMismatch = NULL;
159
160 address StubRoutines::_dexp = NULL;
161 address StubRoutines::_dlog = NULL;
162 address StubRoutines::_dlog10 = NULL;
163 address StubRoutines::_dpow = NULL;
164 address StubRoutines::_dsin = NULL;
165 address StubRoutines::_dcos = NULL;
166 address StubRoutines::_dlibm_sin_cos_huge = NULL;
167 address StubRoutines::_dlibm_reduce_pi04l = NULL;
168 address StubRoutines::_dlibm_tan_cot_huge = NULL;
169 address StubRoutines::_dtan = NULL;
170
171 address StubRoutines::_load_inline_type_fields_in_regs = NULL;
172 address StubRoutines::_store_inline_type_fields_to_buf = NULL;
173
174 address StubRoutines::_vector_f_math[VectorSupport::NUM_VEC_SIZES][VectorSupport::NUM_SVML_OP] = {{NULL}, {NULL}};
175 address StubRoutines::_vector_d_math[VectorSupport::NUM_VEC_SIZES][VectorSupport::NUM_SVML_OP] = {{NULL}, {NULL}};
176
177 address StubRoutines::_cont_thaw = NULL;
178 address StubRoutines::_cont_returnBarrier = NULL;
179 address StubRoutines::_cont_returnBarrierExc = NULL;
180
181 JFR_ONLY(RuntimeStub* StubRoutines::_jfr_write_checkpoint_stub = NULL;)
182 JFR_ONLY(address StubRoutines::_jfr_write_checkpoint = NULL;)
183
184 // Initialization
185 //
186 // Note: to break cycle with universe initialization, stubs are generated in two phases.
187 // The first one generates stubs needed during universe init (e.g., _handle_must_compile_first_entry).
188 // The second phase includes all other stubs (which may depend on universe being initialized.)
189
190 extern void StubGenerator_generate(CodeBuffer* code, int phase); // only interface to generators
191
192 void UnsafeCopyMemory::create_table(int max_size) {
193 UnsafeCopyMemory::_table = new UnsafeCopyMemory[max_size];
487 #define RETURN_STUB(xxx_fill) { \
488 name = #xxx_fill; \
489 return StubRoutines::xxx_fill(); }
490
491 switch (t) {
492 case T_BYTE:
493 case T_BOOLEAN:
494 if (!aligned) RETURN_STUB(jbyte_fill);
495 RETURN_STUB(arrayof_jbyte_fill);
496 case T_CHAR:
497 case T_SHORT:
498 if (!aligned) RETURN_STUB(jshort_fill);
499 RETURN_STUB(arrayof_jshort_fill);
500 case T_INT:
501 case T_FLOAT:
502 if (!aligned) RETURN_STUB(jint_fill);
503 RETURN_STUB(arrayof_jint_fill);
504 case T_DOUBLE:
505 case T_LONG:
506 case T_ARRAY:
507 case T_PRIMITIVE_OBJECT:
508 case T_OBJECT:
509 case T_NARROWOOP:
510 case T_NARROWKLASS:
511 case T_ADDRESS:
512 case T_VOID:
513 // Currently unsupported
514 return NULL;
515
516 default:
517 ShouldNotReachHere();
518 return NULL;
519 }
520
521 #undef RETURN_STUB
522 }
523
524 // constants for computing the copy function
525 enum {
526 COPYFUNC_UNALIGNED = 0,
527 COPYFUNC_ALIGNED = 1, // src, dest aligned to HeapWordSize
|