< prev index next >

src/cpu/aarch64/vm/stubGenerator_aarch64.cpp

Print this page
rev 8307 : 8080586: aarch64: hotspot test compiler/codegen/7184394/TestAESMain.java fails
Summary: Return correct length in generate_cipherBlockChaining_encryptAESCrypt
Reviewed-by: duke


1874   //   x0        - input length
1875   //
1876   address generate_cipherBlockChaining_encryptAESCrypt() {
1877     assert(UseAES, "need AES instructions and misaligned SSE support");
1878     __ align(CodeEntryAlignment);
1879     StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_encryptAESCrypt");
1880 
1881     Label L_loadkeys_44, L_loadkeys_52, L_aes_loop, L_rounds_44, L_rounds_52;
1882 
1883     const Register from        = c_rarg0;  // source array address
1884     const Register to          = c_rarg1;  // destination array address
1885     const Register key         = c_rarg2;  // key array address
1886     const Register rvec        = c_rarg3;  // r byte array initialized from initvector array address
1887                                            // and left with the results of the last encryption block
1888     const Register len_reg     = c_rarg4;  // src len (must be multiple of blocksize 16)
1889     const Register keylen      = rscratch1;
1890 
1891     address start = __ pc();
1892       __ enter();
1893 
1894       __ mov(rscratch1, len_reg);
1895       __ ldrw(keylen, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT)));
1896 
1897       __ ld1(v0, __ T16B, rvec);
1898 
1899       __ cmpw(keylen, 52);
1900       __ br(Assembler::CC, L_loadkeys_44);
1901       __ br(Assembler::EQ, L_loadkeys_52);
1902 
1903       __ ld1(v17, v18, __ T16B, __ post(key, 32));
1904       __ rev32(v17, __ T16B, v17);
1905       __ rev32(v18, __ T16B, v18);
1906     __ BIND(L_loadkeys_52);
1907       __ ld1(v19, v20, __ T16B, __ post(key, 32));
1908       __ rev32(v19, __ T16B, v19);
1909       __ rev32(v20, __ T16B, v20);
1910     __ BIND(L_loadkeys_44);
1911       __ ld1(v21, v22, v23, v24, __ T16B, __ post(key, 64));
1912       __ rev32(v21, __ T16B, v21);
1913       __ rev32(v22, __ T16B, v22);
1914       __ rev32(v23, __ T16B, v23);




1874   //   x0        - input length
1875   //
1876   address generate_cipherBlockChaining_encryptAESCrypt() {
1877     assert(UseAES, "need AES instructions and misaligned SSE support");
1878     __ align(CodeEntryAlignment);
1879     StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_encryptAESCrypt");
1880 
1881     Label L_loadkeys_44, L_loadkeys_52, L_aes_loop, L_rounds_44, L_rounds_52;
1882 
1883     const Register from        = c_rarg0;  // source array address
1884     const Register to          = c_rarg1;  // destination array address
1885     const Register key         = c_rarg2;  // key array address
1886     const Register rvec        = c_rarg3;  // r byte array initialized from initvector array address
1887                                            // and left with the results of the last encryption block
1888     const Register len_reg     = c_rarg4;  // src len (must be multiple of blocksize 16)
1889     const Register keylen      = rscratch1;
1890 
1891     address start = __ pc();
1892       __ enter();
1893 
1894       __ mov(rscratch2, len_reg);
1895       __ ldrw(keylen, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT)));
1896 
1897       __ ld1(v0, __ T16B, rvec);
1898 
1899       __ cmpw(keylen, 52);
1900       __ br(Assembler::CC, L_loadkeys_44);
1901       __ br(Assembler::EQ, L_loadkeys_52);
1902 
1903       __ ld1(v17, v18, __ T16B, __ post(key, 32));
1904       __ rev32(v17, __ T16B, v17);
1905       __ rev32(v18, __ T16B, v18);
1906     __ BIND(L_loadkeys_52);
1907       __ ld1(v19, v20, __ T16B, __ post(key, 32));
1908       __ rev32(v19, __ T16B, v19);
1909       __ rev32(v20, __ T16B, v20);
1910     __ BIND(L_loadkeys_44);
1911       __ ld1(v21, v22, v23, v24, __ T16B, __ post(key, 64));
1912       __ rev32(v21, __ T16B, v21);
1913       __ rev32(v22, __ T16B, v22);
1914       __ rev32(v23, __ T16B, v23);


< prev index next >