cleaner encoding of Shift instruction in Parser.java
authoradam <adam@megacz.com>
Thu, 21 Aug 2008 10:29:11 +0000 (11:29 +0100)
committeradam <adam@megacz.com>
Thu, 21 Aug 2008 10:29:11 +0000 (11:29 +0100)
src/edu/berkeley/fleet/assembler/Parser.java

index fe59b8a..5843110 100644 (file)
@@ -12,6 +12,7 @@ import static edu.berkeley.fleet.api.Instruction.*;
 import static edu.berkeley.fleet.api.Instruction.Set.*;
 import static edu.berkeley.fleet.api.Predicate.*;
 import edu.berkeley.fleet.two.*;
+import static edu.berkeley.fleet.two.FleetTwoFleet.SHIFT;
 import edu.berkeley.fleet.fpga.*;
 import edu.berkeley.fleet.interpreter.*;
 import java.util.*;
@@ -431,9 +432,14 @@ public class Parser {
                     if (FleetTwoFleet.isSmallEnoughToFit(literal)) {
                         cb.add(new Set(dock, looping, predicate, SetDest.DataLatch, (literal)));
                     } else {
-                        // FIXME bitwidth hardwired!
-                        cb.add(new Shift(dock, looping, predicate, new BitVector(37).set(getField(36, 19, literal))));
-                        cb.add(new Shift(dock, looping, predicate, new BitVector(37).set(getField(18,  0, literal))));
+                        int counter = 0;
+                        while(counter < dock.getShip().getFleet().getWordWidth()) counter += SHIFT.valmaskwidth;
+                        while(counter > 0) {
+                            cb.add(new Shift(dock, looping, predicate,
+                                             new BitVector(dock.getShip().getFleet().getWordWidth())
+                                             .set(getField(counter-1, counter-SHIFT.valmaskwidth, literal))));
+                            counter -= SHIFT.valmaskwidth;
+                        }
                     }
                         
                     continue;