4253 StubRoutines::_ghash_processBlocks = generate_ghash_processBlocks(); 4254 } 4255 4256 // Safefetch stubs. 4257 generate_safefetch("SafeFetch32", sizeof(int), &StubRoutines::_safefetch32_entry, 4258 &StubRoutines::_safefetch32_fault_pc, 4259 &StubRoutines::_safefetch32_continuation_pc); 4260 generate_safefetch("SafeFetchN", sizeof(intptr_t), &StubRoutines::_safefetchN_entry, 4261 &StubRoutines::_safefetchN_fault_pc, 4262 &StubRoutines::_safefetchN_continuation_pc); 4263 #ifdef COMPILER2 4264 if (UseMultiplyToLenIntrinsic) { 4265 StubRoutines::_multiplyToLen = generate_multiplyToLen(); 4266 } 4267 if (UseSquareToLenIntrinsic) { 4268 StubRoutines::_squareToLen = generate_squareToLen(); 4269 } 4270 if (UseMulAddIntrinsic) { 4271 StubRoutines::_mulAdd = generate_mulAdd(); 4272 } 4273 4274 #ifndef _WINDOWS 4275 if (UseMontgomeryMultiplyIntrinsic) { 4276 StubRoutines::_montgomeryMultiply 4277 = CAST_FROM_FN_PTR(address, SharedRuntime::montgomery_multiply); 4278 } 4279 if (UseMontgomerySquareIntrinsic) { 4280 StubRoutines::_montgomerySquare 4281 = CAST_FROM_FN_PTR(address, SharedRuntime::montgomery_square); 4282 } 4283 #endif // WINDOWS 4284 #endif // COMPILER2 4285 } 4286 4287 public: 4288 StubGenerator(CodeBuffer* code, bool all) : StubCodeGenerator(code) { 4289 if (all) { 4290 generate_all(); 4291 } else { 4292 generate_initial(); 4293 } 4294 } 4295 }; // end class declaration 4296 4297 void StubGenerator_generate(CodeBuffer* code, bool all) { 4298 StubGenerator g(code, all); 4299 } | 4253 StubRoutines::_ghash_processBlocks = generate_ghash_processBlocks(); 4254 } 4255 4256 // Safefetch stubs. 4257 generate_safefetch("SafeFetch32", sizeof(int), &StubRoutines::_safefetch32_entry, 4258 &StubRoutines::_safefetch32_fault_pc, 4259 &StubRoutines::_safefetch32_continuation_pc); 4260 generate_safefetch("SafeFetchN", sizeof(intptr_t), &StubRoutines::_safefetchN_entry, 4261 &StubRoutines::_safefetchN_fault_pc, 4262 &StubRoutines::_safefetchN_continuation_pc); 4263 #ifdef COMPILER2 4264 if (UseMultiplyToLenIntrinsic) { 4265 StubRoutines::_multiplyToLen = generate_multiplyToLen(); 4266 } 4267 if (UseSquareToLenIntrinsic) { 4268 StubRoutines::_squareToLen = generate_squareToLen(); 4269 } 4270 if (UseMulAddIntrinsic) { 4271 StubRoutines::_mulAdd = generate_mulAdd(); 4272 } 4273 4274 // Visual Studio 2017 (and higher) has the compiler instrinisics required 4275 #if !(defined(_WINDOWS) && _MSC_VER < 1910) 4276 if (UseMontgomeryMultiplyIntrinsic) { 4277 StubRoutines::_montgomeryMultiply 4278 = CAST_FROM_FN_PTR(address, SharedRuntime::montgomery_multiply); 4279 } 4280 if (UseMontgomerySquareIntrinsic) { 4281 StubRoutines::_montgomerySquare 4282 = CAST_FROM_FN_PTR(address, SharedRuntime::montgomery_square); 4283 } 4284 #endif //! VC++ < 2017 4285 #endif // COMPILER2 4286 } 4287 4288 public: 4289 StubGenerator(CodeBuffer* code, bool all) : StubCodeGenerator(code) { 4290 if (all) { 4291 generate_all(); 4292 } else { 4293 generate_initial(); 4294 } 4295 } 4296 }; // end class declaration 4297 4298 void StubGenerator_generate(CodeBuffer* code, bool all) { 4299 StubGenerator g(code, all); 4300 } |