685 void multiply_64_x_64_loop(Register x, Register xstart, Register x_xstart,
686 Register y, Register y_idx, Register z,
687 Register carry, Register product_high, Register product,
688 Register idx, Register kdx, Register tmp);
689 void multiply_add_128_x_128(Register x_xstart, Register y, Register z,
690 Register yz_idx, Register idx, Register carry,
691 Register product_high, Register product, Register tmp,
692 int offset);
693 void multiply_128_x_128_loop(Register x_xstart,
694 Register y, Register z,
695 Register yz_idx, Register idx, Register carry,
696 Register product_high, Register product,
697 Register carry2, Register tmp);
698 void multiply_to_len(Register x, Register xlen,
699 Register y, Register ylen,
700 Register z, Register zlen,
701 Register tmp1, Register tmp2, Register tmp3, Register tmp4, Register tmp5,
702 Register tmp6, Register tmp7, Register tmp8, Register tmp9, Register tmp10,
703 Register tmp11, Register tmp12, Register tmp13);
704
705 //
706 // Debugging
707 //
708
709 // assert on cr0
710 void asm_assert(bool check_equal, const char* msg, int id);
711 void asm_assert_eq(const char* msg, int id) { asm_assert(true, msg, id); }
712 void asm_assert_ne(const char* msg, int id) { asm_assert(false, msg, id); }
713
714 private:
715 void asm_assert_mems_zero(bool check_equal, int size, int mem_offset, Register mem_base,
716 const char* msg, int id);
717
718 public:
719
720 void asm_assert_mem8_is_zero(int mem_offset, Register mem_base, const char* msg, int id) {
721 asm_assert_mems_zero(true, 8, mem_offset, mem_base, msg, id);
722 }
723 void asm_assert_mem8_isnot_zero(int mem_offset, Register mem_base, const char* msg, int id) {
724 asm_assert_mems_zero(false, 8, mem_offset, mem_base, msg, id);
|
685 void multiply_64_x_64_loop(Register x, Register xstart, Register x_xstart,
686 Register y, Register y_idx, Register z,
687 Register carry, Register product_high, Register product,
688 Register idx, Register kdx, Register tmp);
689 void multiply_add_128_x_128(Register x_xstart, Register y, Register z,
690 Register yz_idx, Register idx, Register carry,
691 Register product_high, Register product, Register tmp,
692 int offset);
693 void multiply_128_x_128_loop(Register x_xstart,
694 Register y, Register z,
695 Register yz_idx, Register idx, Register carry,
696 Register product_high, Register product,
697 Register carry2, Register tmp);
698 void multiply_to_len(Register x, Register xlen,
699 Register y, Register ylen,
700 Register z, Register zlen,
701 Register tmp1, Register tmp2, Register tmp3, Register tmp4, Register tmp5,
702 Register tmp6, Register tmp7, Register tmp8, Register tmp9, Register tmp10,
703 Register tmp11, Register tmp12, Register tmp13);
704
705 // CRC32 Intrinsics.
706 void load_reverse_32(Register dst, Register src);
707 int crc32_table_columns(Register table, Register tc0, Register tc1, Register tc2, Register tc3);
708 void fold_byte_crc32(Register crc, Register val, Register table, Register tmp);
709 void fold_8bit_crc32(Register crc, Register table, Register tmp);
710 void update_byte_crc32(Register crc, Register val, Register table);
711 void update_byteLoop_crc32(Register crc, Register buf, Register len, Register table,
712 Register data, bool loopAlignment, bool invertCRC);
713 void update_1word_crc32(Register crc, Register buf, Register table, int bufDisp, int bufInc,
714 Register t0, Register t1, Register t2, Register t3,
715 Register tc0, Register tc1, Register tc2, Register tc3);
716 void kernel_crc32_2word(Register crc, Register buf, Register len, Register table,
717 Register t0, Register t1, Register t2, Register t3,
718 Register tc0, Register tc1, Register tc2, Register tc3);
719 void kernel_crc32_1word(Register crc, Register buf, Register len, Register table,
720 Register t0, Register t1, Register t2, Register t3,
721 Register tc0, Register tc1, Register tc2, Register tc3);
722 void kernel_crc32_1byte(Register crc, Register buf, Register len, Register table,
723 Register t0, Register t1, Register t2, Register t3);
724 void kernel_crc32_singleByte(Register crc, Register buf, Register len, Register table, Register tmp);
725
726 //
727 // Debugging
728 //
729
730 // assert on cr0
731 void asm_assert(bool check_equal, const char* msg, int id);
732 void asm_assert_eq(const char* msg, int id) { asm_assert(true, msg, id); }
733 void asm_assert_ne(const char* msg, int id) { asm_assert(false, msg, id); }
734
735 private:
736 void asm_assert_mems_zero(bool check_equal, int size, int mem_offset, Register mem_base,
737 const char* msg, int id);
738
739 public:
740
741 void asm_assert_mem8_is_zero(int mem_offset, Register mem_base, const char* msg, int id) {
742 asm_assert_mems_zero(true, 8, mem_offset, mem_base, msg, id);
743 }
744 void asm_assert_mem8_isnot_zero(int mem_offset, Register mem_base, const char* msg, int id) {
745 asm_assert_mems_zero(false, 8, mem_offset, mem_base, msg, id);
|