< prev index next >

src/hotspot/share/runtime/stubRoutines.hpp

Print this page

185 
186 // declare global stub id enum
187 
188 #define STUB_ENUM_DECLARE(blob_name, stub_name) \
189   STUB_ID_NAME(stub_name) ,
190 
191 enum StubGenStubId : int {
192   NO_STUBID = -1,
193   STUBGEN_STUBS_DO(STUB_ENUM_DECLARE)
194   NUM_STUBIDS
195 };
196 
197 #undef STUB_ENUM_DECLARE
198 
199 class StubRoutines: AllStatic {
200 
201 public:
202   // Dependencies
203   friend class StubGenerator;
204   friend class VMStructs;

205 #if INCLUDE_JVMCI
206   friend class JVMCIVMStructs;
207 #endif
208 
209 #include CPU_HEADER(stubRoutines)
210 
211 // declare blob and stub name storage and associated lookup methods
212 
213 private:
214   static bool _inited_names;
215   static const char* _blob_names[StubGenBlobId::NUM_BLOBIDS];
216   static const char* _stub_names[StubGenStubId::NUM_STUBIDS];
217 
218 public:
219   static bool init_names();
220   static const char* get_blob_name(StubGenBlobId id);
221   static const char* get_stub_name(StubGenStubId id);
222 
223 // declare blob fields
224 

322 // define getters for stub code blobs
323 
324 #define DEFINE_BLOB_GETTER(blob_name) \
325   static RuntimeBlob* blob_name ## _stubs_code() { return _ ## blob_name ## _stubs_code; }
326 
327   STUBGEN_BLOBS_DO(DEFINE_BLOB_GETTER);
328 
329 #undef DEFINE_BLOB_GETTER
330 
331 #ifdef ASSERT
332   // provide a translation from stub id to its associated blob id
333   static StubGenBlobId stub_to_blob(StubGenStubId stubId);
334 #endif
335 
336   // Debugging
337   static jint    verify_oop_count()                        { return _verify_oop_count; }
338   static jint*   verify_oop_count_addr()                   { return &_verify_oop_count; }
339   // a subroutine for debugging the GC
340   static address verify_oop_subroutine_entry_address()     { return (address)&_verify_oop_subroutine_entry; }
341 
342   static CallStub call_stub()                              { return CAST_TO_FN_PTR(CallStub, _call_stub_entry); }
343 
344   static address select_arraycopy_function(BasicType t, bool aligned, bool disjoint, const char* &name, bool dest_uninitialized);
345 
346   static address oop_arraycopy(bool dest_uninitialized = false) {
347     return dest_uninitialized ? _oop_arraycopy_uninit : _oop_arraycopy;
348   }
349 
350   static address oop_disjoint_arraycopy(bool dest_uninitialized = false) {
351     return dest_uninitialized ?  _oop_disjoint_arraycopy_uninit : _oop_disjoint_arraycopy;
352   }
353 
354   static address arrayof_oop_arraycopy(bool dest_uninitialized = false) {
355     return dest_uninitialized ? _arrayof_oop_arraycopy_uninit : _arrayof_oop_arraycopy;
356   }
357 
358   static address arrayof_oop_disjoint_arraycopy(bool dest_uninitialized = false) {
359     return dest_uninitialized ? _arrayof_oop_disjoint_arraycopy_uninit : _arrayof_oop_disjoint_arraycopy;
360   }
361 






362   typedef void (*DataCacheWritebackStub)(void *);
363   static DataCacheWritebackStub DataCacheWriteback_stub()         { return CAST_TO_FN_PTR(DataCacheWritebackStub,  _data_cache_writeback); }
364   typedef void (*DataCacheWritebackSyncStub)(bool);
365   static DataCacheWritebackSyncStub DataCacheWritebackSync_stub() { return CAST_TO_FN_PTR(DataCacheWritebackSyncStub,  _data_cache_writeback_sync); }
366 
367   static address checkcast_arraycopy(bool dest_uninitialized = false) {
368     return dest_uninitialized ? _checkcast_arraycopy_uninit : _checkcast_arraycopy;
369   }
370 
371   typedef void (*UnsafeArrayCopyStub)(const void* src, void* dst, size_t count);
372   static UnsafeArrayCopyStub UnsafeArrayCopy_stub()         { return CAST_TO_FN_PTR(UnsafeArrayCopyStub,  _unsafe_arraycopy); }
373 
374   typedef void (*UnsafeSetMemoryStub)(void* dst, size_t count, char byte);
375   static UnsafeSetMemoryStub UnsafeSetMemory_stub()         { return CAST_TO_FN_PTR(UnsafeSetMemoryStub,  _unsafe_setmemory); }
376 
377   static jshort f2hf(jfloat x) {
378     assert(_f2hf != nullptr, "stub is not implemented on this platform");
379     MACOS_AARCH64_ONLY(ThreadWXEnable wx(WXExec, Thread::current());) // About to call into code cache
380     typedef jshort (*f2hf_stub_t)(jfloat x);
381     return ((f2hf_stub_t)_f2hf)(x);

185 
186 // declare global stub id enum
187 
188 #define STUB_ENUM_DECLARE(blob_name, stub_name) \
189   STUB_ID_NAME(stub_name) ,
190 
191 enum StubGenStubId : int {
192   NO_STUBID = -1,
193   STUBGEN_STUBS_DO(STUB_ENUM_DECLARE)
194   NUM_STUBIDS
195 };
196 
197 #undef STUB_ENUM_DECLARE
198 
199 class StubRoutines: AllStatic {
200 
201 public:
202   // Dependencies
203   friend class StubGenerator;
204   friend class VMStructs;
205   friend class AOTCodeAddressTable;
206 #if INCLUDE_JVMCI
207   friend class JVMCIVMStructs;
208 #endif
209 
210 #include CPU_HEADER(stubRoutines)
211 
212 // declare blob and stub name storage and associated lookup methods
213 
214 private:
215   static bool _inited_names;
216   static const char* _blob_names[StubGenBlobId::NUM_BLOBIDS];
217   static const char* _stub_names[StubGenStubId::NUM_STUBIDS];
218 
219 public:
220   static bool init_names();
221   static const char* get_blob_name(StubGenBlobId id);
222   static const char* get_stub_name(StubGenStubId id);
223 
224 // declare blob fields
225 

323 // define getters for stub code blobs
324 
325 #define DEFINE_BLOB_GETTER(blob_name) \
326   static RuntimeBlob* blob_name ## _stubs_code() { return _ ## blob_name ## _stubs_code; }
327 
328   STUBGEN_BLOBS_DO(DEFINE_BLOB_GETTER);
329 
330 #undef DEFINE_BLOB_GETTER
331 
332 #ifdef ASSERT
333   // provide a translation from stub id to its associated blob id
334   static StubGenBlobId stub_to_blob(StubGenStubId stubId);
335 #endif
336 
337   // Debugging
338   static jint    verify_oop_count()                        { return _verify_oop_count; }
339   static jint*   verify_oop_count_addr()                   { return &_verify_oop_count; }
340   // a subroutine for debugging the GC
341   static address verify_oop_subroutine_entry_address()     { return (address)&_verify_oop_subroutine_entry; }
342 
343   static CallStub call_stub()                              { assert(_call_stub_entry != nullptr, ""); return CAST_TO_FN_PTR(CallStub, _call_stub_entry); }
344 
345   static address select_arraycopy_function(BasicType t, bool aligned, bool disjoint, const char* &name, bool dest_uninitialized);
346 
347   static address oop_arraycopy(bool dest_uninitialized = false) {
348     return dest_uninitialized ? _oop_arraycopy_uninit : _oop_arraycopy;
349   }
350 
351   static address oop_disjoint_arraycopy(bool dest_uninitialized = false) {
352     return dest_uninitialized ?  _oop_disjoint_arraycopy_uninit : _oop_disjoint_arraycopy;
353   }
354 
355   static address arrayof_oop_arraycopy(bool dest_uninitialized = false) {
356     return dest_uninitialized ? _arrayof_oop_arraycopy_uninit : _arrayof_oop_arraycopy;
357   }
358 
359   static address arrayof_oop_disjoint_arraycopy(bool dest_uninitialized = false) {
360     return dest_uninitialized ? _arrayof_oop_disjoint_arraycopy_uninit : _arrayof_oop_disjoint_arraycopy;
361   }
362 
363   // These methods is implemented in architecture-specific code.
364   // Any table that is returned must be allocated once-only in
365   // foreign memory (or C heap) rather generated in the code cache.
366   static address crc_table_addr();
367   static address crc32c_table_addr();
368 
369   typedef void (*DataCacheWritebackStub)(void *);
370   static DataCacheWritebackStub DataCacheWriteback_stub()         { return CAST_TO_FN_PTR(DataCacheWritebackStub,  _data_cache_writeback); }
371   typedef void (*DataCacheWritebackSyncStub)(bool);
372   static DataCacheWritebackSyncStub DataCacheWritebackSync_stub() { return CAST_TO_FN_PTR(DataCacheWritebackSyncStub,  _data_cache_writeback_sync); }
373 
374   static address checkcast_arraycopy(bool dest_uninitialized = false) {
375     return dest_uninitialized ? _checkcast_arraycopy_uninit : _checkcast_arraycopy;
376   }
377 
378   typedef void (*UnsafeArrayCopyStub)(const void* src, void* dst, size_t count);
379   static UnsafeArrayCopyStub UnsafeArrayCopy_stub()         { return CAST_TO_FN_PTR(UnsafeArrayCopyStub,  _unsafe_arraycopy); }
380 
381   typedef void (*UnsafeSetMemoryStub)(void* dst, size_t count, char byte);
382   static UnsafeSetMemoryStub UnsafeSetMemory_stub()         { return CAST_TO_FN_PTR(UnsafeSetMemoryStub,  _unsafe_setmemory); }
383 
384   static jshort f2hf(jfloat x) {
385     assert(_f2hf != nullptr, "stub is not implemented on this platform");
386     MACOS_AARCH64_ONLY(ThreadWXEnable wx(WXExec, Thread::current());) // About to call into code cache
387     typedef jshort (*f2hf_stub_t)(jfloat x);
388     return ((f2hf_stub_t)_f2hf)(x);
< prev index next >