2900 // Generate partial_subtype_check first here since its code depends on 2901 // UseZeroBaseCompressedOops which is defined after heap initialization. 2902 StubRoutines::Sparc::_partial_subtype_check = generate_partial_subtype_check(); 2903 // These entry points require SharedInfo::stack0 to be set up in non-core builds 2904 StubRoutines::_throw_AbstractMethodError_entry = generate_throw_exception("AbstractMethodError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_AbstractMethodError), false); 2905 StubRoutines::_throw_IncompatibleClassChangeError_entry= generate_throw_exception("IncompatibleClassChangeError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_IncompatibleClassChangeError), false); 2906 StubRoutines::_throw_ArithmeticException_entry = generate_throw_exception("ArithmeticException throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_ArithmeticException), true); 2907 StubRoutines::_throw_NullPointerException_entry = generate_throw_exception("NullPointerException throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_NullPointerException), true); 2908 StubRoutines::_throw_NullPointerException_at_call_entry= generate_throw_exception("NullPointerException at call throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_NullPointerException_at_call), false); 2909 StubRoutines::_throw_StackOverflowError_entry = generate_throw_exception("StackOverflowError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_StackOverflowError), false); 2910 2911 StubRoutines::_handler_for_unsafe_access_entry = 2912 generate_handler_for_unsafe_access(); 2913 2914 // support for verify_oop (must happen after universe_init) 2915 StubRoutines::_verify_oop_subroutine_entry = generate_verify_oop_subroutine(); 2916 2917 // arraycopy stubs used by compilers 2918 generate_arraycopy_stubs(); 2919 2920 // Don't initialize the platform math functions since sparc 2921 // doesn't have intrinsics for these operations. 2922 } 2923 2924 2925 public: 2926 StubGenerator(CodeBuffer* code, bool all) : StubCodeGenerator(code) { 2927 // replace the standard masm with a special one: 2928 _masm = new MacroAssembler(code); 2929 2930 _stub_count = !all ? 0x100 : 0x200; 2931 if (all) { 2932 generate_all(); 2933 } else { 2934 generate_initial(); 2935 } 2936 2937 // make sure this stub is available for all local calls 2938 if (_atomic_add_stub.is_unbound()) { 2939 // generate a second time, if necessary | 2900 // Generate partial_subtype_check first here since its code depends on 2901 // UseZeroBaseCompressedOops which is defined after heap initialization. 2902 StubRoutines::Sparc::_partial_subtype_check = generate_partial_subtype_check(); 2903 // These entry points require SharedInfo::stack0 to be set up in non-core builds 2904 StubRoutines::_throw_AbstractMethodError_entry = generate_throw_exception("AbstractMethodError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_AbstractMethodError), false); 2905 StubRoutines::_throw_IncompatibleClassChangeError_entry= generate_throw_exception("IncompatibleClassChangeError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_IncompatibleClassChangeError), false); 2906 StubRoutines::_throw_ArithmeticException_entry = generate_throw_exception("ArithmeticException throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_ArithmeticException), true); 2907 StubRoutines::_throw_NullPointerException_entry = generate_throw_exception("NullPointerException throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_NullPointerException), true); 2908 StubRoutines::_throw_NullPointerException_at_call_entry= generate_throw_exception("NullPointerException at call throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_NullPointerException_at_call), false); 2909 StubRoutines::_throw_StackOverflowError_entry = generate_throw_exception("StackOverflowError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_StackOverflowError), false); 2910 2911 StubRoutines::_handler_for_unsafe_access_entry = 2912 generate_handler_for_unsafe_access(); 2913 2914 // support for verify_oop (must happen after universe_init) 2915 StubRoutines::_verify_oop_subroutine_entry = generate_verify_oop_subroutine(); 2916 2917 // arraycopy stubs used by compilers 2918 generate_arraycopy_stubs(); 2919 2920 // generic method handle stubs 2921 if (EnableMethodHandles && SystemDictionary::MethodHandle_klass() != NULL) { 2922 for (MethodHandles::EntryKind ek = MethodHandles::_EK_FIRST; 2923 ek < MethodHandles::_EK_LIMIT; 2924 ek = MethodHandles::EntryKind(1 + (int)ek)) { 2925 StubCodeMark mark(this, "MethodHandle", MethodHandles::entry_name(ek)); 2926 MethodHandles::generate_method_handle_stub(_masm, ek); 2927 } 2928 } 2929 2930 // Don't initialize the platform math functions since sparc 2931 // doesn't have intrinsics for these operations. 2932 } 2933 2934 2935 public: 2936 StubGenerator(CodeBuffer* code, bool all) : StubCodeGenerator(code) { 2937 // replace the standard masm with a special one: 2938 _masm = new MacroAssembler(code); 2939 2940 _stub_count = !all ? 0x100 : 0x200; 2941 if (all) { 2942 generate_all(); 2943 } else { 2944 generate_initial(); 2945 } 2946 2947 // make sure this stub is available for all local calls 2948 if (_atomic_add_stub.is_unbound()) { 2949 // generate a second time, if necessary |