/** {@inheritDoc} */ @Override public DalvInsn withRegisters(RegisterSpecList registers) { return new HighRegisterPrefix(getPosition(), registers); }
/** {@inheritDoc} */ @Override public int codeSize() { int result = 0; calculateInsnsIfNecessary(); for (SimpleInsn insn : insns) { result += insn.codeSize(); } return result; }
public SimpleInsn[] getMoveInstructions() { RegisterSpecList registers = getRegisters(); int sz = registers.size(); SimpleInsn[] result = new SimpleInsn[sz]; for (int i = 0, outAt = 0; i < sz; i++) { RegisterSpec src = registers.get(i); result[i] = moveInsnFor(src, outAt); outAt += src.getCategory(); } return result; }
/** * Gets the instruction prefix required, if any, to use in an expanded * version of this instance. Will not generate moves for registers * marked compatible to the format by the given BitSet. * * @see #expandedVersion * * @param compatRegs {@code non-null;} set of compatible registers * @return {@code null-ok;} the prefix, if any */ public DalvInsn expandedPrefix(BitSet compatRegs) { RegisterSpecList regs = registers; boolean firstBit = compatRegs.get(0); if (hasResult()) compatRegs.set(0); regs = regs.subset(compatRegs); if (hasResult()) compatRegs.set(0, firstBit); if (regs.size() == 0) return null; return new HighRegisterPrefix(position, regs); }
/** * Helper for {@link #codeSize} and {@link #writeTo} which sets up * {@link #insns} if not already done. */ private void calculateInsnsIfNecessary() { if (insns != null) { return; } RegisterSpecList registers = getRegisters(); int sz = registers.size(); insns = new SimpleInsn[sz]; for (int i = 0, outAt = 0; i < sz; i++) { RegisterSpec src = registers.get(i); insns[i] = moveInsnFor(src, outAt); outAt += src.getCategory(); } }
/** * Gets the instruction prefix required, if any, to use in an expanded * version of this instance. Will not generate moves for registers * marked compatible to the format by the given BitSet. * * @see #expandedVersion * * @param compatRegs {@code non-null;} set of compatible registers * @return {@code null-ok;} the prefix, if any */ public DalvInsn expandedPrefix(BitSet compatRegs) { RegisterSpecList regs = registers; boolean firstBit = compatRegs.get(0); if (hasResult()) compatRegs.set(0); regs = regs.subset(compatRegs); if (hasResult()) compatRegs.set(0, firstBit); if (regs.size() == 0) return null; return new HighRegisterPrefix(position, regs); }
/** * Helper for {@link #codeSize} and {@link #writeTo} which sets up * {@link #insns} if not already done. */ private void calculateInsnsIfNecessary() { if (insns != null) { return; } RegisterSpecList registers = getRegisters(); int sz = registers.size(); insns = new SimpleInsn[sz]; for (int i = 0, outAt = 0; i < sz; i++) { RegisterSpec src = registers.get(i); insns[i] = moveInsnFor(src, outAt); outAt += src.getCategory(); } }
/** {@inheritDoc} */ @Override public DalvInsn withRegisters(RegisterSpecList registers) { return new HighRegisterPrefix(getPosition(), registers); }
/** {@inheritDoc} */ @Override public int codeSize() { int result = 0; calculateInsnsIfNecessary(); for (SimpleInsn insn : insns) { result += insn.codeSize(); } return result; }
/** * Gets the instruction prefix required, if any, to use in an expanded * version of this instance. Will not generate moves for registers * marked compatible to the format by the given BitSet. * * @see #expandedVersion * * @param compatRegs {@code non-null;} set of compatible registers * @return {@code null-ok;} the prefix, if any */ public DalvInsn expandedPrefix(BitSet compatRegs) { RegisterSpecList regs = registers; boolean firstBit = compatRegs.get(0); if (hasResult()) compatRegs.set(0); regs = regs.subset(compatRegs); if (hasResult()) compatRegs.set(0, firstBit); if (regs.size() == 0) return null; return new HighRegisterPrefix(position, regs); }
/** * Helper for {@link #codeSize} and {@link #writeTo} which sets up * {@link #insns} if not already done. */ private void calculateInsnsIfNecessary() { if (insns != null) { return; } RegisterSpecList registers = getRegisters(); int sz = registers.size(); insns = new SimpleInsn[sz]; for (int i = 0, outAt = 0; i < sz; i++) { RegisterSpec src = registers.get(i); insns[i] = moveInsnFor(src, outAt); outAt += src.getCategory(); } }
/** {@inheritDoc} */ @Override public DalvInsn withRegisters(RegisterSpecList registers) { return new HighRegisterPrefix(getPosition(), registers); }
/** {@inheritDoc} */ @Override public void writeTo(AnnotatedOutput out) { calculateInsnsIfNecessary(); for (SimpleInsn insn : insns) { insn.writeTo(out); } }
/** * Gets the instruction prefix required, if any, to use in an expanded * version of this instance. Will not generate moves for registers * marked compatible to the format by the given BitSet. * * @see #expandedVersion * * @param compatRegs {@code non-null;} set of compatible registers * @return {@code null-ok;} the prefix, if any */ public DalvInsn expandedPrefix(BitSet compatRegs) { RegisterSpecList regs = registers; boolean firstBit = compatRegs.get(0); if (hasResult()) compatRegs.set(0); regs = regs.subset(compatRegs); if (hasResult()) compatRegs.set(0, firstBit); if (regs.size() == 0) return null; return new HighRegisterPrefix(position, regs); }
/** {@inheritDoc} */ @Override protected String listingString0(boolean noteIndices) { RegisterSpecList registers = getRegisters(); int sz = registers.size(); StringBuffer sb = new StringBuffer(100); for (int i = 0, outAt = 0; i < sz; i++) { RegisterSpec src = registers.get(i); SimpleInsn insn = moveInsnFor(src, outAt); if (i != 0) { sb.append('\n'); } sb.append(insn.listingString0(noteIndices)); outAt += src.getCategory(); } return sb.toString(); }
/** {@inheritDoc} */ @Override public DalvInsn withRegisters(RegisterSpecList registers) { return new HighRegisterPrefix(getPosition(), registers); }
/** {@inheritDoc} */ @Override public int codeSize() { int result = 0; calculateInsnsIfNecessary(); for (SimpleInsn insn : insns) { result += insn.codeSize(); } return result; }
/** * Gets the instruction prefix required, if any, to use in an expanded * version of this instance. Will not generate moves for registers * marked compatible to the format by the given BitSet. * * @see #expandedVersion * * @param compatRegs {@code non-null;} set of compatible registers * @return {@code null-ok;} the prefix, if any */ public DalvInsn expandedPrefix(BitSet compatRegs) { RegisterSpecList regs = registers; boolean firstBit = compatRegs.get(0); if (hasResult()) compatRegs.set(0); regs = regs.subset(compatRegs); if (hasResult()) compatRegs.set(0, firstBit); if (regs.size() == 0) return null; return new HighRegisterPrefix(position, regs); }
/** {@inheritDoc} */ @Override protected String listingString0(boolean noteIndices) { RegisterSpecList registers = getRegisters(); int sz = registers.size(); StringBuffer sb = new StringBuffer(100); for (int i = 0, outAt = 0; i < sz; i++) { RegisterSpec src = registers.get(i); SimpleInsn insn = moveInsnFor(src, outAt); if (i != 0) { sb.append('\n'); } sb.append(insn.listingString0(noteIndices)); outAt += src.getCategory(); } return sb.toString(); }
/** {@inheritDoc} */ @Override public DalvInsn withRegisters(RegisterSpecList registers) { return new HighRegisterPrefix(getPosition(), registers); }