fixed bug in InstructionEncoder
authoradam <adam@megacz.com>
Mon, 20 Aug 2007 07:28:58 +0000 (08:28 +0100)
committeradam <adam@megacz.com>
Mon, 20 Aug 2007 07:28:58 +0000 (08:28 +0100)
src/edu/berkeley/fleet/ies44/InstructionEncoder.java

index 861ea0e..c72c4fe 100644 (file)
@@ -2,7 +2,7 @@ package edu.berkeley.fleet.ies44;
 import edu.berkeley.fleet.api.*;
 import edu.berkeley.fleet.*;
 import java.io.*;
-import static edu.berkeley.fleet.ies44.BitManipulations;
+import static edu.berkeley.fleet.ies44.BitManipulations.*;
 
 public abstract class InstructionEncoder {
 
@@ -13,9 +13,9 @@ public abstract class InstructionEncoder {
     public static final int WIDTH_COUNT         = 7;
 
     public static final int OFFSET_RQ           = 0;
-    public static final int OFFSET_COUNT        = 1;
-    public static final int OFFSET_DEST         = OFFSET_COUNT+WIDTH_COUNT;
-    public static final int OFFSET_CONTROL      = OFFSET_DEST+WIDTH_DEST_ADDR;
+    public static final int OFFSET_DEST         = 1;
+    public static final int OFFSET_COUNT        = OFFSET_DEST+WIDTH_DEST_ADDR;
+    public static final int OFFSET_CONTROL      = OFFSET_COUNT+WIDTH_COUNT;
     public static final int OFFSET_TI           = OFFSET_CONTROL+0;
     public static final int OFFSET_DI           = OFFSET_CONTROL+1;
     public static final int OFFSET_DL           = OFFSET_CONTROL+2;
@@ -63,7 +63,7 @@ public abstract class InstructionEncoder {
                 boolean latch    = getBit(OFFSET_DL, instr);
                 boolean dataOut  = getBit(OFFSET_DO, instr);
                 boolean tokenOut = getBit(OFFSET_TO, instr);
-                boolean recycle  = getBit(0, instr);
+                boolean recycle  = getBit(OFFSET_RQ, instr);
                 if (latch & !dataIn) return new Instruction.Kill(name, count, tokenIn);
                 return new Instruction.Executable(name, dest, count, tokenIn, dataIn,
                                                   latch, dataOut, tokenOut, recycle);
@@ -103,15 +103,15 @@ public abstract class InstructionEncoder {
 
         if (d instanceof Instruction.Executable) {
             Instruction.Executable inst = (Instruction.Executable)d;
-            instr |= putField(OFFSET_DEST+WIDTH_DEST_ADDR-1, OFFSET_DEST,        inst.dest==null?0:getDestAddr(inst.dest));
-            instr |= putField(OFFSET_COUNT+WIDTH_COUNT-1,        OFFSET_COUNT,       inst.count);
-            instr |= putField(OFFSET_TI,                        OFFSET_TI,          inst.tokenIn?1:0);
-            instr |= putField(OFFSET_DI,                        OFFSET_DI,          inst.dataIn?1:0);
-            instr |= putField(OFFSET_DL,                        OFFSET_DL,          inst.latch?1:0);
-            instr |= putField(OFFSET_DO,                        OFFSET_DO,          inst.dataOut?1:0);
-            instr |= putField(OFFSET_TO,                        OFFSET_TO,          inst.tokenOut?1:0);
-            instr |= putField(OFFSET_RQ,                        OFFSET_RQ,          inst.recycle?1:0);
-            instr |= putField(OFFSET_PUMP_ADDR+WIDTH_PUMP_ADDR-1, OFFSET_PUMP_ADDR,        getBoxInstAddr(inst.benkoBox));
+            instr |= putField(OFFSET_PUMP_ADDR+WIDTH_PUMP_ADDR-1, OFFSET_PUMP_ADDR,   getBoxInstAddr(inst.benkoBox));
+            instr |= putField(OFFSET_DEST+WIDTH_DEST_ADDR-1,      OFFSET_DEST,        inst.dest==null?0:getDestAddr(inst.dest));
+            instr |= putField(OFFSET_COUNT+WIDTH_COUNT-1,         OFFSET_COUNT,       inst.count);
+            instr |= putField(OFFSET_TI,                          OFFSET_TI,          inst.tokenIn?1:0);
+            instr |= putField(OFFSET_DI,                          OFFSET_DI,          inst.dataIn?1:0);
+            instr |= putField(OFFSET_DL,                          OFFSET_DL,          inst.latch?1:0);
+            instr |= putField(OFFSET_DO,                          OFFSET_DO,          inst.dataOut?1:0);
+            instr |= putField(OFFSET_TO,                          OFFSET_TO,          inst.tokenOut?1:0);
+            instr |= putField(OFFSET_RQ,                          OFFSET_RQ,          inst.recycle?1:0);
 
         } else if (d instanceof Instruction.Literal.CodeBagDescriptor) {
             Instruction.Literal.CodeBagDescriptor lc = (Instruction.Literal.CodeBagDescriptor)d;