# HG changeset patch # User eosterlund # Date 1528895288 -7200 # Node ID b93bf58462775ad145167c248ef54358b893daaa # Parent 7bf4f1b5e438666c06eeb8204bbb528825654a03 8203344: Make C1 leal patchable on SPARC Reviewed-by: neliasso, thartmann diff -r 7bf4f1b5e438 -r b93bf5846277 src/hotspot/cpu/sparc/c1_LIRAssembler_sparc.cpp --- a/src/hotspot/cpu/sparc/c1_LIRAssembler_sparc.cpp Wed Jun 13 12:52:21 2018 +0200 +++ b/src/hotspot/cpu/sparc/c1_LIRAssembler_sparc.cpp Wed Jun 13 15:08:08 2018 +0200 @@ -3202,23 +3202,38 @@ const Register dest_reg = dest->as_pointer_register(); const Register base_reg = addr->base()->as_pointer_register(); - if (Assembler::is_simm13(addr->disp())) { - if (addr->index()->is_valid()) { - const Register index_reg = addr->index()->as_pointer_register(); - assert(index_reg != G3_scratch, "invariant"); - __ add(base_reg, addr->disp(), G3_scratch); - __ add(index_reg, G3_scratch, dest_reg); - } else { - __ add(base_reg, addr->disp(), dest_reg); - } - } else { - __ set(addr->disp(), G3_scratch); + if (patch_code != lir_patch_none) { + PatchingStub* patch = new PatchingStub(_masm, PatchingStub::access_field_id); + assert(addr->disp() != 0, "must have"); + assert(base_reg != G3_scratch, "invariant"); + __ patchable_set(0, G3_scratch); + patching_epilog(patch, patch_code, base_reg, info); + assert(dest_reg != G3_scratch, "invariant"); if (addr->index()->is_valid()) { const Register index_reg = addr->index()->as_pointer_register(); assert(index_reg != G3_scratch, "invariant"); __ add(index_reg, G3_scratch, G3_scratch); } __ add(base_reg, G3_scratch, dest_reg); + } else { + if (Assembler::is_simm13(addr->disp())) { + if (addr->index()->is_valid()) { + const Register index_reg = addr->index()->as_pointer_register(); + assert(index_reg != G3_scratch, "invariant"); + __ add(base_reg, addr->disp(), G3_scratch); + __ add(index_reg, G3_scratch, dest_reg); + } else { + __ add(base_reg, addr->disp(), dest_reg); + } + } else { + __ set(addr->disp(), G3_scratch); + if (addr->index()->is_valid()) { + const Register index_reg = addr->index()->as_pointer_register(); + assert(index_reg != G3_scratch, "invariant"); + __ add(index_reg, G3_scratch, G3_scratch); + } + __ add(base_reg, G3_scratch, dest_reg); + } } }