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 {
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;
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);
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;