From: Adam Megacz Date: Thu, 9 Apr 2009 03:56:04 +0000 (+0000) Subject: update encoding code X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=ed4df947db4db6550a5f7372b94765caf761f4ee;p=fleet.git update encoding code --- diff --git a/testCode/edu/berkeley/fleet/api/BitVector.java b/testCode/edu/berkeley/fleet/api/BitVector.java index 8b08fc6..3352a6c 100644 --- a/testCode/edu/berkeley/fleet/api/BitVector.java +++ b/testCode/edu/berkeley/fleet/api/BitVector.java @@ -19,7 +19,7 @@ package edu.berkeley.fleet.api; * complement number using the number of bits allocated in the * BitVector. */ -public class BitVector { +public class BitVector implements DeferredBitVector { private final boolean[] bits; @@ -143,6 +143,10 @@ public class BitVector { ret |= (1L << i); return ret; } + + public BitVector getBitVector() { + return this; + } } diff --git a/testCode/edu/berkeley/fleet/api/Instruction.java b/testCode/edu/berkeley/fleet/api/Instruction.java index 0eda440..a9698ed 100644 --- a/testCode/edu/berkeley/fleet/api/Instruction.java +++ b/testCode/edu/berkeley/fleet/api/Instruction.java @@ -214,18 +214,22 @@ public abstract class Instruction { /** shifts an immediate into the low-order bits of the data latch */ public static class Shift extends Instruction { - public final BitVector immediate; - public Shift(Dock dock, BitVector immediate) { this(dock, Predicate.Default, immediate); } - public Shift(Dock dock, Predicate predicate, BitVector immediate) { + public final DeferredBitVector immediate; + public Shift(Dock dock, DeferredBitVector immediate) { this(dock, Predicate.Default, immediate); } + public Shift(final Dock dock, Predicate predicate, final DeferredBitVector arg) { super(dock, predicate); - this.immediate = immediate; - this.immediate.setImmutable(); - if (immediate.length() != dock.getShip().getFleet().getShiftWidth()) - throw new RuntimeException("attempt to create a Shift instruction with a "+immediate.length()+ - "-bit immediate on a Fleet that uses "+dock.getShip().getFleet().getShiftWidth()+ - "-bit shift instructions"); + this.immediate = new DeferredBitVector() { + public BitVector getBitVector() { + BitVector ret = arg.getBitVector(); + if (ret.length() != dock.getShip().getFleet().getShiftWidth()) + throw new RuntimeException("attempt to create a Shift instruction with a "+ret.length()+ + "-bit immediate on a Fleet that uses "+dock.getShip().getFleet().getShiftWidth()+ + "-bit shift instructions"); + return ret; + } + }; } - public String toString() { return super.toString()+"shift "+immediate; } + public String toString() { return super.toString()+"shift "+immediate.getBitVector(); } } /** a flush instruction */ @@ -235,7 +239,7 @@ public abstract class Instruction { super(dock, predicate); if (!dock.isInputDock()) throw new RuntimeException("Flush is only allowed at input docks"); } - public String toString() { return super.toString()+"flush"; } + public String toString() { return super.toString()+"flush;"; } } /** all communication is performed with this instruction */ @@ -317,13 +321,22 @@ public abstract class Instruction { else ret.append(!dock.isInputDock() ? ", collect nothing" : ", recv nothing"); } if (dataOut && dock.isInputDock()) ret.append(", deliver"); - if (dataOut && !dock.isInputDock()) ret.append(path==null ? ", send" : ", send to " + path.getDestination()); - if (tokenOut) ret.append(path==null ? ", token" : ", send token to " + path.getDestination()); + if (dataOut && !dock.isInputDock()) ret.append(path==null ? ", send" : ", send to " + pathToString(path)); + if (tokenOut) ret.append(path==null ? ", token" : ", send token to " + pathToString(path)); String s = ret.toString(); s = s.equals("") ? "nop" : s.substring(2); if (interruptible) s = "[T] " + s; return super.toString()+s+";"; } + + private String pathToString(Path path) { + BitVector signal = path.getSignal(); + if (signal!=null) + for(int i=0; i