621 // only for C2, but done for C1 as well) we need a callee-saved oop
622 // map and therefore have to make these stubs into RuntimeStubs
623 // rather than BufferBlobs. If the compiler needs all registers to
624 // be preserved between the fault point and the exception handler
625 // then it must assume responsibility for that in
626 // AbstractCompiler::continuation_for_implicit_null_exception or
627 // continuation_for_implicit_division_by_zero_exception. All other
628 // implicit exceptions (e.g., NullPointerException or
629 // AbstractMethodError on entry) are either at call sites or
630 // otherwise assume that stack unwinding will be initiated, so
631 // caller saved registers were assumed volatile in the compiler.
632 address generate_throw_exception(const char* name,
633 address runtime_entry,
634 Register arg1 = noreg,
635 Register arg2 = noreg);
636
637 // shared exception handler for FFM upcall stubs
638 address generate_upcall_stub_exception_handler();
639 address generate_upcall_stub_load_target();
640
641 // Specialized stub implementations for UseSecondarySupersTable.
642 void generate_lookup_secondary_supers_table_stub();
643
644 // Slow path implementation for UseSecondarySupersTable.
645 address generate_lookup_secondary_supers_table_slow_path_stub();
646
647 void create_control_words();
648
649 // Initialization
650 void generate_preuniverse_stubs();
651 void generate_initial_stubs();
652 void generate_continuation_stubs();
653 void generate_compiler_stubs();
654 void generate_final_stubs();
655
656 #if INCLUDE_CDS
657 static void init_AOTAddressTable_adler(GrowableArray<address>& external_addresses);
658 static void init_AOTAddressTable_aes(GrowableArray<address>& external_addresses);
659 static void init_AOTAddressTable_cbrt(GrowableArray<address>& external_addresses);
660 static void init_AOTAddressTable_chacha(GrowableArray<address>& external_addresses);
|
621 // only for C2, but done for C1 as well) we need a callee-saved oop
622 // map and therefore have to make these stubs into RuntimeStubs
623 // rather than BufferBlobs. If the compiler needs all registers to
624 // be preserved between the fault point and the exception handler
625 // then it must assume responsibility for that in
626 // AbstractCompiler::continuation_for_implicit_null_exception or
627 // continuation_for_implicit_division_by_zero_exception. All other
628 // implicit exceptions (e.g., NullPointerException or
629 // AbstractMethodError on entry) are either at call sites or
630 // otherwise assume that stack unwinding will be initiated, so
631 // caller saved registers were assumed volatile in the compiler.
632 address generate_throw_exception(const char* name,
633 address runtime_entry,
634 Register arg1 = noreg,
635 Register arg2 = noreg);
636
637 // shared exception handler for FFM upcall stubs
638 address generate_upcall_stub_exception_handler();
639 address generate_upcall_stub_load_target();
640
641 // interpreter or compiled code marshalling registers to/from inline type instance
642 address generate_return_value_stub(address destination, const char* name, bool has_res);
643
644 // Specialized stub implementations for UseSecondarySupersTable.
645 void generate_lookup_secondary_supers_table_stub();
646
647 // Slow path implementation for UseSecondarySupersTable.
648 address generate_lookup_secondary_supers_table_slow_path_stub();
649
650 void create_control_words();
651
652 // Initialization
653 void generate_preuniverse_stubs();
654 void generate_initial_stubs();
655 void generate_continuation_stubs();
656 void generate_compiler_stubs();
657 void generate_final_stubs();
658
659 #if INCLUDE_CDS
660 static void init_AOTAddressTable_adler(GrowableArray<address>& external_addresses);
661 static void init_AOTAddressTable_aes(GrowableArray<address>& external_addresses);
662 static void init_AOTAddressTable_cbrt(GrowableArray<address>& external_addresses);
663 static void init_AOTAddressTable_chacha(GrowableArray<address>& external_addresses);
|