From: Fabian Stemmler Date: Sat, 14 Sep 2019 23:59:01 +0000 (+0200) Subject: MicroInstructions can now be converted to bits X-Git-Url: https://mograsim.net/gitweb/?p=Mograsim.git;a=commitdiff_plain;h=d09827f6dc03fa3cded8e996b4ce45fdae3755ca MicroInstructions can now be converted to bits --- diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstruction.java b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstruction.java index 07a15d2c..d88a8efb 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstruction.java +++ b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstruction.java @@ -1,5 +1,6 @@ package net.mograsim.machine.mi; +import net.mograsim.logic.core.types.BitVector; import net.mograsim.machine.mi.parameters.MicroInstructionParameter; import net.mograsim.machine.mi.parameters.Mnemonic; @@ -17,4 +18,13 @@ public interface MicroInstruction { { return new StandardMicroInstruction(parameters); } + + default BitVector toBitVector() + { + BitVector vector = BitVector.of(); + int size = getSize(); + for(int i = 0; i < size; i++) + vector.concat(getParameter(i).getValue()); + return vector; + } } diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java index 0ba3b413..b9cd2ef7 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java +++ b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java @@ -1,8 +1,10 @@ package net.mograsim.machine.mi; import java.math.BigInteger; +import java.util.Arrays; import java.util.Optional; +import net.mograsim.logic.core.types.Bit; import net.mograsim.machine.mi.parameters.IntegerClassification; import net.mograsim.machine.mi.parameters.IntegerImmediate; import net.mograsim.machine.mi.parameters.MicroInstructionParameter; @@ -31,6 +33,14 @@ public interface MicroInstructionDefinition return getParameterClassifications().length; } + /** + * @return The amount of {@link Bit}s in a {@link MicroInstruction} that follows this definition. + */ + public default int sizeInBits() + { + return Arrays.stream(getParameterClassifications()).mapToInt(e -> e.getExpectedBits()).reduce(0, (a, b) -> a + b); + } + public default MicroInstruction createDefaultInstruction() { int size = size();