543 _i2c_entry(i2c_entry),
544 _c2i_entry(c2i_entry),
545 _c2i_unverified_entry(c2i_unverified_entry) {
546 }
547
548 address get_i2c_entry() { return _i2c_entry; }
549 address get_c2i_entry() { return _c2i_entry; }
550 address get_c2i_unverified_entry() { return _c2i_unverified_entry; }
551
552 void relocate(address new_base);
553 #ifndef PRODUCT
554 void print();
555 #endif /* PRODUCT */
556 };
557
558 class AdapterHandlerLibrary: public AllStatic {
559 private:
560 static u_char _buffer[]; // the temporary code buffer
561 static GrowableArray<uint64_t>* _fingerprints; // the fingerprint collection
562 static GrowableArray<AdapterHandlerEntry*> * _handlers; // the corresponding handlers
563 enum {
564 AbstractMethodHandler = 1 // special handler for abstract methods
565 };
566 static void initialize();
567 static int get_create_adapter_index(methodHandle method);
568 static address get_i2c_entry( int index ) {
569 return get_entry(index)->get_i2c_entry();
570 }
571 static address get_c2i_entry( int index ) {
572 return get_entry(index)->get_c2i_entry();
573 }
574 static address get_c2i_unverified_entry( int index ) {
575 return get_entry(index)->get_c2i_unverified_entry();
576 }
577
578 public:
579 static AdapterHandlerEntry* get_entry( int index ) { return _handlers->at(index); }
580 static nmethod* create_native_wrapper(methodHandle method);
581 static AdapterHandlerEntry* get_adapter(methodHandle method) {
582 return get_entry(get_create_adapter_index(method));
|
543 _i2c_entry(i2c_entry),
544 _c2i_entry(c2i_entry),
545 _c2i_unverified_entry(c2i_unverified_entry) {
546 }
547
548 address get_i2c_entry() { return _i2c_entry; }
549 address get_c2i_entry() { return _c2i_entry; }
550 address get_c2i_unverified_entry() { return _c2i_unverified_entry; }
551
552 void relocate(address new_base);
553 #ifndef PRODUCT
554 void print();
555 #endif /* PRODUCT */
556 };
557
558 class AdapterHandlerLibrary: public AllStatic {
559 private:
560 static u_char _buffer[]; // the temporary code buffer
561 static GrowableArray<uint64_t>* _fingerprints; // the fingerprint collection
562 static GrowableArray<AdapterHandlerEntry*> * _handlers; // the corresponding handlers
563 static BufferBlob* _buffer_blob; // the temporary code buffer in CodeCache
564 enum {
565 AbstractMethodHandler = 1 // special handler for abstract methods
566 };
567 static void initialize();
568 static int get_create_adapter_index(methodHandle method);
569 static address get_i2c_entry( int index ) {
570 return get_entry(index)->get_i2c_entry();
571 }
572 static address get_c2i_entry( int index ) {
573 return get_entry(index)->get_c2i_entry();
574 }
575 static address get_c2i_unverified_entry( int index ) {
576 return get_entry(index)->get_c2i_unverified_entry();
577 }
578
579 public:
580 static AdapterHandlerEntry* get_entry( int index ) { return _handlers->at(index); }
581 static nmethod* create_native_wrapper(methodHandle method);
582 static AdapterHandlerEntry* get_adapter(methodHandle method) {
583 return get_entry(get_create_adapter_index(method));
|