< prev index next >
src/cpu/s390/vm/stubGenerator_s390.cpp
Print this page
*** 289,299 ****
Label ret_is_double;
// 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);
// Reload some volatile registers which we've spilled before the call
// to frame manager / native entry.
// Access all locals via frame pointer, because we know nothing about
// the topmost frame's size.
--- 289,299 ----
Label ret_is_double;
// Restore frame pointer.
__ z_lg(r_entryframe_fp, _z_abi(callers_sp), Z_SP);
// Pop frame. Done here to minimize stalls.
! __ pop_frame();
// Reload some volatile registers which we've spilled before the call
// to frame manager / native entry.
// Access all locals via frame pointer, because we know nothing about
// the topmost frame's size.
*** 1675,1685 ****
// dst must designate an even-numbered register, holding the address of the output message.
// src must designate an even/odd register pair, holding the address/length of the original message
// 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.
// - 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) {
BLOCK_COMMENT("Set fCode {"); {
--- 1675,1685 ----
// dst must designate an even-numbered register, holding the address of the output message.
// src must designate an even/odd register pair, holding the address/length of the original message
// Helper function which generates code to
// - load the function code in register fCode (== Z_R0)
! // - 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) {
BLOCK_COMMENT("Set fCode {"); {
*** 1687,1696 ****
--- 1687,1697 ----
int mode = is_decipher ? VM_Version::CipherMode::decipher : VM_Version::CipherMode::cipher;
bool identical_dataBlk_len = (VM_Version::Cipher::_AES128_dataBlk == VM_Version::Cipher::_AES192_dataBlk)
&& (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);
}
__ z_brh(fCode_set); // keyLen > 52: AES256
*** 1704,1713 ****
--- 1705,1715 ----
__ z_lghi(fCode, VM_Version::Cipher::_AES128 + mode);
if (!identical_dataBlk_len) {
__ 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);
}
}
< prev index next >