738 }
739 inline void trap_range_check_le(Register a, int si16);
740 static bool is_trap_range_check_le(int x) {
741 return is_twi(x, traptoEqual | traptoLessThanUnsigned, -1/*any reg*/);
742 }
743 inline void trap_range_check_g(Register a, int si16);
744 static bool is_trap_range_check_g(int x) {
745 return is_twi(x, traptoGreaterThanUnsigned, -1/*any reg*/);
746 }
747 inline void trap_range_check_ge(Register a, Register b);
748 inline void trap_range_check_ge(Register a, int si16);
749 static bool is_trap_range_check_ge(int x) {
750 return (is_tw (x, traptoEqual | traptoGreaterThanUnsigned, -1/*any reg*/, -1/*any reg*/) ||
751 is_twi(x, traptoEqual | traptoGreaterThanUnsigned, -1/*any reg*/) );
752 }
753 static bool is_trap_range_check(int x) {
754 return is_trap_range_check_l(x) || is_trap_range_check_le(x) ||
755 is_trap_range_check_g(x) || is_trap_range_check_ge(x);
756 }
757
758 void clear_memory_doubleword(Register base_ptr, Register cnt_dwords, Register tmp = R0);
759
760 #ifdef COMPILER2
761 // Intrinsics for CompactStrings
762 // Compress char[] to byte[] by compressing 16 bytes at once.
763 void string_compress_16(Register src, Register dst, Register cnt,
764 Register tmp1, Register tmp2, Register tmp3, Register tmp4, Register tmp5,
765 Label& Lfailure);
766
767 // Compress char[] to byte[]. cnt must be positive int.
768 void string_compress(Register src, Register dst, Register cnt, Register tmp, Label& Lfailure);
769
770 // Inflate byte[] to char[] by inflating 16 bytes at once.
771 void string_inflate_16(Register src, Register dst, Register cnt,
772 Register tmp1, Register tmp2, Register tmp3, Register tmp4, Register tmp5);
773
774 // Inflate byte[] to char[]. cnt must be positive int.
775 void string_inflate(Register src, Register dst, Register cnt, Register tmp);
776
777 void string_compare(Register str1, Register str2, Register cnt1, Register cnt2,
778 Register tmp1, Register result, int ae);
|
738 }
739 inline void trap_range_check_le(Register a, int si16);
740 static bool is_trap_range_check_le(int x) {
741 return is_twi(x, traptoEqual | traptoLessThanUnsigned, -1/*any reg*/);
742 }
743 inline void trap_range_check_g(Register a, int si16);
744 static bool is_trap_range_check_g(int x) {
745 return is_twi(x, traptoGreaterThanUnsigned, -1/*any reg*/);
746 }
747 inline void trap_range_check_ge(Register a, Register b);
748 inline void trap_range_check_ge(Register a, int si16);
749 static bool is_trap_range_check_ge(int x) {
750 return (is_tw (x, traptoEqual | traptoGreaterThanUnsigned, -1/*any reg*/, -1/*any reg*/) ||
751 is_twi(x, traptoEqual | traptoGreaterThanUnsigned, -1/*any reg*/) );
752 }
753 static bool is_trap_range_check(int x) {
754 return is_trap_range_check_l(x) || is_trap_range_check_le(x) ||
755 is_trap_range_check_g(x) || is_trap_range_check_ge(x);
756 }
757
758 void clear_memory_unrolled(Register base_ptr, int cnt_dwords, Register tmp = R0, int offset = 0);
759 void clear_memory_constlen(Register base_ptr, int cnt_dwords, Register tmp = R0);
760 void clear_memory_doubleword(Register base_ptr, Register cnt_dwords, Register tmp = R0, long const_cnt = -1);
761
762 #ifdef COMPILER2
763 // Intrinsics for CompactStrings
764 // Compress char[] to byte[] by compressing 16 bytes at once.
765 void string_compress_16(Register src, Register dst, Register cnt,
766 Register tmp1, Register tmp2, Register tmp3, Register tmp4, Register tmp5,
767 Label& Lfailure);
768
769 // Compress char[] to byte[]. cnt must be positive int.
770 void string_compress(Register src, Register dst, Register cnt, Register tmp, Label& Lfailure);
771
772 // Inflate byte[] to char[] by inflating 16 bytes at once.
773 void string_inflate_16(Register src, Register dst, Register cnt,
774 Register tmp1, Register tmp2, Register tmp3, Register tmp4, Register tmp5);
775
776 // Inflate byte[] to char[]. cnt must be positive int.
777 void string_inflate(Register src, Register dst, Register cnt, Register tmp);
778
779 void string_compare(Register str1, Register str2, Register cnt1, Register cnt2,
780 Register tmp1, Register result, int ae);
|