< prev index next >

src/hotspot/cpu/x86/stubGenerator_x86_64.hpp

Print this page

563   // frame. Since we need to preserve callee-saved values (currently
564   // only for C2, but done for C1 as well) we need a callee-saved oop
565   // map and therefore have to make these stubs into RuntimeStubs
566   // rather than BufferBlobs.  If the compiler needs all registers to
567   // be preserved between the fault point and the exception handler
568   // then it must assume responsibility for that in
569   // AbstractCompiler::continuation_for_implicit_null_exception or
570   // continuation_for_implicit_division_by_zero_exception. All other
571   // implicit exceptions (e.g., NullPointerException or
572   // AbstractMethodError on entry) are either at call sites or
573   // otherwise assume that stack unwinding will be initiated, so
574   // caller saved registers were assumed volatile in the compiler.
575   address generate_throw_exception(const char* name,
576                                    address runtime_entry,
577                                    Register arg1 = noreg,
578                                    Register arg2 = noreg);
579 
580   // shared exception handler for FFM upcall stubs
581   address generate_upcall_stub_exception_handler();
582 



583   void create_control_words();
584 
585   // Initialization
586   void generate_initial_stubs();
587   void generate_continuation_stubs();
588   void generate_compiler_stubs();
589   void generate_final_stubs();
590 
591  public:
592   StubGenerator(CodeBuffer* code, StubsKind kind);
593 };
594 
595 #endif // CPU_X86_STUBGENERATOR_X86_64_HPP

563   // frame. Since we need to preserve callee-saved values (currently
564   // only for C2, but done for C1 as well) we need a callee-saved oop
565   // map and therefore have to make these stubs into RuntimeStubs
566   // rather than BufferBlobs.  If the compiler needs all registers to
567   // be preserved between the fault point and the exception handler
568   // then it must assume responsibility for that in
569   // AbstractCompiler::continuation_for_implicit_null_exception or
570   // continuation_for_implicit_division_by_zero_exception. All other
571   // implicit exceptions (e.g., NullPointerException or
572   // AbstractMethodError on entry) are either at call sites or
573   // otherwise assume that stack unwinding will be initiated, so
574   // caller saved registers were assumed volatile in the compiler.
575   address generate_throw_exception(const char* name,
576                                    address runtime_entry,
577                                    Register arg1 = noreg,
578                                    Register arg2 = noreg);
579 
580   // shared exception handler for FFM upcall stubs
581   address generate_upcall_stub_exception_handler();
582 
583   // interpreter or compiled code marshalling registers to/from inline type instance
584   address generate_return_value_stub(address destination, const char* name, bool has_res);
585 
586   void create_control_words();
587 
588   // Initialization
589   void generate_initial_stubs();
590   void generate_continuation_stubs();
591   void generate_compiler_stubs();
592   void generate_final_stubs();
593 
594  public:
595   StubGenerator(CodeBuffer* code, StubsKind kind);
596 };
597 
598 #endif // CPU_X86_STUBGENERATOR_X86_64_HPP
< prev index next >