< prev index next >

src/cpu/x86/vm/stubGenerator_x86_32.cpp

Print this page




3881 
3882     // Build this early so it's available for the interpreter
3883     StubRoutines::_throw_StackOverflowError_entry          = generate_throw_exception("StackOverflowError throw_exception",
3884                                                                                       CAST_FROM_FN_PTR(address, SharedRuntime::throw_StackOverflowError));
3885     StubRoutines::_throw_delayed_StackOverflowError_entry  = generate_throw_exception("delayed StackOverflowError throw_exception",
3886                                                                                       CAST_FROM_FN_PTR(address, SharedRuntime::throw_delayed_StackOverflowError));
3887 
3888     if (UseCRC32Intrinsics) {
3889       // set table address before stub generation which use it
3890       StubRoutines::_crc_table_adr = (address)StubRoutines::x86::_crc_table;
3891       StubRoutines::_updateBytesCRC32 = generate_updateBytesCRC32();
3892     }
3893 
3894     if (UseCRC32CIntrinsics) {
3895       bool supports_clmul = VM_Version::supports_clmul();
3896       StubRoutines::x86::generate_CRC32C_table(supports_clmul);
3897       StubRoutines::_crc32c_table_addr = (address)StubRoutines::x86::_crc32c_table;
3898       StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(supports_clmul);
3899     }
3900     if (VM_Version::supports_sse2() && UseLibmIntrinsic) {



3901       StubRoutines::x86::_L_2il0floatpacket_0_adr = (address)StubRoutines::x86::_L_2il0floatpacket_0;
3902       StubRoutines::x86::_Pi4Inv_adr = (address)StubRoutines::x86::_Pi4Inv;
3903       StubRoutines::x86::_Pi4x3_adr = (address)StubRoutines::x86::_Pi4x3;
3904       StubRoutines::x86::_Pi4x4_adr = (address)StubRoutines::x86::_Pi4x4;
3905       StubRoutines::x86::_ones_adr = (address)StubRoutines::x86::_ones;


3906       StubRoutines::_dexp = generate_libmExp();


3907       StubRoutines::_dlog = generate_libmLog();


3908       StubRoutines::_dlog10 = generate_libmLog10();


3909       StubRoutines::_dpow = generate_libmPow();




3910       StubRoutines::_dlibm_reduce_pi04l = generate_libm_reduce_pi04l();



3911       StubRoutines::_dlibm_sin_cos_huge = generate_libm_sin_cos_huge();


3912       StubRoutines::_dsin = generate_libmSin();


3913       StubRoutines::_dcos = generate_libmCos();


3914       StubRoutines::_dlibm_tan_cot_huge = generate_libm_tan_cot_huge();
3915       StubRoutines::_dtan = generate_libmTan();

3916     }
3917   }
3918 
3919   void generate_all() {
3920     // Generates all stubs and initializes the entry points
3921 
3922     // These entry points require SharedInfo::stack0 to be set up in non-core builds
3923     // and need to be relocatable, so they each fabricate a RuntimeStub internally.
3924     StubRoutines::_throw_AbstractMethodError_entry         = generate_throw_exception("AbstractMethodError throw_exception",          CAST_FROM_FN_PTR(address, SharedRuntime::throw_AbstractMethodError));
3925     StubRoutines::_throw_IncompatibleClassChangeError_entry= generate_throw_exception("IncompatibleClassChangeError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_IncompatibleClassChangeError));
3926     StubRoutines::_throw_NullPointerException_at_call_entry= generate_throw_exception("NullPointerException at call throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_NullPointerException_at_call));
3927 
3928     //------------------------------------------------------------------------------------------------------------------------
3929     // entry points that are platform specific
3930 
3931     // support for verify_oop (must happen after universe_init)
3932     StubRoutines::_verify_oop_subroutine_entry     = generate_verify_oop();
3933 
3934     // arraycopy stubs used by compilers
3935     generate_arraycopy_stubs();




3881 
3882     // Build this early so it's available for the interpreter
3883     StubRoutines::_throw_StackOverflowError_entry          = generate_throw_exception("StackOverflowError throw_exception",
3884                                                                                       CAST_FROM_FN_PTR(address, SharedRuntime::throw_StackOverflowError));
3885     StubRoutines::_throw_delayed_StackOverflowError_entry  = generate_throw_exception("delayed StackOverflowError throw_exception",
3886                                                                                       CAST_FROM_FN_PTR(address, SharedRuntime::throw_delayed_StackOverflowError));
3887 
3888     if (UseCRC32Intrinsics) {
3889       // set table address before stub generation which use it
3890       StubRoutines::_crc_table_adr = (address)StubRoutines::x86::_crc_table;
3891       StubRoutines::_updateBytesCRC32 = generate_updateBytesCRC32();
3892     }
3893 
3894     if (UseCRC32CIntrinsics) {
3895       bool supports_clmul = VM_Version::supports_clmul();
3896       StubRoutines::x86::generate_CRC32C_table(supports_clmul);
3897       StubRoutines::_crc32c_table_addr = (address)StubRoutines::x86::_crc32c_table;
3898       StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(supports_clmul);
3899     }
3900     if (VM_Version::supports_sse2() && UseLibmIntrinsic) {
3901       if (vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dsin) ||
3902           vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dcos) ||
3903           vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dtan)) {
3904         StubRoutines::x86::_L_2il0floatpacket_0_adr = (address)StubRoutines::x86::_L_2il0floatpacket_0;
3905         StubRoutines::x86::_Pi4Inv_adr = (address)StubRoutines::x86::_Pi4Inv;
3906         StubRoutines::x86::_Pi4x3_adr = (address)StubRoutines::x86::_Pi4x3;
3907         StubRoutines::x86::_Pi4x4_adr = (address)StubRoutines::x86::_Pi4x4;
3908         StubRoutines::x86::_ones_adr = (address)StubRoutines::x86::_ones;
3909       }
3910       if (vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dexp)) {
3911         StubRoutines::_dexp = generate_libmExp();
3912       }
3913       if (vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dlog)) {
3914         StubRoutines::_dlog = generate_libmLog();
3915       }
3916       if (vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dlog10)) {
3917         StubRoutines::_dlog10 = generate_libmLog10();
3918       }
3919       if (vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dpow)) {
3920         StubRoutines::_dpow = generate_libmPow();
3921       }
3922       if (vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dsin) ||
3923         vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dcos) ||
3924         vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dtan)) {
3925         StubRoutines::_dlibm_reduce_pi04l = generate_libm_reduce_pi04l();
3926       }
3927       if (vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dsin) ||
3928         vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dcos)) {
3929         StubRoutines::_dlibm_sin_cos_huge = generate_libm_sin_cos_huge();
3930       }
3931       if (vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dsin)) {
3932         StubRoutines::_dsin = generate_libmSin();
3933       }
3934       if (vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dcos)) {
3935         StubRoutines::_dcos = generate_libmCos();
3936       }
3937       if (vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dtan)) {
3938         StubRoutines::_dlibm_tan_cot_huge = generate_libm_tan_cot_huge();
3939         StubRoutines::_dtan = generate_libmTan();
3940       }
3941     }
3942   }
3943 
3944   void generate_all() {
3945     // Generates all stubs and initializes the entry points
3946 
3947     // These entry points require SharedInfo::stack0 to be set up in non-core builds
3948     // and need to be relocatable, so they each fabricate a RuntimeStub internally.
3949     StubRoutines::_throw_AbstractMethodError_entry         = generate_throw_exception("AbstractMethodError throw_exception",          CAST_FROM_FN_PTR(address, SharedRuntime::throw_AbstractMethodError));
3950     StubRoutines::_throw_IncompatibleClassChangeError_entry= generate_throw_exception("IncompatibleClassChangeError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_IncompatibleClassChangeError));
3951     StubRoutines::_throw_NullPointerException_at_call_entry= generate_throw_exception("NullPointerException at call throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_NullPointerException_at_call));
3952 
3953     //------------------------------------------------------------------------------------------------------------------------
3954     // entry points that are platform specific
3955 
3956     // support for verify_oop (must happen after universe_init)
3957     StubRoutines::_verify_oop_subroutine_entry     = generate_verify_oop();
3958 
3959     // arraycopy stubs used by compilers
3960     generate_arraycopy_stubs();


< prev index next >