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

src/cpu/sparc/vm/assembler_sparc.cpp

Print this page

        

*** 1521,1531 **** --- 1521,1546 ---- assert(oop_recorder() != NULL, "this assembler needs an OopRecorder"); int oop_index = oop_recorder()->find_index(obj); return Address(d, address(obj), oop_Relocation::spec(oop_index)); } + void MacroAssembler::load_narrow_oop_con(jobject obj, Register d) { + assert(oop_recorder() != NULL, "this assembler needs an OopRecorder"); + int oop_index = oop_recorder()->find_index(obj); + RelocationHolder rspec = oop_Relocation::spec(oop_index); + assert_not_delayed(); + // Relocation with special format (see relocInfo_sparc.hpp). + relocate(rspec, 1); + // Assembler::sethi(0x3fffff, d); + emit_long( op(branch_op) | rd(d) | op2(sethi_op2) | hi22(0x3fffff) ); + // Don't add relocation for 'add'. Do patching during 'sethi' processing. + add(d, 0x3ff, d); + + } + + void MacroAssembler::align(int modulus) { while (offset() % modulus != 0) nop(); }
*** 3535,3566 **** set((-i*offset)+STACK_BIAS, Rscratch); st(G0, Rtsp, Rscratch); } } ! void MacroAssembler::load_klass(Register s, Register d) { // The number of bytes in this code is used by // MachCallDynamicJavaNode::ret_addr_offset() // if this changes, change that. if (UseCompressedOops) { ! lduw(s, oopDesc::klass_offset_in_bytes(), d); ! decode_heap_oop_not_null(d); } else { ! ld_ptr(s, oopDesc::klass_offset_in_bytes(), d); } } // ??? figure out src vs. dst! ! void MacroAssembler::store_klass(Register d, Register s1) { if (UseCompressedOops) { ! assert(s1 != d, "not enough registers"); ! encode_heap_oop_not_null(d); ! // Zero out entire klass field first. ! st_ptr(G0, s1, oopDesc::klass_offset_in_bytes()); ! st(d, s1, oopDesc::klass_offset_in_bytes()); } else { ! st_ptr(d, s1, oopDesc::klass_offset_in_bytes()); } } void MacroAssembler::load_heap_oop(const Address& s, Register d, int offset) { if (UseCompressedOops) { --- 3550,3580 ---- set((-i*offset)+STACK_BIAS, Rscratch); st(G0, Rtsp, Rscratch); } } ! void MacroAssembler::load_klass(Register src_oop, Register klass) { // The number of bytes in this code is used by // MachCallDynamicJavaNode::ret_addr_offset() // if this changes, change that. if (UseCompressedOops) { ! lduw(src_oop, oopDesc::klass_offset_in_bytes(), klass); ! decode_heap_oop_not_null(klass); } else { ! ld_ptr(src_oop, oopDesc::klass_offset_in_bytes(), klass); } } // ??? figure out src vs. dst! ! void MacroAssembler::store_klass(Register klass, Register dst_oop) { if (UseCompressedOops) { ! assert(dst_oop != klass, "not enough registers"); ! encode_heap_oop_not_null(klass); ! sllx(klass, BitsPerInt, klass); ! stx(klass, dst_oop, oopDesc::klass_offset_in_bytes()); } else { ! st_ptr(klass, dst_oop, oopDesc::klass_offset_in_bytes()); } } void MacroAssembler::load_heap_oop(const Address& s, Register d, int offset) { if (UseCompressedOops) {
src/cpu/sparc/vm/assembler_sparc.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File