X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.machine%2Fsrc%2Fnet%2Fmograsim%2Fmachine%2Fmi%2Fparameters%2FMnemonicFamily.java;h=f4343bd0d2a95ea85122daf415e6345b9ed657d0;hb=88e1b4382640ee4e907e06572fe6794bc925f344;hp=54c275b445de20bd7c556e5b38eed2189f46d527;hpb=e5460cbb1f4ae06479a92d4ab483b08e8e01e4a6;p=Mograsim.git diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/MnemonicFamily.java b/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/MnemonicFamily.java index 54c275b4..f4343bd0 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/MnemonicFamily.java +++ b/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/MnemonicFamily.java @@ -15,20 +15,39 @@ public class MnemonicFamily implements ParameterClassification private int vectorLength; public MnemonicFamily(String... names) + { + this(false, (int) Math.round(Math.ceil(Math.log(names.length) / Math.log(2))), names); + } + + public MnemonicFamily(boolean reverse, String... names) + { + this(reverse, (int) Math.round(Math.ceil(Math.log(names.length) / Math.log(2))), names); + } + + public MnemonicFamily(int bits, String... names) + { + this(false, bits, names); + } + + public MnemonicFamily(boolean reverse, int bits, String... names) { this.values = new Mnemonic[names.length]; this.stringValues = new String[names.length]; BitVector[] values = new BitVector[names.length]; - int bits = (int) Math.ceil(Math.log(names.length)); for(int i = 0; i < names.length; i++) { values[i] = BitVector.from(i, bits); } - setup(names, values); + setup(names, values, reverse); } public MnemonicFamily(String[] names, long[] values, int bits) + { + this(false, names, values, bits); + } + + public MnemonicFamily(boolean reverse, String[] names, long[] values, int bits) { if(names.length != values.length) throw new IllegalArgumentException(); @@ -41,20 +60,30 @@ public class MnemonicFamily implements ParameterClassification vectors[i] = BitVector.from(values[i], bits); } - setup(names, vectors); + setup(names, vectors, reverse); } public MnemonicFamily(String[] names, BitVector[] values) + { + this(false, names, values); + } + + public MnemonicFamily(boolean reverse, String[] names, BitVector[] values) { if(names.length != values.length) throw new IllegalArgumentException(); this.values = new Mnemonic[values.length]; this.stringValues = new String[values.length]; - setup(names, values); + setup(names, values, reverse); } public MnemonicFamily(MnemonicPair... values) + { + this(false, values); + } + + public MnemonicFamily(boolean reverse, MnemonicPair... values) { this.values = new Mnemonic[values.length]; this.stringValues = new String[values.length]; @@ -62,11 +91,11 @@ public class MnemonicFamily implements ParameterClassification setup(values); } - private void setup(String[] names, BitVector[] values) + private void setup(String[] names, BitVector[] values, boolean reverse) { MnemonicPair[] mnemonics = new MnemonicPair[values.length]; for(int i = 0; i < values.length; i++) - mnemonics[i] = new MnemonicPair(names[i], values[i]); + mnemonics[i] = new MnemonicPair(names[i], reverse ? values[i].reverse() : values[i]); setup(mnemonics); }