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