708 inline void store_heap_oop_not_null(Register d, RegisterOrConstant offs, Register s1,
709 Register tmp = noreg);
710
711 // Null allowed.
712 inline void load_heap_oop(Register d, RegisterOrConstant offs, Register s1 = noreg, Label *is_null = NULL);
713
714 // Encode/decode heap oop. Oop may not be null, else en/decoding goes wrong.
715 // src == d allowed.
716 inline Register encode_heap_oop_not_null(Register d, Register src = noreg);
717 inline Register decode_heap_oop_not_null(Register d, Register src = noreg);
718
719 // Null allowed.
720 inline Register encode_heap_oop(Register d, Register src); // Prefer null check in GC barrier!
721 inline void decode_heap_oop(Register d);
722
723 // Load/Store klass oop from klass field. Compress.
724 void load_klass(Register dst, Register src);
725 void store_klass(Register dst_oop, Register klass, Register tmp = R0);
726 void store_klass_gap(Register dst_oop, Register val = noreg); // Will store 0 if val not specified.
727
728 void load_mirror_from_const_method(Register mirror, Register const_method);
729
730 static int instr_size_for_decode_klass_not_null();
731 void decode_klass_not_null(Register dst, Register src = noreg);
732 Register encode_klass_not_null(Register dst, Register src = noreg);
733
734 // SIGTRAP-based range checks for arrays.
735 inline void trap_range_check_l(Register a, Register b);
736 inline void trap_range_check_l(Register a, int si16);
737 static bool is_trap_range_check_l(int x) {
738 return (is_tw (x, traptoLessThanUnsigned, -1/*any reg*/, -1/*any reg*/) ||
739 is_twi(x, traptoLessThanUnsigned, -1/*any reg*/) );
740 }
741 inline void trap_range_check_le(Register a, int si16);
742 static bool is_trap_range_check_le(int x) {
743 return is_twi(x, traptoEqual | traptoLessThanUnsigned, -1/*any reg*/);
744 }
745 inline void trap_range_check_g(Register a, int si16);
746 static bool is_trap_range_check_g(int x) {
747 return is_twi(x, traptoGreaterThanUnsigned, -1/*any reg*/);
|
708 inline void store_heap_oop_not_null(Register d, RegisterOrConstant offs, Register s1,
709 Register tmp = noreg);
710
711 // Null allowed.
712 inline void load_heap_oop(Register d, RegisterOrConstant offs, Register s1 = noreg, Label *is_null = NULL);
713
714 // Encode/decode heap oop. Oop may not be null, else en/decoding goes wrong.
715 // src == d allowed.
716 inline Register encode_heap_oop_not_null(Register d, Register src = noreg);
717 inline Register decode_heap_oop_not_null(Register d, Register src = noreg);
718
719 // Null allowed.
720 inline Register encode_heap_oop(Register d, Register src); // Prefer null check in GC barrier!
721 inline void decode_heap_oop(Register d);
722
723 // Load/Store klass oop from klass field. Compress.
724 void load_klass(Register dst, Register src);
725 void store_klass(Register dst_oop, Register klass, Register tmp = R0);
726 void store_klass_gap(Register dst_oop, Register val = noreg); // Will store 0 if val not specified.
727
728 void resolve_oop_handle(Register result);
729 void load_mirror_from_const_method(Register mirror, Register const_method);
730
731 static int instr_size_for_decode_klass_not_null();
732 void decode_klass_not_null(Register dst, Register src = noreg);
733 Register encode_klass_not_null(Register dst, Register src = noreg);
734
735 // SIGTRAP-based range checks for arrays.
736 inline void trap_range_check_l(Register a, Register b);
737 inline void trap_range_check_l(Register a, int si16);
738 static bool is_trap_range_check_l(int x) {
739 return (is_tw (x, traptoLessThanUnsigned, -1/*any reg*/, -1/*any reg*/) ||
740 is_twi(x, traptoLessThanUnsigned, -1/*any reg*/) );
741 }
742 inline void trap_range_check_le(Register a, int si16);
743 static bool is_trap_range_check_le(int x) {
744 return is_twi(x, traptoEqual | traptoLessThanUnsigned, -1/*any reg*/);
745 }
746 inline void trap_range_check_g(Register a, int si16);
747 static bool is_trap_range_check_g(int x) {
748 return is_twi(x, traptoGreaterThanUnsigned, -1/*any reg*/);
|