848 // Restores: src, dst |
848 // Restores: src, dst |
849 // Uses: cnt |
849 // Uses: cnt |
850 // Kills: tmp, Z_R0, Z_R1. |
850 // Kills: tmp, Z_R0, Z_R1. |
851 // Early clobber: result. |
851 // Early clobber: result. |
852 // Boolean precise controls accuracy of result value. |
852 // Boolean precise controls accuracy of result value. |
|
853 #ifdef COMPILER2 |
853 unsigned int string_compress(Register result, Register src, Register dst, Register cnt, |
854 unsigned int string_compress(Register result, Register src, Register dst, Register cnt, |
854 Register tmp, bool precise); |
855 Register tmp, bool precise); |
855 |
856 |
856 // Inflate byte[] to char[]. |
857 // Inflate byte[] to char[]. |
857 unsigned int string_inflate_trot(Register src, Register dst, Register cnt, Register tmp); |
858 unsigned int string_inflate_trot(Register src, Register dst, Register cnt, Register tmp); |
883 Register needle, Register needlecnt, int needlecntval, |
884 Register needle, Register needlecnt, int needlecntval, |
884 Register odd_reg, Register even_reg, int ae); |
885 Register odd_reg, Register even_reg, int ae); |
885 |
886 |
886 unsigned int string_indexof_char(Register result, Register haystack, Register haycnt, |
887 unsigned int string_indexof_char(Register result, Register haystack, Register haycnt, |
887 Register needle, jchar needleChar, Register odd_reg, Register even_reg, bool is_byte); |
888 Register needle, jchar needleChar, Register odd_reg, Register even_reg, bool is_byte); |
|
889 #endif |
888 |
890 |
889 // Emit an oop const to the constant pool and set a relocation info |
891 // Emit an oop const to the constant pool and set a relocation info |
890 // with address current_pc. Return the TOC offset of the constant. |
892 // with address current_pc. Return the TOC offset of the constant. |
891 int store_const_in_toc(AddressLiteral& val); |
893 int store_const_in_toc(AddressLiteral& val); |
892 int store_oop_in_toc(AddressLiteral& oop); |
894 int store_oop_in_toc(AddressLiteral& oop); |
915 static bool is_load_const_call(address a); |
917 static bool is_load_const_call(address a); |
916 static int load_const_call_size() { return load_const_size() + call_byregister_size(); } |
918 static int load_const_call_size() { return load_const_size() + call_byregister_size(); } |
917 static int load_const_from_toc_call_size() { return load_const_from_toc_size() + call_byregister_size(); } |
919 static int load_const_from_toc_call_size() { return load_const_from_toc_size() + call_byregister_size(); } |
918 // Offset is +/- 2**32 -> use long. |
920 // Offset is +/- 2**32 -> use long. |
919 static long get_load_const_from_toc_offset(address a); |
921 static long get_load_const_from_toc_offset(address a); |
920 |
|
921 |
|
922 void generate_type_profiling(const Register Rdata, |
|
923 const Register Rreceiver_klass, |
|
924 const Register Rwanted_receiver_klass, |
|
925 const Register Rmatching_row, |
|
926 bool is_virtual_call); |
|
927 |
922 |
928 // Bit operations for single register operands. |
923 // Bit operations for single register operands. |
929 inline void lshift(Register r, int places, bool doubl = true); // << |
924 inline void lshift(Register r, int places, bool doubl = true); // << |
930 inline void rshift(Register r, int places, bool doubl = true); // >> |
925 inline void rshift(Register r, int places, bool doubl = true); // >> |
931 |
926 |