< prev index next >

src/hotspot/cpu/sparc/macroAssembler_sparc.cpp

Print this page




 981   }
 982 }
 983 
 984 
 985 AddressLiteral MacroAssembler::allocate_metadata_address(Metadata* obj) {
 986   assert(oop_recorder() != NULL, "this assembler needs a Recorder");
 987   int index = oop_recorder()->allocate_metadata_index(obj);
 988   RelocationHolder rspec = metadata_Relocation::spec(index);
 989   return AddressLiteral((address)obj, rspec);
 990 }
 991 
 992 AddressLiteral MacroAssembler::constant_metadata_address(Metadata* obj) {
 993   assert(oop_recorder() != NULL, "this assembler needs a Recorder");
 994   int index = oop_recorder()->find_index(obj);
 995   RelocationHolder rspec = metadata_Relocation::spec(index);
 996   return AddressLiteral((address)obj, rspec);
 997 }
 998 
 999 
1000 AddressLiteral MacroAssembler::constant_oop_address(jobject obj) {



1001   assert(oop_recorder() != NULL, "this assembler needs an OopRecorder");
1002   assert(Universe::heap()->is_in_reserved(JNIHandles::resolve(obj)), "not an oop");


1003   int oop_index = oop_recorder()->find_index(obj);
1004   return AddressLiteral(obj, oop_Relocation::spec(oop_index));
1005 }
1006 
1007 void  MacroAssembler::set_narrow_oop(jobject obj, Register d) {
1008   assert(oop_recorder() != NULL, "this assembler needs an OopRecorder");
1009   int oop_index = oop_recorder()->find_index(obj);
1010   RelocationHolder rspec = oop_Relocation::spec(oop_index);
1011 
1012   assert_not_delayed();
1013   // Relocation with special format (see relocInfo_sparc.hpp).
1014   relocate(rspec, 1);
1015   // Assembler::sethi(0x3fffff, d);
1016   emit_int32( op(branch_op) | rd(d) | op2(sethi_op2) | hi22(0x3fffff) );
1017   // Don't add relocation for 'add'. Do patching during 'sethi' processing.
1018   add(d, 0x3ff, d);
1019 
1020 }
1021 
1022 void  MacroAssembler::set_narrow_klass(Klass* k, Register d) {




 981   }
 982 }
 983 
 984 
 985 AddressLiteral MacroAssembler::allocate_metadata_address(Metadata* obj) {
 986   assert(oop_recorder() != NULL, "this assembler needs a Recorder");
 987   int index = oop_recorder()->allocate_metadata_index(obj);
 988   RelocationHolder rspec = metadata_Relocation::spec(index);
 989   return AddressLiteral((address)obj, rspec);
 990 }
 991 
 992 AddressLiteral MacroAssembler::constant_metadata_address(Metadata* obj) {
 993   assert(oop_recorder() != NULL, "this assembler needs a Recorder");
 994   int index = oop_recorder()->find_index(obj);
 995   RelocationHolder rspec = metadata_Relocation::spec(index);
 996   return AddressLiteral((address)obj, rspec);
 997 }
 998 
 999 
1000 AddressLiteral MacroAssembler::constant_oop_address(jobject obj) {
1001 #ifdef ASSERT
1002   {
1003     ThreadInVMfromUnknown tiv;
1004     assert(oop_recorder() != NULL, "this assembler needs an OopRecorder");
1005     assert(Universe::heap()->is_in_reserved(JNIHandles::resolve(obj)), "not an oop");
1006   }
1007 #endif
1008   int oop_index = oop_recorder()->find_index(obj);
1009   return AddressLiteral(obj, oop_Relocation::spec(oop_index));
1010 }
1011 
1012 void  MacroAssembler::set_narrow_oop(jobject obj, Register d) {
1013   assert(oop_recorder() != NULL, "this assembler needs an OopRecorder");
1014   int oop_index = oop_recorder()->find_index(obj);
1015   RelocationHolder rspec = oop_Relocation::spec(oop_index);
1016 
1017   assert_not_delayed();
1018   // Relocation with special format (see relocInfo_sparc.hpp).
1019   relocate(rspec, 1);
1020   // Assembler::sethi(0x3fffff, d);
1021   emit_int32( op(branch_op) | rd(d) | op2(sethi_op2) | hi22(0x3fffff) );
1022   // Don't add relocation for 'add'. Do patching during 'sethi' processing.
1023   add(d, 0x3ff, d);
1024 
1025 }
1026 
1027 void  MacroAssembler::set_narrow_klass(Klass* k, Register d) {


< prev index next >