57 import org.graalvm.compiler.lir.LIRVerifier; |
57 import org.graalvm.compiler.lir.LIRVerifier; |
58 import org.graalvm.compiler.lir.LabelRef; |
58 import org.graalvm.compiler.lir.LabelRef; |
59 import org.graalvm.compiler.lir.StandardOp; |
59 import org.graalvm.compiler.lir.StandardOp; |
60 import org.graalvm.compiler.lir.StandardOp.BlockEndOp; |
60 import org.graalvm.compiler.lir.StandardOp.BlockEndOp; |
61 import org.graalvm.compiler.lir.StandardOp.LabelOp; |
61 import org.graalvm.compiler.lir.StandardOp.LabelOp; |
62 import org.graalvm.compiler.lir.StandardOp.SaveRegistersOp; |
62 import org.graalvm.compiler.lir.StandardOp.ZapRegistersOp; |
63 import org.graalvm.compiler.lir.hashing.Hasher; |
|
64 import org.graalvm.compiler.lir.SwitchStrategy; |
63 import org.graalvm.compiler.lir.SwitchStrategy; |
65 import org.graalvm.compiler.lir.Variable; |
64 import org.graalvm.compiler.lir.Variable; |
|
65 import org.graalvm.compiler.lir.hashing.Hasher; |
66 import org.graalvm.compiler.options.Option; |
66 import org.graalvm.compiler.options.Option; |
67 import org.graalvm.compiler.options.OptionKey; |
67 import org.graalvm.compiler.options.OptionKey; |
68 import org.graalvm.compiler.options.OptionType; |
68 import org.graalvm.compiler.options.OptionType; |
69 import org.graalvm.compiler.options.OptionValues; |
69 import org.graalvm.compiler.options.OptionValues; |
70 |
70 |
228 public void emitMove(AllocatableValue dst, Value src) { |
228 public void emitMove(AllocatableValue dst, Value src) { |
229 append(moveFactory.createMove(dst, src)); |
229 append(moveFactory.createMove(dst, src)); |
230 } |
230 } |
231 |
231 |
232 @Override |
232 @Override |
|
233 public Variable emitReadRegister(Register register, ValueKind<?> kind) { |
|
234 return emitMove(register.asValue(kind)); |
|
235 } |
|
236 |
|
237 @Override |
|
238 public void emitWriteRegister(Register dst, Value src, ValueKind<?> kind) { |
|
239 emitMove(dst.asValue(kind), src); |
|
240 } |
|
241 |
|
242 @Override |
233 public void emitMoveConstant(AllocatableValue dst, Constant src) { |
243 public void emitMoveConstant(AllocatableValue dst, Constant src) { |
234 append(moveFactory.createLoad(dst, src)); |
244 append(moveFactory.createLoad(dst, src)); |
|
245 } |
|
246 |
|
247 @Override |
|
248 public boolean canInlineConstant(Constant constant) { |
|
249 return moveFactory.canInlineConstant(constant); |
|
250 } |
|
251 |
|
252 @Override |
|
253 public boolean mayEmbedConstantLoad(Constant constant) { |
|
254 return moveFactory.mayEmbedConstantLoad(constant); |
235 } |
255 } |
236 |
256 |
237 @Override |
257 @Override |
238 public Value emitConstant(LIRKind kind, Constant constant) { |
258 public Value emitConstant(LIRKind kind, Constant constant) { |
239 if (moveFactory.canInlineConstant(constant)) { |
259 if (moveFactory.canInlineConstant(constant)) { |
582 public LIRInstruction createMultiBenchmarkCounter(String[] names, String[] groups, Value[] increments) { |
602 public LIRInstruction createMultiBenchmarkCounter(String[] names, String[] groups, Value[] increments) { |
583 throw GraalError.unimplemented(); |
603 throw GraalError.unimplemented(); |
584 } |
604 } |
585 |
605 |
586 @Override |
606 @Override |
587 public abstract SaveRegistersOp createZapRegisters(Register[] zappedRegisters, JavaConstant[] zapValues); |
607 public abstract ZapRegistersOp createZapRegisters(Register[] zappedRegisters, JavaConstant[] zapValues); |
588 |
608 |
589 @Override |
609 @Override |
590 public SaveRegistersOp createZapRegisters() { |
610 public ZapRegistersOp createZapRegisters() { |
591 Register[] zappedRegisters = getResult().getFrameMap().getRegisterConfig().getAllocatableRegisters().toArray(); |
611 Register[] zappedRegisters = getResult().getFrameMap().getRegisterConfig().getAllocatableRegisters().toArray(); |
|
612 return createZapRegisters(zappedRegisters); |
|
613 } |
|
614 |
|
615 @Override |
|
616 public ZapRegistersOp createZapRegisters(Register[] zappedRegisters) { |
592 JavaConstant[] zapValues = new JavaConstant[zappedRegisters.length]; |
617 JavaConstant[] zapValues = new JavaConstant[zappedRegisters.length]; |
593 for (int i = 0; i < zappedRegisters.length; i++) { |
618 for (int i = 0; i < zappedRegisters.length; i++) { |
594 PlatformKind kind = target().arch.getLargestStorableKind(zappedRegisters[i].getRegisterCategory()); |
619 PlatformKind kind = target().arch.getLargestStorableKind(zappedRegisters[i].getRegisterCategory()); |
595 zapValues[i] = zapValueForKind(kind); |
620 zapValues[i] = zapValueForKind(kind); |
596 } |
621 } |