--- old/src/cpu/s390/vm/stubGenerator_s390.cpp 2017-06-30 12:45:33.721027000 +0200 +++ new/src/cpu/s390/vm/stubGenerator_s390.cpp 2017-06-30 12:45:33.547025000 +0200 @@ -291,7 +291,7 @@ // Restore frame pointer. __ z_lg(r_entryframe_fp, _z_abi(callers_sp), Z_SP); // Pop frame. Done here to minimize stalls. - __ z_lg(Z_SP, _z_abi(callers_sp), Z_SP); + __ pop_frame(); // Reload some volatile registers which we've spilled before the call // to frame manager / native entry. @@ -1677,7 +1677,7 @@ // Helper function which generates code to // - load the function code in register fCode (== Z_R0) - // - load the data block length (depends on cipher function) in register srclen if requested. + // - load the data block length (depends on cipher function) into register srclen if requested. // - is_decipher switches between cipher/decipher function codes // - set_len requests (if true) loading the data block length in register srclen void generate_load_AES_fCode(Register keylen, Register fCode, Register srclen, bool is_decipher) { @@ -1689,6 +1689,7 @@ && (VM_Version::Cipher::_AES128_dataBlk == VM_Version::Cipher::_AES256_dataBlk); // Expanded key length is 44/52/60 * 4 bytes for AES-128/AES-192/AES-256. __ z_cghi(keylen, 52); + __ z_lghi(fCode, VM_Version::Cipher::_AES256 + mode); if (!identical_dataBlk_len) { __ z_lghi(srclen, VM_Version::Cipher::_AES256_dataBlk); @@ -1706,6 +1707,7 @@ __ z_lghi(srclen, VM_Version::Cipher::_AES128_dataBlk); } // __ z_brl(fCode_set); // keyLen < 52: AES128 // fallthru + __ bind(fCode_set); if (identical_dataBlk_len) { __ z_lghi(srclen, VM_Version::Cipher::_AES128_dataBlk);