From d09827f6dc03fa3cded8e996b4ce45fdae3755ca Mon Sep 17 00:00:00 2001 From: Fabian Stemmler Date: Sun, 15 Sep 2019 01:59:01 +0200 Subject: [PATCH] MicroInstructions can now be converted to bits --- .../src/net/mograsim/machine/mi/MicroInstruction.java | 10 ++++++++++ .../machine/mi/MicroInstructionDefinition.java | 10 ++++++++++ 2 files changed, 20 insertions(+) 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(); -- 2.17.1