< prev index next >

src/hotspot/cpu/x86/stubGenerator_x86_64.hpp

Print this page

618   // only for C2, but done for C1 as well) we need a callee-saved oop
619   // map and therefore have to make these stubs into RuntimeStubs
620   // rather than BufferBlobs.  If the compiler needs all registers to
621   // be preserved between the fault point and the exception handler
622   // then it must assume responsibility for that in
623   // AbstractCompiler::continuation_for_implicit_null_exception or
624   // continuation_for_implicit_division_by_zero_exception. All other
625   // implicit exceptions (e.g., NullPointerException or
626   // AbstractMethodError on entry) are either at call sites or
627   // otherwise assume that stack unwinding will be initiated, so
628   // caller saved registers were assumed volatile in the compiler.
629   address generate_throw_exception(const char* name,
630                                    address runtime_entry,
631                                    Register arg1 = noreg,
632                                    Register arg2 = noreg);
633 
634   // shared exception handler for FFM upcall stubs
635   address generate_upcall_stub_exception_handler();
636   address generate_upcall_stub_load_target();
637 



638   // Specialized stub implementations for UseSecondarySupersTable.
639   void generate_lookup_secondary_supers_table_stub();
640 
641   // Slow path implementation for UseSecondarySupersTable.
642   address generate_lookup_secondary_supers_table_slow_path_stub();
643 
644   void create_control_words();
645 
646   // Initialization
647   void generate_preuniverse_stubs();
648   void generate_initial_stubs();
649   void generate_continuation_stubs();
650   void generate_compiler_stubs();
651   void generate_final_stubs();
652 
653 public:
654   StubGenerator(CodeBuffer* code, BlobId blob_id);
655 };
656 
657 #endif // CPU_X86_STUBGENERATOR_X86_64_HPP

618   // only for C2, but done for C1 as well) we need a callee-saved oop
619   // map and therefore have to make these stubs into RuntimeStubs
620   // rather than BufferBlobs.  If the compiler needs all registers to
621   // be preserved between the fault point and the exception handler
622   // then it must assume responsibility for that in
623   // AbstractCompiler::continuation_for_implicit_null_exception or
624   // continuation_for_implicit_division_by_zero_exception. All other
625   // implicit exceptions (e.g., NullPointerException or
626   // AbstractMethodError on entry) are either at call sites or
627   // otherwise assume that stack unwinding will be initiated, so
628   // caller saved registers were assumed volatile in the compiler.
629   address generate_throw_exception(const char* name,
630                                    address runtime_entry,
631                                    Register arg1 = noreg,
632                                    Register arg2 = noreg);
633 
634   // shared exception handler for FFM upcall stubs
635   address generate_upcall_stub_exception_handler();
636   address generate_upcall_stub_load_target();
637 
638   // interpreter or compiled code marshalling registers to/from inline type instance
639   address generate_return_value_stub(address destination, const char* name, bool has_res);
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 public:
657   StubGenerator(CodeBuffer* code, BlobId blob_id);
658 };
659 
660 #endif // CPU_X86_STUBGENERATOR_X86_64_HPP
< prev index next >