src/cpu/sparc/vm/macroAssembler_sparc.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 8004537 Sdiff src/cpu/sparc/vm

src/cpu/sparc/vm/macroAssembler_sparc.cpp

Print this page




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


src/cpu/sparc/vm/macroAssembler_sparc.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File