]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.ssa] cmd/compile: clean up tuple types and selects
authorKeith Randall <khr@golang.org>
Wed, 13 Jul 2016 23:15:54 +0000 (16:15 -0700)
committerKeith Randall <khr@golang.org>
Mon, 18 Jul 2016 16:11:36 +0000 (16:11 +0000)
Make tuple types and their SelectX ops fully generic.
These ops no longer need to be lowered.
Regalloc understands them and their tuple-generating arguments.
We can now have opcodes returning arbitrary pairs of results.
(And it would be easy to move to >2 results if needed.)

Update arm implementation to the new standard.
Implement just enough in 386 port to do 64-bit add.

Change-Id: I370ed5aacce219c82e1954c61d1f63af76c16f79
Reviewed-on: https://go-review.googlesource.com/24976
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

19 files changed:
src/cmd/compile/internal/arm/ssa.go
src/cmd/compile/internal/gc/ssa.go
src/cmd/compile/internal/ssa/cse.go
src/cmd/compile/internal/ssa/gen/386.rules
src/cmd/compile/internal/ssa/gen/386Ops.go
src/cmd/compile/internal/ssa/gen/ARM.rules
src/cmd/compile/internal/ssa/gen/ARMOps.go
src/cmd/compile/internal/ssa/gen/main.go
src/cmd/compile/internal/ssa/html.go
src/cmd/compile/internal/ssa/location.go
src/cmd/compile/internal/ssa/lower.go
src/cmd/compile/internal/ssa/op.go
src/cmd/compile/internal/ssa/opGen.go
src/cmd/compile/internal/ssa/regalloc.go
src/cmd/compile/internal/ssa/rewrite386.go
src/cmd/compile/internal/ssa/rewriteARM.go
src/cmd/compile/internal/ssa/schedule.go
src/cmd/compile/internal/ssa/tighten.go
src/cmd/compile/internal/x86/ssa.go

index bfd13464e5f266df0544d853af3e12b797a79da0..085ca8922bd311cfe70827275d9d2feac2889c02 100644 (file)
@@ -278,7 +278,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
                p.To.Reg = r
        case ssa.OpARMADDS,
                ssa.OpARMSUBS:
-               r := gc.SSARegNum(v)
+               r := gc.SSARegNum1(v)
                r1 := gc.SSARegNum(v.Args[0])
                r2 := gc.SSARegNum(v.Args[1])
                p := gc.Prog(v.Op.Asm())
@@ -351,7 +351,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
                p.From.Offset = v.AuxInt
                p.Reg = gc.SSARegNum(v.Args[0])
                p.To.Type = obj.TYPE_REG
-               p.To.Reg = gc.SSARegNum(v)
+               p.To.Reg = gc.SSARegNum1(v)
        case ssa.OpARMSRRconst:
                genshift(arm.AMOVW, 0, gc.SSARegNum(v.Args[0]), gc.SSARegNum(v), arm.SHIFT_RR, v.AuxInt)
        case ssa.OpARMADDshiftLL,
@@ -368,7 +368,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
        case ssa.OpARMADDSshiftLL,
                ssa.OpARMSUBSshiftLL,
                ssa.OpARMRSBSshiftLL:
-               p := genshift(v.Op.Asm(), gc.SSARegNum(v.Args[0]), gc.SSARegNum(v.Args[1]), gc.SSARegNum(v), arm.SHIFT_LL, v.AuxInt)
+               p := genshift(v.Op.Asm(), gc.SSARegNum(v.Args[0]), gc.SSARegNum(v.Args[1]), gc.SSARegNum1(v), arm.SHIFT_LL, v.AuxInt)
                p.Scond = arm.C_SBIT
        case ssa.OpARMADDshiftRL,
                ssa.OpARMADCshiftRL,
@@ -384,7 +384,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
        case ssa.OpARMADDSshiftRL,
                ssa.OpARMSUBSshiftRL,
                ssa.OpARMRSBSshiftRL:
-               p := genshift(v.Op.Asm(), gc.SSARegNum(v.Args[0]), gc.SSARegNum(v.Args[1]), gc.SSARegNum(v), arm.SHIFT_LR, v.AuxInt)
+               p := genshift(v.Op.Asm(), gc.SSARegNum(v.Args[0]), gc.SSARegNum(v.Args[1]), gc.SSARegNum1(v), arm.SHIFT_LR, v.AuxInt)
                p.Scond = arm.C_SBIT
        case ssa.OpARMADDshiftRA,
                ssa.OpARMADCshiftRA,
@@ -400,7 +400,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
        case ssa.OpARMADDSshiftRA,
                ssa.OpARMSUBSshiftRA,
                ssa.OpARMRSBSshiftRA:
-               p := genshift(v.Op.Asm(), gc.SSARegNum(v.Args[0]), gc.SSARegNum(v.Args[1]), gc.SSARegNum(v), arm.SHIFT_AR, v.AuxInt)
+               p := genshift(v.Op.Asm(), gc.SSARegNum(v.Args[0]), gc.SSARegNum(v.Args[1]), gc.SSARegNum1(v), arm.SHIFT_AR, v.AuxInt)
                p.Scond = arm.C_SBIT
        case ssa.OpARMMVNshiftLL:
                genshift(v.Op.Asm(), 0, gc.SSARegNum(v.Args[0]), gc.SSARegNum(v), arm.SHIFT_LL, v.AuxInt)
@@ -428,7 +428,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
        case ssa.OpARMADDSshiftLLreg,
                ssa.OpARMSUBSshiftLLreg,
                ssa.OpARMRSBSshiftLLreg:
-               p := genregshift(v.Op.Asm(), gc.SSARegNum(v.Args[0]), gc.SSARegNum(v.Args[1]), gc.SSARegNum(v.Args[2]), gc.SSARegNum(v), arm.SHIFT_LL)
+               p := genregshift(v.Op.Asm(), gc.SSARegNum(v.Args[0]), gc.SSARegNum(v.Args[1]), gc.SSARegNum(v.Args[2]), gc.SSARegNum1(v), arm.SHIFT_LL)
                p.Scond = arm.C_SBIT
        case ssa.OpARMADDshiftRLreg,
                ssa.OpARMADCshiftRLreg,
@@ -444,7 +444,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
        case ssa.OpARMADDSshiftRLreg,
                ssa.OpARMSUBSshiftRLreg,
                ssa.OpARMRSBSshiftRLreg:
-               p := genregshift(v.Op.Asm(), gc.SSARegNum(v.Args[0]), gc.SSARegNum(v.Args[1]), gc.SSARegNum(v.Args[2]), gc.SSARegNum(v), arm.SHIFT_LR)
+               p := genregshift(v.Op.Asm(), gc.SSARegNum(v.Args[0]), gc.SSARegNum(v.Args[1]), gc.SSARegNum(v.Args[2]), gc.SSARegNum1(v), arm.SHIFT_LR)
                p.Scond = arm.C_SBIT
        case ssa.OpARMADDshiftRAreg,
                ssa.OpARMADCshiftRAreg,
@@ -460,7 +460,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
        case ssa.OpARMADDSshiftRAreg,
                ssa.OpARMSUBSshiftRAreg,
                ssa.OpARMRSBSshiftRAreg:
-               p := genregshift(v.Op.Asm(), gc.SSARegNum(v.Args[0]), gc.SSARegNum(v.Args[1]), gc.SSARegNum(v.Args[2]), gc.SSARegNum(v), arm.SHIFT_AR)
+               p := genregshift(v.Op.Asm(), gc.SSARegNum(v.Args[0]), gc.SSARegNum(v.Args[1]), gc.SSARegNum(v.Args[2]), gc.SSARegNum1(v), arm.SHIFT_AR)
                p.Scond = arm.C_SBIT
        case ssa.OpARMHMUL,
                ssa.OpARMHMULU:
@@ -473,14 +473,14 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
                p.To.Reg = gc.SSARegNum(v)
                p.To.Offset = arm.REGTMP // throw away low 32-bit into tmp register
        case ssa.OpARMMULLU:
-               // 32-bit multiplication, results 64-bit, low 32-bit in reg(v), high 32-bit in R0
+               // 32-bit multiplication, results 64-bit, high 32-bit in out0, low 32-bit in out1
                p := gc.Prog(v.Op.Asm())
                p.From.Type = obj.TYPE_REG
                p.From.Reg = gc.SSARegNum(v.Args[0])
                p.Reg = gc.SSARegNum(v.Args[1])
                p.To.Type = obj.TYPE_REGREG
-               p.To.Reg = arm.REG_R0                // high 32-bit
-               p.To.Offset = int64(gc.SSARegNum(v)) // low 32-bit
+               p.To.Reg = gc.SSARegNum0(v)           // high 32-bit
+               p.To.Offset = int64(gc.SSARegNum1(v)) // low 32-bit
        case ssa.OpARMMULA:
                p := gc.Prog(v.Op.Asm())
                p.From.Type = obj.TYPE_REG
@@ -928,9 +928,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
                p.From.Offset = 1
                p.To.Type = obj.TYPE_REG
                p.To.Reg = gc.SSARegNum(v)
-       case ssa.OpARMCarry,
-               ssa.OpARMLoweredSelect0,
-               ssa.OpARMLoweredSelect1:
+       case ssa.OpSelect0, ssa.OpSelect1:
                // nothing to do
        case ssa.OpARMLoweredGetClosurePtr:
                // Closure pointer is R7 (arm.REGCTXT).
index 874cb71ba29a8fdea11a4f4b1ea20b525a87ab3e..64a504a68024a83d2cebf3849697fca6a5507287 100644 (file)
@@ -4266,11 +4266,39 @@ func SSAReg(v *ssa.Value) *ssa.Register {
        return reg.(*ssa.Register)
 }
 
+// SSAReg0 returns the register to which the first output of v has been allocated.
+func SSAReg0(v *ssa.Value) *ssa.Register {
+       reg := v.Block.Func.RegAlloc[v.ID].(ssa.LocPair)[0]
+       if reg == nil {
+               v.Fatalf("nil first register for value: %s\n%s\n", v.LongString(), v.Block.Func)
+       }
+       return reg.(*ssa.Register)
+}
+
+// SSAReg1 returns the register to which the second output of v has been allocated.
+func SSAReg1(v *ssa.Value) *ssa.Register {
+       reg := v.Block.Func.RegAlloc[v.ID].(ssa.LocPair)[1]
+       if reg == nil {
+               v.Fatalf("nil second register for value: %s\n%s\n", v.LongString(), v.Block.Func)
+       }
+       return reg.(*ssa.Register)
+}
+
 // SSARegNum returns the register number (in cmd/internal/obj numbering) to which v has been allocated.
 func SSARegNum(v *ssa.Value) int16 {
        return Thearch.SSARegToReg[SSAReg(v).Num]
 }
 
+// SSARegNum0 returns the register number (in cmd/internal/obj numbering) to which the first output of v has been allocated.
+func SSARegNum0(v *ssa.Value) int16 {
+       return Thearch.SSARegToReg[SSAReg0(v).Num]
+}
+
+// SSARegNum1 returns the register number (in cmd/internal/obj numbering) to which the second output of v has been allocated.
+func SSARegNum1(v *ssa.Value) int16 {
+       return Thearch.SSARegToReg[SSAReg1(v).Num]
+}
+
 // CheckLoweredPhi checks that regalloc and stackalloc correctly handled phi values.
 // Called during ssaGenValue.
 func CheckLoweredPhi(v *ssa.Value) {
index dcb6eb86ddbed8bca3f28daf1ababc2e131360d3..a000c577d19cb759a55a6529e036f19fe139afe7 100644 (file)
@@ -171,10 +171,10 @@ func cse(f *Func) {
                        if rewrite[v.ID] != nil {
                                continue
                        }
-                       if !v.Op.isTupleSelector() {
+                       if v.Op != OpSelect0 && v.Op != OpSelect1 {
                                continue
                        }
-                       if !v.Args[0].Op.isTupleGenerator() {
+                       if !v.Args[0].Type.IsTuple() {
                                f.Fatalf("arg of tuple selector %s is not a tuple: %s", v.String(), v.Args[0].LongString())
                        }
                        t := rewrite[v.Args[0].ID]
index d5229a1c714c00c82c8dc830020ad784d7c30e6e..9a3b16cd528d93381d750d2f02d79b3a387e5fee 100644 (file)
@@ -10,6 +10,9 @@
 (Add32F x y) -> (ADDSS x y)
 (Add64F x y) -> (ADDSD x y)
 
+(Add32carry x y) -> (ADDLcarry x y)
+(Add32withcarry x y c) -> (ADCL x y c)
+
 (SubPtr x y) -> (SUBL  x y)
 (Sub32  x y) -> (SUBL  x y)
 (Sub16  x y) -> (SUBL  x y)
index b5221d291e366792980aafd8a386eac0ae394fda..f2a8edf45675ba8d9c7efec6e42e154512fd1946 100644 (file)
@@ -99,6 +99,8 @@ func init() {
                gp11nf    = regInfo{inputs: []regMask{gpsp}, outputs: gponly} // nf: no flags clobbered
                gp11sb    = regInfo{inputs: []regMask{gpspsb}, outputs: gponly}
                gp21      = regInfo{inputs: []regMask{gp, gp}, outputs: gponly, clobbers: flags}
+               gp21carry = regInfo{inputs: []regMask{gp, gp}, outputs: []regMask{flags, gp}}
+               gp2carry1 = regInfo{inputs: []regMask{gp, gp, flags}, outputs: gponly}
                gp21sp    = regInfo{inputs: []regMask{gpsp, gp}, outputs: gponly, clobbers: flags}
                gp21sb    = regInfo{inputs: []regMask{gpspsb, gpsp}, outputs: gponly}
                gp21shift = regInfo{inputs: []regMask{gp, cx}, outputs: []regMask{gp}, clobbers: flags}
@@ -171,6 +173,9 @@ func init() {
                {name: "ADDL", argLength: 2, reg: gp21sp, asm: "ADDL", commutative: true},                // arg0 + arg1
                {name: "ADDLconst", argLength: 1, reg: gp11sp, asm: "ADDL", aux: "Int32", typ: "UInt32"}, // arg0 + auxint
 
+               {name: "ADDLcarry", argLength: 2, reg: gp21carry, asm: "ADDL", commutative: true, resultInArg0: true}, // arg0 + arg1, generates <carry,result> pair
+               {name: "ADCL", argLength: 3, reg: gp2carry1, asm: "ADCL", commutative: true, resultInArg0: true},      // arg0+arg1+carry(arg2), where arg2 is flags
+
                {name: "SUBL", argLength: 2, reg: gp21, asm: "SUBL", resultInArg0: true},                    // arg0 - arg1
                {name: "SUBLconst", argLength: 1, reg: gp11, asm: "SUBL", aux: "Int32", resultInArg0: true}, // arg0 - auxint
 
index 94b23585ff48546c44fc20dc6c33b5f36a676beb..1dfa1af922547123e6da81e4f138a55d64dad127 100644 (file)
 (IsSliceInBounds idx len) -> (LessEqualU (CMP idx len))
 
 // pseudo-ops
-(Select0 <t> x) && t.IsFlags() -> (Carry x)
-(Select0 <t> x) && !t.IsFlags() -> (LoweredSelect0 x)
-(Select1 x) -> (LoweredSelect1 x)
-
 (GetClosurePtr) -> (LoweredGetClosurePtr)
 (Convert x mem) -> (MOVWconvert x mem)
 
index 789fef5819d193e609f02a46b4e259570dbf1dbc..5ac91e15cf7f5ad759e297bd439429bbdc2d8034 100644 (file)
@@ -101,16 +101,18 @@ func init() {
        var (
                gp01      = regInfo{inputs: []regMask{}, outputs: []regMask{gp}}
                gp11      = regInfo{inputs: []regMask{gpg}, outputs: []regMask{gp}}
-               gp11cf    = regInfo{inputs: []regMask{gpg}, outputs: []regMask{gp}, clobbers: flags} // cf: clobbers flags
+               gp11carry = regInfo{inputs: []regMask{gpg}, outputs: []regMask{flags, gp}}
                gp11sp    = regInfo{inputs: []regMask{gpspg}, outputs: []regMask{gp}}
                gp1flags  = regInfo{inputs: []regMask{gpg}, outputs: []regMask{flags}}
                gp1flags1 = regInfo{inputs: []regMask{gp, flags}, outputs: []regMask{gp}}
                gp21      = regInfo{inputs: []regMask{gpg, gpg}, outputs: []regMask{gp}}
                gp21cf    = regInfo{inputs: []regMask{gpg, gpg}, outputs: []regMask{gp}, clobbers: flags} // cf: clobbers flags
+               gp21carry = regInfo{inputs: []regMask{gpg, gpg}, outputs: []regMask{flags, gp}}
                gp2flags  = regInfo{inputs: []regMask{gpg, gpg}, outputs: []regMask{flags}}
                gp2flags1 = regInfo{inputs: []regMask{gp, gp, flags}, outputs: []regMask{gp}}
+               gp22      = regInfo{inputs: []regMask{gpg, gpg}, outputs: []regMask{gp, gp}}
                gp31      = regInfo{inputs: []regMask{gp, gp, gp}, outputs: []regMask{gp}}
-               gp31cf    = regInfo{inputs: []regMask{gp, gp, gp}, outputs: []regMask{gp}, clobbers: flags} // cf: clobbers flags
+               gp31carry = regInfo{inputs: []regMask{gp, gp, gp}, outputs: []regMask{flags, gp}}
                gp3flags  = regInfo{inputs: []regMask{gp, gp, gp}, outputs: []regMask{flags}}
                gp3flags1 = regInfo{inputs: []regMask{gp, gp, gp, flags}, outputs: []regMask{gp}}
                gpload    = regInfo{inputs: []regMask{gpspsbg}, outputs: []regMask{gp}}
@@ -144,19 +146,19 @@ func init() {
                {name: "MOD", argLength: 2, reg: gp21cf, asm: "MOD"},                      // arg0 % arg1, signed
                {name: "MODU", argLength: 2, reg: gp21cf, asm: "MODU"},                    // arg0 % arg1, unsigned
 
-               {name: "ADDS", argLength: 2, reg: gp21cf, asm: "ADD", commutative: true},   // arg0 + arg1, set carry flag
-               {name: "ADDSconst", argLength: 1, reg: gp11cf, asm: "ADD", aux: "Int32"},   // arg0 + auxInt, set carry flag
-               {name: "ADC", argLength: 3, reg: gp2flags1, asm: "ADC", commutative: true}, // arg0 + arg1 + carry, arg2=flags
-               {name: "ADCconst", argLength: 2, reg: gp1flags1, asm: "ADC", aux: "Int32"}, // arg0 + auxInt + carry, arg1=flags
-               {name: "SUBS", argLength: 2, reg: gp21cf, asm: "SUB"},                      // arg0 - arg1, set carry flag
-               {name: "SUBSconst", argLength: 1, reg: gp11cf, asm: "SUB", aux: "Int32"},   // arg0 - auxInt, set carry flag
-               {name: "RSBSconst", argLength: 1, reg: gp11cf, asm: "RSB", aux: "Int32"},   // auxInt - arg0, set carry flag
-               {name: "SBC", argLength: 3, reg: gp2flags1, asm: "SBC"},                    // arg0 - arg1 - carry, arg2=flags
-               {name: "SBCconst", argLength: 2, reg: gp1flags1, asm: "SBC", aux: "Int32"}, // arg0 - auxInt - carry, arg1=flags
-               {name: "RSCconst", argLength: 2, reg: gp1flags1, asm: "RSC", aux: "Int32"}, // auxInt - arg0 - carry, arg1=flags
+               {name: "ADDS", argLength: 2, reg: gp21carry, asm: "ADD", commutative: true}, // arg0 + arg1, set carry flag
+               {name: "ADDSconst", argLength: 1, reg: gp11carry, asm: "ADD", aux: "Int32"}, // arg0 + auxInt, set carry flag
+               {name: "ADC", argLength: 3, reg: gp2flags1, asm: "ADC", commutative: true},  // arg0 + arg1 + carry, arg2=flags
+               {name: "ADCconst", argLength: 2, reg: gp1flags1, asm: "ADC", aux: "Int32"},  // arg0 + auxInt + carry, arg1=flags
+               {name: "SUBS", argLength: 2, reg: gp21carry, asm: "SUB"},                    // arg0 - arg1, set carry flag
+               {name: "SUBSconst", argLength: 1, reg: gp11carry, asm: "SUB", aux: "Int32"}, // arg0 - auxInt, set carry flag
+               {name: "RSBSconst", argLength: 1, reg: gp11carry, asm: "RSB", aux: "Int32"}, // auxInt - arg0, set carry flag
+               {name: "SBC", argLength: 3, reg: gp2flags1, asm: "SBC"},                     // arg0 - arg1 - carry, arg2=flags
+               {name: "SBCconst", argLength: 2, reg: gp1flags1, asm: "SBC", aux: "Int32"},  // arg0 - auxInt - carry, arg1=flags
+               {name: "RSCconst", argLength: 2, reg: gp1flags1, asm: "RSC", aux: "Int32"},  // auxInt - arg0 - carry, arg1=flags
 
-               {name: "MULLU", argLength: 2, reg: regInfo{inputs: []regMask{gp, gp}, outputs: []regMask{gp &^ buildReg("R0")}, clobbers: buildReg("R0")}, asm: "MULLU", commutative: true}, // arg0 * arg1, results 64-bit, high 32-bit in R0
-               {name: "MULA", argLength: 3, reg: gp31, asm: "MULA"},                                                                                                                        // arg0 * arg1 + arg2
+               {name: "MULLU", argLength: 2, reg: gp22, asm: "MULLU", commutative: true}, // arg0 * arg1, high 32 bits in out0, low 32 bits in out1
+               {name: "MULA", argLength: 3, reg: gp31, asm: "MULA"},                      // arg0 * arg1 + arg2
 
                {name: "ADDF", argLength: 2, reg: fp21, asm: "ADDF", commutative: true}, // arg0 + arg1
                {name: "ADDD", argLength: 2, reg: fp21, asm: "ADDD", commutative: true}, // arg0 + arg1
@@ -225,15 +227,15 @@ func init() {
                {name: "RSCshiftRL", argLength: 3, reg: gp2flags1, asm: "RSC", aux: "Int32"}, // arg1>>auxInt - arg0 - carry, unsigned shift, arg2=flags
                {name: "RSCshiftRA", argLength: 3, reg: gp2flags1, asm: "RSC", aux: "Int32"}, // arg1>>auxInt - arg0 - carry, signed shift, arg2=flags
 
-               {name: "ADDSshiftLL", argLength: 2, reg: gp21cf, asm: "ADD", aux: "Int32"}, // arg0 + arg1<<auxInt, set carry flag
-               {name: "ADDSshiftRL", argLength: 2, reg: gp21cf, asm: "ADD", aux: "Int32"}, // arg0 + arg1>>auxInt, unsigned shift, set carry flag
-               {name: "ADDSshiftRA", argLength: 2, reg: gp21cf, asm: "ADD", aux: "Int32"}, // arg0 + arg1>>auxInt, signed shift, set carry flag
-               {name: "SUBSshiftLL", argLength: 2, reg: gp21cf, asm: "SUB", aux: "Int32"}, // arg0 - arg1<<auxInt, set carry flag
-               {name: "SUBSshiftRL", argLength: 2, reg: gp21cf, asm: "SUB", aux: "Int32"}, // arg0 - arg1>>auxInt, unsigned shift, set carry flag
-               {name: "SUBSshiftRA", argLength: 2, reg: gp21cf, asm: "SUB", aux: "Int32"}, // arg0 - arg1>>auxInt, signed shift, set carry flag
-               {name: "RSBSshiftLL", argLength: 2, reg: gp21cf, asm: "RSB", aux: "Int32"}, // arg1<<auxInt - arg0, set carry flag
-               {name: "RSBSshiftRL", argLength: 2, reg: gp21cf, asm: "RSB", aux: "Int32"}, // arg1>>auxInt - arg0, unsigned shift, set carry flag
-               {name: "RSBSshiftRA", argLength: 2, reg: gp21cf, asm: "RSB", aux: "Int32"}, // arg1>>auxInt - arg0, signed shift, set carry flag
+               {name: "ADDSshiftLL", argLength: 2, reg: gp21carry, asm: "ADD", aux: "Int32"}, // arg0 + arg1<<auxInt, set carry flag
+               {name: "ADDSshiftRL", argLength: 2, reg: gp21carry, asm: "ADD", aux: "Int32"}, // arg0 + arg1>>auxInt, unsigned shift, set carry flag
+               {name: "ADDSshiftRA", argLength: 2, reg: gp21carry, asm: "ADD", aux: "Int32"}, // arg0 + arg1>>auxInt, signed shift, set carry flag
+               {name: "SUBSshiftLL", argLength: 2, reg: gp21carry, asm: "SUB", aux: "Int32"}, // arg0 - arg1<<auxInt, set carry flag
+               {name: "SUBSshiftRL", argLength: 2, reg: gp21carry, asm: "SUB", aux: "Int32"}, // arg0 - arg1>>auxInt, unsigned shift, set carry flag
+               {name: "SUBSshiftRA", argLength: 2, reg: gp21carry, asm: "SUB", aux: "Int32"}, // arg0 - arg1>>auxInt, signed shift, set carry flag
+               {name: "RSBSshiftLL", argLength: 2, reg: gp21carry, asm: "RSB", aux: "Int32"}, // arg1<<auxInt - arg0, set carry flag
+               {name: "RSBSshiftRL", argLength: 2, reg: gp21carry, asm: "RSB", aux: "Int32"}, // arg1>>auxInt - arg0, unsigned shift, set carry flag
+               {name: "RSBSshiftRA", argLength: 2, reg: gp21carry, asm: "RSB", aux: "Int32"}, // arg1>>auxInt - arg0, signed shift, set carry flag
 
                {name: "ADDshiftLLreg", argLength: 3, reg: gp31, asm: "ADD"}, // arg0 + arg1<<arg2
                {name: "ADDshiftRLreg", argLength: 3, reg: gp31, asm: "ADD"}, // arg0 + arg1>>arg2, unsigned shift
@@ -270,15 +272,15 @@ func init() {
                {name: "RSCshiftRLreg", argLength: 4, reg: gp3flags1, asm: "RSC"}, // arg1>>arg2 - arg0 - carry, unsigned shift, arg3=flags
                {name: "RSCshiftRAreg", argLength: 4, reg: gp3flags1, asm: "RSC"}, // arg1>>arg2 - arg0 - carry, signed shift, arg3=flags
 
-               {name: "ADDSshiftLLreg", argLength: 3, reg: gp31cf, asm: "ADD"}, // arg0 + arg1<<arg2, set carry flag
-               {name: "ADDSshiftRLreg", argLength: 3, reg: gp31cf, asm: "ADD"}, // arg0 + arg1>>arg2, unsigned shift, set carry flag
-               {name: "ADDSshiftRAreg", argLength: 3, reg: gp31cf, asm: "ADD"}, // arg0 + arg1>>arg2, signed shift, set carry flag
-               {name: "SUBSshiftLLreg", argLength: 3, reg: gp31cf, asm: "SUB"}, // arg0 - arg1<<arg2, set carry flag
-               {name: "SUBSshiftRLreg", argLength: 3, reg: gp31cf, asm: "SUB"}, // arg0 - arg1>>arg2, unsigned shift, set carry flag
-               {name: "SUBSshiftRAreg", argLength: 3, reg: gp31cf, asm: "SUB"}, // arg0 - arg1>>arg2, signed shift, set carry flag
-               {name: "RSBSshiftLLreg", argLength: 3, reg: gp31cf, asm: "RSB"}, // arg1<<arg2 - arg0, set carry flag
-               {name: "RSBSshiftRLreg", argLength: 3, reg: gp31cf, asm: "RSB"}, // arg1>>arg2 - arg0, unsigned shift, set carry flag
-               {name: "RSBSshiftRAreg", argLength: 3, reg: gp31cf, asm: "RSB"}, // arg1>>arg2 - arg0, signed shift, set carry flag
+               {name: "ADDSshiftLLreg", argLength: 3, reg: gp31carry, asm: "ADD"}, // arg0 + arg1<<arg2, set carry flag
+               {name: "ADDSshiftRLreg", argLength: 3, reg: gp31carry, asm: "ADD"}, // arg0 + arg1>>arg2, unsigned shift, set carry flag
+               {name: "ADDSshiftRAreg", argLength: 3, reg: gp31carry, asm: "ADD"}, // arg0 + arg1>>arg2, signed shift, set carry flag
+               {name: "SUBSshiftLLreg", argLength: 3, reg: gp31carry, asm: "SUB"}, // arg0 - arg1<<arg2, set carry flag
+               {name: "SUBSshiftRLreg", argLength: 3, reg: gp31carry, asm: "SUB"}, // arg0 - arg1>>arg2, unsigned shift, set carry flag
+               {name: "SUBSshiftRAreg", argLength: 3, reg: gp31carry, asm: "SUB"}, // arg0 - arg1>>arg2, signed shift, set carry flag
+               {name: "RSBSshiftLLreg", argLength: 3, reg: gp31carry, asm: "RSB"}, // arg1<<arg2 - arg0, set carry flag
+               {name: "RSBSshiftRLreg", argLength: 3, reg: gp31carry, asm: "RSB"}, // arg1>>arg2 - arg0, unsigned shift, set carry flag
+               {name: "RSBSshiftRAreg", argLength: 3, reg: gp31carry, asm: "RSB"}, // arg1>>arg2 - arg0, signed shift, set carry flag
 
                // comparisons
                {name: "CMP", argLength: 2, reg: gp2flags, asm: "CMP", typ: "Flags"},                    // arg0 compare to arg1
@@ -377,10 +379,6 @@ func init() {
                {name: "GreaterThanU", argLength: 1, reg: readflags},  // bool, true flags encode unsigned x>y false otherwise.
                {name: "GreaterEqualU", argLength: 1, reg: readflags}, // bool, true flags encode unsigned x>=y false otherwise.
 
-               {name: "Carry", argLength: 1, reg: regInfo{inputs: []regMask{}, outputs: []regMask{flags}}, typ: "Flags"},               // flags of a (Flags,UInt32)
-               {name: "LoweredSelect0", argLength: 1, reg: regInfo{inputs: []regMask{}, outputs: []regMask{buildReg("R0")}}},           // the first component of a tuple, implicitly in R0, arg0=tuple
-               {name: "LoweredSelect1", argLength: 1, reg: regInfo{inputs: []regMask{gp}, outputs: []regMask{gp}}, resultInArg0: true}, // the second component of a tuple, arg0=tuple
-
                // duffzero (must be 4-byte aligned)
                // arg0 = address of memory to zero (in R1, changed as side effect)
                // arg1 = value to store (always zero)
index 05be16d6b47d17aefd01b18b75824a3e18e95761..19e83a6216b311bfd0147d8e64720aa06893ce39 100644 (file)
@@ -42,8 +42,8 @@ type opData struct {
        aux               string
        rematerializeable bool
        argLength         int32 // number of arguments, if -1, then this operation has a variable number of arguments
-       commutative       bool  // this operation is commutative (e.g. addition)
-       resultInArg0      bool  // v and v.Args[0] must be allocated to the same register
+       commutative       bool  // this operation is commutative on its first 2 arguments (e.g. addition)
+       resultInArg0      bool  // last output of v and v.Args[0] must be allocated to the same register
 }
 
 type blockData struct {
@@ -160,11 +160,11 @@ func genOp() {
                        }
                        if v.resultInArg0 {
                                fmt.Fprintln(w, "resultInArg0: true,")
-                               if v.reg.inputs[0] != v.reg.outputs[0] {
-                                       log.Fatalf("input[0] and output registers must be equal for %s", v.name)
+                               if v.reg.inputs[0] != v.reg.outputs[len(v.reg.outputs)-1] {
+                                       log.Fatalf("input[0] and last output register must be equal for %s", v.name)
                                }
-                               if v.commutative && v.reg.inputs[1] != v.reg.outputs[0] {
-                                       log.Fatalf("input[1] and output registers must be equal for %s", v.name)
+                               if v.commutative && v.reg.inputs[1] != v.reg.outputs[len(v.reg.outputs)-1] {
+                                       log.Fatalf("input[1] and last output register must be equal for %s", v.name)
                                }
                        }
                        if a.name == "generic" {
@@ -196,14 +196,24 @@ func genOp() {
                                }
                                fmt.Fprintln(w, "},")
                        }
+
                        if v.reg.clobbers > 0 {
                                fmt.Fprintf(w, "clobbers: %d,%s\n", v.reg.clobbers, a.regMaskComment(v.reg.clobbers))
                        }
+
                        // reg outputs
-                       if len(v.reg.outputs) > 0 {
-                               fmt.Fprintln(w, "outputs: []regMask{")
-                               for _, r := range v.reg.outputs {
-                                       fmt.Fprintf(w, "%d,%s\n", r, a.regMaskComment(r))
+                       s = s[:0]
+                       for i, r := range v.reg.outputs {
+                               if r != 0 {
+                                       s = append(s, intPair{countRegs(r), i})
+                               }
+                       }
+                       if len(s) > 0 {
+                               sort.Sort(byKey(s))
+                               fmt.Fprintln(w, "outputs: []outputInfo{")
+                               for _, p := range s {
+                                       r := v.reg.outputs[p.val]
+                                       fmt.Fprintf(w, "{%d,%d},%s\n", p.val, r, a.regMaskComment(r))
                                }
                                fmt.Fprintln(w, "},")
                        }
index 7432a0705470498d37273e45a68ae627f62d85e1..f60887a3e184fab602e28f5f181ff15348d050e1 100644 (file)
@@ -359,7 +359,7 @@ func (v *Value) LongHTML() string {
        }
        r := v.Block.Func.RegAlloc
        if int(v.ID) < len(r) && r[v.ID] != nil {
-               s += " : " + r[v.ID].Name()
+               s += " : " + html.EscapeString(r[v.ID].Name())
        }
        s += "</span>"
        return s
index 85f525565bf0b4ec62451d6ba9afa982ebe51046..fc3a19ca3543df7f7f156f960f543eebca0e4d73 100644 (file)
@@ -36,3 +36,16 @@ func (s LocalSlot) Name() string {
        }
        return fmt.Sprintf("%s+%d[%s]", s.N, s.Off, s.Type)
 }
+
+type LocPair [2]Location
+
+func (t LocPair) Name() string {
+       n0, n1 := "nil", "nil"
+       if t[0] != nil {
+               n0 = t[0].Name()
+       }
+       if t[1] != nil {
+               n1 = t[1].Name()
+       }
+       return fmt.Sprintf("<%s,%s>", n0, n1)
+}
index 2833971ae019b8a35a758f92c0ff96207a1cc681..fd1dc513bb95ae0d831442df48e140fa31cae27b 100644 (file)
@@ -21,7 +21,7 @@ func checkLower(f *Func) {
                                continue // lowered
                        }
                        switch v.Op {
-                       case OpSP, OpSB, OpInitMem, OpArg, OpPhi, OpVarDef, OpVarKill, OpVarLive, OpKeepAlive:
+                       case OpSP, OpSB, OpInitMem, OpArg, OpPhi, OpVarDef, OpVarKill, OpVarLive, OpKeepAlive, OpSelect0, OpSelect1:
                                continue // ok not to lower
                        case OpGetG:
                                if f.Config.hasGReg {
index a7c2b6e3de5a7a4b0143d86e6be063396841d432..c7a66c34ef90e3b0801b21d39db34f2716f1090c 100644 (file)
@@ -26,7 +26,7 @@ type opInfo struct {
        generic           bool // this is a generic (arch-independent) opcode
        rematerializeable bool // this op is rematerializeable
        commutative       bool // this operation is commutative (e.g. addition)
-       resultInArg0      bool // v and v.Args[0] must be allocated to the same register
+       resultInArg0      bool // last output of v and v.Args[0] must be allocated to the same register
 }
 
 type inputInfo struct {
@@ -34,10 +34,15 @@ type inputInfo struct {
        regs regMask // allowed input registers
 }
 
+type outputInfo struct {
+       idx  int     // index in output tuple
+       regs regMask // allowed output registers
+}
+
 type regInfo struct {
        inputs   []inputInfo // ordered in register allocation order
        clobbers regMask
-       outputs  []regMask // NOTE: values can only have 1 output for now.
+       outputs  []outputInfo // ordered in register allocation order
 }
 
 type auxType int8
@@ -152,28 +157,3 @@ func MakeSizeAndAlign(size, align int64) SizeAndAlign {
        }
        return SizeAndAlign(size | align<<56)
 }
-
-func (op Op) isTupleGenerator() bool {
-       switch op {
-       case OpAdd32carry, OpSub32carry, OpMul32uhilo,
-               OpARMADDS, OpARMSUBS, OpARMMULLU,
-               OpARMADDSconst, OpARMSUBSconst, OpARMRSBSconst,
-               OpARMADDSshiftLL, OpARMSUBSshiftLL, OpARMRSBSshiftLL,
-               OpARMADDSshiftRL, OpARMSUBSshiftRL, OpARMRSBSshiftRL,
-               OpARMADDSshiftRA, OpARMSUBSshiftRA, OpARMRSBSshiftRA,
-               OpARMADDSshiftLLreg, OpARMSUBSshiftLLreg, OpARMRSBSshiftLLreg,
-               OpARMADDSshiftRLreg, OpARMSUBSshiftRLreg, OpARMRSBSshiftRLreg,
-               OpARMADDSshiftRAreg, OpARMSUBSshiftRAreg, OpARMRSBSshiftRAreg:
-               return true
-       }
-       return false
-}
-
-func (op Op) isTupleSelector() bool {
-       switch op {
-       case OpSelect0, OpSelect1,
-               OpARMLoweredSelect0, OpARMLoweredSelect1, OpARMCarry:
-               return true
-       }
-       return false
-}
index 01576c121797f3a39e7a435527b8b5aa6db0a366..9d86cbe62390cb1710fa039b28133d21832ddf7f 100644 (file)
@@ -171,6 +171,8 @@ const (
        Op386MOVSDstoreidx8
        Op386ADDL
        Op386ADDLconst
+       Op386ADDLcarry
+       Op386ADCL
        Op386SUBL
        Op386SUBLconst
        Op386MULL
@@ -756,9 +758,6 @@ const (
        OpARMLessEqualU
        OpARMGreaterThanU
        OpARMGreaterEqualU
-       OpARMCarry
-       OpARMLoweredSelect0
-       OpARMLoweredSelect1
        OpARMDUFFZERO
        OpARMDUFFCOPY
        OpARMLoweredZero
@@ -1157,8 +1156,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                                {1, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -1173,8 +1172,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                                {1, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -1189,8 +1188,8 @@ var opcodeTable = [...]opInfo{
                                {1, 32512}, // X0 X1 X2 X3 X4 X5 X6
                        },
                        clobbers: 32768, // X7
-                       outputs: []regMask{
-                               32512, // X0 X1 X2 X3 X4 X5 X6
+                       outputs: []outputInfo{
+                               {0, 32512}, // X0 X1 X2 X3 X4 X5 X6
                        },
                },
        },
@@ -1205,8 +1204,8 @@ var opcodeTable = [...]opInfo{
                                {1, 32512}, // X0 X1 X2 X3 X4 X5 X6
                        },
                        clobbers: 32768, // X7
-                       outputs: []regMask{
-                               32512, // X0 X1 X2 X3 X4 X5 X6
+                       outputs: []outputInfo{
+                               {0, 32512}, // X0 X1 X2 X3 X4 X5 X6
                        },
                },
        },
@@ -1221,8 +1220,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                                {1, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -1237,8 +1236,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                                {1, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -1253,8 +1252,8 @@ var opcodeTable = [...]opInfo{
                                {1, 32512}, // X0 X1 X2 X3 X4 X5 X6
                        },
                        clobbers: 32768, // X7
-                       outputs: []regMask{
-                               32512, // X0 X1 X2 X3 X4 X5 X6
+                       outputs: []outputInfo{
+                               {0, 32512}, // X0 X1 X2 X3 X4 X5 X6
                        },
                },
        },
@@ -1269,8 +1268,8 @@ var opcodeTable = [...]opInfo{
                                {1, 32512}, // X0 X1 X2 X3 X4 X5 X6
                        },
                        clobbers: 32768, // X7
-                       outputs: []regMask{
-                               32512, // X0 X1 X2 X3 X4 X5 X6
+                       outputs: []outputInfo{
+                               {0, 32512}, // X0 X1 X2 X3 X4 X5 X6
                        },
                },
        },
@@ -1283,8 +1282,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -1297,8 +1296,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -1309,8 +1308,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               x86.AMOVSS,
                reg: regInfo{
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -1321,8 +1320,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               x86.AMOVSD,
                reg: regInfo{
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -1336,8 +1335,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255},   // AX CX DX BX SP BP SI DI
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -1351,8 +1350,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255},   // AX CX DX BX SP BP SI DI
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -1366,8 +1365,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255},   // AX CX DX BX SP BP SI DI
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -1381,8 +1380,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255},   // AX CX DX BX SP BP SI DI
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -1473,8 +1472,8 @@ var opcodeTable = [...]opInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -1488,8 +1487,42 @@ var opcodeTable = [...]opInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
+                       },
+               },
+       },
+       {
+               name:         "ADDLcarry",
+               argLen:       2,
+               commutative:  true,
+               resultInArg0: true,
+               asm:          x86.AADDL,
+               reg: regInfo{
+                       inputs: []inputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
+                               {1, 239}, // AX CX DX BX BP SI DI
+                       },
+                       outputs: []outputInfo{
+                               {0, 131072}, // FLAGS
+                               {1, 239},    // AX CX DX BX BP SI DI
+                       },
+               },
+       },
+       {
+               name:         "ADCL",
+               argLen:       3,
+               commutative:  true,
+               resultInArg0: true,
+               asm:          x86.AADCL,
+               reg: regInfo{
+                       inputs: []inputInfo{
+                               {2, 131072}, // FLAGS
+                               {0, 239},    // AX CX DX BX BP SI DI
+                               {1, 239},    // AX CX DX BX BP SI DI
+                       },
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -1504,8 +1537,8 @@ var opcodeTable = [...]opInfo{
                                {1, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -1520,8 +1553,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -1537,8 +1570,8 @@ var opcodeTable = [...]opInfo{
                                {1, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -1553,8 +1586,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -1568,8 +1601,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255}, // AX CX DX BX SP BP SI DI
                        },
                        clobbers: 131073, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -1583,8 +1616,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255}, // AX CX DX BX SP BP SI DI
                        },
                        clobbers: 131073, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -1598,8 +1631,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255}, // AX CX DX BX SP BP SI DI
                        },
                        clobbers: 131073, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -1613,8 +1646,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255}, // AX CX DX BX SP BP SI DI
                        },
                        clobbers: 131073, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -1628,8 +1661,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255}, // AX CX DX BX SP BP SI DI
                        },
                        clobbers: 131073, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -1643,8 +1676,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255}, // AX CX DX BX SP BP SI DI
                        },
                        clobbers: 131073, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -1658,8 +1691,8 @@ var opcodeTable = [...]opInfo{
                                {1, 251}, // AX CX BX SP BP SI DI
                        },
                        clobbers: 131076, // DX FLAGS
-                       outputs: []regMask{
-                               1, // AX
+                       outputs: []outputInfo{
+                               {0, 1}, // AX
                        },
                },
        },
@@ -1673,8 +1706,8 @@ var opcodeTable = [...]opInfo{
                                {1, 251}, // AX CX BX SP BP SI DI
                        },
                        clobbers: 131076, // DX FLAGS
-                       outputs: []regMask{
-                               1, // AX
+                       outputs: []outputInfo{
+                               {0, 1}, // AX
                        },
                },
        },
@@ -1688,8 +1721,8 @@ var opcodeTable = [...]opInfo{
                                {1, 251}, // AX CX BX SP BP SI DI
                        },
                        clobbers: 131076, // DX FLAGS
-                       outputs: []regMask{
-                               1, // AX
+                       outputs: []outputInfo{
+                               {0, 1}, // AX
                        },
                },
        },
@@ -1703,8 +1736,8 @@ var opcodeTable = [...]opInfo{
                                {1, 251}, // AX CX BX SP BP SI DI
                        },
                        clobbers: 131076, // DX FLAGS
-                       outputs: []regMask{
-                               1, // AX
+                       outputs: []outputInfo{
+                               {0, 1}, // AX
                        },
                },
        },
@@ -1718,8 +1751,8 @@ var opcodeTable = [...]opInfo{
                                {1, 251}, // AX CX BX SP BP SI DI
                        },
                        clobbers: 131073, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -1733,8 +1766,8 @@ var opcodeTable = [...]opInfo{
                                {1, 251}, // AX CX BX SP BP SI DI
                        },
                        clobbers: 131073, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -1748,8 +1781,8 @@ var opcodeTable = [...]opInfo{
                                {1, 251}, // AX CX BX SP BP SI DI
                        },
                        clobbers: 131073, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -1763,8 +1796,8 @@ var opcodeTable = [...]opInfo{
                                {1, 251}, // AX CX BX SP BP SI DI
                        },
                        clobbers: 131073, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -1780,8 +1813,8 @@ var opcodeTable = [...]opInfo{
                                {1, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -1796,8 +1829,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -1813,8 +1846,8 @@ var opcodeTable = [...]opInfo{
                                {1, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -1829,8 +1862,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -1846,8 +1879,8 @@ var opcodeTable = [...]opInfo{
                                {1, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -1862,8 +1895,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -1876,8 +1909,8 @@ var opcodeTable = [...]opInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                                {1, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               131072, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 131072}, // FLAGS
                        },
                },
        },
@@ -1890,8 +1923,8 @@ var opcodeTable = [...]opInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                                {1, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               131072, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 131072}, // FLAGS
                        },
                },
        },
@@ -1904,8 +1937,8 @@ var opcodeTable = [...]opInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                                {1, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               131072, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 131072}, // FLAGS
                        },
                },
        },
@@ -1918,8 +1951,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               131072, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 131072}, // FLAGS
                        },
                },
        },
@@ -1932,8 +1965,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               131072, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 131072}, // FLAGS
                        },
                },
        },
@@ -1946,8 +1979,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               131072, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 131072}, // FLAGS
                        },
                },
        },
@@ -1960,8 +1993,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                                {1, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
-                       outputs: []regMask{
-                               131072, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 131072}, // FLAGS
                        },
                },
        },
@@ -1974,8 +2007,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                                {1, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
-                       outputs: []regMask{
-                               131072, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 131072}, // FLAGS
                        },
                },
        },
@@ -1988,8 +2021,8 @@ var opcodeTable = [...]opInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                                {1, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               131072, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 131072}, // FLAGS
                        },
                },
        },
@@ -2002,8 +2035,8 @@ var opcodeTable = [...]opInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                                {1, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               131072, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 131072}, // FLAGS
                        },
                },
        },
@@ -2016,8 +2049,8 @@ var opcodeTable = [...]opInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                                {1, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               131072, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 131072}, // FLAGS
                        },
                },
        },
@@ -2030,8 +2063,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               131072, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 131072}, // FLAGS
                        },
                },
        },
@@ -2044,8 +2077,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               131072, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 131072}, // FLAGS
                        },
                },
        },
@@ -2058,8 +2091,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               131072, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 131072}, // FLAGS
                        },
                },
        },
@@ -2074,8 +2107,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2090,8 +2123,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2106,8 +2139,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2122,8 +2155,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2138,8 +2171,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2154,8 +2187,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2170,8 +2203,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2186,8 +2219,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2202,8 +2235,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2218,8 +2251,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2234,8 +2267,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2250,8 +2283,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2266,8 +2299,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2282,8 +2315,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2298,8 +2331,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2314,8 +2347,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2330,8 +2363,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2345,8 +2378,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2360,8 +2393,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2374,8 +2407,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2388,8 +2421,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2402,8 +2435,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2416,8 +2449,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2431,8 +2464,8 @@ var opcodeTable = [...]opInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
                        clobbers: 131072, // FLAGS
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2444,8 +2477,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -2457,8 +2490,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 131072}, // FLAGS
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2470,8 +2503,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 131072}, // FLAGS
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2483,8 +2516,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 131072}, // FLAGS
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2496,8 +2529,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 131072}, // FLAGS
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2509,8 +2542,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 131072}, // FLAGS
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2522,8 +2555,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 131072}, // FLAGS
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2535,8 +2568,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 131072}, // FLAGS
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2548,8 +2581,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 131072}, // FLAGS
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2561,8 +2594,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 131072}, // FLAGS
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2574,8 +2607,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 131072}, // FLAGS
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2587,8 +2620,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 131072}, // FLAGS
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2601,8 +2634,8 @@ var opcodeTable = [...]opInfo{
                                {0, 131072}, // FLAGS
                        },
                        clobbers: 131073, // AX FLAGS
-                       outputs: []regMask{
-                               238, // CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 238}, // CX DX BX BP SI DI
                        },
                },
        },
@@ -2615,8 +2648,8 @@ var opcodeTable = [...]opInfo{
                                {0, 131072}, // FLAGS
                        },
                        clobbers: 131073, // AX FLAGS
-                       outputs: []regMask{
-                               238, // CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 238}, // CX DX BX BP SI DI
                        },
                },
        },
@@ -2628,8 +2661,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 131072}, // FLAGS
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2641,8 +2674,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 131072}, // FLAGS
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2654,8 +2687,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 131072}, // FLAGS
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2667,8 +2700,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 131072}, // FLAGS
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2680,8 +2713,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2693,8 +2726,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2706,8 +2739,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2719,8 +2752,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2731,8 +2764,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               x86.AMOVL,
                reg: regInfo{
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2744,8 +2777,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2757,8 +2790,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2770,8 +2803,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -2783,8 +2816,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 239}, // AX CX DX BX BP SI DI
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -2796,8 +2829,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -2809,8 +2842,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -2825,8 +2858,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                                {1, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -2839,8 +2872,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2853,8 +2886,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255},   // AX CX DX BX SP BP SI DI
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2867,8 +2900,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255},   // AX CX DX BX SP BP SI DI
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2881,8 +2914,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255},   // AX CX DX BX SP BP SI DI
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2895,8 +2928,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255},   // AX CX DX BX SP BP SI DI
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2909,8 +2942,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2923,8 +2956,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2937,8 +2970,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2951,8 +2984,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -2965,8 +2998,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -3015,8 +3048,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -3042,8 +3075,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255},   // AX CX DX BX SP BP SI DI
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -3057,8 +3090,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255},   // AX CX DX BX SP BP SI DI
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -3072,8 +3105,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255},   // AX CX DX BX SP BP SI DI
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -3087,8 +3120,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255},   // AX CX DX BX SP BP SI DI
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -3102,8 +3135,8 @@ var opcodeTable = [...]opInfo{
                                {1, 255},   // AX CX DX BX SP BP SI DI
                                {0, 65791}, // AX CX DX BX SP BP SI DI SB
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -3283,8 +3316,8 @@ var opcodeTable = [...]opInfo{
                argLen:            0,
                rematerializeable: true,
                reg: regInfo{
-                       outputs: []regMask{
-                               65280, // X0 X1 X2 X3 X4 X5 X6 X7
+                       outputs: []outputInfo{
+                               {0, 65280}, // X0 X1 X2 X3 X4 X5 X6 X7
                        },
                },
        },
@@ -3380,8 +3413,8 @@ var opcodeTable = [...]opInfo{
                name:   "LoweredGetG",
                argLen: 1,
                reg: regInfo{
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -3389,8 +3422,8 @@ var opcodeTable = [...]opInfo{
                name:   "LoweredGetClosurePtr",
                argLen: 0,
                reg: regInfo{
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -3412,8 +3445,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 255}, // AX CX DX BX SP BP SI DI
                        },
-                       outputs: []regMask{
-                               239, // AX CX DX BX BP SI DI
+                       outputs: []outputInfo{
+                               {0, 239}, // AX CX DX BX BP SI DI
                        },
                },
        },
@@ -3454,8 +3487,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                                {1, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -3470,8 +3503,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                                {1, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -3486,8 +3519,8 @@ var opcodeTable = [...]opInfo{
                                {1, 2147418112}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
                        },
                        clobbers: 2147483648, // X15
-                       outputs: []regMask{
-                               2147418112, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
+                       outputs: []outputInfo{
+                               {0, 2147418112}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
                        },
                },
        },
@@ -3502,8 +3535,8 @@ var opcodeTable = [...]opInfo{
                                {1, 2147418112}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
                        },
                        clobbers: 2147483648, // X15
-                       outputs: []regMask{
-                               2147418112, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
+                       outputs: []outputInfo{
+                               {0, 2147418112}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
                        },
                },
        },
@@ -3518,8 +3551,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                                {1, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -3534,8 +3567,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                                {1, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -3550,8 +3583,8 @@ var opcodeTable = [...]opInfo{
                                {1, 2147418112}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
                        },
                        clobbers: 2147483648, // X15
-                       outputs: []regMask{
-                               2147418112, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
+                       outputs: []outputInfo{
+                               {0, 2147418112}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
                        },
                },
        },
@@ -3566,8 +3599,8 @@ var opcodeTable = [...]opInfo{
                                {1, 2147418112}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
                        },
                        clobbers: 2147483648, // X15
-                       outputs: []regMask{
-                               2147418112, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
+                       outputs: []outputInfo{
+                               {0, 2147418112}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
                        },
                },
        },
@@ -3580,8 +3613,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -3594,8 +3627,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -3606,8 +3639,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               x86.AMOVSS,
                reg: regInfo{
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -3618,8 +3651,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               x86.AMOVSD,
                reg: regInfo{
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -3633,8 +3666,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535},      // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -3648,8 +3681,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535},      // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -3663,8 +3696,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535},      // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -3678,8 +3711,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535},      // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -3770,8 +3803,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -3786,8 +3819,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -3801,8 +3834,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -3816,8 +3849,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -3832,8 +3865,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -3848,8 +3881,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -3864,8 +3897,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -3880,8 +3913,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -3897,8 +3930,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -3914,8 +3947,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -3930,8 +3963,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -3946,8 +3979,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -3961,8 +3994,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -3976,8 +4009,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -3991,8 +4024,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -4006,8 +4039,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -4021,8 +4054,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -4036,8 +4069,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -4051,8 +4084,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -4066,8 +4099,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -4082,8 +4115,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4097,8 +4130,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65531}, // AX CX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934596, // DX FLAGS
-                       outputs: []regMask{
-                               1, // AX
+                       outputs: []outputInfo{
+                               {0, 1}, // AX
                        },
                },
        },
@@ -4112,8 +4145,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65531}, // AX CX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934596, // DX FLAGS
-                       outputs: []regMask{
-                               1, // AX
+                       outputs: []outputInfo{
+                               {0, 1}, // AX
                        },
                },
        },
@@ -4127,8 +4160,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65531}, // AX CX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934596, // DX FLAGS
-                       outputs: []regMask{
-                               1, // AX
+                       outputs: []outputInfo{
+                               {0, 1}, // AX
                        },
                },
        },
@@ -4142,8 +4175,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65531}, // AX CX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934596, // DX FLAGS
-                       outputs: []regMask{
-                               1, // AX
+                       outputs: []outputInfo{
+                               {0, 1}, // AX
                        },
                },
        },
@@ -4157,8 +4190,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65531}, // AX CX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934596, // DX FLAGS
-                       outputs: []regMask{
-                               1, // AX
+                       outputs: []outputInfo{
+                               {0, 1}, // AX
                        },
                },
        },
@@ -4172,8 +4205,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65531}, // AX CX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934596, // DX FLAGS
-                       outputs: []regMask{
-                               1, // AX
+                       outputs: []outputInfo{
+                               {0, 1}, // AX
                        },
                },
        },
@@ -4187,8 +4220,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65531}, // AX CX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -4202,8 +4235,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65531}, // AX CX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -4217,8 +4250,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65531}, // AX CX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -4232,8 +4265,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65531}, // AX CX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -4247,8 +4280,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65531}, // AX CX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -4262,8 +4295,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65531}, // AX CX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -4279,8 +4312,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4296,8 +4329,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4312,8 +4345,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4328,8 +4361,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4345,8 +4378,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4362,8 +4395,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4378,8 +4411,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4394,8 +4427,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4411,8 +4444,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4428,8 +4461,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4444,8 +4477,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4460,8 +4493,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4474,8 +4507,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4488,8 +4521,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4502,8 +4535,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4516,8 +4549,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4530,8 +4563,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4544,8 +4577,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4558,8 +4591,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4572,8 +4605,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4586,8 +4619,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                                {1, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4600,8 +4633,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                                {1, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4614,8 +4647,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4628,8 +4661,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4642,8 +4675,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4656,8 +4689,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4670,8 +4703,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4684,8 +4717,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4698,8 +4731,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4712,8 +4745,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               8589934592, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 8589934592}, // FLAGS
                        },
                },
        },
@@ -4728,8 +4761,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4744,8 +4777,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4760,8 +4793,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4776,8 +4809,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4792,8 +4825,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4808,8 +4841,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4824,8 +4857,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4840,8 +4873,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4856,8 +4889,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4872,8 +4905,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4888,8 +4921,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4904,8 +4937,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4920,8 +4953,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4936,8 +4969,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4952,8 +4985,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4968,8 +5001,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -4984,8 +5017,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5000,8 +5033,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5016,8 +5049,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5032,8 +5065,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5048,8 +5081,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5064,8 +5097,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5080,8 +5113,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5096,8 +5129,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5111,8 +5144,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5126,8 +5159,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5141,8 +5174,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5156,8 +5189,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5170,8 +5203,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5184,8 +5217,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5198,8 +5231,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5212,8 +5245,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5226,8 +5259,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5240,8 +5273,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5257,8 +5290,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65518},      // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               65518, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65518}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5274,8 +5307,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65518},      // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               65518, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65518}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5291,8 +5324,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65518},      // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               65518, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65518}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5308,8 +5341,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65518},      // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               65518, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65518}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5325,8 +5358,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65518},      // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               65518, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65518}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5342,8 +5375,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65518},      // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               65518, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65518}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5357,8 +5390,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5372,8 +5405,8 @@ var opcodeTable = [...]opInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                        clobbers: 8589934592, // FLAGS
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5385,8 +5418,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -5398,8 +5431,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5411,8 +5444,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5424,8 +5457,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5437,8 +5470,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5450,8 +5483,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5463,8 +5496,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5476,8 +5509,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5489,8 +5522,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5502,8 +5535,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5515,8 +5548,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5528,8 +5561,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5541,8 +5574,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5555,8 +5588,8 @@ var opcodeTable = [...]opInfo{
                                {0, 8589934592}, // FLAGS
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               65518, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65518}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5569,8 +5602,8 @@ var opcodeTable = [...]opInfo{
                                {0, 8589934592}, // FLAGS
                        },
                        clobbers: 8589934593, // AX FLAGS
-                       outputs: []regMask{
-                               65518, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65518}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5582,8 +5615,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5595,8 +5628,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5608,8 +5641,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5621,8 +5654,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589934592}, // FLAGS
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5634,8 +5667,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5647,8 +5680,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5660,8 +5693,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5673,8 +5706,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5686,8 +5719,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5699,8 +5732,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5711,8 +5744,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               x86.AMOVL,
                reg: regInfo{
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5723,8 +5756,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               x86.AMOVQ,
                reg: regInfo{
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5736,8 +5769,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5749,8 +5782,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5762,8 +5795,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5775,8 +5808,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5788,8 +5821,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -5801,8 +5834,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -5814,8 +5847,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -5827,8 +5860,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -5840,8 +5873,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -5853,8 +5886,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -5869,8 +5902,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                                {1, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -5883,8 +5916,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5897,8 +5930,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535},      // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5911,8 +5944,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535},      // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5925,8 +5958,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535},      // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5939,8 +5972,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535},      // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5953,8 +5986,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5967,8 +6000,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5981,8 +6014,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -5995,8 +6028,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -6009,8 +6042,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -6023,8 +6056,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -6037,8 +6070,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -6099,8 +6132,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -6126,8 +6159,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535},      // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -6141,8 +6174,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535},      // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -6156,8 +6189,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535},      // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -6171,8 +6204,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535},      // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -6186,8 +6219,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535},      // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -6201,8 +6234,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535},      // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -6216,8 +6249,8 @@ var opcodeTable = [...]opInfo{
                                {1, 65535},      // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                                {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -6458,8 +6491,8 @@ var opcodeTable = [...]opInfo{
                argLen:            0,
                rematerializeable: true,
                reg: regInfo{
-                       outputs: []regMask{
-                               4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
                        },
                },
        },
@@ -6555,8 +6588,8 @@ var opcodeTable = [...]opInfo{
                name:   "LoweredGetG",
                argLen: 1,
                reg: regInfo{
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -6564,8 +6597,8 @@ var opcodeTable = [...]opInfo{
                name:   "LoweredGetClosurePtr",
                argLen: 0,
                reg: regInfo{
-                       outputs: []regMask{
-                               4, // DX
+                       outputs: []outputInfo{
+                               {0, 4}, // DX
                        },
                },
        },
@@ -6587,8 +6620,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
-                       outputs: []regMask{
-                               65519, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                       outputs: []outputInfo{
+                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
                        },
                },
        },
@@ -6628,8 +6661,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6642,8 +6675,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 14335}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12 SP
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6656,8 +6689,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6670,8 +6703,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6684,8 +6717,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6698,8 +6731,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6713,8 +6746,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6728,8 +6761,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6743,8 +6776,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6758,8 +6791,8 @@ var opcodeTable = [...]opInfo{
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
                        clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6773,8 +6806,8 @@ var opcodeTable = [...]opInfo{
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
                        clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6788,8 +6821,8 @@ var opcodeTable = [...]opInfo{
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
                        clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6803,8 +6836,8 @@ var opcodeTable = [...]opInfo{
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
                        clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6818,9 +6851,9 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6833,9 +6866,9 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6850,8 +6883,8 @@ var opcodeTable = [...]opInfo{
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6865,8 +6898,8 @@ var opcodeTable = [...]opInfo{
                                {1, 4294967296}, // FLAGS
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6879,9 +6912,9 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6894,9 +6927,9 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6909,9 +6942,9 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6925,8 +6958,8 @@ var opcodeTable = [...]opInfo{
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6940,8 +6973,8 @@ var opcodeTable = [...]opInfo{
                                {1, 4294967296}, // FLAGS
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6955,8 +6988,8 @@ var opcodeTable = [...]opInfo{
                                {1, 4294967296}, // FLAGS
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -6967,13 +7000,13 @@ var opcodeTable = [...]opInfo{
                asm:         arm.AMULLU,
                reg: regInfo{
                        inputs: []inputInfo{
+                               {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
+                               {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
+                       },
+                       outputs: []outputInfo{
                                {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       clobbers: 1, // R0
-                       outputs: []regMask{
-                               5118, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
-                       },
                },
        },
        {
@@ -6986,8 +7019,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7001,8 +7034,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                                {1, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -7016,8 +7049,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                                {1, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -7030,8 +7063,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                                {1, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -7044,8 +7077,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                                {1, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -7059,8 +7092,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                                {1, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -7074,8 +7107,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                                {1, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -7088,8 +7121,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                                {1, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -7102,8 +7135,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                                {1, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -7117,8 +7150,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7131,8 +7164,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7146,8 +7179,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7160,8 +7193,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7175,8 +7208,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7189,8 +7222,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7203,8 +7236,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7217,8 +7250,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7230,8 +7263,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7243,8 +7276,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -7257,8 +7290,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7271,8 +7304,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7285,8 +7318,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7299,8 +7332,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7314,8 +7347,8 @@ var opcodeTable = [...]opInfo{
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
                        clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7328,8 +7361,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7341,8 +7374,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7356,8 +7389,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7371,8 +7404,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7386,8 +7419,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7401,8 +7434,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7416,8 +7449,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7431,8 +7464,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7446,8 +7479,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7461,8 +7494,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7476,8 +7509,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7491,8 +7524,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7506,8 +7539,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7521,8 +7554,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7536,8 +7569,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7551,8 +7584,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7566,8 +7599,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7581,8 +7614,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7596,8 +7629,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7611,8 +7644,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7626,8 +7659,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7641,8 +7674,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7656,8 +7689,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7670,8 +7703,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7684,8 +7717,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7698,8 +7731,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7714,8 +7747,8 @@ var opcodeTable = [...]opInfo{
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7730,8 +7763,8 @@ var opcodeTable = [...]opInfo{
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7746,8 +7779,8 @@ var opcodeTable = [...]opInfo{
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7762,8 +7795,8 @@ var opcodeTable = [...]opInfo{
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7778,8 +7811,8 @@ var opcodeTable = [...]opInfo{
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7794,8 +7827,8 @@ var opcodeTable = [...]opInfo{
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7810,8 +7843,8 @@ var opcodeTable = [...]opInfo{
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7826,8 +7859,8 @@ var opcodeTable = [...]opInfo{
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7842,8 +7875,8 @@ var opcodeTable = [...]opInfo{
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7857,9 +7890,9 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7873,9 +7906,9 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7889,9 +7922,9 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7905,9 +7938,9 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7921,9 +7954,9 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7937,9 +7970,9 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7953,9 +7986,9 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7969,9 +8002,9 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -7985,9 +8018,9 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8001,8 +8034,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8016,8 +8049,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8031,8 +8064,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8046,8 +8079,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8061,8 +8094,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8076,8 +8109,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8091,8 +8124,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8106,8 +8139,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8121,8 +8154,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8136,8 +8169,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8151,8 +8184,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8166,8 +8199,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8181,8 +8214,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8196,8 +8229,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8211,8 +8244,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8226,8 +8259,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8241,8 +8274,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8256,8 +8289,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8271,8 +8304,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8286,8 +8319,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8301,8 +8334,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8315,8 +8348,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8329,8 +8362,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8343,8 +8376,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8359,8 +8392,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8375,8 +8408,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8391,8 +8424,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8407,8 +8440,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8423,8 +8456,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8439,8 +8472,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8455,8 +8488,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8471,8 +8504,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8487,8 +8520,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8502,9 +8535,9 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8518,9 +8551,9 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8534,9 +8567,9 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8550,9 +8583,9 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8566,9 +8599,9 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8582,9 +8615,9 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8598,9 +8631,9 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8614,9 +8647,9 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8630,9 +8663,9 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       clobbers: 4294967296, // FLAGS
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
+                               {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8645,8 +8678,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8659,8 +8692,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8673,8 +8706,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8687,8 +8720,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8702,8 +8735,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8716,8 +8749,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8731,8 +8764,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8745,8 +8778,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8759,8 +8792,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                                {1, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8773,8 +8806,8 @@ var opcodeTable = [...]opInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                                {1, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8788,8 +8821,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8803,8 +8836,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8818,8 +8851,8 @@ var opcodeTable = [...]opInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {1, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8833,8 +8866,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8848,8 +8881,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8863,8 +8896,8 @@ var opcodeTable = [...]opInfo{
                                {1, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {2, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               4294967296, // FLAGS
+                       outputs: []outputInfo{
+                               {0, 4294967296}, // FLAGS
                        },
                },
        },
@@ -8901,8 +8934,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               arm.AMOVW,
                reg: regInfo{
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8913,8 +8946,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               arm.AMOVF,
                reg: regInfo{
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -8925,8 +8958,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               arm.AMOVD,
                reg: regInfo{
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -8940,8 +8973,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589942784}, // SP SB
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8954,8 +8987,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589948927}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12 SP SB
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8968,8 +9001,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589948927}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12 SP SB
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8982,8 +9015,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589948927}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12 SP SB
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -8996,8 +9029,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589948927}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12 SP SB
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9010,8 +9043,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589948927}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12 SP SB
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9024,8 +9057,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589948927}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12 SP SB
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -9038,8 +9071,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 8589948927}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12 SP SB
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -9112,8 +9145,8 @@ var opcodeTable = [...]opInfo{
                                {1, 6143},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {0, 8589948927}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12 SP SB
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9127,8 +9160,8 @@ var opcodeTable = [...]opInfo{
                                {1, 6143},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {0, 8589948927}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12 SP SB
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9142,8 +9175,8 @@ var opcodeTable = [...]opInfo{
                                {1, 6143},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {0, 8589948927}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12 SP SB
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9157,8 +9190,8 @@ var opcodeTable = [...]opInfo{
                                {1, 6143},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                                {0, 8589948927}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12 SP SB
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9221,8 +9254,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9234,8 +9267,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9247,8 +9280,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9260,8 +9293,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9273,8 +9306,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9286,8 +9319,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -9299,8 +9332,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -9312,8 +9345,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -9325,8 +9358,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -9338,8 +9371,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9351,8 +9384,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9364,8 +9397,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9377,8 +9410,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9390,8 +9423,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -9403,8 +9436,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
-                       outputs: []regMask{
-                               4294901760, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
+                       outputs: []outputInfo{
+                               {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
                        },
                },
        },
@@ -9419,8 +9452,8 @@ var opcodeTable = [...]opInfo{
                                {1, 4294967296}, // FLAGS
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9435,8 +9468,8 @@ var opcodeTable = [...]opInfo{
                                {1, 4294967296}, // FLAGS
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9450,8 +9483,8 @@ var opcodeTable = [...]opInfo{
                                {0, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                                {1, 5119},       // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9518,8 +9551,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294967296}, // FLAGS
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9530,8 +9563,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294967296}, // FLAGS
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9542,8 +9575,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294967296}, // FLAGS
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9554,8 +9587,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294967296}, // FLAGS
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9566,8 +9599,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294967296}, // FLAGS
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9578,8 +9611,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294967296}, // FLAGS
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9590,8 +9623,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294967296}, // FLAGS
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9602,8 +9635,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294967296}, // FLAGS
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9614,8 +9647,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294967296}, // FLAGS
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9626,40 +9659,9 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 4294967296}, // FLAGS
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
-                       },
-               },
-       },
-       {
-               name:   "Carry",
-               argLen: 1,
-               reg: regInfo{
-                       outputs: []regMask{
-                               4294967296, // FLAGS
-                       },
-               },
-       },
-       {
-               name:   "LoweredSelect0",
-               argLen: 1,
-               reg: regInfo{
-                       outputs: []regMask{
-                               1, // R0
-                       },
-               },
-       },
-       {
-               name:         "LoweredSelect1",
-               argLen:       1,
-               resultInArg0: true,
-               reg: regInfo{
-                       inputs: []inputInfo{
+                       outputs: []outputInfo{
                                {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
-                       },
                },
        },
        {
@@ -9738,8 +9740,8 @@ var opcodeTable = [...]opInfo{
                name:   "LoweredGetClosurePtr",
                argLen: 0,
                reg: regInfo{
-                       outputs: []regMask{
-                               128, // R7
+                       outputs: []outputInfo{
+                               {0, 128}, // R7
                        },
                },
        },
@@ -9751,8 +9753,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 6143}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12
                        },
-                       outputs: []regMask{
-                               5119, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
+                       outputs: []outputInfo{
+                               {0, 5119}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12
                        },
                },
        },
@@ -9797,8 +9799,8 @@ var opcodeTable = [...]opInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                                {1, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -9811,8 +9813,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -9826,8 +9828,8 @@ var opcodeTable = [...]opInfo{
                                {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                                {1, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
-                       outputs: []regMask{
-                               576460743713488896, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
+                       outputs: []outputInfo{
+                               {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
                },
        },
@@ -9841,8 +9843,8 @@ var opcodeTable = [...]opInfo{
                                {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                                {1, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
-                       outputs: []regMask{
-                               576460743713488896, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
+                       outputs: []outputInfo{
+                               {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
                },
        },
@@ -9855,8 +9857,8 @@ var opcodeTable = [...]opInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                                {1, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -9869,8 +9871,8 @@ var opcodeTable = [...]opInfo{
                                {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                                {1, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
-                       outputs: []regMask{
-                               576460743713488896, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
+                       outputs: []outputInfo{
+                               {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
                },
        },
@@ -9883,8 +9885,8 @@ var opcodeTable = [...]opInfo{
                                {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                                {1, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
-                       outputs: []regMask{
-                               576460743713488896, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
+                       outputs: []outputInfo{
+                               {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
                },
        },
@@ -9898,8 +9900,8 @@ var opcodeTable = [...]opInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                                {1, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -9913,8 +9915,8 @@ var opcodeTable = [...]opInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                                {1, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -9928,8 +9930,8 @@ var opcodeTable = [...]opInfo{
                                {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                                {1, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
-                       outputs: []regMask{
-                               576460743713488896, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
+                       outputs: []outputInfo{
+                               {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
                },
        },
@@ -9943,8 +9945,8 @@ var opcodeTable = [...]opInfo{
                                {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                                {1, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
-                       outputs: []regMask{
-                               576460743713488896, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
+                       outputs: []outputInfo{
+                               {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
                },
        },
@@ -9957,8 +9959,8 @@ var opcodeTable = [...]opInfo{
                                {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                                {1, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
-                       outputs: []regMask{
-                               576460743713488896, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
+                       outputs: []outputInfo{
+                               {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
                },
        },
@@ -9971,8 +9973,8 @@ var opcodeTable = [...]opInfo{
                                {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                                {1, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
-                       outputs: []regMask{
-                               576460743713488896, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
+                       outputs: []outputInfo{
+                               {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
                },
        },
@@ -9986,8 +9988,8 @@ var opcodeTable = [...]opInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                                {1, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10000,8 +10002,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10015,8 +10017,8 @@ var opcodeTable = [...]opInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                                {1, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10029,8 +10031,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10044,8 +10046,8 @@ var opcodeTable = [...]opInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                                {1, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10058,8 +10060,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10071,8 +10073,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10084,8 +10086,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10097,8 +10099,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10110,8 +10112,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10123,8 +10125,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10136,8 +10138,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10149,8 +10151,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10162,8 +10164,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10175,8 +10177,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10188,8 +10190,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10201,8 +10203,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10214,8 +10216,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10227,8 +10229,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10240,8 +10242,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10253,8 +10255,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               576460743713488896, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
+                       outputs: []outputInfo{
+                               {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
                },
        },
@@ -10266,8 +10268,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               576460743713488896, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
+                       outputs: []outputInfo{
+                               {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
                },
        },
@@ -10394,8 +10396,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               ppc64.AMOVD,
                reg: regInfo{
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10406,8 +10408,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               ppc64.AMOVW,
                reg: regInfo{
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10418,8 +10420,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               ppc64.AMOVH,
                reg: regInfo{
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10430,8 +10432,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               ppc64.AMOVB,
                reg: regInfo{
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10442,8 +10444,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               ppc64.AFMOVD,
                reg: regInfo{
-                       outputs: []regMask{
-                               576460743713488896, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
+                       outputs: []outputInfo{
+                               {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
                },
        },
@@ -10454,8 +10456,8 @@ var opcodeTable = [...]opInfo{
                rematerializeable: true,
                asm:               ppc64.AFMOVS,
                reg: regInfo{
-                       outputs: []regMask{
-                               576460743713488896, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
+                       outputs: []outputInfo{
+                               {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
                },
        },
@@ -10468,8 +10470,8 @@ var opcodeTable = [...]opInfo{
                                {0, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                                {1, 576460743713488896}, // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26
                        },
-                       outputs: []regMask{
-                               576460752303423488, // CR
+                       outputs: []outputInfo{
+                               {0, 576460752303423488}, // CR
                        },
                },
        },
@@ -10482,8 +10484,8 @@ var opcodeTable = [...]opInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                                {1, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               576460752303423488, // CR
+                       outputs: []outputInfo{
+                               {0, 576460752303423488}, // CR
                        },
                },
        },
@@ -10496,8 +10498,8 @@ var opcodeTable = [...]opInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                                {1, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               576460752303423488, // CR
+                       outputs: []outputInfo{
+                               {0, 576460752303423488}, // CR
                        },
                },
        },
@@ -10510,8 +10512,8 @@ var opcodeTable = [...]opInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                                {1, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               576460752303423488, // CR
+                       outputs: []outputInfo{
+                               {0, 576460752303423488}, // CR
                        },
                },
        },
@@ -10524,8 +10526,8 @@ var opcodeTable = [...]opInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                                {1, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               576460752303423488, // CR
+                       outputs: []outputInfo{
+                               {0, 576460752303423488}, // CR
                        },
                },
        },
@@ -10538,8 +10540,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 1073731578}, // SP R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
-                       outputs: []regMask{
-                               576460752303423488, // CR
+                       outputs: []outputInfo{
+                               {0, 576460752303423488}, // CR
                        },
                },
        },
@@ -10558,8 +10560,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 576460752303423488}, // CR
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10570,8 +10572,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 576460752303423488}, // CR
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10582,8 +10584,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 576460752303423488}, // CR
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10594,8 +10596,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 576460752303423488}, // CR
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10606,8 +10608,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 576460752303423488}, // CR
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
@@ -10618,8 +10620,8 @@ var opcodeTable = [...]opInfo{
                        inputs: []inputInfo{
                                {0, 576460752303423488}, // CR
                        },
-                       outputs: []regMask{
-                               1073731576, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
+                       outputs: []outputInfo{
+                               {0, 1073731576}, // R3 R4 R5 R6 R7 R8 R9 R10 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29
                        },
                },
        },
index 53fc3ec06f9a6952b744f8a41778df09c9c068ce..2bee7c19167de36eb5747d5530277be6c8d1fc9f 100644 (file)
@@ -333,10 +333,10 @@ func (s *regAllocState) assignReg(r register, v *Value, c *Value) {
        s.f.setHome(c, &s.registers[r])
 }
 
-// allocReg chooses a register for v from the set of registers in mask.
+// allocReg chooses a register from the set of registers in mask.
 // If there is no unused register, a Value will be kicked out of
 // a register to make room.
-func (s *regAllocState) allocReg(v *Value, mask regMask) register {
+func (s *regAllocState) allocReg(mask regMask) register {
        mask &= s.allocatable
        mask &^= s.nospill
        if mask == 0 {
@@ -401,7 +401,7 @@ func (s *regAllocState) allocValToReg(v *Value, mask regMask, nospill bool, line
        }
 
        // Allocate a register.
-       r := s.allocReg(v, mask)
+       r := s.allocReg(mask)
 
        // Allocate v to the new register.
        var c *Value
@@ -471,7 +471,7 @@ func (s *regAllocState) init(f *Func) {
        }
 
        // Figure out which registers we're allowed to use.
-       s.allocatable = s.f.Config.gpRegMask | s.f.Config.fpRegMask | s.f.Config.flagRegMask
+       s.allocatable = s.f.Config.gpRegMask | s.f.Config.fpRegMask
        s.allocatable &^= 1 << s.SPReg
        s.allocatable &^= 1 << s.SBReg
        if s.f.Config.hasGReg {
@@ -499,11 +499,13 @@ func (s *regAllocState) init(f *Func) {
        s.orig = make([]*Value, f.NumValues())
        for _, b := range f.Blocks {
                for _, v := range b.Values {
-                       if !v.Type.IsMemory() && !v.Type.IsVoid() && !v.Type.IsFlags() {
+                       if !v.Type.IsMemory() && !v.Type.IsVoid() && !v.Type.IsFlags() && !v.Type.IsTuple() {
                                s.values[v.ID].needReg = true
                                s.values[v.ID].rematerializeable = v.rematerializeable()
                                s.orig[v.ID] = v
                        }
+                       // Note: needReg is false for values returning Tuple types.
+                       // Instead, we mark the corresponding Selects as needReg.
                }
        }
        s.computeLive()
@@ -947,6 +949,7 @@ func (s *regAllocState) regalloc(f *Func) {
                        if s.f.pass.debug > regDebug {
                                fmt.Printf("  processing %s\n", v.LongString())
                        }
+                       regspec := opcodeTable[v.Op].reg
                        if v.Op == OpPhi {
                                f.Fatalf("phi %s not at start of block", v)
                        }
@@ -962,6 +965,18 @@ func (s *regAllocState) regalloc(f *Func) {
                                s.advanceUses(v)
                                continue
                        }
+                       if v.Op == OpSelect0 || v.Op == OpSelect1 {
+                               if s.values[v.ID].needReg {
+                                       var i = 0
+                                       if v.Op == OpSelect1 {
+                                               i = 1
+                                       }
+                                       s.assignReg(register(s.f.getHome(v.Args[0].ID).(LocPair)[i].(*Register).Num), v, v)
+                               }
+                               b.Values = append(b.Values, v)
+                               s.advanceUses(v)
+                               goto issueSpill
+                       }
                        if v.Op == OpGetG && s.f.Config.hasGReg {
                                // use hardware g register
                                if s.regs[s.GReg].v != nil {
@@ -970,17 +985,7 @@ func (s *regAllocState) regalloc(f *Func) {
                                s.assignReg(s.GReg, v, v)
                                b.Values = append(b.Values, v)
                                s.advanceUses(v)
-                               // spill unconditionally, will be deleted if never used
-                               spill := b.NewValue1(v.Line, OpStoreReg, v.Type, v)
-                               s.setOrig(spill, v)
-                               s.values[v.ID].spill = spill
-                               s.values[v.ID].spillUsed = false
-                               if loop != nil {
-                                       loop.spills = append(loop.spills, v)
-                                       nSpillsInner++
-                               }
-                               nSpills++
-                               continue
+                               goto issueSpill
                        }
                        if v.Op == OpArg {
                                // Args are "pre-spilled" values. We don't allocate
@@ -1009,7 +1014,6 @@ func (s *regAllocState) regalloc(f *Func) {
                                b.Values = append(b.Values, v)
                                continue
                        }
-                       regspec := opcodeTable[v.Op].reg
                        if len(regspec.inputs) == 0 && len(regspec.outputs) == 0 {
                                // No register allocation required (or none specified yet)
                                s.freeRegs(regspec.clobbers)
@@ -1167,49 +1171,73 @@ func (s *regAllocState) regalloc(f *Func) {
                        // Dump any registers which will be clobbered
                        s.freeRegs(regspec.clobbers)
 
-                       // Pick register for output.
-                       if s.values[v.ID].needReg {
-                               mask := regspec.outputs[0] & s.allocatable
-                               if opcodeTable[v.Op].resultInArg0 {
-                                       if !opcodeTable[v.Op].commutative {
-                                               // Output must use the same register as input 0.
-                                               r := register(s.f.getHome(args[0].ID).(*Register).Num)
-                                               mask = regMask(1) << r
-                                       } else {
-                                               // Output must use the same register as input 0 or 1.
-                                               r0 := register(s.f.getHome(args[0].ID).(*Register).Num)
-                                               r1 := register(s.f.getHome(args[1].ID).(*Register).Num)
-                                               // Check r0 and r1 for desired output register.
-                                               found := false
-                                               for _, r := range dinfo[idx].out {
-                                                       if (r == r0 || r == r1) && (mask&^s.used)>>r&1 != 0 {
-                                                               mask = regMask(1) << r
-                                                               found = true
-                                                               if r == r1 {
-                                                                       args[0], args[1] = args[1], args[0]
+                       // Pick registers for outputs.
+                       {
+                               outRegs := [2]register{noRegister, noRegister}
+                               var used regMask
+                               for _, out := range regspec.outputs {
+                                       mask := out.regs & s.allocatable &^ used
+                                       if mask == 0 {
+                                               continue
+                                       }
+                                       if opcodeTable[v.Op].resultInArg0 && out.idx == len(regspec.outputs)-1 {
+                                               if !opcodeTable[v.Op].commutative {
+                                                       // Output must use the same register as input 0.
+                                                       r := register(s.f.getHome(args[0].ID).(*Register).Num)
+                                                       mask = regMask(1) << r
+                                               } else {
+                                                       // Output must use the same register as input 0 or 1.
+                                                       r0 := register(s.f.getHome(args[0].ID).(*Register).Num)
+                                                       r1 := register(s.f.getHome(args[1].ID).(*Register).Num)
+                                                       // Check r0 and r1 for desired output register.
+                                                       found := false
+                                                       for _, r := range dinfo[idx].out {
+                                                               if (r == r0 || r == r1) && (mask&^s.used)>>r&1 != 0 {
+                                                                       mask = regMask(1) << r
+                                                                       found = true
+                                                                       if r == r1 {
+                                                                               args[0], args[1] = args[1], args[0]
+                                                                       }
+                                                                       break
                                                                }
-                                                               break
+                                                       }
+                                                       if !found {
+                                                               // Neither are desired, pick r0.
+                                                               mask = regMask(1) << r0
                                                        }
                                                }
-                                               if !found {
-                                                       // Neither are desired, pick r0.
-                                                       mask = regMask(1) << r0
+                                       }
+                                       for _, r := range dinfo[idx].out {
+                                               if r != noRegister && (mask&^s.used)>>r&1 != 0 {
+                                                       // Desired register is allowed and unused.
+                                                       mask = regMask(1) << r
+                                                       break
                                                }
                                        }
-                               }
-                               for _, r := range dinfo[idx].out {
-                                       if r != noRegister && (mask&^s.used)>>r&1 != 0 {
-                                               // Desired register is allowed and unused.
-                                               mask = regMask(1) << r
-                                               break
+                                       // Avoid registers we're saving for other values.
+                                       if mask&^desired.avoid != 0 {
+                                               mask &^= desired.avoid
+                                       }
+                                       r := s.allocReg(mask)
+                                       outRegs[out.idx] = r
+                                       used |= regMask(1) << r
+                               }
+                               // Record register choices
+                               if v.Type.IsTuple() {
+                                       var outLocs LocPair
+                                       if r := outRegs[0]; r != noRegister {
+                                               outLocs[0] = &s.registers[r]
+                                       }
+                                       if r := outRegs[1]; r != noRegister {
+                                               outLocs[1] = &s.registers[r]
+                                       }
+                                       s.f.setHome(v, outLocs)
+                                       // Note that subsequent SelectX instructions will do the assignReg calls.
+                               } else {
+                                       if r := outRegs[0]; r != noRegister {
+                                               s.assignReg(r, v, v)
                                        }
                                }
-                               // Avoid registers we're saving for other values.
-                               if mask&^desired.avoid != 0 {
-                                       mask &^= desired.avoid
-                               }
-                               r := s.allocReg(v, mask)
-                               s.assignReg(r, v, v)
                        }
 
                        // Issue the Value itself.
@@ -1228,6 +1256,7 @@ func (s *regAllocState) regalloc(f *Func) {
                        //     f()
                        // }
                        // It would be good to have both spill and restore inside the IF.
+               issueSpill:
                        if s.values[v.ID].needReg {
                                spill := b.NewValue1(v.Line, OpStoreReg, v.Type, v)
                                s.setOrig(spill, v)
@@ -1246,9 +1275,10 @@ func (s *regAllocState) regalloc(f *Func) {
                        if s.f.pass.debug > regDebug {
                                fmt.Printf("  processing control %s\n", v.LongString())
                        }
-                       // TODO: regspec for block control values, instead of using
-                       // register set from the control op's output.
-                       s.allocValToReg(v, opcodeTable[v.Op].reg.outputs[0], false, b.Line)
+                       // We assume that a control input can be passed in any
+                       // type-compatible register. If this turns out not to be true,
+                       // we'll need to introduce a regspec for a block's control value.
+                       s.allocValToReg(v, s.compatRegs(v.Type), false, b.Line)
                        // Remove this use from the uses list.
                        vi := &s.values[v.ID]
                        u := vi.uses
@@ -2065,6 +2095,8 @@ func (e *edgeState) findRegFor(typ Type) Location {
        return nil
 }
 
+// rematerializeable reports whether the register allocator should recompute
+// a value instead of spilling/restoring it.
 func (v *Value) rematerializeable() bool {
        if !opcodeTable[v.Op].rematerializeable {
                return false
index 7e7e088c0b40e93684a10e9b73b701a60f2c554c..59b44973deecfe4ef5ae638082f96ffade03fd9d 100644 (file)
@@ -22,6 +22,10 @@ func rewriteValue386(v *Value, config *Config) bool {
                return rewriteValue386_OpAdd32(v, config)
        case OpAdd32F:
                return rewriteValue386_OpAdd32F(v, config)
+       case OpAdd32carry:
+               return rewriteValue386_OpAdd32carry(v, config)
+       case OpAdd32withcarry:
+               return rewriteValue386_OpAdd32withcarry(v, config)
        case OpAdd64F:
                return rewriteValue386_OpAdd64F(v, config)
        case OpAdd8:
@@ -1116,6 +1120,38 @@ func rewriteValue386_OpAdd32F(v *Value, config *Config) bool {
                return true
        }
 }
+func rewriteValue386_OpAdd32carry(v *Value, config *Config) bool {
+       b := v.Block
+       _ = b
+       // match: (Add32carry x y)
+       // cond:
+       // result: (ADDLcarry x y)
+       for {
+               x := v.Args[0]
+               y := v.Args[1]
+               v.reset(Op386ADDLcarry)
+               v.AddArg(x)
+               v.AddArg(y)
+               return true
+       }
+}
+func rewriteValue386_OpAdd32withcarry(v *Value, config *Config) bool {
+       b := v.Block
+       _ = b
+       // match: (Add32withcarry x y c)
+       // cond:
+       // result: (ADCL x y c)
+       for {
+               x := v.Args[0]
+               y := v.Args[1]
+               c := v.Args[2]
+               v.reset(Op386ADCL)
+               v.AddArg(x)
+               v.AddArg(y)
+               v.AddArg(c)
+               return true
+       }
+}
 func rewriteValue386_OpAdd64F(v *Value, config *Config) bool {
        b := v.Block
        _ = b
index c9be4a772093608c88c24f3b79676396567532d8..87c27285c643bf587f86bc6dae95e3898615e13f 100644 (file)
@@ -654,10 +654,6 @@ func rewriteValueARM(v *Value, config *Config) bool {
                return rewriteValueARM_OpARMSUBshiftRL(v, config)
        case OpARMSUBshiftRLreg:
                return rewriteValueARM_OpARMSUBshiftRLreg(v, config)
-       case OpSelect0:
-               return rewriteValueARM_OpSelect0(v, config)
-       case OpSelect1:
-               return rewriteValueARM_OpSelect1(v, config)
        case OpSignExt16to32:
                return rewriteValueARM_OpSignExt16to32(v, config)
        case OpSignExt8to16:
@@ -15554,50 +15550,6 @@ func rewriteValueARM_OpARMSUBshiftRLreg(v *Value, config *Config) bool {
        }
        return false
 }
-func rewriteValueARM_OpSelect0(v *Value, config *Config) bool {
-       b := v.Block
-       _ = b
-       // match: (Select0 <t> x)
-       // cond: t.IsFlags()
-       // result: (Carry x)
-       for {
-               t := v.Type
-               x := v.Args[0]
-               if !(t.IsFlags()) {
-                       break
-               }
-               v.reset(OpARMCarry)
-               v.AddArg(x)
-               return true
-       }
-       // match: (Select0 <t> x)
-       // cond: !t.IsFlags()
-       // result: (LoweredSelect0 x)
-       for {
-               t := v.Type
-               x := v.Args[0]
-               if !(!t.IsFlags()) {
-                       break
-               }
-               v.reset(OpARMLoweredSelect0)
-               v.AddArg(x)
-               return true
-       }
-       return false
-}
-func rewriteValueARM_OpSelect1(v *Value, config *Config) bool {
-       b := v.Block
-       _ = b
-       // match: (Select1 x)
-       // cond:
-       // result: (LoweredSelect1 x)
-       for {
-               x := v.Args[0]
-               v.reset(OpARMLoweredSelect1)
-               v.AddArg(x)
-               return true
-       }
-}
 func rewriteValueARM_OpSignExt16to32(v *Value, config *Config) bool {
        b := v.Block
        _ = b
index 856ee2461799c9391a5de52f5a805f71233be054..4fa5f613f13ddc513dab9dba0524f29c846113b0 100644 (file)
@@ -45,21 +45,6 @@ func (h ValHeap) Less(i, j int) bool {
        if c := sx - sy; c != 0 {
                return c > 0 // higher score comes later.
        }
-       if sx == ScoreReadTuple {
-               // both are tuple-reading ops
-               // if they read same tuple, flag-reading op comes earlier
-               if x.Args[0] == y.Args[0] {
-                       if x.Op == OpARMCarry || x.Op == OpARMLoweredSelect0 { //TODO: abstract this condition?
-                               return false
-                       } else {
-                               return true
-                       }
-               }
-               // if they read different tuples, order them as
-               // tuple-generating order to avoid interleaving
-               x = x.Args[0]
-               y = y.Args[0]
-       }
        if x.Line != y.Line { // Favor in-order line stepping
                return x.Line > y.Line
        }
@@ -119,7 +104,7 @@ func schedule(f *Func) {
                                // reduce register pressure. It also helps make sure
                                // VARDEF ops are scheduled before the corresponding LEA.
                                score[v.ID] = ScoreMemory
-                       case v.Op == OpARMCarry || v.Op == OpARMLoweredSelect0 || v.Op == OpARMLoweredSelect1:
+                       case v.Op == OpSelect0 || v.Op == OpSelect1:
                                // Schedule the pseudo-op of reading part of a tuple
                                // immediately after the tuple-generating op, since
                                // this value is already live. This also removes its
@@ -226,12 +211,12 @@ func schedule(f *Func) {
                        // Do not emit tuple-reading ops until we're ready to emit the tuple-generating op.
                        //TODO: maybe remove ReadTuple score above, if it does not help on performance
                        switch {
-                       case v.Op == OpARMCarry || v.Op == OpARMLoweredSelect0:
+                       case v.Op == OpSelect0:
                                if tuples[v.Args[0].ID] == nil {
                                        tuples[v.Args[0].ID] = make([]*Value, 2)
                                }
                                tuples[v.Args[0].ID][0] = v
-                       case v.Op == OpARMLoweredSelect1:
+                       case v.Op == OpSelect1:
                                if tuples[v.Args[0].ID] == nil {
                                        tuples[v.Args[0].ID] = make([]*Value, 2)
                                }
index 56857b4a265ce9ebdc524cd4c171f374705c6b28..b722f108e5869ce459e3eeb1a38b417585a854c4 100644 (file)
@@ -64,7 +64,7 @@ func tighten(f *Func) {
                                        continue
                                default:
                                }
-                               if v.Op.isTupleSelector() {
+                               if v.Op == OpSelect0 || v.Op == OpSelect1 {
                                        // tuple selector must stay with tuple generator
                                        continue
                                }
index efd2e566f8e4fe11f9974ac0e7d366cfe0bf97c5..1c3baaa39197bb7966d0d9c3dc336f74a51505cc 100644 (file)
@@ -165,6 +165,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
                        p.To.Type = obj.TYPE_REG
                        p.To.Reg = r
                }
+
        // 2-address opcode arithmetic
        case ssa.Op386SUBL,
                ssa.Op386MULL,
@@ -176,13 +177,22 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
                ssa.Op386SARL, ssa.Op386SARW, ssa.Op386SARB,
                ssa.Op386ADDSS, ssa.Op386ADDSD, ssa.Op386SUBSS, ssa.Op386SUBSD,
                ssa.Op386MULSS, ssa.Op386MULSD, ssa.Op386DIVSS, ssa.Op386DIVSD,
-               ssa.Op386PXOR:
+               ssa.Op386PXOR,
+               ssa.Op386ADCL:
                r := gc.SSARegNum(v)
                if r != gc.SSARegNum(v.Args[0]) {
                        v.Fatalf("input[0] and output not in same register %s", v.LongString())
                }
                opregreg(v.Op.Asm(), r, gc.SSARegNum(v.Args[1]))
 
+       case ssa.Op386ADDLcarry:
+               // output 0 is carry, output 1 is the low 32 bits.
+               r := gc.SSARegNum1(v)
+               if r != gc.SSARegNum(v.Args[0]) {
+                       v.Fatalf("input[0] and output[1] not in same register %s", v.LongString())
+               }
+               opregreg(v.Op.Asm(), r, gc.SSARegNum(v.Args[1]))
+
        case ssa.Op386DIVL, ssa.Op386DIVW,
                ssa.Op386DIVLU, ssa.Op386DIVWU,
                ssa.Op386MODL, ssa.Op386MODW,
@@ -716,7 +726,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
                p.From.Reg = gc.SSARegNum(v.Args[0])
                p.To.Type = obj.TYPE_REG
                p.To.Reg = gc.SSARegNum(v)
-       case ssa.OpSP, ssa.OpSB:
+       case ssa.OpSP, ssa.OpSB, ssa.OpSelect0, ssa.OpSelect1:
                // nothing to do
        case ssa.Op386SETEQ, ssa.Op386SETNE,
                ssa.Op386SETL, ssa.Op386SETLE,