src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.sparc/src/org/graalvm/compiler/lir/sparc/SPARCSaveRegistersOp.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.sparc/src/org/graalvm/compiler/lir/sparc/SPARCSaveRegistersOp.java Mon Mar 20 17:39:40 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.sparc/src/org/graalvm/compiler/lir/sparc/SPARCSaveRegistersOp.java Mon Mar 20 17:39:40 2017
*** 26,45 ****
--- 26,44 ----
import static org.graalvm.compiler.lir.sparc.SPARCDelayedControlTransfer.DUMMY;
import static jdk.vm.ci.code.ValueUtil.asStackSlot;
import static jdk.vm.ci.code.ValueUtil.isStackSlot;
import java.util.Arrays;
import java.util.Set;
import org.graalvm.compiler.asm.sparc.SPARCAddress;
import org.graalvm.compiler.asm.sparc.SPARCMacroAssembler;
import org.graalvm.compiler.lir.LIRInstructionClass;
import org.graalvm.compiler.lir.LIRValueUtil;
import org.graalvm.compiler.lir.Opcode;
import org.graalvm.compiler.lir.StandardOp.SaveRegistersOp;
import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
import org.graalvm.compiler.lir.framemap.FrameMap;
+ import org.graalvm.util.EconomicSet;
import jdk.vm.ci.code.Register;
import jdk.vm.ci.code.RegisterSaveLayout;
import jdk.vm.ci.code.RegisterValue;
import jdk.vm.ci.code.StackSlot;
*** 63,82 ****
--- 62,81 ----
* The slots to which the registers are saved.
*/
@Def(STACK) protected final AllocatableValue[] slots;
/**
! * Specifies if {@link #remove(EconomicSet)} should have an effect.
*/
protected final boolean supportsRemove;
/**
*
* @param savedRegisters the registers saved by this operation which may be subject to
! * {@linkplain #remove(EconomicSet) pruning}
* @param savedRegisterLocations the slots to which the registers are saved
! * @param supportsRemove determines if registers can be {@linkplain #remove(EconomicSet) pruned}
*/
public SPARCSaveRegistersOp(Register[] savedRegisters, AllocatableValue[] savedRegisterLocations, boolean supportsRemove) {
super(TYPE, SIZE);
assert Arrays.asList(savedRegisterLocations).stream().allMatch(LIRValueUtil::isVirtualStackSlot);
this.savedRegisters = savedRegisters;
*** 115,132 ****
--- 114,131 ----
public boolean supportsRemove() {
return supportsRemove;
}
@Override
! public int remove(EconomicSet<Register> doNotSave) {
if (!supportsRemove) {
throw new UnsupportedOperationException();
}
return prune(doNotSave, savedRegisters);
}
! static int prune(EconomicSet<Register> toRemove, Register[] registers) {
int pruned = 0;
for (int i = 0; i < registers.length; i++) {
if (registers[i] != null) {
if (toRemove.contains(registers[i])) {
registers[i] = null;
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.sparc/src/org/graalvm/compiler/lir/sparc/SPARCSaveRegistersOp.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File