< prev index next >

src/hotspot/cpu/x86/stubGenerator_x86_64.hpp

Print this page

604   // only for C2, but done for C1 as well) we need a callee-saved oop
605   // map and therefore have to make these stubs into RuntimeStubs
606   // rather than BufferBlobs.  If the compiler needs all registers to
607   // be preserved between the fault point and the exception handler
608   // then it must assume responsibility for that in
609   // AbstractCompiler::continuation_for_implicit_null_exception or
610   // continuation_for_implicit_division_by_zero_exception. All other
611   // implicit exceptions (e.g., NullPointerException or
612   // AbstractMethodError on entry) are either at call sites or
613   // otherwise assume that stack unwinding will be initiated, so
614   // caller saved registers were assumed volatile in the compiler.
615   address generate_throw_exception(const char* name,
616                                    address runtime_entry,
617                                    Register arg1 = noreg,
618                                    Register arg2 = noreg);
619 
620   // shared exception handler for FFM upcall stubs
621   address generate_upcall_stub_exception_handler();
622   address generate_upcall_stub_load_target();
623 



624   // Specialized stub implementations for UseSecondarySupersTable.
625   void generate_lookup_secondary_supers_table_stub();
626 
627   // Slow path implementation for UseSecondarySupersTable.
628   address generate_lookup_secondary_supers_table_slow_path_stub();
629 
630   void create_control_words();
631 
632   // Initialization
633   void generate_initial_stubs();
634   void generate_continuation_stubs();
635   void generate_compiler_stubs();
636   void generate_final_stubs();
637 
638 public:
639   StubGenerator(CodeBuffer* code, StubGenBlobId blob_id);
640 };
641 
642 #endif // CPU_X86_STUBGENERATOR_X86_64_HPP

604   // only for C2, but done for C1 as well) we need a callee-saved oop
605   // map and therefore have to make these stubs into RuntimeStubs
606   // rather than BufferBlobs.  If the compiler needs all registers to
607   // be preserved between the fault point and the exception handler
608   // then it must assume responsibility for that in
609   // AbstractCompiler::continuation_for_implicit_null_exception or
610   // continuation_for_implicit_division_by_zero_exception. All other
611   // implicit exceptions (e.g., NullPointerException or
612   // AbstractMethodError on entry) are either at call sites or
613   // otherwise assume that stack unwinding will be initiated, so
614   // caller saved registers were assumed volatile in the compiler.
615   address generate_throw_exception(const char* name,
616                                    address runtime_entry,
617                                    Register arg1 = noreg,
618                                    Register arg2 = noreg);
619 
620   // shared exception handler for FFM upcall stubs
621   address generate_upcall_stub_exception_handler();
622   address generate_upcall_stub_load_target();
623 
624   // interpreter or compiled code marshalling registers to/from inline type instance
625   address generate_return_value_stub(address destination, const char* name, bool has_res);
626 
627   // Specialized stub implementations for UseSecondarySupersTable.
628   void generate_lookup_secondary_supers_table_stub();
629 
630   // Slow path implementation for UseSecondarySupersTable.
631   address generate_lookup_secondary_supers_table_slow_path_stub();
632 
633   void create_control_words();
634 
635   // Initialization
636   void generate_initial_stubs();
637   void generate_continuation_stubs();
638   void generate_compiler_stubs();
639   void generate_final_stubs();
640 
641 public:
642   StubGenerator(CodeBuffer* code, StubGenBlobId blob_id);
643 };
644 
645 #endif // CPU_X86_STUBGENERATOR_X86_64_HPP
< prev index next >