diff -r e4aeef458496 -r ffcdff41a92f src/cpu/mips/vm/macroAssembler_mips.cpp --- a/src/cpu/mips/vm/macroAssembler_mips.cpp Sat Jan 06 16:30:58 2018 +0800 +++ b/src/cpu/mips/vm/macroAssembler_mips.cpp Thu May 24 19:49:50 2018 +0800 @@ -818,6 +818,28 @@ jr(T9); nop(); } +void MacroAssembler::mov_metadata(Address dst, Metadata* obj) { + int oop_index; + if (obj) { + oop_index = oop_recorder()->find_index(obj); + } else { + oop_index = oop_recorder()->allocate_metadata_index(obj); + } + relocate(metadata_Relocation::spec(oop_index)); + patchable_set48(AT, (long)obj); + sd(AT, dst); +} + +void MacroAssembler::mov_metadata(Register dst, Metadata* obj) { + int oop_index; + if (obj) { + oop_index = oop_recorder()->find_index(obj); + } else { + oop_index = oop_recorder()->allocate_metadata_index(obj); + } + relocate(metadata_Relocation::spec(oop_index)); + patchable_set48(dst, (long)obj); +} void MacroAssembler::call(address entry) { // c/c++ code assume T9 is entry point, so we just always move entry to t9 @@ -870,7 +892,7 @@ assert(entry != NULL, "call most probably wrong"); InstructionMark im(this); relocate(rh); - patchable_call(entry); + patchable_call(entry); } void MacroAssembler::c2bool(Register r) { @@ -1238,7 +1260,6 @@ move(A0, java_thread); call(entry_point, relocInfo::runtime_call_type); delayed()->nop(); - //MacroAssembler::call_VM_leaf_base(entry_point, number_of_arguments); // restore the thread (cannot use the pushed argument since arguments // may be overwritten by C code generated by an optimizing compiler);