< prev index next >

src/cpu/ppc/vm/macroAssembler_ppc.hpp

Print this page
rev 13437 : Implement SHA256 and SHA512 intrinsics for PPC64

Sample run reduced 6.5s run to 2.8s for SHA256.


 844   void kernel_crc32_1word(Register crc, Register buf, Register len, Register table,
 845                           Register t0,  Register t1,  Register t2,  Register t3,
 846                           Register tc0, Register tc1, Register tc2, Register tc3,
 847                           bool invertCRC);
 848   void kernel_crc32_1byte(Register crc, Register buf, Register len, Register table,
 849                           Register t0,  Register t1,  Register t2,  Register t3,
 850                           bool invertCRC);
 851   void kernel_crc32_1word_vpmsumd(Register crc, Register buf, Register len, Register table,
 852                           Register constants, Register barretConstants,
 853                           Register t0,  Register t1, Register t2, Register t3, Register t4,
 854                           bool invertCRC);
 855   void kernel_crc32_1word_aligned(Register crc, Register buf, Register len,
 856                           Register constants, Register barretConstants,
 857                           Register t0, Register t1, Register t2);
 858 
 859   void kernel_crc32_singleByte(Register crc, Register buf, Register len, Register table, Register tmp,
 860                                bool invertCRC);
 861   void kernel_crc32_singleByteReg(Register crc, Register val, Register table,
 862                                   bool invertCRC);
 863 





































 864   //
 865   // Debugging
 866   //
 867 
 868   // assert on cr0
 869   void asm_assert(bool check_equal, const char* msg, int id);
 870   void asm_assert_eq(const char* msg, int id) { asm_assert(true, msg, id); }
 871   void asm_assert_ne(const char* msg, int id) { asm_assert(false, msg, id); }
 872 
 873  private:
 874   void asm_assert_mems_zero(bool check_equal, int size, int mem_offset, Register mem_base,
 875                             const char* msg, int id);
 876 
 877  public:
 878 
 879   void asm_assert_mem8_is_zero(int mem_offset, Register mem_base, const char* msg, int id) {
 880     asm_assert_mems_zero(true,  8, mem_offset, mem_base, msg, id);
 881   }
 882   void asm_assert_mem8_isnot_zero(int mem_offset, Register mem_base, const char* msg, int id) {
 883     asm_assert_mems_zero(false, 8, mem_offset, mem_base, msg, id);




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


< prev index next >