54 "MH argument is a Class");
55 __ ld_ptr(Address(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 bool did_save = false;
76 if (temp_reg == noreg || temp2_reg == noreg) {
77 temp_reg = L1;
78 temp2_reg = L2;
79 __ save_frame_and_mov(0, obj_reg, L0);
80 obj_reg = L0;
81 did_save = true;
82 }
83 Label L_ok, L_bad;
84 BLOCK_COMMENT("verify_klass {");
85 __ verify_oop(obj_reg);
86 __ br_null_short(obj_reg, Assembler::pn, L_bad);
87 __ load_klass(obj_reg, temp_reg);
88 __ set(ExternalAddress((Metadata**)klass_addr), temp2_reg);
89 __ ld_ptr(Address(temp2_reg, 0), temp2_reg);
90 __ cmp_and_brx_short(temp_reg, temp2_reg, Assembler::equal, Assembler::pt, L_ok);
91 intptr_t super_check_offset = klass->super_check_offset();
92 __ ld_ptr(Address(temp_reg, super_check_offset), temp_reg);
93 __ set(ExternalAddress((Metadata**)klass_addr), temp2_reg);
94 __ ld_ptr(Address(temp2_reg, 0), temp2_reg);
|
54 "MH argument is a Class");
55 __ ld_ptr(Address(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 bool did_save = false;
76 if (temp_reg == noreg || temp2_reg == noreg) {
77 temp_reg = L1;
78 temp2_reg = L2;
79 __ save_frame_and_mov(0, obj_reg, L0);
80 obj_reg = L0;
81 did_save = true;
82 }
83 Label L_ok, L_bad;
84 BLOCK_COMMENT("verify_klass {");
85 __ verify_oop(obj_reg);
86 __ br_null_short(obj_reg, Assembler::pn, L_bad);
87 __ load_klass(obj_reg, temp_reg);
88 __ set(ExternalAddress((Metadata**)klass_addr), temp2_reg);
89 __ ld_ptr(Address(temp2_reg, 0), temp2_reg);
90 __ cmp_and_brx_short(temp_reg, temp2_reg, Assembler::equal, Assembler::pt, L_ok);
91 intptr_t super_check_offset = klass->super_check_offset();
92 __ ld_ptr(Address(temp_reg, super_check_offset), temp_reg);
93 __ set(ExternalAddress((Metadata**)klass_addr), temp2_reg);
94 __ ld_ptr(Address(temp2_reg, 0), temp2_reg);
|