54 }
55 __ ld(klass_reg, java_lang_Class::klass_offset_in_bytes(), klass_reg);
56 }
57
58 #ifdef ASSERT
59 static int check_nonzero(const char* xname, int x) {
60 assert(x != 0, "%s should be nonzero", xname);
61 return x;
62 }
63 #define NONZERO(x) check_nonzero(#x, x)
64 #else //ASSERT
65 #define NONZERO(x) (x)
66 #endif //ASSERT
67
68 #ifdef ASSERT
69 void MethodHandles::verify_klass(MacroAssembler* _masm,
70 Register obj_reg, SystemDictionary::WKID klass_id,
71 Register temp_reg, Register temp2_reg,
72 const char* error_message) {
73 InstanceKlass** klass_addr = SystemDictionary::well_known_klass_addr(klass_id);
74 KlassHandle klass = SystemDictionary::well_known_klass(klass_id);
75 Label L_ok, L_bad;
76 BLOCK_COMMENT("verify_klass {");
77 __ verify_oop(obj_reg);
78 __ cmpdi(CCR0, obj_reg, 0);
79 __ beq(CCR0, L_bad);
80 __ load_klass(temp_reg, obj_reg);
81 __ load_const_optimized(temp2_reg, (address) klass_addr);
82 __ ld(temp2_reg, 0, temp2_reg);
83 __ cmpd(CCR0, temp_reg, temp2_reg);
84 __ beq(CCR0, L_ok);
85 __ ld(temp_reg, klass->super_check_offset(), temp_reg);
86 __ cmpd(CCR0, temp_reg, temp2_reg);
87 __ beq(CCR0, L_ok);
88 __ BIND(L_bad);
89 __ stop(error_message);
90 __ BIND(L_ok);
91 BLOCK_COMMENT("} verify_klass");
92 }
93
94 void MethodHandles::verify_ref_kind(MacroAssembler* _masm, int ref_kind, Register member_reg, Register temp) {
|
54 }
55 __ ld(klass_reg, java_lang_Class::klass_offset_in_bytes(), klass_reg);
56 }
57
58 #ifdef ASSERT
59 static int check_nonzero(const char* xname, int x) {
60 assert(x != 0, "%s should be nonzero", xname);
61 return x;
62 }
63 #define NONZERO(x) check_nonzero(#x, x)
64 #else //ASSERT
65 #define NONZERO(x) (x)
66 #endif //ASSERT
67
68 #ifdef ASSERT
69 void MethodHandles::verify_klass(MacroAssembler* _masm,
70 Register obj_reg, SystemDictionary::WKID klass_id,
71 Register temp_reg, Register temp2_reg,
72 const char* error_message) {
73 InstanceKlass** klass_addr = SystemDictionary::well_known_klass_addr(klass_id);
74 Klass* klass = SystemDictionary::well_known_klass(klass_id);
75 Label L_ok, L_bad;
76 BLOCK_COMMENT("verify_klass {");
77 __ verify_oop(obj_reg);
78 __ cmpdi(CCR0, obj_reg, 0);
79 __ beq(CCR0, L_bad);
80 __ load_klass(temp_reg, obj_reg);
81 __ load_const_optimized(temp2_reg, (address) klass_addr);
82 __ ld(temp2_reg, 0, temp2_reg);
83 __ cmpd(CCR0, temp_reg, temp2_reg);
84 __ beq(CCR0, L_ok);
85 __ ld(temp_reg, klass->super_check_offset(), temp_reg);
86 __ cmpd(CCR0, temp_reg, temp2_reg);
87 __ beq(CCR0, L_ok);
88 __ BIND(L_bad);
89 __ stop(error_message);
90 __ BIND(L_ok);
91 BLOCK_COMMENT("} verify_klass");
92 }
93
94 void MethodHandles::verify_ref_kind(MacroAssembler* _masm, int ref_kind, Register member_reg, Register temp) {
|