1207 return AddressLiteral((address)obj, rspec); 1208 } 1209 1210 1211 AddressLiteral MacroAssembler::constant_oop_address(jobject obj) { 1212 assert(oop_recorder() != NULL, "this assembler needs an OopRecorder"); 1213 assert(Universe::heap()->is_in_reserved(JNIHandles::resolve(obj)), "not an oop"); 1214 int oop_index = oop_recorder()->find_index(obj); 1215 return AddressLiteral(obj, oop_Relocation::spec(oop_index)); 1216 } 1217 1218 void MacroAssembler::set_narrow_oop(jobject obj, Register d) { 1219 assert(oop_recorder() != NULL, "this assembler needs an OopRecorder"); 1220 int oop_index = oop_recorder()->find_index(obj); 1221 RelocationHolder rspec = oop_Relocation::spec(oop_index); 1222 1223 assert_not_delayed(); 1224 // Relocation with special format (see relocInfo_sparc.hpp). 1225 relocate(rspec, 1); 1226 // Assembler::sethi(0x3fffff, d); 1227 emit_long( op(branch_op) | rd(d) | op2(sethi_op2) | hi22(0x3fffff) ); 1228 // Don't add relocation for 'add'. Do patching during 'sethi' processing. 1229 add(d, 0x3ff, d); 1230 1231 } 1232 1233 void MacroAssembler::set_narrow_klass(Klass* k, Register d) { 1234 assert(oop_recorder() != NULL, "this assembler needs an OopRecorder"); 1235 int klass_index = oop_recorder()->find_index(k); 1236 RelocationHolder rspec = metadata_Relocation::spec(klass_index); 1237 narrowOop encoded_k = oopDesc::encode_klass(k); 1238 1239 assert_not_delayed(); 1240 // Relocation with special format (see relocInfo_sparc.hpp). 1241 relocate(rspec, 1); 1242 // Assembler::sethi(encoded_k, d); 1243 emit_long( op(branch_op) | rd(d) | op2(sethi_op2) | hi22(encoded_k) ); 1244 // Don't add relocation for 'add'. Do patching during 'sethi' processing. 1245 add(d, low10(encoded_k), d); 1246 1247 } 1248 1249 void MacroAssembler::align(int modulus) { 1250 while (offset() % modulus != 0) nop(); 1251 } 1252 1253 1254 void MacroAssembler::safepoint() { 1255 relocate(breakpoint_Relocation::spec(breakpoint_Relocation::safepoint)); 1256 } 1257 1258 1259 void RegistersForDebugging::print(outputStream* s) { 1260 FlagSetting fs(Debugging, true); 1261 int j; 1262 for (j = 0; j < 8; ++j) { 1263 if (j != 6) { s->print("i%d = ", j); os::print_location(s, i[j]); } | 1207 return AddressLiteral((address)obj, rspec); 1208 } 1209 1210 1211 AddressLiteral MacroAssembler::constant_oop_address(jobject obj) { 1212 assert(oop_recorder() != NULL, "this assembler needs an OopRecorder"); 1213 assert(Universe::heap()->is_in_reserved(JNIHandles::resolve(obj)), "not an oop"); 1214 int oop_index = oop_recorder()->find_index(obj); 1215 return AddressLiteral(obj, oop_Relocation::spec(oop_index)); 1216 } 1217 1218 void MacroAssembler::set_narrow_oop(jobject obj, Register d) { 1219 assert(oop_recorder() != NULL, "this assembler needs an OopRecorder"); 1220 int oop_index = oop_recorder()->find_index(obj); 1221 RelocationHolder rspec = oop_Relocation::spec(oop_index); 1222 1223 assert_not_delayed(); 1224 // Relocation with special format (see relocInfo_sparc.hpp). 1225 relocate(rspec, 1); 1226 // Assembler::sethi(0x3fffff, d); 1227 emit_int32( op(branch_op) | rd(d) | op2(sethi_op2) | hi22(0x3fffff) ); 1228 // Don't add relocation for 'add'. Do patching during 'sethi' processing. 1229 add(d, 0x3ff, d); 1230 1231 } 1232 1233 void MacroAssembler::set_narrow_klass(Klass* k, Register d) { 1234 assert(oop_recorder() != NULL, "this assembler needs an OopRecorder"); 1235 int klass_index = oop_recorder()->find_index(k); 1236 RelocationHolder rspec = metadata_Relocation::spec(klass_index); 1237 narrowOop encoded_k = oopDesc::encode_klass(k); 1238 1239 assert_not_delayed(); 1240 // Relocation with special format (see relocInfo_sparc.hpp). 1241 relocate(rspec, 1); 1242 // Assembler::sethi(encoded_k, d); 1243 emit_int32( op(branch_op) | rd(d) | op2(sethi_op2) | hi22(encoded_k) ); 1244 // Don't add relocation for 'add'. Do patching during 'sethi' processing. 1245 add(d, low10(encoded_k), d); 1246 1247 } 1248 1249 void MacroAssembler::align(int modulus) { 1250 while (offset() % modulus != 0) nop(); 1251 } 1252 1253 1254 void MacroAssembler::safepoint() { 1255 relocate(breakpoint_Relocation::spec(breakpoint_Relocation::safepoint)); 1256 } 1257 1258 1259 void RegistersForDebugging::print(outputStream* s) { 1260 FlagSetting fs(Debugging, true); 1261 int j; 1262 for (j = 0; j < 8; ++j) { 1263 if (j != 6) { s->print("i%d = ", j); os::print_location(s, i[j]); } |