845 void kernel_crc32_1word(Register crc, Register buf, Register len, Register table,
846 Register t0, Register t1, Register t2, Register t3,
847 Register tc0, Register tc1, Register tc2, Register tc3,
848 bool invertCRC);
849 void kernel_crc32_1byte(Register crc, Register buf, Register len, Register table,
850 Register t0, Register t1, Register t2, Register t3,
851 bool invertCRC);
852 void kernel_crc32_1word_vpmsumd(Register crc, Register buf, Register len, Register table,
853 Register constants, Register barretConstants,
854 Register t0, Register t1, Register t2, Register t3, Register t4,
855 bool invertCRC);
856 void kernel_crc32_1word_aligned(Register crc, Register buf, Register len,
857 Register constants, Register barretConstants,
858 Register t0, Register t1, Register t2);
859
860 void kernel_crc32_singleByte(Register crc, Register buf, Register len, Register table, Register tmp,
861 bool invertCRC);
862 void kernel_crc32_singleByteReg(Register crc, Register val, Register table,
863 bool invertCRC);
864
865 //
866 // Debugging
867 //
868
869 // assert on cr0
870 void asm_assert(bool check_equal, const char* msg, int id);
871 void asm_assert_eq(const char* msg, int id) { asm_assert(true, msg, id); }
872 void asm_assert_ne(const char* msg, int id) { asm_assert(false, msg, id); }
873
874 private:
875 void asm_assert_mems_zero(bool check_equal, int size, int mem_offset, Register mem_base,
876 const char* msg, int id);
877
878 public:
879
880 void asm_assert_mem8_is_zero(int mem_offset, Register mem_base, const char* msg, int id) {
881 asm_assert_mems_zero(true, 8, mem_offset, mem_base, msg, id);
882 }
883 void asm_assert_mem8_isnot_zero(int mem_offset, Register mem_base, const char* msg, int id) {
884 asm_assert_mems_zero(false, 8, mem_offset, mem_base, msg, id);
|
845 void kernel_crc32_1word(Register crc, Register buf, Register len, Register table,
846 Register t0, Register t1, Register t2, Register t3,
847 Register tc0, Register tc1, Register tc2, Register tc3,
848 bool invertCRC);
849 void kernel_crc32_1byte(Register crc, Register buf, Register len, Register table,
850 Register t0, Register t1, Register t2, Register t3,
851 bool invertCRC);
852 void kernel_crc32_1word_vpmsumd(Register crc, Register buf, Register len, Register table,
853 Register constants, Register barretConstants,
854 Register t0, Register t1, Register t2, Register t3, Register t4,
855 bool invertCRC);
856 void kernel_crc32_1word_aligned(Register crc, Register buf, Register len,
857 Register constants, Register barretConstants,
858 Register t0, Register t1, Register t2);
859
860 void kernel_crc32_singleByte(Register crc, Register buf, Register len, Register table, Register tmp,
861 bool invertCRC);
862 void kernel_crc32_singleByteReg(Register crc, Register val, Register table,
863 bool invertCRC);
864
865 // SHA-2 auxiliary functions and public interfaces
866 private:
867 void sha256_deque(const VectorRegister src,
868 const VectorRegister dst1, const VectorRegister dst2, const VectorRegister dst3);
869 void sha256_load_h_vec(const VectorRegister a, const VectorRegister e, const Register hptr);
870 void sha256_round(const VectorRegister* hs, const int total_hs, int& h_cnt, const VectorRegister kpw);
871 void sha256_load_w_plus_k_vec(const Register buf_in, const VectorRegister* ws,
872 const int total_ws, const Register k, const VectorRegister* kpws,
873 const int total_kpws);
874 void sha256_calc_4w(const VectorRegister w0, const VectorRegister w1,
875 const VectorRegister w2, const VectorRegister w3, const VectorRegister kpw0,
876 const VectorRegister kpw1, const VectorRegister kpw2, const VectorRegister kpw3,
877 const Register j, const Register k);
878 void sha256_update_sha_state(const VectorRegister a, const VectorRegister b,
879 const VectorRegister c, const VectorRegister d, const VectorRegister e,
880 const VectorRegister f, const VectorRegister g, const VectorRegister h,
881 const Register hptr);
882
883 void sha512_load_w_vec(const Register buf_in, const VectorRegister* ws, const int total_ws);
884 void sha512_update_sha_state(const Register state, const VectorRegister* hs, const int total_hs);
885 void sha512_round(const VectorRegister* hs, const int total_hs, int& h_cnt, const VectorRegister kpw);
886 void sha512_load_h_vec(const Register state, const VectorRegister* hs, const int total_hs);
887 void sha512_calc_2w(const VectorRegister w0, const VectorRegister w1,
888 const VectorRegister w2, const VectorRegister w3,
889 const VectorRegister w4, const VectorRegister w5,
890 const VectorRegister w6, const VectorRegister w7,
891 const VectorRegister kpw0, const VectorRegister kpw1, const Register j,
892 const VectorRegister vRb, const Register k);
893
894 public:
895 void sha256(bool multi_block);
896 void sha512(bool multi_block);
897
898
899 //
900 // Debugging
901 //
902
903 // assert on cr0
904 void asm_assert(bool check_equal, const char* msg, int id);
905 void asm_assert_eq(const char* msg, int id) { asm_assert(true, msg, id); }
906 void asm_assert_ne(const char* msg, int id) { asm_assert(false, msg, id); }
907
908 private:
909 void asm_assert_mems_zero(bool check_equal, int size, int mem_offset, Register mem_base,
910 const char* msg, int id);
911
912 public:
913
914 void asm_assert_mem8_is_zero(int mem_offset, Register mem_base, const char* msg, int id) {
915 asm_assert_mems_zero(true, 8, mem_offset, mem_base, msg, id);
916 }
917 void asm_assert_mem8_isnot_zero(int mem_offset, Register mem_base, const char* msg, int id) {
918 asm_assert_mems_zero(false, 8, mem_offset, mem_base, msg, id);
|