X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.machine%2Fsrc%2Fnet%2Fmograsim%2Fmachine%2Fmi%2Fparameters%2FIntegerImmediate.java;fp=plugins%2Fnet.mograsim.machine%2Fsrc%2Fnet%2Fmograsim%2Fmachine%2Fmi%2Fparameters%2FIntegerImmediate.java;h=dea11d465d87a1fa9ac2fbd469f179a2ff3225f4;hb=dfc725abca213bdd76fc97fdeb3310f095131f95;hp=0194766ff3ae10fa609137b4b63538b45d3fe695;hpb=e8097d4fd58f9d3c76a975659dc84a99e1977fbb;p=Mograsim.git diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/IntegerImmediate.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/IntegerImmediate.java index 0194766f..dea11d46 100644 --- a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/IntegerImmediate.java +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/IntegerImmediate.java @@ -1,20 +1,27 @@ package net.mograsim.machine.mi.parameters; +import static net.mograsim.logic.core.types.Bit.X; + import java.math.BigInteger; import net.mograsim.logic.core.types.BitVector; public final class IntegerImmediate implements MicroInstructionParameter { + private IntegerClassification owner; private BitVector value; - public IntegerImmediate(BigInteger value, int bits) + /** + * value == null means a vector consisting only of X + */ + public IntegerImmediate(IntegerClassification owner, BigInteger value, int bits) { - this.value = BitVector.from(value, bits); + this(owner, value == null ? BitVector.of(X, bits) : BitVector.from(value, bits)); } - public IntegerImmediate(BitVector value) + public IntegerImmediate(IntegerClassification owner, BitVector value) { + this.owner = owner; this.value = value; } @@ -58,23 +65,28 @@ public final class IntegerImmediate implements MicroInstructionParameter return true; } + public boolean isX() + { + return value.equals(BitVector.of(X, value.length())); + } + /** - * @return The value of this IntegerImmediate as an unsigned BigInteger + * @return The value of this IntegerImmediate as an unsigned BigInteger, or null, if the value is X. */ public BigInteger getValueAsBigInteger() { - return value.getUnsignedValue(); + return isX() ? null : value.getUnsignedValue(); } @Override public String toString() { - return getValueAsBigInteger().toString(); + return isX() ? "X" : getValueAsBigInteger().toString(); } @Override public boolean isDefault() { - return value.getSignedValueLong() == 0; + return equals(owner.getDefault()); } }