8167595: AArch64: SEGV in stub code cipherBlockChaining_decryptAESCrypt
Reviewed-by: aph
This commit is contained in:
parent
810f5aada6
commit
6a9dfd0048
@ -2743,7 +2743,7 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
__ align(CodeEntryAlignment);
|
__ align(CodeEntryAlignment);
|
||||||
StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_encryptAESCrypt");
|
StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_encryptAESCrypt");
|
||||||
|
|
||||||
Label L_loadkeys_44, L_loadkeys_52, L_aes_loop, L_rounds_44, L_rounds_52;
|
Label L_loadkeys_44, L_loadkeys_52, L_aes_loop, L_rounds_44, L_rounds_52, _L_finish;
|
||||||
|
|
||||||
const Register from = c_rarg0; // source array address
|
const Register from = c_rarg0; // source array address
|
||||||
const Register to = c_rarg1; // destination array address
|
const Register to = c_rarg1; // destination array address
|
||||||
@ -2754,9 +2754,12 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
const Register keylen = rscratch1;
|
const Register keylen = rscratch1;
|
||||||
|
|
||||||
address start = __ pc();
|
address start = __ pc();
|
||||||
|
|
||||||
__ enter();
|
__ enter();
|
||||||
|
|
||||||
__ mov(rscratch2, len_reg);
|
__ subsw(rscratch2, len_reg, zr);
|
||||||
|
__ br(Assembler::LE, _L_finish);
|
||||||
|
|
||||||
__ ldrw(keylen, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT)));
|
__ ldrw(keylen, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT)));
|
||||||
|
|
||||||
__ ld1(v0, __ T16B, rvec);
|
__ ld1(v0, __ T16B, rvec);
|
||||||
@ -2814,11 +2817,13 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
__ eor(v0, __ T16B, v0, v31);
|
__ eor(v0, __ T16B, v0, v31);
|
||||||
|
|
||||||
__ st1(v0, __ T16B, __ post(to, 16));
|
__ st1(v0, __ T16B, __ post(to, 16));
|
||||||
__ sub(len_reg, len_reg, 16);
|
|
||||||
__ cbnz(len_reg, L_aes_loop);
|
__ subw(len_reg, len_reg, 16);
|
||||||
|
__ cbnzw(len_reg, L_aes_loop);
|
||||||
|
|
||||||
__ st1(v0, __ T16B, rvec);
|
__ st1(v0, __ T16B, rvec);
|
||||||
|
|
||||||
|
__ BIND(_L_finish);
|
||||||
__ mov(r0, rscratch2);
|
__ mov(r0, rscratch2);
|
||||||
|
|
||||||
__ leave();
|
__ leave();
|
||||||
@ -2844,7 +2849,7 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
__ align(CodeEntryAlignment);
|
__ align(CodeEntryAlignment);
|
||||||
StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_decryptAESCrypt");
|
StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_decryptAESCrypt");
|
||||||
|
|
||||||
Label L_loadkeys_44, L_loadkeys_52, L_aes_loop, L_rounds_44, L_rounds_52;
|
Label L_loadkeys_44, L_loadkeys_52, L_aes_loop, L_rounds_44, L_rounds_52, _L_finish;
|
||||||
|
|
||||||
const Register from = c_rarg0; // source array address
|
const Register from = c_rarg0; // source array address
|
||||||
const Register to = c_rarg1; // destination array address
|
const Register to = c_rarg1; // destination array address
|
||||||
@ -2855,9 +2860,12 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
const Register keylen = rscratch1;
|
const Register keylen = rscratch1;
|
||||||
|
|
||||||
address start = __ pc();
|
address start = __ pc();
|
||||||
|
|
||||||
__ enter();
|
__ enter();
|
||||||
|
|
||||||
__ mov(rscratch2, len_reg);
|
__ subsw(rscratch2, len_reg, zr);
|
||||||
|
__ br(Assembler::LE, _L_finish);
|
||||||
|
|
||||||
__ ldrw(keylen, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT)));
|
__ ldrw(keylen, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT)));
|
||||||
|
|
||||||
__ ld1(v2, __ T16B, rvec);
|
__ ld1(v2, __ T16B, rvec);
|
||||||
@ -2920,11 +2928,12 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
__ st1(v0, __ T16B, __ post(to, 16));
|
__ st1(v0, __ T16B, __ post(to, 16));
|
||||||
__ orr(v2, __ T16B, v1, v1);
|
__ orr(v2, __ T16B, v1, v1);
|
||||||
|
|
||||||
__ sub(len_reg, len_reg, 16);
|
__ subw(len_reg, len_reg, 16);
|
||||||
__ cbnz(len_reg, L_aes_loop);
|
__ cbnzw(len_reg, L_aes_loop);
|
||||||
|
|
||||||
__ st1(v2, __ T16B, rvec);
|
__ st1(v2, __ T16B, rvec);
|
||||||
|
|
||||||
|
__ BIND(_L_finish);
|
||||||
__ mov(r0, rscratch2);
|
__ mov(r0, rscratch2);
|
||||||
|
|
||||||
__ leave();
|
__ leave();
|
||||||
|
Loading…
Reference in New Issue
Block a user