hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp
changeset 38238 1bbcc430c78d
parent 38135 e06e2d071465
child 38241 32eab2eb41fd
equal deleted inserted replaced
38237:d972e3a2df53 38238:1bbcc430c78d
  4407   *
  4407   *
  4408   * Inputs:
  4408   * Inputs:
  4409   *   c_rarg0   - int crc
  4409   *   c_rarg0   - int crc
  4410   *   c_rarg1   - byte* buf
  4410   *   c_rarg1   - byte* buf
  4411   *   c_rarg2   - long length
  4411   *   c_rarg2   - long length
  4412   *   c_rarg3   - table_start - optional (present only when doing a library_calll,
  4412   *   c_rarg3   - table_start - optional (present only when doing a library_call,
  4413   *              not used by x86 algorithm)
  4413   *              not used by x86 algorithm)
  4414   *
  4414   *
  4415   * Ouput:
  4415   * Ouput:
  4416   *       rax   - int crc result
  4416   *       rax   - int crc result
  4417   */
  4417   */
  4530   *  Input:
  4530   *  Input:
  4531   *    c_rarg0   - obja     address
  4531   *    c_rarg0   - obja     address
  4532   *    c_rarg1   - objb     address
  4532   *    c_rarg1   - objb     address
  4533   *    c_rarg3   - length   length
  4533   *    c_rarg3   - length   length
  4534   *    c_rarg4   - scale    log2_array_indxscale
  4534   *    c_rarg4   - scale    log2_array_indxscale
       
  4535   *
       
  4536   *  Output:
       
  4537   *        rax   - int >= mismatched index, < 0 bitwise complement of tail
  4535   */
  4538   */
  4536   address generate_vectorizedMismatch() {
  4539   address generate_vectorizedMismatch() {
  4537     __ align(CodeEntryAlignment);
  4540     __ align(CodeEntryAlignment);
  4538     StubCodeMark mark(this, "StubRoutines", "vectorizedMismatch");
  4541     StubCodeMark mark(this, "StubRoutines", "vectorizedMismatch");
  4539     address start = __ pc();
  4542     address start = __ pc();
  5289       StubRoutines::_squareToLen = generate_squareToLen();
  5292       StubRoutines::_squareToLen = generate_squareToLen();
  5290     }
  5293     }
  5291     if (UseMulAddIntrinsic) {
  5294     if (UseMulAddIntrinsic) {
  5292       StubRoutines::_mulAdd = generate_mulAdd();
  5295       StubRoutines::_mulAdd = generate_mulAdd();
  5293     }
  5296     }
  5294     if (UseVectorizedMismatchIntrinsic) {
       
  5295       StubRoutines::_vectorizedMismatch = generate_vectorizedMismatch();
       
  5296     }
       
  5297 #ifndef _WINDOWS
  5297 #ifndef _WINDOWS
  5298     if (UseMontgomeryMultiplyIntrinsic) {
  5298     if (UseMontgomeryMultiplyIntrinsic) {
  5299       StubRoutines::_montgomeryMultiply
  5299       StubRoutines::_montgomeryMultiply
  5300         = CAST_FROM_FN_PTR(address, SharedRuntime::montgomery_multiply);
  5300         = CAST_FROM_FN_PTR(address, SharedRuntime::montgomery_multiply);
  5301     }
  5301     }
  5303       StubRoutines::_montgomerySquare
  5303       StubRoutines::_montgomerySquare
  5304         = CAST_FROM_FN_PTR(address, SharedRuntime::montgomery_square);
  5304         = CAST_FROM_FN_PTR(address, SharedRuntime::montgomery_square);
  5305     }
  5305     }
  5306 #endif // WINDOWS
  5306 #endif // WINDOWS
  5307 #endif // COMPILER2
  5307 #endif // COMPILER2
       
  5308 
       
  5309     if (UseVectorizedMismatchIntrinsic) {
       
  5310       StubRoutines::_vectorizedMismatch = generate_vectorizedMismatch();
       
  5311     }
  5308   }
  5312   }
  5309 
  5313 
  5310  public:
  5314  public:
  5311   StubGenerator(CodeBuffer* code, bool all) : StubCodeGenerator(code) {
  5315   StubGenerator(CodeBuffer* code, bool all) : StubCodeGenerator(code) {
  5312     if (all) {
  5316     if (all) {