remove last vestiges of old literal system
[fleet.git] / src / edu / berkeley / fleet / ies44 / InstructionEncoder.java
index 767ada7..2758df7 100644 (file)
@@ -75,14 +75,14 @@ public abstract class InstructionEncoder {
                 return new Instruction.Executable(name, dest, count, tokenIn, dataIn, latch, dataOutDest,
                                                   dataOut, tokenOut, requeue);
             }
-
+                /*
             case 1: {
                 Destination name = getDestByAddr(getField(WIDTH_WORD-3, WIDTH_WORD-3-WIDTH_DEST_ADDR+1, inst));
                 long offset      = getSignedField(WIDTH_WORD-3-WIDTH_DEST_ADDR, WIDTH_CODEBAG_SIZE, instr);
                 long size        = getSignedField(WIDTH_CODEBAG_SIZE-1,        0,                 instr);
                 return new Instruction.Literal.CodeBagDescriptor(name, offset, size);
             }
-
+                */
             case 2: {
                 Destination name = getDestByAddr(getField(WIDTH_WORD-3, WIDTH_WORD-3-WIDTH_PUMP_ADDR+1, inst));
                 return new Instruction.Literal.Absolute(name, getSignedField(WIDTH_WORD-3-WIDTH_PUMP_ADDR, 0, instr));
@@ -107,12 +107,22 @@ public abstract class InstructionEncoder {
             d = new Instruction.Executable(k.pump, null, k.count, k.killOnlyStandingInstructions,
                                            false, true, false, false, false, false);
         }
+
+        if (d instanceof Instruction.Literal.CodeBagDescriptor) {
+            Instruction.Literal.CodeBagDescriptor lc = (Instruction.Literal.CodeBagDescriptor)d;
+            d = new Instruction.LocalLiteral(lc.pump, ((lc.offset << WIDTH_CODEBAG_SIZE)) | lc.size);
+        }
+
         if (d instanceof Instruction.LocalLiteral) {
             Instruction.LocalLiteral inst = (Instruction.LocalLiteral)d;
-            instr |= putField(OFFSET_PUMP_ADDR+WIDTH_PUMP_ADDR-1, OFFSET_PUMP_ADDR,   getBoxInstAddr(inst.pump));
-            instr |= putField(OFFSET_TI,                          OFFSET_TI,          1);
-            instr |= putField(OFFSET_TO,                          OFFSET_TO,          1);
-            instr |= putField(OFFSET_LITERAL+WIDTH_LITERAL-1, OFFSET_LITERAL,         inst.literal);
+            if (inst.pump != null) {
+                instr |= putField(OFFSET_PUMP_ADDR+WIDTH_PUMP_ADDR-1, OFFSET_PUMP_ADDR,   getBoxInstAddr(inst.pump));
+                instr |= putField(OFFSET_TI,                          OFFSET_TI,          1);
+                instr |= putField(OFFSET_TO,                          OFFSET_TO,          1);
+                instr |= putField(OFFSET_LITERAL+WIDTH_LITERAL-1, OFFSET_LITERAL,         inst.literal);
+            } else {
+                instr = inst.literal;
+            }
 
         } else if (d instanceof Instruction.Executable) {
             Instruction.Executable inst = (Instruction.Executable)d;
@@ -126,25 +136,6 @@ public abstract class InstructionEncoder {
             instr |= putField(OFFSET_TO,                          OFFSET_TO,          (inst.dataOutDest||inst.tokenOut)?1:0);
             instr |= putField(OFFSET_RQ,                          OFFSET_RQ,          inst.requeue?1:0);
 
-        } else if (d instanceof Instruction.Literal.CodeBagDescriptor) {
-            Instruction.Literal.CodeBagDescriptor lc = (Instruction.Literal.CodeBagDescriptor)d;
-            instr = putField(WIDTH_WORD-1, WIDTH_WORD-2, 1);
-            if (lc.dest != null) instr |= putField(WIDTH_WORD-3, WIDTH_WORD-3-WIDTH_DEST_ADDR+1, getDestAddr(lc.dest));
-            instr |= putSignedField(WIDTH_WORD-3-WIDTH_DEST_ADDR, WIDTH_CODEBAG_SIZE, lc.offset);
-            instr |= putField(WIDTH_CODEBAG_SIZE-1,        0,                 lc.size);
-
-        } else if (d instanceof Instruction.Literal.Absolute) {
-            Instruction.Literal.Absolute ld = (Instruction.Literal.Absolute)d;
-            instr = putField(WIDTH_WORD-1, WIDTH_WORD-2, 2);
-            instr |= putField(WIDTH_WORD-3, WIDTH_WORD-3-WIDTH_DEST_ADDR+1, getDestAddr(ld.dest));
-            instr |= putSignedField(WIDTH_WORD-3-WIDTH_DEST_ADDR, 0, ld.value);
-
-        } else if (d instanceof Instruction.Literal.Relative) {
-            Instruction.Literal.Relative lr = (Instruction.Literal.Relative)d;
-            instr = putField(WIDTH_WORD-1, WIDTH_WORD-2, 3);
-            instr |= putField(WIDTH_WORD-3, WIDTH_WORD-3-WIDTH_DEST_ADDR+1, getDestAddr(lr.dest));
-            instr |= putSignedField(WIDTH_WORD-3-WIDTH_DEST_ADDR, 0, lr.offset);
-            
         }
         return instr;
     }