< prev index next >
src/hotspot/cpu/x86/x86_64.ad
Print this page
rev 47365 : Make OOM-during-evacuation race-free.
@@ -6472,10 +6472,14 @@
format %{ "shenandoah_rb $dst, $src" %}
ins_encode %{
Register d = $dst$$Register;
Register s = $src$$Register;
__ movptr(d, Address(s, BrooksPointer::byte_offset()));
+ // This would benefit from expanding in ideal
+ if (ShenandoahSafeOOMDuringEvac) {
+ __ andptr(d, ~BrooksPointer::EVAC_BLOCKER_BITMASK);
+ }
%}
ins_pipe(ialu_reg_mem);
%}
instruct shenandoahRBNarrow(rRegP dst, rRegN src) %{
@@ -6486,10 +6490,14 @@
format %{ "shenandoah_rb $dst, $src" %}
ins_encode %{
Register d = $dst$$Register;
Register s = $src$$Register;
__ movptr(d, Address(r12, s, Address::times_1, BrooksPointer::byte_offset()));
+ // This would benefit from expanding in ideal
+ if (ShenandoahSafeOOMDuringEvac) {
+ __ andptr(d, ~BrooksPointer::EVAC_BLOCKER_BITMASK);
+ }
%}
ins_pipe(ialu_reg_mem);
%}
instruct shenandoahRBNarrowShift(rRegP dst, rRegN src) %{
@@ -6500,10 +6508,14 @@
format %{ "shenandoah_rb $dst, $src" %}
ins_encode %{
Register d = $dst$$Register;
Register s = $src$$Register;
__ movptr(d, Address(r12, s, Address::times_8, BrooksPointer::byte_offset()));
+ // This would benefit from expanding in ideal
+ if (ShenandoahSafeOOMDuringEvac) {
+ __ andptr(d, ~BrooksPointer::EVAC_BLOCKER_BITMASK);
+ }
%}
ins_pipe(ialu_reg_mem);
%}
instruct shenandoahWB(rRegP dst, rRegP src, rFlagsReg cr) %{
@@ -6515,10 +6527,14 @@
Register s = $src$$Register;
Register d = $dst$$Register;
// We need that first read barrier in order to trigger a SEGV/NPE on incoming NULL.
// Also, it brings s into d in preparation for the call to shenandoah_write_barrier().
__ movptr(d, Address(s, BrooksPointer::byte_offset()));
+ // This would benefit from expanding in ideal
+ if (ShenandoahSafeOOMDuringEvac) {
+ __ andptr(d, ~BrooksPointer::EVAC_BLOCKER_BITMASK);
+ }
__ shenandoah_write_barrier(d);
%}
ins_pipe(pipe_slow);
%}
< prev index next >