811 void muladd(Register out, Register in, Register offset, Register len, Register k,
812 Register tmp1, Register tmp2, Register carry);
813 void multiply_to_len(Register x, Register xlen,
814 Register y, Register ylen,
815 Register z, Register zlen,
816 Register tmp1, Register tmp2, Register tmp3, Register tmp4, Register tmp5,
817 Register tmp6, Register tmp7, Register tmp8, Register tmp9, Register tmp10,
818 Register tmp11, Register tmp12, Register tmp13);
819
820 // Emitters for CRC32 calculation.
821 // A note on invertCRC:
822 // Unfortunately, internal representation of crc differs between CRC32 and CRC32C.
823 // CRC32 holds it's current crc value in the externally visible representation.
824 // CRC32C holds it's current crc value in internal format, ready for updating.
825 // Thus, the crc value must be bit-flipped before updating it in the CRC32 case.
826 // In the CRC32C case, it must be bit-flipped when it is given to the outside world (getValue()).
827 // The bool invertCRC parameter indicates whether bit-flipping is required before updates.
828 void load_reverse_32(Register dst, Register src);
829 int crc32_table_columns(Register table, Register tc0, Register tc1, Register tc2, Register tc3);
830 void fold_byte_crc32(Register crc, Register val, Register table, Register tmp);
831 void fold_8bit_crc32(Register crc, Register table, Register tmp);
832 void update_byte_crc32(Register crc, Register val, Register table);
833 void update_byteLoop_crc32(Register crc, Register buf, Register len, Register table,
834 Register data, bool loopAlignment);
835 void update_1word_crc32(Register crc, Register buf, Register table, int bufDisp, int bufInc,
836 Register t0, Register t1, Register t2, Register t3,
837 Register tc0, Register tc1, Register tc2, Register tc3);
838 void kernel_crc32_1word(Register crc, Register buf, Register len, Register table,
839 Register t0, Register t1, Register t2, Register t3,
840 Register tc0, Register tc1, Register tc2, Register tc3,
841 bool invertCRC);
842 void kernel_crc32_1byte(Register crc, Register buf, Register len, Register table,
843 Register t0, Register t1, Register t2, Register t3,
844 bool invertCRC);
845 void kernel_crc32_vpmsum(Register crc, Register buf, Register len, Register table, Register constants,
846 Register t0, Register t1, Register t2, Register t3, Register t4, Register t5,
847 bool invertCRC);
848 void kernel_crc32_vpmsum_aligned(Register crc, Register buf, Register len, Register constants,
849 Register t0, Register t1, Register t2, Register t3, Register t4, Register t5);
850 // Version which internally decides what to use.
851 void crc32(Register crc, Register buf, Register len, Register t0, Register t1, Register t2,
852 Register t3, Register t4, Register t5, Register t6, Register t7, bool is_crc32c);
853
854 void kernel_crc32_singleByte(Register crc, Register buf, Register len, Register table, Register tmp,
855 bool invertCRC);
856 void kernel_crc32_singleByteReg(Register crc, Register val, Register table,
857 bool invertCRC);
858
859 // SHA-2 auxiliary functions and public interfaces
860 private:
861 void sha256_deque(const VectorRegister src,
862 const VectorRegister dst1, const VectorRegister dst2, const VectorRegister dst3);
863 void sha256_load_h_vec(const VectorRegister a, const VectorRegister e, const Register hptr);
864 void sha256_round(const VectorRegister* hs, const int total_hs, int& h_cnt, const VectorRegister kpw);
865 void sha256_load_w_plus_k_vec(const Register buf_in, const VectorRegister* ws,
866 const int total_ws, const Register k, const VectorRegister* kpws,
867 const int total_kpws);
868 void sha256_calc_4w(const VectorRegister w0, const VectorRegister w1,
869 const VectorRegister w2, const VectorRegister w3, const VectorRegister kpw0,
|
811 void muladd(Register out, Register in, Register offset, Register len, Register k,
812 Register tmp1, Register tmp2, Register carry);
813 void multiply_to_len(Register x, Register xlen,
814 Register y, Register ylen,
815 Register z, Register zlen,
816 Register tmp1, Register tmp2, Register tmp3, Register tmp4, Register tmp5,
817 Register tmp6, Register tmp7, Register tmp8, Register tmp9, Register tmp10,
818 Register tmp11, Register tmp12, Register tmp13);
819
820 // Emitters for CRC32 calculation.
821 // A note on invertCRC:
822 // Unfortunately, internal representation of crc differs between CRC32 and CRC32C.
823 // CRC32 holds it's current crc value in the externally visible representation.
824 // CRC32C holds it's current crc value in internal format, ready for updating.
825 // Thus, the crc value must be bit-flipped before updating it in the CRC32 case.
826 // In the CRC32C case, it must be bit-flipped when it is given to the outside world (getValue()).
827 // The bool invertCRC parameter indicates whether bit-flipping is required before updates.
828 void load_reverse_32(Register dst, Register src);
829 int crc32_table_columns(Register table, Register tc0, Register tc1, Register tc2, Register tc3);
830 void fold_byte_crc32(Register crc, Register val, Register table, Register tmp);
831 void update_byte_crc32(Register crc, Register val, Register table);
832 void update_byteLoop_crc32(Register crc, Register buf, Register len, Register table,
833 Register data, bool loopAlignment);
834 void update_1word_crc32(Register crc, Register buf, Register table, int bufDisp, int bufInc,
835 Register t0, Register t1, Register t2, Register t3,
836 Register tc0, Register tc1, Register tc2, Register tc3);
837 void kernel_crc32_1word(Register crc, Register buf, Register len, Register table,
838 Register t0, Register t1, Register t2, Register t3,
839 Register tc0, Register tc1, Register tc2, Register tc3,
840 bool invertCRC);
841 void kernel_crc32_vpmsum(Register crc, Register buf, Register len, Register constants,
842 Register t0, Register t1, Register t2, Register t3, Register t4,
843 Register t5, Register t6, bool invertCRC);
844 void kernel_crc32_vpmsum_aligned(Register crc, Register buf, Register len, Register constants,
845 Register t0, Register t1, Register t2, Register t3, Register t4,
846 Register t5, Register t6);
847 // Version which internally decides what to use.
848 void crc32(Register crc, Register buf, Register len, Register t0, Register t1, Register t2,
849 Register t3, Register t4, Register t5, Register t6, Register t7, bool is_crc32c);
850
851 void kernel_crc32_singleByte(Register crc, Register buf, Register len, Register table, Register tmp,
852 bool invertCRC);
853 void kernel_crc32_singleByteReg(Register crc, Register val, Register table,
854 bool invertCRC);
855
856 // SHA-2 auxiliary functions and public interfaces
857 private:
858 void sha256_deque(const VectorRegister src,
859 const VectorRegister dst1, const VectorRegister dst2, const VectorRegister dst3);
860 void sha256_load_h_vec(const VectorRegister a, const VectorRegister e, const Register hptr);
861 void sha256_round(const VectorRegister* hs, const int total_hs, int& h_cnt, const VectorRegister kpw);
862 void sha256_load_w_plus_k_vec(const Register buf_in, const VectorRegister* ws,
863 const int total_ws, const Register k, const VectorRegister* kpws,
864 const int total_kpws);
865 void sha256_calc_4w(const VectorRegister w0, const VectorRegister w1,
866 const VectorRegister w2, const VectorRegister w3, const VectorRegister kpw0,
|