< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc/src/org/graalvm/compiler/hotspot/sparc/SPARCHotSpotBackend.java

Print this page
rev 52509 : [mq]: graal


 176             }
 177         }
 178     }
 179 
 180     public class HotSpotFrameContext implements FrameContext {
 181 
 182         final boolean isStub;
 183 
 184         HotSpotFrameContext(boolean isStub) {
 185             this.isStub = isStub;
 186         }
 187 
 188         @Override
 189         public boolean hasFrame() {
 190             return true;
 191         }
 192 
 193         @Override
 194         public void enter(CompilationResultBuilder crb) {
 195             final int frameSize = crb.frameMap.totalFrameSize();
 196             final int stackpoinerChange = -frameSize;
 197             SPARCMacroAssembler masm = (SPARCMacroAssembler) crb.asm;
 198             if (!isStub) {
 199                 emitStackOverflowCheck(crb);
 200             }
 201 
 202             if (SPARCAssembler.isSimm13(stackpoinerChange)) {
 203                 masm.save(sp, stackpoinerChange, sp);
 204             } else {
 205                 try (ScratchRegister sc = masm.getScratchRegister()) {
 206                     Register scratch = sc.getRegister();
 207                     assert isGlobalRegister(scratch) : "Only global registers are allowed before save. Got register " + scratch;
 208                     masm.setx(stackpoinerChange, scratch, false);
 209                     masm.save(sp, scratch, sp);
 210                 }
 211             }
 212 
 213             if (ZapStackOnMethodEntry.getValue(crb.getOptions())) {
 214                 final int slotSize = 8;
 215                 for (int i = 0; i < frameSize / slotSize; ++i) {
 216                     // 0xC1C1C1C1
 217                     masm.stx(g0, new SPARCAddress(sp, i * slotSize));
 218                 }
 219             }
 220         }
 221 
 222         @Override
 223         public void leave(CompilationResultBuilder crb) {
 224             SPARCMacroAssembler masm = (SPARCMacroAssembler) crb.asm;
 225             masm.restoreWindow();
 226         }
 227     }
 228 




 176             }
 177         }
 178     }
 179 
 180     public class HotSpotFrameContext implements FrameContext {
 181 
 182         final boolean isStub;
 183 
 184         HotSpotFrameContext(boolean isStub) {
 185             this.isStub = isStub;
 186         }
 187 
 188         @Override
 189         public boolean hasFrame() {
 190             return true;
 191         }
 192 
 193         @Override
 194         public void enter(CompilationResultBuilder crb) {
 195             final int frameSize = crb.frameMap.totalFrameSize();
 196             final int stackpointerChange = -frameSize;
 197             SPARCMacroAssembler masm = (SPARCMacroAssembler) crb.asm;
 198             if (!isStub) {
 199                 emitStackOverflowCheck(crb);
 200             }
 201 
 202             if (SPARCAssembler.isSimm13(stackpointerChange)) {
 203                 masm.save(sp, stackpointerChange, sp);
 204             } else {
 205                 try (ScratchRegister sc = masm.getScratchRegister()) {
 206                     Register scratch = sc.getRegister();
 207                     assert isGlobalRegister(scratch) : "Only global registers are allowed before save. Got register " + scratch;
 208                     masm.setx(stackpointerChange, scratch, false);
 209                     masm.save(sp, scratch, sp);
 210                 }
 211             }
 212 
 213             if (ZapStackOnMethodEntry.getValue(crb.getOptions())) {
 214                 final int slotSize = 8;
 215                 for (int i = 0; i < frameSize / slotSize; ++i) {
 216                     // 0xC1C1C1C1
 217                     masm.stx(g0, new SPARCAddress(sp, i * slotSize));
 218                 }
 219             }
 220         }
 221 
 222         @Override
 223         public void leave(CompilationResultBuilder crb) {
 224             SPARCMacroAssembler masm = (SPARCMacroAssembler) crb.asm;
 225             masm.restoreWindow();
 226         }
 227     }
 228 


< prev index next >