From ecd9aeb906d1f930b974e26113de62a179c86cc0 Mon Sep 17 00:00:00 2001 From: adam Date: Thu, 21 Aug 2008 11:27:18 +0100 Subject: [PATCH] update instruction encoding, remove ability to predicate directly on C-flag --- src/edu/berkeley/fleet/two/FleetTwoFleet.java | 39 +++++++++++-------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/src/edu/berkeley/fleet/two/FleetTwoFleet.java b/src/edu/berkeley/fleet/two/FleetTwoFleet.java index 454b73b..1ee63ea 100644 --- a/src/edu/berkeley/fleet/two/FleetTwoFleet.java +++ b/src/edu/berkeley/fleet/two/FleetTwoFleet.java @@ -29,9 +29,9 @@ public abstract class FleetTwoFleet extends Fleet { public static final Mask P_A = new Mask(".............001....................."); public static final Mask P_NOT_B = new Mask(".............010....................."); public static final Mask P_B = new Mask(".............011....................."); - public static final Mask P_NOT_C = new Mask(".............100....................."); - public static final Mask P_C = new Mask(".............101....................."); - public static final Mask P_OLC = new Mask(".............110....................."); + public static final Mask P_UNUSED = new Mask(".............100....................."); + public static final Mask P_OLC_ZERO = new Mask(".............101....................."); + public static final Mask P_OLC_NONZERO = new Mask(".............110....................."); public static final Mask P_ALWAYS = new Mask(".............111....................."); public static final Mask SHIFT = new Mask("................00vvvvvvvvvvvvvvvvvvv"); @@ -48,22 +48,20 @@ public abstract class FleetTwoFleet extends Fleet { public static final Mask PATH_DATA = new Mask(".......................01............"); public static final Mask PATH_NOCHANGE = new Mask(".......................00............"); - public static final Mask SET = new Mask("................10..................."); + public static final Mask SET_OLC_FROM_IMMEDIATE = new Mask("................101000100......vvvvvv"); + public static final Mask SET_OLC_FROM_DATA_LATCH = new Mask("................101000010............"); + public static final Mask SET_OLC_FROM_OLC_MINUS_ONE = new Mask("................101000001............"); - public static final Mask SET_OLC_FROM_IMMEDIATE = new Mask("................1010000100.....vvvvvv"); - public static final Mask SET_OLC_FROM_DATA_LATCH = new Mask("................1010000010..........."); - public static final Mask SET_OLC_FROM_OLC_MINUS_ONE = new Mask("................1010000001..........."); + public static final Mask SET_ILC_FROM_IMMEDIATE = new Mask("................10010010......0vvvvvv"); + public static final Mask SET_ILC_FROM_INFINITY = new Mask("................10010010......1......"); + public static final Mask SET_ILC_FROM_DATA_LATCH = new Mask("................10010001............."); - public static final Mask SET_ILC_FROM_IMMEDIATE = new Mask("................1001000100.....vvvvvv"); - public static final Mask SET_ILC_FROM_INFINITY = new Mask("................1001000010..........."); - public static final Mask SET_ILC_FROM_DATA_LATCH = new Mask("................1001000001..........."); + public static final Mask SET_IMMEDIATE = new Mask("................100010.vvvvvvvvvvvvvv"); + public static final Mask SET_IMMEDIATE_EXTEND = new Mask("................100010v.............."); - public static final Mask SET_IMMEDIATE = new Mask("................1000100.vvvvvvvvvvvvv"); - public static final Mask SET_IMMEDIATE_EXTEND = new Mask("................1000100v............."); - - public static final Mask SET_FLAGS = new Mask("................1000010.............."); - public static final Mask SET_FLAGS_A = new Mask("................1000010..vvvvvv......"); - public static final Mask SET_FLAGS_B = new Mask("................1000010........vvvvvv"); + public static final Mask SET_FLAGS = new Mask("................100001..............."); + public static final Mask SET_FLAGS_A = new Mask("................100001...vvvvvv......"); + public static final Mask SET_FLAGS_B = new Mask("................100001.........vvvvvv"); public static final Mask SET_FLAGS_VALUE_A = new Mask("1....."); public static final Mask SET_FLAGS_VALUE_NOT_A = new Mask(".1...."); public static final Mask SET_FLAGS_VALUE_B = new Mask("..1..."); @@ -136,13 +134,12 @@ public abstract class FleetTwoFleet extends Fleet { Predicate predicate = Default; if (P_ALWAYS.get(inst)) predicate = IgnoreOLC; - if (P_OLC.get(inst)) predicate = Default; + if (P_OLC_ZERO.get(inst)) throw new RuntimeException("not yet supported"); + if (P_OLC_NONZERO.get(inst)) predicate = Default; if (P_A.get(inst)) predicate = FlagA; if (P_B.get(inst)) predicate = FlagB; - if (P_C.get(inst)) predicate = FlagC; if (P_NOT_A.get(inst)) predicate = NotFlagA; if (P_NOT_B.get(inst)) predicate = NotFlagB; - if (P_NOT_C.get(inst)) predicate = NotFlagC; boolean looping = !OS.get(inst); if (SHIFT.get(inst)) return new Shift(dock, looping, predicate, new BitVector(dock.getShip().getFleet().getWordWidth()).set(SHIFT.getval(inst))); @@ -213,13 +210,11 @@ public abstract class FleetTwoFleet extends Fleet { if (!pi.looping) instr = OS.set(instr); switch(pi.predicate) { case IgnoreOLC: instr = P_ALWAYS.set(instr); break; - case Default: instr = P_OLC.set(instr); break; + case Default: instr = P_OLC_NONZERO.set(instr); break; case FlagA: instr = P_A.set(instr); break; case FlagB: instr = P_B.set(instr); break; - case FlagC: instr = P_C.set(instr); break; case NotFlagA: instr = P_NOT_A.set(instr); break; case NotFlagB: instr = P_NOT_B.set(instr); break; - case NotFlagC: instr = P_NOT_C.set(instr); break; } if (d instanceof Tail) { -- 1.7.10.4