             guard let src1 = Register(args[1], writing: false) else {
                 return nil
             }
+            let link = args[0] == "bgezal" || args[0] == "blzal"
+            // All comparisons are with zero as the second argument
             let op: OperationBool
             switch(args[0]) {
             case "bgez", "bgezal":
-                op = { return $0 >= $1 }
+                op = (>=)
             case "blz", "blzal":
-                op = { return $0 < $1 }
+                op = (<)
             case "bgtz":
-                op = { return $0 > $1 }
+                op = (>)
             case "bltez":
-                op = { return $0 <= $1 }
+                op = (<=)
             default:
                 fatalError("Invalid branch instruction \(args[0])")
             }
-            self.type = .Branch(op, args[0] == "bgezal" || args[0] == "blzal", src1, zero, args[2])
+            self.type = .Branch(op, link, src1, zero, args[2])
             self.pcIncrement = 4
         // More complex instructions, mostly pseudo-instructions
         case "li":

            guard let dest = Register(args[1], writing: true), src1 = Register(args[2], writing: false), src2 = Immediate(args[3]) else {
                return nil
            }
            self.type = .ALUI(.Left({ return (args[0] == "slti" ? ($0 < $1) : ($0.unsigned() < $1.unsigned())) ? 1 : 0 }), dest, src1, src2)
            self.pcIncrement = 4
        case "sll", "sra", "srl":
            // SLL and SRA are default implementations for signed Int types, SRL is basically unsigned right shift

            guard let dest = Register(args[1], writing: true), src1 = Register(args[2], writing: false), src2 = Immediate(args[3]) else {
                return nil
            }
            self.type = .ALUI(.Left(args[0] == "sll" ? (<<) : (args[0] == "sra" ? (>>) : { return ($0.unsigned() >> $1.unsigned()).signed() })), dest, src1, src2)
            self.pcIncrement = 4
        // Memory operations
        case "lw", "lh", "lb", "sw", "sh", "sb":
