move Context and ShipPool into loops, add releaseShip() and hierarchical pools
authormegacz <adam@megacz.com>
Fri, 13 Mar 2009 15:50:10 +0000 (08:50 -0700)
committermegacz <adam@megacz.com>
Fri, 13 Mar 2009 15:50:10 +0000 (08:50 -0700)
src/edu/berkeley/fleet/ir/CodeBag.java
src/edu/berkeley/fleet/ir/Counter.java
src/edu/berkeley/fleet/ir/Gadgets.java
src/edu/berkeley/fleet/ir/IR.java
src/edu/berkeley/fleet/ir/Junk.java
src/edu/berkeley/fleet/ir/New.java
src/edu/berkeley/fleet/ir/Process.java
src/edu/berkeley/fleet/ir/Sheets.java
src/edu/berkeley/fleet/ir/ShipPool.java [deleted file]
src/edu/berkeley/fleet/loops/Context.java [moved from src/edu/berkeley/fleet/ir/Context.java with 99% similarity]
src/edu/berkeley/fleet/loops/ShipPool.java [new file with mode: 0644]

index 1b4d06f..f420d03 100644 (file)
@@ -1,4 +1,5 @@
 package edu.berkeley.fleet.ir;
+import edu.berkeley.fleet.loops.*;
 import java.util.*;
 import java.net.*;
 import edu.berkeley.fleet.two.*;
index e6ea2ab..1bd1920 100644 (file)
@@ -1,4 +1,5 @@
 package edu.berkeley.fleet.ir;
+import edu.berkeley.fleet.loops.*;
 import java.util.concurrent.Semaphore;
 import java.util.*;
 import java.net.*;
@@ -8,14 +9,13 @@ import edu.berkeley.fleet.api.*;
 import edu.berkeley.fleet.api.Instruction.*;
 import edu.berkeley.fleet.api.Instruction.Set;
 import edu.berkeley.fleet.api.Instruction.Set.*;
-import edu.berkeley.fleet.ir.Context.LoopFactory;
+import edu.berkeley.fleet.loops.Context.LoopFactory;
 import static edu.berkeley.fleet.util.BitManipulations.*;
 import edu.berkeley.fleet.api.Instruction.Set.FlagFunction;
 import edu.berkeley.fleet.api.Instruction.Set;
 import edu.berkeley.fleet.api.Instruction.Set.SetDest;
 import edu.berkeley.fleet.api.Instruction.Set.FlagFunction;
 import static edu.berkeley.fleet.api.Predicate.*;
-import edu.berkeley.fleet.ir.Context.LoopFactory;
 
 public class Counter {
 
index 06246cd..efd6df7 100644 (file)
@@ -1,4 +1,5 @@
 package edu.berkeley.fleet.ir;
+import edu.berkeley.fleet.loops.*;
 import java.util.concurrent.Semaphore;
 import java.util.*;
 import java.net.*;
@@ -8,14 +9,13 @@ import edu.berkeley.fleet.api.*;
 import edu.berkeley.fleet.api.Instruction.*;
 import edu.berkeley.fleet.api.Instruction.Set;
 import edu.berkeley.fleet.api.Instruction.Set.*;
-import edu.berkeley.fleet.ir.Context.LoopFactory;
+import edu.berkeley.fleet.loops.Context.LoopFactory;
 import static edu.berkeley.fleet.util.BitManipulations.*;
 import edu.berkeley.fleet.api.Instruction.Set.FlagFunction;
 import edu.berkeley.fleet.api.Instruction.Set;
 import edu.berkeley.fleet.api.Instruction.Set.SetDest;
 import edu.berkeley.fleet.api.Instruction.Set.FlagFunction;
 import static edu.berkeley.fleet.api.Predicate.*;
-import edu.berkeley.fleet.ir.Context.LoopFactory;
 
 /*
   - Change Alu behavior to "drain one"
index 855dea5..40fe629 100644 (file)
@@ -1,4 +1,5 @@
 package edu.berkeley.fleet;
+import edu.berkeley.fleet.loops.*;
 
 // EXPERIMENTAL.  Do not use.
 
index 9fc1ce2..2df0776 100644 (file)
@@ -1,4 +1,5 @@
 package edu.berkeley.fleet.ir;
+import edu.berkeley.fleet.loops.*;
 import java.util.*;
 import java.net.*;
 import edu.berkeley.fleet.two.*;
index 54a5977..f1553a0 100644 (file)
@@ -1,4 +1,5 @@
 package edu.berkeley.fleet.ir;
+import edu.berkeley.fleet.loops.*;
 import edu.berkeley.fleet.api.*;
 import edu.berkeley.fleet.api.Instruction.*;
 import edu.berkeley.fleet.fpga.*;
@@ -8,7 +9,7 @@ import edu.berkeley.fleet.api.Instruction.Set;
 import edu.berkeley.fleet.api.Instruction.Set.SetDest;
 import edu.berkeley.fleet.api.Instruction.Set.FlagFunction;
 import static edu.berkeley.fleet.api.Predicate.*;
-import edu.berkeley.fleet.ir.Context.LoopFactory;
+import edu.berkeley.fleet.loops.Context.LoopFactory;
 import java.io.*;
 import java.util.*;
 import java.net.*;
index 9decf30..ce82b5a 100644 (file)
@@ -1,4 +1,5 @@
 package edu.berkeley.fleet.ir;
+import edu.berkeley.fleet.loops.*;
 import java.util.concurrent.Semaphore;
 import java.util.*;
 import java.net.*;
index bb32360..a9bff6d 100644 (file)
@@ -1,4 +1,5 @@
 package edu.berkeley.fleet.ir;
+import edu.berkeley.fleet.loops.*;
 
 // ScanRows+Fix: HARD!
 /**
diff --git a/src/edu/berkeley/fleet/ir/ShipPool.java b/src/edu/berkeley/fleet/ir/ShipPool.java
deleted file mode 100644 (file)
index a3fee4f..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-package edu.berkeley.fleet.ir;
-import java.util.*;
-import java.net.*;
-import edu.berkeley.fleet.two.*;
-import edu.berkeley.fleet.api.*;
-import edu.berkeley.fleet.api.Instruction.*;
-import edu.berkeley.fleet.api.Instruction.Set;
-import edu.berkeley.fleet.api.Instruction.Set.*;
-import static edu.berkeley.fleet.util.BitManipulations.*;
-
-// FEATURE: hierarchical ShipPools, wherein a ship may never be
-// allocated in two pools where one is an ancestor of the other
-public class ShipPool implements Iterable<Ship> {
-
-    public final Fleet fleet;
-
-    public ShipPool(Fleet fleet) { this.fleet = fleet; }
-
-    private HashSet<Ship>             allocatedShips       = new HashSet<Ship>();
-
-    public Iterator<Ship> iterator() { return allocatedShips.iterator(); }
-
-    public Ship allocateShip(String name) {
-        for(int i=0; ; i++) {
-            Ship ship = fleet.getShip(name, i);
-            if (ship==null)
-                throw new RuntimeException("no more ships of type " + name);
-            if (allocatedShips.contains(ship)) continue;
-            allocatedShips.add(ship);
-            return ship;
-        }
-    }
-}
similarity index 99%
rename from src/edu/berkeley/fleet/ir/Context.java
rename to src/edu/berkeley/fleet/loops/Context.java
index 229ce1b..3ec2ca1 100644 (file)
@@ -1,4 +1,4 @@
-package edu.berkeley.fleet.ir;
+package edu.berkeley.fleet.loops;
 import java.util.*;
 import java.net.*;
 import edu.berkeley.fleet.two.*;
diff --git a/src/edu/berkeley/fleet/loops/ShipPool.java b/src/edu/berkeley/fleet/loops/ShipPool.java
new file mode 100644 (file)
index 0000000..673872a
--- /dev/null
@@ -0,0 +1,51 @@
+package edu.berkeley.fleet.loops;
+import java.util.*;
+import edu.berkeley.fleet.api.*;
+import static edu.berkeley.fleet.util.BitManipulations.*;
+
+/**
+ *  A ShipPool keeps track of ships which have been "allocated" and
+ *  are in use.  ShipPools may be arranged in a hierarchy; allocating
+ *  a ship in one pool will allocate it in all ancestors.
+ */
+public class ShipPool implements Iterable<Ship> {
+
+    public final Fleet fleet;
+    public final ShipPool ancestor;
+
+    private HashSet<Ship> allocatedShips = new HashSet<Ship>();
+
+    public ShipPool(Fleet fleet) { this(fleet, null); }
+    public ShipPool(Fleet fleet, ShipPool ancestor) {
+        this.fleet = fleet;
+        this.ancestor = ancestor;
+    }
+
+    public Iterator<Ship> iterator() { return allocatedShips.iterator(); }
+
+    /** allocate a ship */
+    public Ship allocateShip(String type) {
+        Ship ship = null;
+        if (ancestor != null) {
+            ship = ancestor.allocateShip(type);
+        } else {
+            for(int i=0; ; i++) {
+                ship = fleet.getShip(type, i);
+                if (ship==null)
+                    throw new RuntimeException("no more ships of type " + type);
+                if (!allocatedShips.contains(ship)) break;
+            }
+        }
+        allocatedShips.add(ship);
+        return ship;
+    }
+
+    /** release an allocated ship */
+    public void releaseShip(Ship ship) {
+        if (!allocatedShips.contains(ship))
+            throw new RuntimeException("ship " + ship + " released but was not allocated");
+        allocatedShips.remove(ship);
+        if (ancestor != null) ancestor.releaseShip(ship);
+    }
+
+}