4920 StubRoutines::_call_stub_entry = 4921 generate_call_stub(StubRoutines::_call_stub_return_address); 4922 4923 // is referenced by megamorphic call 4924 StubRoutines::_catch_exception_entry = generate_catch_exception(); 4925 4926 // Build this early so it's available for the interpreter. 4927 StubRoutines::_throw_StackOverflowError_entry = 4928 generate_throw_exception("StackOverflowError throw_exception", 4929 CAST_FROM_FN_PTR(address, 4930 SharedRuntime::throw_StackOverflowError)); 4931 StubRoutines::_throw_delayed_StackOverflowError_entry = 4932 generate_throw_exception("delayed StackOverflowError throw_exception", 4933 CAST_FROM_FN_PTR(address, 4934 SharedRuntime::throw_delayed_StackOverflowError)); 4935 if (UseCRC32Intrinsics) { 4936 // set table address before stub generation which use it 4937 StubRoutines::_crc_table_adr = (address)StubRoutines::aarch64::_crc_table; 4938 StubRoutines::_updateBytesCRC32 = generate_updateBytesCRC32(); 4939 } 4940 } 4941 4942 void generate_all() { 4943 // support for verify_oop (must happen after universe_init) 4944 StubRoutines::_verify_oop_subroutine_entry = generate_verify_oop(); 4945 StubRoutines::_throw_AbstractMethodError_entry = 4946 generate_throw_exception("AbstractMethodError throw_exception", 4947 CAST_FROM_FN_PTR(address, 4948 SharedRuntime:: 4949 throw_AbstractMethodError)); 4950 4951 StubRoutines::_throw_IncompatibleClassChangeError_entry = 4952 generate_throw_exception("IncompatibleClassChangeError throw_exception", 4953 CAST_FROM_FN_PTR(address, 4954 SharedRuntime:: 4955 throw_IncompatibleClassChangeError)); 4956 4957 StubRoutines::_throw_NullPointerException_at_call_entry = 4958 generate_throw_exception("NullPointerException at call throw_exception", 4959 CAST_FROM_FN_PTR(address, 4995 #ifndef BUILTIN_SIM 4996 // generate GHASH intrinsics code 4997 if (UseGHASHIntrinsics) { 4998 StubRoutines::_ghash_processBlocks = generate_ghash_processBlocks(); 4999 } 5000 5001 if (UseAESIntrinsics) { 5002 StubRoutines::_aescrypt_encryptBlock = generate_aescrypt_encryptBlock(); 5003 StubRoutines::_aescrypt_decryptBlock = generate_aescrypt_decryptBlock(); 5004 StubRoutines::_cipherBlockChaining_encryptAESCrypt = generate_cipherBlockChaining_encryptAESCrypt(); 5005 StubRoutines::_cipherBlockChaining_decryptAESCrypt = generate_cipherBlockChaining_decryptAESCrypt(); 5006 } 5007 5008 if (UseSHA1Intrinsics) { 5009 StubRoutines::_sha1_implCompress = generate_sha1_implCompress(false, "sha1_implCompress"); 5010 StubRoutines::_sha1_implCompressMB = generate_sha1_implCompress(true, "sha1_implCompressMB"); 5011 } 5012 if (UseSHA256Intrinsics) { 5013 StubRoutines::_sha256_implCompress = generate_sha256_implCompress(false, "sha256_implCompress"); 5014 StubRoutines::_sha256_implCompressMB = generate_sha256_implCompress(true, "sha256_implCompressMB"); 5015 } 5016 5017 if (UseCRC32CIntrinsics) { 5018 StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(); 5019 } 5020 5021 // generate Adler32 intrinsics code 5022 if (UseAdler32Intrinsics) { 5023 StubRoutines::_updateBytesAdler32 = generate_updateBytesAdler32(); 5024 } 5025 5026 // Safefetch stubs. 5027 generate_safefetch("SafeFetch32", sizeof(int), &StubRoutines::_safefetch32_entry, 5028 &StubRoutines::_safefetch32_fault_pc, 5029 &StubRoutines::_safefetch32_continuation_pc); 5030 generate_safefetch("SafeFetchN", sizeof(intptr_t), &StubRoutines::_safefetchN_entry, 5031 &StubRoutines::_safefetchN_fault_pc, 5032 &StubRoutines::_safefetchN_continuation_pc); 5033 #endif 5034 StubRoutines::aarch64::set_completed(); 5035 } 5036 5037 public: 5038 StubGenerator(CodeBuffer* code, bool all) : StubCodeGenerator(code) { | 4920 StubRoutines::_call_stub_entry = 4921 generate_call_stub(StubRoutines::_call_stub_return_address); 4922 4923 // is referenced by megamorphic call 4924 StubRoutines::_catch_exception_entry = generate_catch_exception(); 4925 4926 // Build this early so it's available for the interpreter. 4927 StubRoutines::_throw_StackOverflowError_entry = 4928 generate_throw_exception("StackOverflowError throw_exception", 4929 CAST_FROM_FN_PTR(address, 4930 SharedRuntime::throw_StackOverflowError)); 4931 StubRoutines::_throw_delayed_StackOverflowError_entry = 4932 generate_throw_exception("delayed StackOverflowError throw_exception", 4933 CAST_FROM_FN_PTR(address, 4934 SharedRuntime::throw_delayed_StackOverflowError)); 4935 if (UseCRC32Intrinsics) { 4936 // set table address before stub generation which use it 4937 StubRoutines::_crc_table_adr = (address)StubRoutines::aarch64::_crc_table; 4938 StubRoutines::_updateBytesCRC32 = generate_updateBytesCRC32(); 4939 } 4940 4941 if (UseCRC32CIntrinsics) { 4942 StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(); 4943 } 4944 } 4945 4946 void generate_all() { 4947 // support for verify_oop (must happen after universe_init) 4948 StubRoutines::_verify_oop_subroutine_entry = generate_verify_oop(); 4949 StubRoutines::_throw_AbstractMethodError_entry = 4950 generate_throw_exception("AbstractMethodError throw_exception", 4951 CAST_FROM_FN_PTR(address, 4952 SharedRuntime:: 4953 throw_AbstractMethodError)); 4954 4955 StubRoutines::_throw_IncompatibleClassChangeError_entry = 4956 generate_throw_exception("IncompatibleClassChangeError throw_exception", 4957 CAST_FROM_FN_PTR(address, 4958 SharedRuntime:: 4959 throw_IncompatibleClassChangeError)); 4960 4961 StubRoutines::_throw_NullPointerException_at_call_entry = 4962 generate_throw_exception("NullPointerException at call throw_exception", 4963 CAST_FROM_FN_PTR(address, 4999 #ifndef BUILTIN_SIM 5000 // generate GHASH intrinsics code 5001 if (UseGHASHIntrinsics) { 5002 StubRoutines::_ghash_processBlocks = generate_ghash_processBlocks(); 5003 } 5004 5005 if (UseAESIntrinsics) { 5006 StubRoutines::_aescrypt_encryptBlock = generate_aescrypt_encryptBlock(); 5007 StubRoutines::_aescrypt_decryptBlock = generate_aescrypt_decryptBlock(); 5008 StubRoutines::_cipherBlockChaining_encryptAESCrypt = generate_cipherBlockChaining_encryptAESCrypt(); 5009 StubRoutines::_cipherBlockChaining_decryptAESCrypt = generate_cipherBlockChaining_decryptAESCrypt(); 5010 } 5011 5012 if (UseSHA1Intrinsics) { 5013 StubRoutines::_sha1_implCompress = generate_sha1_implCompress(false, "sha1_implCompress"); 5014 StubRoutines::_sha1_implCompressMB = generate_sha1_implCompress(true, "sha1_implCompressMB"); 5015 } 5016 if (UseSHA256Intrinsics) { 5017 StubRoutines::_sha256_implCompress = generate_sha256_implCompress(false, "sha256_implCompress"); 5018 StubRoutines::_sha256_implCompressMB = generate_sha256_implCompress(true, "sha256_implCompressMB"); 5019 } 5020 5021 // generate Adler32 intrinsics code 5022 if (UseAdler32Intrinsics) { 5023 StubRoutines::_updateBytesAdler32 = generate_updateBytesAdler32(); 5024 } 5025 5026 // Safefetch stubs. 5027 generate_safefetch("SafeFetch32", sizeof(int), &StubRoutines::_safefetch32_entry, 5028 &StubRoutines::_safefetch32_fault_pc, 5029 &StubRoutines::_safefetch32_continuation_pc); 5030 generate_safefetch("SafeFetchN", sizeof(intptr_t), &StubRoutines::_safefetchN_entry, 5031 &StubRoutines::_safefetchN_fault_pc, 5032 &StubRoutines::_safefetchN_continuation_pc); 5033 #endif 5034 StubRoutines::aarch64::set_completed(); 5035 } 5036 5037 public: 5038 StubGenerator(CodeBuffer* code, bool all) : StubCodeGenerator(code) { |