< prev index next >

src/hotspot/cpu/x86/stubGenerator_x86_64.hpp

Print this page

533   // Continuation point for throwing of implicit exceptions that are
534   // not handled in the current activation. Fabricates an exception
535   // oop and initiates normal exception dispatching in this
536   // frame. Since we need to preserve callee-saved values (currently
537   // only for C2, but done for C1 as well) we need a callee-saved oop
538   // map and therefore have to make these stubs into RuntimeStubs
539   // rather than BufferBlobs.  If the compiler needs all registers to
540   // be preserved between the fault point and the exception handler
541   // then it must assume responsibility for that in
542   // AbstractCompiler::continuation_for_implicit_null_exception or
543   // continuation_for_implicit_division_by_zero_exception. All other
544   // implicit exceptions (e.g., NullPointerException or
545   // AbstractMethodError on entry) are either at call sites or
546   // otherwise assume that stack unwinding will be initiated, so
547   // caller saved registers were assumed volatile in the compiler.
548   address generate_throw_exception(const char* name,
549                                    address runtime_entry,
550                                    Register arg1 = noreg,
551                                    Register arg2 = noreg);
552 



553   void create_control_words();
554 
555   // Initialization
556   void generate_initial_stubs();
557   void generate_continuation_stubs();
558   void generate_compiler_stubs();
559   void generate_final_stubs();
560 
561  public:
562   StubGenerator(CodeBuffer* code, StubsKind kind);
563 };
564 
565 #endif // CPU_X86_STUBGENERATOR_X86_64_HPP

533   // Continuation point for throwing of implicit exceptions that are
534   // not handled in the current activation. Fabricates an exception
535   // oop and initiates normal exception dispatching in this
536   // frame. Since we need to preserve callee-saved values (currently
537   // only for C2, but done for C1 as well) we need a callee-saved oop
538   // map and therefore have to make these stubs into RuntimeStubs
539   // rather than BufferBlobs.  If the compiler needs all registers to
540   // be preserved between the fault point and the exception handler
541   // then it must assume responsibility for that in
542   // AbstractCompiler::continuation_for_implicit_null_exception or
543   // continuation_for_implicit_division_by_zero_exception. All other
544   // implicit exceptions (e.g., NullPointerException or
545   // AbstractMethodError on entry) are either at call sites or
546   // otherwise assume that stack unwinding will be initiated, so
547   // caller saved registers were assumed volatile in the compiler.
548   address generate_throw_exception(const char* name,
549                                    address runtime_entry,
550                                    Register arg1 = noreg,
551                                    Register arg2 = noreg);
552 
553   // interpreter or compiled code marshalling registers to/from inline type instance
554   address generate_return_value_stub(address destination, const char* name, bool has_res);
555 
556   void create_control_words();
557 
558   // Initialization
559   void generate_initial_stubs();
560   void generate_continuation_stubs();
561   void generate_compiler_stubs();
562   void generate_final_stubs();
563 
564  public:
565   StubGenerator(CodeBuffer* code, StubsKind kind);
566 };
567 
568 #endif // CPU_X86_STUBGENERATOR_X86_64_HPP
< prev index next >