< prev index next >
src/share/vm/c1/c1_LIRGenerator.cpp
Print this page
rev 10523 : [backport] C1 shenandoah_wb expects obj in a register
rev 10524 : [backport] Some trivial-ish cleanups
*** 1863,1885 ****
--- 1863,1902 ----
} else {
return obj;
}
}
+ LIR_Opr LIRGenerator::ensure_in_register(LIR_Opr obj) {
+ if (!obj->is_register()) {
+ LIR_Opr obj_reg = new_register(T_OBJECT);
+ if (obj->is_constant()) {
+ __ move(obj, obj_reg);
+ } else {
+ __ leal(obj, obj_reg);
+ }
+ obj = obj_reg;
+ }
+ return obj;
+ }
+
LIR_Opr LIRGenerator::shenandoah_write_barrier(LIR_Opr obj, CodeEmitInfo* info, bool need_null_check) {
if (UseShenandoahGC && ShenandoahWriteBarrier) {
LIR_Opr result = new_register(T_OBJECT);
+ obj = ensure_in_register(obj);
+ assert(obj->is_register(), "must be a register at this point");
+
__ shenandoah_wb(obj, result, info ? new CodeEmitInfo(info) : NULL, need_null_check);
return result;
} else {
return obj;
}
}
#endif
+
//------------------------java.nio.Buffer.checkIndex------------------------
// int java.nio.Buffer.checkIndex(int)
void LIRGenerator::do_NIOCheckIndex(Intrinsic* x) {
// NOTE: by the time we are in checkIndex() we are guaranteed that
< prev index next >