< prev index next >

src/cpu/ppc/vm/macroAssembler_ppc.hpp

Print this page
rev 8631 : 8130654: ppc: implement MultiplyToLen intrinsic
Contributed-by: Peter.Januschke@sap.com


 660   }
 661 
 662   void clear_memory_doubleword(Register base_ptr, Register cnt_dwords, Register tmp = R0);
 663 
 664   // Needle of length 1.
 665   void string_indexof_1(Register result, Register haystack, Register haycnt,
 666                         Register needle, jchar needleChar,
 667                         Register tmp1, Register tmp2);
 668   // General indexof, eventually with constant needle length.
 669   void string_indexof(Register result, Register haystack, Register haycnt,
 670                       Register needle, ciTypeArray* needle_values, Register needlecnt, int needlecntval,
 671                       Register tmp1, Register tmp2, Register tmp3, Register tmp4);
 672   void string_compare(Register str1_reg, Register str2_reg, Register cnt1_reg, Register cnt2_reg,
 673                       Register result_reg, Register tmp_reg);
 674   void char_arrays_equals(Register str1_reg, Register str2_reg, Register cnt_reg, Register result_reg,
 675                           Register tmp1_reg, Register tmp2_reg, Register tmp3_reg, Register tmp4_reg,
 676                           Register tmp5_reg);
 677   void char_arrays_equalsImm(Register str1_reg, Register str2_reg, int cntval, Register result_reg,
 678                              Register tmp1_reg, Register tmp2_reg);
 679 

























 680   //
 681   // Debugging
 682   //
 683 
 684   // assert on cr0
 685   void asm_assert(bool check_equal, const char* msg, int id);
 686   void asm_assert_eq(const char* msg, int id) { asm_assert(true, msg, id); }
 687   void asm_assert_ne(const char* msg, int id) { asm_assert(false, msg, id); }
 688 
 689  private:
 690   void asm_assert_mems_zero(bool check_equal, int size, int mem_offset, Register mem_base,
 691                             const char* msg, int id);
 692 
 693  public:
 694 
 695   void asm_assert_mem8_is_zero(int mem_offset, Register mem_base, const char* msg, int id) {
 696     asm_assert_mems_zero(true,  8, mem_offset, mem_base, msg, id);
 697   }
 698   void asm_assert_mem8_isnot_zero(int mem_offset, Register mem_base, const char* msg, int id) {
 699     asm_assert_mems_zero(false, 8, mem_offset, mem_base, msg, id);




 660   }
 661 
 662   void clear_memory_doubleword(Register base_ptr, Register cnt_dwords, Register tmp = R0);
 663 
 664   // Needle of length 1.
 665   void string_indexof_1(Register result, Register haystack, Register haycnt,
 666                         Register needle, jchar needleChar,
 667                         Register tmp1, Register tmp2);
 668   // General indexof, eventually with constant needle length.
 669   void string_indexof(Register result, Register haystack, Register haycnt,
 670                       Register needle, ciTypeArray* needle_values, Register needlecnt, int needlecntval,
 671                       Register tmp1, Register tmp2, Register tmp3, Register tmp4);
 672   void string_compare(Register str1_reg, Register str2_reg, Register cnt1_reg, Register cnt2_reg,
 673                       Register result_reg, Register tmp_reg);
 674   void char_arrays_equals(Register str1_reg, Register str2_reg, Register cnt_reg, Register result_reg,
 675                           Register tmp1_reg, Register tmp2_reg, Register tmp3_reg, Register tmp4_reg,
 676                           Register tmp5_reg);
 677   void char_arrays_equalsImm(Register str1_reg, Register str2_reg, int cntval, Register result_reg,
 678                              Register tmp1_reg, Register tmp2_reg);
 679 
 680   // Emitters for BigInteger.multiplyToLen intrinsic.
 681   inline void multiply64(Register dest_hi, Register dest_lo,
 682                          Register x, Register y);
 683   void add2_with_carry(Register dest_hi, Register dest_lo,
 684                        Register src1, Register src2);
 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);


< prev index next >