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);
|