< prev index next >

src/cpu/sparc/vm/methodHandles_sparc.cpp

Print this page




  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);


< prev index next >