allocMicroops = ''
             micropc = 0
             for op in self.microops:
+                isLast = (micropc == numMicroops - 1)
                 allocMicroops += \
                     "microops[%d] = %s;\n" % \
-                    (micropc, op.getAllocator(True, False,
-                                              micropc == 0,
-                                              micropc == numMicroops - 1))
+                    (micropc, op.getAllocator(True, not isLast,
+                                              micropc == 0, isLast))
                 micropc += 1
             iop = InstObjParams(self.name, self.name, "Macroop",
                                 {"code" : "", "num_microops" : numMicroops,
 
         def getGeneratorDef(self, micropc):
             return self.generatorTemplate % \
                 (self.className, micropc, \
-                 self.getAllocator(True, False, False, False))
+                 self.getAllocator(True, True, False, False))
 
         def getGenerator(self, micropc):
             return self.generatorNameTemplate % (self.className, micropc)
 
         def getAllocator(self, *microFlags):
             (is_micro, is_delayed, is_first, is_last) = microFlags
             is_last = False
+            is_delayed = True
             microFlags = (is_micro, is_delayed, is_first, is_last)
             return super(Br, self).getAllocator(*microFlags)
 
         def getAllocator(self, *microFlags):
             (is_micro, is_delayed, is_first, is_last) = microFlags
             is_last = True
+            is_delayed = False
             microFlags = (is_micro, is_delayed, is_first, is_last)
             return super(Eret, self).getAllocator(*microFlags)