Safer, more readable, shorter.
Change-Id: I5cf1f438e20a3df45fc43cc5c870a533f7c524bf
Reviewed-on: https://go-review.googlesource.com/10517
Reviewed-by: Minux Ma <minux@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
//
// The table is formatted for 8-space tabs.
var progtable = [x86.ALAST]obj.ProgInfo{
- obj.ATYPE: {gc.Pseudo | gc.Skip, 0, 0, 0},
- obj.ATEXT: {gc.Pseudo, 0, 0, 0},
- obj.AFUNCDATA: {gc.Pseudo, 0, 0, 0},
- obj.APCDATA: {gc.Pseudo, 0, 0, 0},
- obj.AUNDEF: {gc.Break, 0, 0, 0},
- obj.AUSEFIELD: {gc.OK, 0, 0, 0},
- obj.ACHECKNIL: {gc.LeftRead, 0, 0, 0},
- obj.AVARDEF: {gc.Pseudo | gc.RightWrite, 0, 0, 0},
- obj.AVARKILL: {gc.Pseudo | gc.RightWrite, 0, 0, 0},
+ obj.ATYPE: {Flags: gc.Pseudo | gc.Skip},
+ obj.ATEXT: {Flags: gc.Pseudo},
+ obj.AFUNCDATA: {Flags: gc.Pseudo},
+ obj.APCDATA: {Flags: gc.Pseudo},
+ obj.AUNDEF: {Flags: gc.Break},
+ obj.AUSEFIELD: {Flags: gc.OK},
+ obj.ACHECKNIL: {Flags: gc.LeftRead},
+ obj.AVARDEF: {Flags: gc.Pseudo | gc.RightWrite},
+ obj.AVARKILL: {Flags: gc.Pseudo | gc.RightWrite},
// NOP is an internal no-op that also stands
// for USED and SET annotations, not the Intel opcode.
- obj.ANOP: {gc.LeftRead | gc.RightWrite, 0, 0, 0},
- x86.AADCL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.AADCQ: {gc.SizeQ | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.AADCW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.AADDB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AADDL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AADDW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AADDQ: {gc.SizeQ | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AADDSD: {gc.SizeD | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.AADDSS: {gc.SizeF | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.AANDB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AANDL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AANDQ: {gc.SizeQ | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AANDW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- obj.ACALL: {gc.RightAddr | gc.Call | gc.KillCarry, 0, 0, 0},
- x86.ACDQ: {gc.OK, AX, AX | DX, 0},
- x86.ACQO: {gc.OK, AX, AX | DX, 0},
- x86.ACWD: {gc.OK, AX, AX | DX, 0},
- x86.ACLD: {gc.OK, 0, 0, 0},
- x86.ASTD: {gc.OK, 0, 0, 0},
- x86.ACMPB: {gc.SizeB | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ACMPL: {gc.SizeL | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ACMPQ: {gc.SizeQ | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ACMPW: {gc.SizeW | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ACOMISD: {gc.SizeD | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ACOMISS: {gc.SizeF | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ACVTSD2SL: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTSD2SQ: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTSD2SS: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTSL2SD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTSL2SS: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTSQ2SD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTSQ2SS: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTSS2SD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTSS2SL: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTSS2SQ: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTTSD2SL: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTTSD2SQ: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTTSS2SL: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTTSS2SQ: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ADECB: {gc.SizeB | RightRdwr, 0, 0, 0},
- x86.ADECL: {gc.SizeL | RightRdwr, 0, 0, 0},
- x86.ADECQ: {gc.SizeQ | RightRdwr, 0, 0, 0},
- x86.ADECW: {gc.SizeW | RightRdwr, 0, 0, 0},
- x86.ADIVB: {gc.SizeB | gc.LeftRead | gc.SetCarry, AX, AX, 0},
- x86.ADIVL: {gc.SizeL | gc.LeftRead | gc.SetCarry, AX | DX, AX | DX, 0},
- x86.ADIVQ: {gc.SizeQ | gc.LeftRead | gc.SetCarry, AX | DX, AX | DX, 0},
- x86.ADIVW: {gc.SizeW | gc.LeftRead | gc.SetCarry, AX | DX, AX | DX, 0},
- x86.ADIVSD: {gc.SizeD | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.ADIVSS: {gc.SizeF | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.AIDIVB: {gc.SizeB | gc.LeftRead | gc.SetCarry, AX, AX, 0},
- x86.AIDIVL: {gc.SizeL | gc.LeftRead | gc.SetCarry, AX | DX, AX | DX, 0},
- x86.AIDIVQ: {gc.SizeQ | gc.LeftRead | gc.SetCarry, AX | DX, AX | DX, 0},
- x86.AIDIVW: {gc.SizeW | gc.LeftRead | gc.SetCarry, AX | DX, AX | DX, 0},
- x86.AIMULB: {gc.SizeB | gc.LeftRead | gc.SetCarry, AX, AX, 0},
- x86.AIMULL: {gc.SizeL | gc.LeftRead | gc.ImulAXDX | gc.SetCarry, 0, 0, 0},
- x86.AIMULQ: {gc.SizeQ | gc.LeftRead | gc.ImulAXDX | gc.SetCarry, 0, 0, 0},
- x86.AIMULW: {gc.SizeW | gc.LeftRead | gc.ImulAXDX | gc.SetCarry, 0, 0, 0},
- x86.AINCB: {gc.SizeB | RightRdwr, 0, 0, 0},
- x86.AINCL: {gc.SizeL | RightRdwr, 0, 0, 0},
- x86.AINCQ: {gc.SizeQ | RightRdwr, 0, 0, 0},
- x86.AINCW: {gc.SizeW | RightRdwr, 0, 0, 0},
- x86.AJCC: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJCS: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJEQ: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJGE: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJGT: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJHI: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJLE: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJLS: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJLT: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJMI: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJNE: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJOC: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJOS: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJPC: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJPL: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJPS: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- obj.AJMP: {gc.Jump | gc.Break | gc.KillCarry, 0, 0, 0},
- x86.ALEAL: {gc.LeftAddr | gc.RightWrite, 0, 0, 0},
- x86.ALEAQ: {gc.LeftAddr | gc.RightWrite, 0, 0, 0},
- x86.AMOVBLSX: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVBLZX: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVBQSX: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVBQZX: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVBWSX: {gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVBWZX: {gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVLQSX: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVLQZX: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVWLSX: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVWLZX: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVWQSX: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVWQZX: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVQL: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVB: {gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- x86.AMOVL: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- x86.AMOVQ: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- x86.AMOVW: {gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- x86.AMOVSB: {gc.OK, DI | SI, DI | SI, 0},
- x86.AMOVSL: {gc.OK, DI | SI, DI | SI, 0},
- x86.AMOVSQ: {gc.OK, DI | SI, DI | SI, 0},
- x86.AMOVSW: {gc.OK, DI | SI, DI | SI, 0},
- obj.ADUFFCOPY: {gc.OK, DI | SI, DI | SI | CX, 0},
- x86.AMOVSD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- x86.AMOVSS: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
+ obj.ANOP: {Flags: gc.LeftRead | gc.RightWrite},
+ x86.AADCL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry},
+ x86.AADCQ: {Flags: gc.SizeQ | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry},
+ x86.AADCW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry},
+ x86.AADDB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AADDL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AADDW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AADDQ: {Flags: gc.SizeQ | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AADDSD: {Flags: gc.SizeD | gc.LeftRead | RightRdwr},
+ x86.AADDSS: {Flags: gc.SizeF | gc.LeftRead | RightRdwr},
+ x86.AANDB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AANDL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AANDQ: {Flags: gc.SizeQ | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AANDW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry},
+ obj.ACALL: {Flags: gc.RightAddr | gc.Call | gc.KillCarry},
+ x86.ACDQ: {Flags: gc.OK, Reguse: AX, Regset: AX | DX},
+ x86.ACQO: {Flags: gc.OK, Reguse: AX, Regset: AX | DX},
+ x86.ACWD: {Flags: gc.OK, Reguse: AX, Regset: AX | DX},
+ x86.ACLD: {Flags: gc.OK},
+ x86.ASTD: {Flags: gc.OK},
+ x86.ACMPB: {Flags: gc.SizeB | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ACMPL: {Flags: gc.SizeL | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ACMPQ: {Flags: gc.SizeQ | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ACMPW: {Flags: gc.SizeW | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ACOMISD: {Flags: gc.SizeD | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ACOMISS: {Flags: gc.SizeF | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ACVTSD2SL: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTSD2SQ: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTSD2SS: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTSL2SD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTSL2SS: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTSQ2SD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTSQ2SS: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTSS2SD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTSS2SL: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTSS2SQ: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTTSD2SL: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTTSD2SQ: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTTSS2SL: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTTSS2SQ: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ADECB: {Flags: gc.SizeB | RightRdwr},
+ x86.ADECL: {Flags: gc.SizeL | RightRdwr},
+ x86.ADECQ: {Flags: gc.SizeQ | RightRdwr},
+ x86.ADECW: {Flags: gc.SizeW | RightRdwr},
+ x86.ADIVB: {Flags: gc.SizeB | gc.LeftRead | gc.SetCarry, Reguse: AX, Regset: AX},
+ x86.ADIVL: {Flags: gc.SizeL | gc.LeftRead | gc.SetCarry, Reguse: AX | DX, Regset: AX | DX},
+ x86.ADIVQ: {Flags: gc.SizeQ | gc.LeftRead | gc.SetCarry, Reguse: AX | DX, Regset: AX | DX},
+ x86.ADIVW: {Flags: gc.SizeW | gc.LeftRead | gc.SetCarry, Reguse: AX | DX, Regset: AX | DX},
+ x86.ADIVSD: {Flags: gc.SizeD | gc.LeftRead | RightRdwr},
+ x86.ADIVSS: {Flags: gc.SizeF | gc.LeftRead | RightRdwr},
+ x86.AIDIVB: {Flags: gc.SizeB | gc.LeftRead | gc.SetCarry, Reguse: AX, Regset: AX},
+ x86.AIDIVL: {Flags: gc.SizeL | gc.LeftRead | gc.SetCarry, Reguse: AX | DX, Regset: AX | DX},
+ x86.AIDIVQ: {Flags: gc.SizeQ | gc.LeftRead | gc.SetCarry, Reguse: AX | DX, Regset: AX | DX},
+ x86.AIDIVW: {Flags: gc.SizeW | gc.LeftRead | gc.SetCarry, Reguse: AX | DX, Regset: AX | DX},
+ x86.AIMULB: {Flags: gc.SizeB | gc.LeftRead | gc.SetCarry, Reguse: AX, Regset: AX},
+ x86.AIMULL: {Flags: gc.SizeL | gc.LeftRead | gc.ImulAXDX | gc.SetCarry},
+ x86.AIMULQ: {Flags: gc.SizeQ | gc.LeftRead | gc.ImulAXDX | gc.SetCarry},
+ x86.AIMULW: {Flags: gc.SizeW | gc.LeftRead | gc.ImulAXDX | gc.SetCarry},
+ x86.AINCB: {Flags: gc.SizeB | RightRdwr},
+ x86.AINCL: {Flags: gc.SizeL | RightRdwr},
+ x86.AINCQ: {Flags: gc.SizeQ | RightRdwr},
+ x86.AINCW: {Flags: gc.SizeW | RightRdwr},
+ x86.AJCC: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJCS: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJEQ: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJGE: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJGT: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJHI: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJLE: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJLS: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJLT: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJMI: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJNE: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJOC: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJOS: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJPC: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJPL: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJPS: {Flags: gc.Cjmp | gc.UseCarry},
+ obj.AJMP: {Flags: gc.Jump | gc.Break | gc.KillCarry},
+ x86.ALEAL: {Flags: gc.LeftAddr | gc.RightWrite},
+ x86.ALEAQ: {Flags: gc.LeftAddr | gc.RightWrite},
+ x86.AMOVBLSX: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVBLZX: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVBQSX: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVBQZX: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVBWSX: {Flags: gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVBWZX: {Flags: gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVLQSX: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVLQZX: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVWLSX: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVWLZX: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVWQSX: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVWQZX: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVQL: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVB: {Flags: gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move},
+ x86.AMOVL: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move},
+ x86.AMOVQ: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Move},
+ x86.AMOVW: {Flags: gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move},
+ x86.AMOVSB: {Flags: gc.OK, Reguse: DI | SI, Regset: DI | SI},
+ x86.AMOVSL: {Flags: gc.OK, Reguse: DI | SI, Regset: DI | SI},
+ x86.AMOVSQ: {Flags: gc.OK, Reguse: DI | SI, Regset: DI | SI},
+ x86.AMOVSW: {Flags: gc.OK, Reguse: DI | SI, Regset: DI | SI},
+ obj.ADUFFCOPY: {Flags: gc.OK, Reguse: DI | SI, Regset: DI | SI | CX},
+ x86.AMOVSD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Move},
+ x86.AMOVSS: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Move},
// We use MOVAPD as a faster synonym for MOVSD.
- x86.AMOVAPD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- x86.AMULB: {gc.SizeB | gc.LeftRead | gc.SetCarry, AX, AX, 0},
- x86.AMULL: {gc.SizeL | gc.LeftRead | gc.SetCarry, AX, AX | DX, 0},
- x86.AMULQ: {gc.SizeQ | gc.LeftRead | gc.SetCarry, AX, AX | DX, 0},
- x86.AMULW: {gc.SizeW | gc.LeftRead | gc.SetCarry, AX, AX | DX, 0},
- x86.AMULSD: {gc.SizeD | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.AMULSS: {gc.SizeF | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.ANEGB: {gc.SizeB | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.ANEGL: {gc.SizeL | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.ANEGQ: {gc.SizeQ | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.ANEGW: {gc.SizeW | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.ANOTB: {gc.SizeB | RightRdwr, 0, 0, 0},
- x86.ANOTL: {gc.SizeL | RightRdwr, 0, 0, 0},
- x86.ANOTQ: {gc.SizeQ | RightRdwr, 0, 0, 0},
- x86.ANOTW: {gc.SizeW | RightRdwr, 0, 0, 0},
- x86.AORB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AORL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AORQ: {gc.SizeQ | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AORW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.APOPQ: {gc.SizeQ | gc.RightWrite, 0, 0, 0},
- x86.APUSHQ: {gc.SizeQ | gc.LeftRead, 0, 0, 0},
- x86.ARCLB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ARCLL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ARCLQ: {gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ARCLW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ARCRB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ARCRL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ARCRQ: {gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ARCRW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.AREP: {gc.OK, CX, CX, 0},
- x86.AREPN: {gc.OK, CX, CX, 0},
- obj.ARET: {gc.Break | gc.KillCarry, 0, 0, 0},
- x86.AROLB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.AROLL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.AROLQ: {gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.AROLW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ARORB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ARORL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ARORQ: {gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ARORW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASALB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASALL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASALQ: {gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASALW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASARB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASARL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASARQ: {gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASARW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASBBB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ASBBL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ASBBQ: {gc.SizeQ | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ASBBW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ASETCC: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASETCS: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASETEQ: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASETGE: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASETGT: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASETHI: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASETLE: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASETLS: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASETLT: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASETMI: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASETNE: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASETOC: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASETOS: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASETPC: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASETPL: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASETPS: {gc.SizeB | gc.RightWrite | gc.UseCarry, 0, 0, 0},
- x86.ASHLB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASHLL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASHLQ: {gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASHLW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASHRB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASHRL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASHRQ: {gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASHRW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASQRTSD: {gc.SizeD | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.ASTOSB: {gc.OK, AX | DI, DI, 0},
- x86.ASTOSL: {gc.OK, AX | DI, DI, 0},
- x86.ASTOSQ: {gc.OK, AX | DI, DI, 0},
- x86.ASTOSW: {gc.OK, AX | DI, DI, 0},
- obj.ADUFFZERO: {gc.OK, AX | DI, DI, 0},
- x86.ASUBB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.ASUBL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.ASUBQ: {gc.SizeQ | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.ASUBW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.ASUBSD: {gc.SizeD | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.ASUBSS: {gc.SizeF | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.ATESTB: {gc.SizeB | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ATESTL: {gc.SizeL | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ATESTQ: {gc.SizeQ | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ATESTW: {gc.SizeW | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.AUCOMISD: {gc.SizeD | gc.LeftRead | gc.RightRead, 0, 0, 0},
- x86.AUCOMISS: {gc.SizeF | gc.LeftRead | gc.RightRead, 0, 0, 0},
- x86.AXCHGB: {gc.SizeB | LeftRdwr | RightRdwr, 0, 0, 0},
- x86.AXCHGL: {gc.SizeL | LeftRdwr | RightRdwr, 0, 0, 0},
- x86.AXCHGQ: {gc.SizeQ | LeftRdwr | RightRdwr, 0, 0, 0},
- x86.AXCHGW: {gc.SizeW | LeftRdwr | RightRdwr, 0, 0, 0},
- x86.AXORB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AXORL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AXORQ: {gc.SizeQ | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AXORW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
+ x86.AMOVAPD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Move},
+ x86.AMULB: {Flags: gc.SizeB | gc.LeftRead | gc.SetCarry, Reguse: AX, Regset: AX},
+ x86.AMULL: {Flags: gc.SizeL | gc.LeftRead | gc.SetCarry, Reguse: AX, Regset: AX | DX},
+ x86.AMULQ: {Flags: gc.SizeQ | gc.LeftRead | gc.SetCarry, Reguse: AX, Regset: AX | DX},
+ x86.AMULW: {Flags: gc.SizeW | gc.LeftRead | gc.SetCarry, Reguse: AX, Regset: AX | DX},
+ x86.AMULSD: {Flags: gc.SizeD | gc.LeftRead | RightRdwr},
+ x86.AMULSS: {Flags: gc.SizeF | gc.LeftRead | RightRdwr},
+ x86.ANEGB: {Flags: gc.SizeB | RightRdwr | gc.SetCarry},
+ x86.ANEGL: {Flags: gc.SizeL | RightRdwr | gc.SetCarry},
+ x86.ANEGQ: {Flags: gc.SizeQ | RightRdwr | gc.SetCarry},
+ x86.ANEGW: {Flags: gc.SizeW | RightRdwr | gc.SetCarry},
+ x86.ANOTB: {Flags: gc.SizeB | RightRdwr},
+ x86.ANOTL: {Flags: gc.SizeL | RightRdwr},
+ x86.ANOTQ: {Flags: gc.SizeQ | RightRdwr},
+ x86.ANOTW: {Flags: gc.SizeW | RightRdwr},
+ x86.AORB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AORL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AORQ: {Flags: gc.SizeQ | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AORW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.APOPQ: {Flags: gc.SizeQ | gc.RightWrite},
+ x86.APUSHQ: {Flags: gc.SizeQ | gc.LeftRead},
+ x86.ARCLB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry},
+ x86.ARCLL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry},
+ x86.ARCLQ: {Flags: gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry},
+ x86.ARCLW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry},
+ x86.ARCRB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry},
+ x86.ARCRL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry},
+ x86.ARCRQ: {Flags: gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry},
+ x86.ARCRW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry},
+ x86.AREP: {Flags: gc.OK, Reguse: CX, Regset: CX},
+ x86.AREPN: {Flags: gc.OK, Reguse: CX, Regset: CX},
+ obj.ARET: {Flags: gc.Break | gc.KillCarry},
+ x86.AROLB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.AROLL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.AROLQ: {Flags: gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.AROLW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ARORB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ARORL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ARORQ: {Flags: gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ARORW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASALB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASALL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASALQ: {Flags: gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASALW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASARB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASARL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASARQ: {Flags: gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASARW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASBBB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry},
+ x86.ASBBL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry},
+ x86.ASBBQ: {Flags: gc.SizeQ | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry},
+ x86.ASBBW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry},
+ x86.ASETCC: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASETCS: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASETEQ: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASETGE: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASETGT: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASETHI: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASETLE: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASETLS: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASETLT: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASETMI: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASETNE: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASETOC: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASETOS: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASETPC: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASETPL: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASETPS: {Flags: gc.SizeB | gc.RightWrite | gc.UseCarry},
+ x86.ASHLB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASHLL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASHLQ: {Flags: gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASHLW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASHRB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASHRL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASHRQ: {Flags: gc.SizeQ | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASHRW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASQRTSD: {Flags: gc.SizeD | gc.LeftRead | RightRdwr},
+ x86.ASTOSB: {Flags: gc.OK, Reguse: AX | DI, Regset: DI},
+ x86.ASTOSL: {Flags: gc.OK, Reguse: AX | DI, Regset: DI},
+ x86.ASTOSQ: {Flags: gc.OK, Reguse: AX | DI, Regset: DI},
+ x86.ASTOSW: {Flags: gc.OK, Reguse: AX | DI, Regset: DI},
+ obj.ADUFFZERO: {Flags: gc.OK, Reguse: AX | DI, Regset: DI},
+ x86.ASUBB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.ASUBL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.ASUBQ: {Flags: gc.SizeQ | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.ASUBW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.ASUBSD: {Flags: gc.SizeD | gc.LeftRead | RightRdwr},
+ x86.ASUBSS: {Flags: gc.SizeF | gc.LeftRead | RightRdwr},
+ x86.ATESTB: {Flags: gc.SizeB | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ATESTL: {Flags: gc.SizeL | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ATESTQ: {Flags: gc.SizeQ | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ATESTW: {Flags: gc.SizeW | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.AUCOMISD: {Flags: gc.SizeD | gc.LeftRead | gc.RightRead},
+ x86.AUCOMISS: {Flags: gc.SizeF | gc.LeftRead | gc.RightRead},
+ x86.AXCHGB: {Flags: gc.SizeB | LeftRdwr | RightRdwr},
+ x86.AXCHGL: {Flags: gc.SizeL | LeftRdwr | RightRdwr},
+ x86.AXCHGQ: {Flags: gc.SizeQ | LeftRdwr | RightRdwr},
+ x86.AXCHGW: {Flags: gc.SizeW | LeftRdwr | RightRdwr},
+ x86.AXORB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AXORL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AXORQ: {Flags: gc.SizeQ | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AXORW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry},
}
func progflags(p *obj.Prog) uint32 {
//
// The table is formatted for 8-space tabs.
var progtable = [arm.ALAST]obj.ProgInfo{
- obj.ATYPE: {gc.Pseudo | gc.Skip, 0, 0, 0},
- obj.ATEXT: {gc.Pseudo, 0, 0, 0},
- obj.AFUNCDATA: {gc.Pseudo, 0, 0, 0},
- obj.APCDATA: {gc.Pseudo, 0, 0, 0},
- obj.AUNDEF: {gc.Break, 0, 0, 0},
- obj.AUSEFIELD: {gc.OK, 0, 0, 0},
- obj.ACHECKNIL: {gc.LeftRead, 0, 0, 0},
- obj.AVARDEF: {gc.Pseudo | gc.RightWrite, 0, 0, 0},
- obj.AVARKILL: {gc.Pseudo | gc.RightWrite, 0, 0, 0},
+ obj.ATYPE: {Flags: gc.Pseudo | gc.Skip},
+ obj.ATEXT: {Flags: gc.Pseudo},
+ obj.AFUNCDATA: {Flags: gc.Pseudo},
+ obj.APCDATA: {Flags: gc.Pseudo},
+ obj.AUNDEF: {Flags: gc.Break},
+ obj.AUSEFIELD: {Flags: gc.OK},
+ obj.ACHECKNIL: {Flags: gc.LeftRead},
+ obj.AVARDEF: {Flags: gc.Pseudo | gc.RightWrite},
+ obj.AVARKILL: {Flags: gc.Pseudo | gc.RightWrite},
// NOP is an internal no-op that also stands
// for USED and SET annotations, not the Intel opcode.
- obj.ANOP: {gc.LeftRead | gc.RightWrite, 0, 0, 0},
+ obj.ANOP: {Flags: gc.LeftRead | gc.RightWrite},
// Integer.
- arm.AADC: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.AADD: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.AAND: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.ABIC: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.ACMN: {gc.SizeL | gc.LeftRead | gc.RightRead, 0, 0, 0},
- arm.ACMP: {gc.SizeL | gc.LeftRead | gc.RightRead, 0, 0, 0},
- arm.ADIVU: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.ADIV: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.AEOR: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.AMODU: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.AMOD: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.AMULALU: {gc.SizeL | gc.LeftRead | gc.RegRead | RightRdwr, 0, 0, 0},
- arm.AMULAL: {gc.SizeL | gc.LeftRead | gc.RegRead | RightRdwr, 0, 0, 0},
- arm.AMULA: {gc.SizeL | gc.LeftRead | gc.RegRead | RightRdwr, 0, 0, 0},
- arm.AMULU: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.AMUL: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.AMULL: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.AMULLU: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.AMVN: {gc.SizeL | gc.LeftRead | gc.RightWrite, 0, 0, 0},
- arm.AORR: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.ARSB: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.ARSC: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.ASBC: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.ASLL: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.ASRA: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.ASRL: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.ASUB: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm.ATEQ: {gc.SizeL | gc.LeftRead | gc.RightRead, 0, 0, 0},
- arm.ATST: {gc.SizeL | gc.LeftRead | gc.RightRead, 0, 0, 0},
+ arm.AADC: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.AADD: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.AAND: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.ABIC: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.ACMN: {Flags: gc.SizeL | gc.LeftRead | gc.RightRead},
+ arm.ACMP: {Flags: gc.SizeL | gc.LeftRead | gc.RightRead},
+ arm.ADIVU: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.ADIV: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.AEOR: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.AMODU: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.AMOD: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.AMULALU: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | RightRdwr},
+ arm.AMULAL: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | RightRdwr},
+ arm.AMULA: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | RightRdwr},
+ arm.AMULU: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.AMUL: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.AMULL: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.AMULLU: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.AMVN: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite},
+ arm.AORR: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.ARSB: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.ARSC: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.ASBC: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.ASLL: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.ASRA: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.ASRL: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.ASUB: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm.ATEQ: {Flags: gc.SizeL | gc.LeftRead | gc.RightRead},
+ arm.ATST: {Flags: gc.SizeL | gc.LeftRead | gc.RightRead},
// Floating point.
- arm.AADDD: {gc.SizeD | gc.LeftRead | RightRdwr, 0, 0, 0},
- arm.AADDF: {gc.SizeF | gc.LeftRead | RightRdwr, 0, 0, 0},
- arm.ACMPD: {gc.SizeD | gc.LeftRead | gc.RightRead, 0, 0, 0},
- arm.ACMPF: {gc.SizeF | gc.LeftRead | gc.RightRead, 0, 0, 0},
- arm.ADIVD: {gc.SizeD | gc.LeftRead | RightRdwr, 0, 0, 0},
- arm.ADIVF: {gc.SizeF | gc.LeftRead | RightRdwr, 0, 0, 0},
- arm.AMULD: {gc.SizeD | gc.LeftRead | RightRdwr, 0, 0, 0},
- arm.AMULF: {gc.SizeF | gc.LeftRead | RightRdwr, 0, 0, 0},
- arm.ASUBD: {gc.SizeD | gc.LeftRead | RightRdwr, 0, 0, 0},
- arm.ASUBF: {gc.SizeF | gc.LeftRead | RightRdwr, 0, 0, 0},
- arm.ASQRTD: {gc.SizeD | gc.LeftRead | RightRdwr, 0, 0, 0},
+ arm.AADDD: {Flags: gc.SizeD | gc.LeftRead | RightRdwr},
+ arm.AADDF: {Flags: gc.SizeF | gc.LeftRead | RightRdwr},
+ arm.ACMPD: {Flags: gc.SizeD | gc.LeftRead | gc.RightRead},
+ arm.ACMPF: {Flags: gc.SizeF | gc.LeftRead | gc.RightRead},
+ arm.ADIVD: {Flags: gc.SizeD | gc.LeftRead | RightRdwr},
+ arm.ADIVF: {Flags: gc.SizeF | gc.LeftRead | RightRdwr},
+ arm.AMULD: {Flags: gc.SizeD | gc.LeftRead | RightRdwr},
+ arm.AMULF: {Flags: gc.SizeF | gc.LeftRead | RightRdwr},
+ arm.ASUBD: {Flags: gc.SizeD | gc.LeftRead | RightRdwr},
+ arm.ASUBF: {Flags: gc.SizeF | gc.LeftRead | RightRdwr},
+ arm.ASQRTD: {Flags: gc.SizeD | gc.LeftRead | RightRdwr},
// Conversions.
- arm.AMOVWD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm.AMOVWF: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm.AMOVDF: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm.AMOVDW: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm.AMOVFD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm.AMOVFW: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
+ arm.AMOVWD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm.AMOVWF: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm.AMOVDF: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm.AMOVDW: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm.AMOVFD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm.AMOVFW: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
// Moves.
- arm.AMOVB: {gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- arm.AMOVD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- arm.AMOVF: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- arm.AMOVH: {gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- arm.AMOVW: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
+ arm.AMOVB: {Flags: gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move},
+ arm.AMOVD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Move},
+ arm.AMOVF: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Move},
+ arm.AMOVH: {Flags: gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move},
+ arm.AMOVW: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move},
// In addtion, duffzero reads R0,R1 and writes R1. This fact is
// encoded in peep.c
- obj.ADUFFZERO: {gc.Call, 0, 0, 0},
+ obj.ADUFFZERO: {Flags: gc.Call},
// In addtion, duffcopy reads R1,R2 and writes R0,R1,R2. This fact is
// encoded in peep.c
- obj.ADUFFCOPY: {gc.Call, 0, 0, 0},
+ obj.ADUFFCOPY: {Flags: gc.Call},
// These should be split into the two different conversions instead
// of overloading the one.
- arm.AMOVBS: {gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm.AMOVBU: {gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm.AMOVHS: {gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm.AMOVHU: {gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
+ arm.AMOVBS: {Flags: gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm.AMOVBU: {Flags: gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm.AMOVHS: {Flags: gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm.AMOVHU: {Flags: gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Conv},
// Jumps.
- arm.AB: {gc.Jump | gc.Break, 0, 0, 0},
- arm.ABL: {gc.Call, 0, 0, 0},
- arm.ABEQ: {gc.Cjmp, 0, 0, 0},
- arm.ABNE: {gc.Cjmp, 0, 0, 0},
- arm.ABCS: {gc.Cjmp, 0, 0, 0},
- arm.ABHS: {gc.Cjmp, 0, 0, 0},
- arm.ABCC: {gc.Cjmp, 0, 0, 0},
- arm.ABLO: {gc.Cjmp, 0, 0, 0},
- arm.ABMI: {gc.Cjmp, 0, 0, 0},
- arm.ABPL: {gc.Cjmp, 0, 0, 0},
- arm.ABVS: {gc.Cjmp, 0, 0, 0},
- arm.ABVC: {gc.Cjmp, 0, 0, 0},
- arm.ABHI: {gc.Cjmp, 0, 0, 0},
- arm.ABLS: {gc.Cjmp, 0, 0, 0},
- arm.ABGE: {gc.Cjmp, 0, 0, 0},
- arm.ABLT: {gc.Cjmp, 0, 0, 0},
- arm.ABGT: {gc.Cjmp, 0, 0, 0},
- arm.ABLE: {gc.Cjmp, 0, 0, 0},
- obj.ARET: {gc.Break, 0, 0, 0},
+ arm.AB: {Flags: gc.Jump | gc.Break},
+ arm.ABL: {Flags: gc.Call},
+ arm.ABEQ: {Flags: gc.Cjmp},
+ arm.ABNE: {Flags: gc.Cjmp},
+ arm.ABCS: {Flags: gc.Cjmp},
+ arm.ABHS: {Flags: gc.Cjmp},
+ arm.ABCC: {Flags: gc.Cjmp},
+ arm.ABLO: {Flags: gc.Cjmp},
+ arm.ABMI: {Flags: gc.Cjmp},
+ arm.ABPL: {Flags: gc.Cjmp},
+ arm.ABVS: {Flags: gc.Cjmp},
+ arm.ABVC: {Flags: gc.Cjmp},
+ arm.ABHI: {Flags: gc.Cjmp},
+ arm.ABLS: {Flags: gc.Cjmp},
+ arm.ABGE: {Flags: gc.Cjmp},
+ arm.ABLT: {Flags: gc.Cjmp},
+ arm.ABGT: {Flags: gc.Cjmp},
+ arm.ABLE: {Flags: gc.Cjmp},
+ obj.ARET: {Flags: gc.Break},
}
func proginfo(p *obj.Prog) {
//
// The table is formatted for 8-space tabs.
var progtable = [arm64.ALAST]obj.ProgInfo{
- obj.ATYPE: {gc.Pseudo | gc.Skip, 0, 0, 0},
- obj.ATEXT: {gc.Pseudo, 0, 0, 0},
- obj.AFUNCDATA: {gc.Pseudo, 0, 0, 0},
- obj.APCDATA: {gc.Pseudo, 0, 0, 0},
- obj.AUNDEF: {gc.Break, 0, 0, 0},
- obj.AUSEFIELD: {gc.OK, 0, 0, 0},
- obj.ACHECKNIL: {gc.LeftRead, 0, 0, 0},
- obj.AVARDEF: {gc.Pseudo | gc.RightWrite, 0, 0, 0},
- obj.AVARKILL: {gc.Pseudo | gc.RightWrite, 0, 0, 0},
+ obj.ATYPE: {Flags: gc.Pseudo | gc.Skip},
+ obj.ATEXT: {Flags: gc.Pseudo},
+ obj.AFUNCDATA: {Flags: gc.Pseudo},
+ obj.APCDATA: {Flags: gc.Pseudo},
+ obj.AUNDEF: {Flags: gc.Break},
+ obj.AUSEFIELD: {Flags: gc.OK},
+ obj.ACHECKNIL: {Flags: gc.LeftRead},
+ obj.AVARDEF: {Flags: gc.Pseudo | gc.RightWrite},
+ obj.AVARKILL: {Flags: gc.Pseudo | gc.RightWrite},
// NOP is an internal no-op that also stands
// for USED and SET annotations, not the Power opcode.
- obj.ANOP: {gc.LeftRead | gc.RightWrite, 0, 0, 0},
- arm64.AHINT: {gc.OK, 0, 0, 0},
+ obj.ANOP: {Flags: gc.LeftRead | gc.RightWrite},
+ arm64.AHINT: {Flags: gc.OK},
// Integer
- arm64.AADD: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.ASUB: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.ANEG: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AAND: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AORR: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AEOR: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AMUL: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.ASMULL: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AUMULL: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.ASMULH: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AUMULH: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.ASDIV: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AUDIV: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.ALSL: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.ALSR: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AASR: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.ACMP: {gc.SizeQ | gc.LeftRead | gc.RegRead, 0, 0, 0},
+ arm64.AADD: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.ASUB: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.ANEG: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AAND: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AORR: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AEOR: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AMUL: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.ASMULL: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AUMULL: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.ASMULH: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AUMULH: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.ASDIV: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AUDIV: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.ALSL: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.ALSR: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AASR: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.ACMP: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead},
// Floating point.
- arm64.AFADDD: {gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AFADDS: {gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AFSUBD: {gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AFSUBS: {gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AFNEGD: {gc.SizeD | gc.LeftRead | gc.RightWrite, 0, 0, 0},
- arm64.AFNEGS: {gc.SizeF | gc.LeftRead | gc.RightWrite, 0, 0, 0},
- arm64.AFSQRTD: {gc.SizeD | gc.LeftRead | gc.RightWrite, 0, 0, 0},
- arm64.AFMULD: {gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AFMULS: {gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AFDIVD: {gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AFDIVS: {gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- arm64.AFCMPD: {gc.SizeD | gc.LeftRead | gc.RegRead, 0, 0, 0},
- arm64.AFCMPS: {gc.SizeF | gc.LeftRead | gc.RegRead, 0, 0, 0},
+ arm64.AFADDD: {Flags: gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AFADDS: {Flags: gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AFSUBD: {Flags: gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AFSUBS: {Flags: gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AFNEGD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite},
+ arm64.AFNEGS: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite},
+ arm64.AFSQRTD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite},
+ arm64.AFMULD: {Flags: gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AFMULS: {Flags: gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AFDIVD: {Flags: gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AFDIVS: {Flags: gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ arm64.AFCMPD: {Flags: gc.SizeD | gc.LeftRead | gc.RegRead},
+ arm64.AFCMPS: {Flags: gc.SizeF | gc.LeftRead | gc.RegRead},
// float -> integer
- arm64.AFCVTZSD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm64.AFCVTZSS: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm64.AFCVTZSDW: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm64.AFCVTZSSW: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm64.AFCVTZUD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm64.AFCVTZUS: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm64.AFCVTZUDW: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm64.AFCVTZUSW: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
+ arm64.AFCVTZSD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm64.AFCVTZSS: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm64.AFCVTZSDW: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm64.AFCVTZSSW: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm64.AFCVTZUD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm64.AFCVTZUS: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm64.AFCVTZUDW: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm64.AFCVTZUSW: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv},
// float -> float
- arm64.AFCVTSD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm64.AFCVTDS: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
+ arm64.AFCVTSD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm64.AFCVTDS: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv},
// integer -> float
- arm64.ASCVTFD: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm64.ASCVTFS: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm64.ASCVTFWD: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm64.ASCVTFWS: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm64.AUCVTFD: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm64.AUCVTFS: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm64.AUCVTFWD: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- arm64.AUCVTFWS: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
+ arm64.ASCVTFD: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm64.ASCVTFS: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm64.ASCVTFWD: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm64.ASCVTFWS: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm64.AUCVTFD: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm64.AUCVTFS: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm64.AUCVTFWD: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ arm64.AUCVTFWS: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
// Moves
- arm64.AMOVB: {gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv, 0, 0, 0},
- arm64.AMOVBU: {gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv, 0, 0, 0},
- arm64.AMOVH: {gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv, 0, 0, 0},
- arm64.AMOVHU: {gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv, 0, 0, 0},
- arm64.AMOVW: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv, 0, 0, 0},
- arm64.AMOVWU: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv, 0, 0, 0},
- arm64.AMOVD: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- arm64.AFMOVS: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv, 0, 0, 0},
- arm64.AFMOVD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
+ arm64.AMOVB: {Flags: gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv},
+ arm64.AMOVBU: {Flags: gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv},
+ arm64.AMOVH: {Flags: gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv},
+ arm64.AMOVHU: {Flags: gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv},
+ arm64.AMOVW: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv},
+ arm64.AMOVWU: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv},
+ arm64.AMOVD: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Move},
+ arm64.AFMOVS: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv},
+ arm64.AFMOVD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Move},
// Jumps
- arm64.AB: {gc.Jump | gc.Break, 0, 0, 0},
- arm64.ABL: {gc.Call, 0, 0, 0},
- arm64.ABEQ: {gc.Cjmp, 0, 0, 0},
- arm64.ABNE: {gc.Cjmp, 0, 0, 0},
- arm64.ABGE: {gc.Cjmp, 0, 0, 0},
- arm64.ABLT: {gc.Cjmp, 0, 0, 0},
- arm64.ABGT: {gc.Cjmp, 0, 0, 0},
- arm64.ABLE: {gc.Cjmp, 0, 0, 0},
- arm64.ABLO: {gc.Cjmp, 0, 0, 0},
- arm64.ABLS: {gc.Cjmp, 0, 0, 0},
- arm64.ABHI: {gc.Cjmp, 0, 0, 0},
- arm64.ABHS: {gc.Cjmp, 0, 0, 0},
- arm64.ACBZ: {gc.Cjmp, 0, 0, 0},
- arm64.ACBNZ: {gc.Cjmp, 0, 0, 0},
- obj.ARET: {gc.Break, 0, 0, 0},
- obj.ADUFFZERO: {gc.Call, 0, 0, 0},
- obj.ADUFFCOPY: {gc.Call, 0, 0, 0},
+ arm64.AB: {Flags: gc.Jump | gc.Break},
+ arm64.ABL: {Flags: gc.Call},
+ arm64.ABEQ: {Flags: gc.Cjmp},
+ arm64.ABNE: {Flags: gc.Cjmp},
+ arm64.ABGE: {Flags: gc.Cjmp},
+ arm64.ABLT: {Flags: gc.Cjmp},
+ arm64.ABGT: {Flags: gc.Cjmp},
+ arm64.ABLE: {Flags: gc.Cjmp},
+ arm64.ABLO: {Flags: gc.Cjmp},
+ arm64.ABLS: {Flags: gc.Cjmp},
+ arm64.ABHI: {Flags: gc.Cjmp},
+ arm64.ABHS: {Flags: gc.Cjmp},
+ arm64.ACBZ: {Flags: gc.Cjmp},
+ arm64.ACBNZ: {Flags: gc.Cjmp},
+ obj.ARET: {Flags: gc.Break},
+ obj.ADUFFZERO: {Flags: gc.Call},
+ obj.ADUFFCOPY: {Flags: gc.Call},
}
func proginfo(p *obj.Prog) {
//
// The table is formatted for 8-space tabs.
var progtable = [ppc64.ALAST]obj.ProgInfo{
- obj.ATYPE: {gc.Pseudo | gc.Skip, 0, 0, 0},
- obj.ATEXT: {gc.Pseudo, 0, 0, 0},
- obj.AFUNCDATA: {gc.Pseudo, 0, 0, 0},
- obj.APCDATA: {gc.Pseudo, 0, 0, 0},
- obj.AUNDEF: {gc.Break, 0, 0, 0},
- obj.AUSEFIELD: {gc.OK, 0, 0, 0},
- obj.ACHECKNIL: {gc.LeftRead, 0, 0, 0},
- obj.AVARDEF: {gc.Pseudo | gc.RightWrite, 0, 0, 0},
- obj.AVARKILL: {gc.Pseudo | gc.RightWrite, 0, 0, 0},
+ obj.ATYPE: {Flags: gc.Pseudo | gc.Skip},
+ obj.ATEXT: {Flags: gc.Pseudo},
+ obj.AFUNCDATA: {Flags: gc.Pseudo},
+ obj.APCDATA: {Flags: gc.Pseudo},
+ obj.AUNDEF: {Flags: gc.Break},
+ obj.AUSEFIELD: {Flags: gc.OK},
+ obj.ACHECKNIL: {Flags: gc.LeftRead},
+ obj.AVARDEF: {Flags: gc.Pseudo | gc.RightWrite},
+ obj.AVARKILL: {Flags: gc.Pseudo | gc.RightWrite},
// NOP is an internal no-op that also stands
// for USED and SET annotations, not the Power opcode.
- obj.ANOP: {gc.LeftRead | gc.RightWrite, 0, 0, 0},
+ obj.ANOP: {Flags: gc.LeftRead | gc.RightWrite},
// Integer
- ppc64.AADD: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.ASUB: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.ANEG: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AAND: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AOR: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AXOR: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AMULLD: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AMULLW: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AMULHD: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AMULHDU: {gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.ADIVD: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.ADIVDU: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.ASLD: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.ASRD: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.ASRAD: {gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.ACMP: {gc.SizeQ | gc.LeftRead | gc.RightRead, 0, 0, 0},
- ppc64.ACMPU: {gc.SizeQ | gc.LeftRead | gc.RightRead, 0, 0, 0},
- ppc64.ATD: {gc.SizeQ | gc.RightRead, 0, 0, 0},
+ ppc64.AADD: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.ASUB: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.ANEG: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AAND: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AOR: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AXOR: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AMULLD: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AMULLW: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AMULHD: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AMULHDU: {Flags: gc.SizeL | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.ADIVD: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.ADIVDU: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.ASLD: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.ASRD: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.ASRAD: {Flags: gc.SizeQ | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.ACMP: {Flags: gc.SizeQ | gc.LeftRead | gc.RightRead},
+ ppc64.ACMPU: {Flags: gc.SizeQ | gc.LeftRead | gc.RightRead},
+ ppc64.ATD: {Flags: gc.SizeQ | gc.RightRead},
// Floating point.
- ppc64.AFADD: {gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AFADDS: {gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AFSUB: {gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AFSUBS: {gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AFMUL: {gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AFMULS: {gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AFDIV: {gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AFDIVS: {gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AFCTIDZ: {gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AFCFID: {gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite, 0, 0, 0},
- ppc64.AFCMPU: {gc.SizeD | gc.LeftRead | gc.RightRead, 0, 0, 0},
- ppc64.AFRSP: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
+ ppc64.AFADD: {Flags: gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AFADDS: {Flags: gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AFSUB: {Flags: gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AFSUBS: {Flags: gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AFMUL: {Flags: gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AFMULS: {Flags: gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AFDIV: {Flags: gc.SizeD | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AFDIVS: {Flags: gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AFCTIDZ: {Flags: gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AFCFID: {Flags: gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite},
+ ppc64.AFCMPU: {Flags: gc.SizeD | gc.LeftRead | gc.RightRead},
+ ppc64.AFRSP: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv},
// Moves
- ppc64.AMOVB: {gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv, 0, 0, 0},
- ppc64.AMOVBU: {gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv | gc.PostInc, 0, 0, 0},
- ppc64.AMOVBZ: {gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv, 0, 0, 0},
- ppc64.AMOVH: {gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv, 0, 0, 0},
- ppc64.AMOVHU: {gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv | gc.PostInc, 0, 0, 0},
- ppc64.AMOVHZ: {gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv, 0, 0, 0},
- ppc64.AMOVW: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv, 0, 0, 0},
+ ppc64.AMOVB: {Flags: gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv},
+ ppc64.AMOVBU: {Flags: gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv | gc.PostInc},
+ ppc64.AMOVBZ: {Flags: gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv},
+ ppc64.AMOVH: {Flags: gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv},
+ ppc64.AMOVHU: {Flags: gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv | gc.PostInc},
+ ppc64.AMOVHZ: {Flags: gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv},
+ ppc64.AMOVW: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv},
// there is no AMOVWU.
- ppc64.AMOVWZU: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv | gc.PostInc, 0, 0, 0},
- ppc64.AMOVWZ: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv, 0, 0, 0},
- ppc64.AMOVD: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- ppc64.AMOVDU: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Move | gc.PostInc, 0, 0, 0},
- ppc64.AFMOVS: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv, 0, 0, 0},
- ppc64.AFMOVD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
+ ppc64.AMOVWZU: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv | gc.PostInc},
+ ppc64.AMOVWZ: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv},
+ ppc64.AMOVD: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Move},
+ ppc64.AMOVDU: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.Move | gc.PostInc},
+ ppc64.AFMOVS: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv},
+ ppc64.AFMOVD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Move},
// Jumps
- ppc64.ABR: {gc.Jump | gc.Break, 0, 0, 0},
- ppc64.ABL: {gc.Call, 0, 0, 0},
- ppc64.ABEQ: {gc.Cjmp, 0, 0, 0},
- ppc64.ABNE: {gc.Cjmp, 0, 0, 0},
- ppc64.ABGE: {gc.Cjmp, 0, 0, 0},
- ppc64.ABLT: {gc.Cjmp, 0, 0, 0},
- ppc64.ABGT: {gc.Cjmp, 0, 0, 0},
- ppc64.ABLE: {gc.Cjmp, 0, 0, 0},
- obj.ARET: {gc.Break, 0, 0, 0},
- obj.ADUFFZERO: {gc.Call, 0, 0, 0},
- obj.ADUFFCOPY: {gc.Call, 0, 0, 0},
+ ppc64.ABR: {Flags: gc.Jump | gc.Break},
+ ppc64.ABL: {Flags: gc.Call},
+ ppc64.ABEQ: {Flags: gc.Cjmp},
+ ppc64.ABNE: {Flags: gc.Cjmp},
+ ppc64.ABGE: {Flags: gc.Cjmp},
+ ppc64.ABLT: {Flags: gc.Cjmp},
+ ppc64.ABGT: {Flags: gc.Cjmp},
+ ppc64.ABLE: {Flags: gc.Cjmp},
+ obj.ARET: {Flags: gc.Break},
+ obj.ADUFFZERO: {Flags: gc.Call},
+ obj.ADUFFCOPY: {Flags: gc.Call},
}
var initproginfo_initialized int
//
// The table is formatted for 8-space tabs.
var progtable = [x86.ALAST]obj.ProgInfo{
- obj.ATYPE: {gc.Pseudo | gc.Skip, 0, 0, 0},
- obj.ATEXT: {gc.Pseudo, 0, 0, 0},
- obj.AFUNCDATA: {gc.Pseudo, 0, 0, 0},
- obj.APCDATA: {gc.Pseudo, 0, 0, 0},
- obj.AUNDEF: {gc.Break, 0, 0, 0},
- obj.AUSEFIELD: {gc.OK, 0, 0, 0},
- obj.ACHECKNIL: {gc.LeftRead, 0, 0, 0},
- obj.AVARDEF: {gc.Pseudo | gc.RightWrite, 0, 0, 0},
- obj.AVARKILL: {gc.Pseudo | gc.RightWrite, 0, 0, 0},
+ obj.ATYPE: {Flags: gc.Pseudo | gc.Skip},
+ obj.ATEXT: {Flags: gc.Pseudo},
+ obj.AFUNCDATA: {Flags: gc.Pseudo},
+ obj.APCDATA: {Flags: gc.Pseudo},
+ obj.AUNDEF: {Flags: gc.Break},
+ obj.AUSEFIELD: {Flags: gc.OK},
+ obj.ACHECKNIL: {Flags: gc.LeftRead},
+ obj.AVARDEF: {Flags: gc.Pseudo | gc.RightWrite},
+ obj.AVARKILL: {Flags: gc.Pseudo | gc.RightWrite},
// NOP is an internal no-op that also stands
// for USED and SET annotations, not the Intel opcode.
- obj.ANOP: {gc.LeftRead | gc.RightWrite, 0, 0, 0},
- x86.AADCL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.AADCW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.AADDB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AADDL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AADDW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AADDSD: {gc.SizeD | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.AADDSS: {gc.SizeF | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.AANDB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AANDL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AANDW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- obj.ACALL: {gc.RightAddr | gc.Call | gc.KillCarry, 0, 0, 0},
- x86.ACDQ: {gc.OK, AX, AX | DX, 0},
- x86.ACWD: {gc.OK, AX, AX | DX, 0},
- x86.ACLD: {gc.OK, 0, 0, 0},
- x86.ASTD: {gc.OK, 0, 0, 0},
- x86.ACMPB: {gc.SizeB | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ACMPL: {gc.SizeL | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ACMPW: {gc.SizeW | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ACOMISD: {gc.SizeD | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ACOMISS: {gc.SizeF | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ACVTSD2SL: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTSD2SS: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTSL2SD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTSL2SS: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTSS2SD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTSS2SL: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTTSD2SL: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ACVTTSS2SL: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.ADECB: {gc.SizeB | RightRdwr, 0, 0, 0},
- x86.ADECL: {gc.SizeL | RightRdwr, 0, 0, 0},
- x86.ADECW: {gc.SizeW | RightRdwr, 0, 0, 0},
- x86.ADIVB: {gc.SizeB | gc.LeftRead | gc.SetCarry, AX, AX, 0},
- x86.ADIVL: {gc.SizeL | gc.LeftRead | gc.SetCarry, AX | DX, AX | DX, 0},
- x86.ADIVW: {gc.SizeW | gc.LeftRead | gc.SetCarry, AX | DX, AX | DX, 0},
- x86.ADIVSD: {gc.SizeD | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.ADIVSS: {gc.SizeF | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.AFLDCW: {gc.SizeW | gc.LeftAddr, 0, 0, 0},
- x86.AFSTCW: {gc.SizeW | gc.RightAddr, 0, 0, 0},
- x86.AFSTSW: {gc.SizeW | gc.RightAddr | gc.RightWrite, 0, 0, 0},
- x86.AFADDD: {gc.SizeD | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFADDDP: {gc.SizeD | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFADDF: {gc.SizeF | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFCOMD: {gc.SizeD | gc.LeftAddr | gc.RightRead, 0, 0, 0},
- x86.AFCOMDP: {gc.SizeD | gc.LeftAddr | gc.RightRead, 0, 0, 0},
- x86.AFCOMDPP: {gc.SizeD | gc.LeftAddr | gc.RightRead, 0, 0, 0},
- x86.AFCOMF: {gc.SizeF | gc.LeftAddr | gc.RightRead, 0, 0, 0},
- x86.AFCOMFP: {gc.SizeF | gc.LeftAddr | gc.RightRead, 0, 0, 0},
- x86.AFUCOMIP: {gc.SizeF | gc.LeftAddr | gc.RightRead, 0, 0, 0},
- x86.AFCHS: {gc.SizeD | RightRdwr, 0, 0, 0}, // also SizeF
+ obj.ANOP: {Flags: gc.LeftRead | gc.RightWrite},
+ x86.AADCL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry},
+ x86.AADCW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry},
+ x86.AADDB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AADDL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AADDW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AADDSD: {Flags: gc.SizeD | gc.LeftRead | RightRdwr},
+ x86.AADDSS: {Flags: gc.SizeF | gc.LeftRead | RightRdwr},
+ x86.AANDB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AANDL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AANDW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry},
+ obj.ACALL: {Flags: gc.RightAddr | gc.Call | gc.KillCarry},
+ x86.ACDQ: {Flags: gc.OK, Reguse: AX, Regset: AX | DX},
+ x86.ACWD: {Flags: gc.OK, Reguse: AX, Regset: AX | DX},
+ x86.ACLD: {Flags: gc.OK},
+ x86.ASTD: {Flags: gc.OK},
+ x86.ACMPB: {Flags: gc.SizeB | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ACMPL: {Flags: gc.SizeL | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ACMPW: {Flags: gc.SizeW | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ACOMISD: {Flags: gc.SizeD | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ACOMISS: {Flags: gc.SizeF | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ACVTSD2SL: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTSD2SS: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTSL2SD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTSL2SS: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTSS2SD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTSS2SL: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTTSD2SL: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ACVTTSS2SL: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.ADECB: {Flags: gc.SizeB | RightRdwr},
+ x86.ADECL: {Flags: gc.SizeL | RightRdwr},
+ x86.ADECW: {Flags: gc.SizeW | RightRdwr},
+ x86.ADIVB: {Flags: gc.SizeB | gc.LeftRead | gc.SetCarry, Reguse: AX, Regset: AX},
+ x86.ADIVL: {Flags: gc.SizeL | gc.LeftRead | gc.SetCarry, Reguse: AX | DX, Regset: AX | DX},
+ x86.ADIVW: {Flags: gc.SizeW | gc.LeftRead | gc.SetCarry, Reguse: AX | DX, Regset: AX | DX},
+ x86.ADIVSD: {Flags: gc.SizeD | gc.LeftRead | RightRdwr},
+ x86.ADIVSS: {Flags: gc.SizeF | gc.LeftRead | RightRdwr},
+ x86.AFLDCW: {Flags: gc.SizeW | gc.LeftAddr},
+ x86.AFSTCW: {Flags: gc.SizeW | gc.RightAddr},
+ x86.AFSTSW: {Flags: gc.SizeW | gc.RightAddr | gc.RightWrite},
+ x86.AFADDD: {Flags: gc.SizeD | gc.LeftAddr | RightRdwr},
+ x86.AFADDDP: {Flags: gc.SizeD | gc.LeftAddr | RightRdwr},
+ x86.AFADDF: {Flags: gc.SizeF | gc.LeftAddr | RightRdwr},
+ x86.AFCOMD: {Flags: gc.SizeD | gc.LeftAddr | gc.RightRead},
+ x86.AFCOMDP: {Flags: gc.SizeD | gc.LeftAddr | gc.RightRead},
+ x86.AFCOMDPP: {Flags: gc.SizeD | gc.LeftAddr | gc.RightRead},
+ x86.AFCOMF: {Flags: gc.SizeF | gc.LeftAddr | gc.RightRead},
+ x86.AFCOMFP: {Flags: gc.SizeF | gc.LeftAddr | gc.RightRead},
+ x86.AFUCOMIP: {Flags: gc.SizeF | gc.LeftAddr | gc.RightRead},
+ x86.AFCHS: {Flags: gc.SizeD | RightRdwr}, // also SizeF
- x86.AFDIVDP: {gc.SizeD | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFDIVF: {gc.SizeF | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFDIVD: {gc.SizeD | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFDIVRDP: {gc.SizeD | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFDIVRF: {gc.SizeF | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFDIVRD: {gc.SizeD | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFXCHD: {gc.SizeD | LeftRdwr | RightRdwr, 0, 0, 0},
- x86.AFSUBD: {gc.SizeD | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFSUBDP: {gc.SizeD | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFSUBF: {gc.SizeF | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFSUBRD: {gc.SizeD | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFSUBRDP: {gc.SizeD | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFSUBRF: {gc.SizeF | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFMOVD: {gc.SizeD | gc.LeftAddr | gc.RightWrite, 0, 0, 0},
- x86.AFMOVF: {gc.SizeF | gc.LeftAddr | gc.RightWrite, 0, 0, 0},
- x86.AFMOVL: {gc.SizeL | gc.LeftAddr | gc.RightWrite, 0, 0, 0},
- x86.AFMOVW: {gc.SizeW | gc.LeftAddr | gc.RightWrite, 0, 0, 0},
- x86.AFMOVV: {gc.SizeQ | gc.LeftAddr | gc.RightWrite, 0, 0, 0},
+ x86.AFDIVDP: {Flags: gc.SizeD | gc.LeftAddr | RightRdwr},
+ x86.AFDIVF: {Flags: gc.SizeF | gc.LeftAddr | RightRdwr},
+ x86.AFDIVD: {Flags: gc.SizeD | gc.LeftAddr | RightRdwr},
+ x86.AFDIVRDP: {Flags: gc.SizeD | gc.LeftAddr | RightRdwr},
+ x86.AFDIVRF: {Flags: gc.SizeF | gc.LeftAddr | RightRdwr},
+ x86.AFDIVRD: {Flags: gc.SizeD | gc.LeftAddr | RightRdwr},
+ x86.AFXCHD: {Flags: gc.SizeD | LeftRdwr | RightRdwr},
+ x86.AFSUBD: {Flags: gc.SizeD | gc.LeftAddr | RightRdwr},
+ x86.AFSUBDP: {Flags: gc.SizeD | gc.LeftAddr | RightRdwr},
+ x86.AFSUBF: {Flags: gc.SizeF | gc.LeftAddr | RightRdwr},
+ x86.AFSUBRD: {Flags: gc.SizeD | gc.LeftAddr | RightRdwr},
+ x86.AFSUBRDP: {Flags: gc.SizeD | gc.LeftAddr | RightRdwr},
+ x86.AFSUBRF: {Flags: gc.SizeF | gc.LeftAddr | RightRdwr},
+ x86.AFMOVD: {Flags: gc.SizeD | gc.LeftAddr | gc.RightWrite},
+ x86.AFMOVF: {Flags: gc.SizeF | gc.LeftAddr | gc.RightWrite},
+ x86.AFMOVL: {Flags: gc.SizeL | gc.LeftAddr | gc.RightWrite},
+ x86.AFMOVW: {Flags: gc.SizeW | gc.LeftAddr | gc.RightWrite},
+ x86.AFMOVV: {Flags: gc.SizeQ | gc.LeftAddr | gc.RightWrite},
// These instructions are marked as RightAddr
// so that the register optimizer does not try to replace the
// memory references with integer register references.
// But they do not use the previous value at the address, so
// we also mark them RightWrite.
- x86.AFMOVDP: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.RightAddr, 0, 0, 0},
- x86.AFMOVFP: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.RightAddr, 0, 0, 0},
- x86.AFMOVLP: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.RightAddr, 0, 0, 0},
- x86.AFMOVWP: {gc.SizeW | gc.LeftRead | gc.RightWrite | gc.RightAddr, 0, 0, 0},
- x86.AFMOVVP: {gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.RightAddr, 0, 0, 0},
- x86.AFMULD: {gc.SizeD | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFMULDP: {gc.SizeD | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AFMULF: {gc.SizeF | gc.LeftAddr | RightRdwr, 0, 0, 0},
- x86.AIDIVB: {gc.SizeB | gc.LeftRead | gc.SetCarry, AX, AX, 0},
- x86.AIDIVL: {gc.SizeL | gc.LeftRead | gc.SetCarry, AX | DX, AX | DX, 0},
- x86.AIDIVW: {gc.SizeW | gc.LeftRead | gc.SetCarry, AX | DX, AX | DX, 0},
- x86.AIMULB: {gc.SizeB | gc.LeftRead | gc.SetCarry, AX, AX, 0},
- x86.AIMULL: {gc.SizeL | gc.LeftRead | gc.ImulAXDX | gc.SetCarry, 0, 0, 0},
- x86.AIMULW: {gc.SizeW | gc.LeftRead | gc.ImulAXDX | gc.SetCarry, 0, 0, 0},
- x86.AINCB: {gc.SizeB | RightRdwr, 0, 0, 0},
- x86.AINCL: {gc.SizeL | RightRdwr, 0, 0, 0},
- x86.AINCW: {gc.SizeW | RightRdwr, 0, 0, 0},
- x86.AJCC: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJCS: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJEQ: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJGE: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJGT: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJHI: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJLE: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJLS: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJLT: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJMI: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJNE: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJOC: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJOS: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJPC: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJPL: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- x86.AJPS: {gc.Cjmp | gc.UseCarry, 0, 0, 0},
- obj.AJMP: {gc.Jump | gc.Break | gc.KillCarry, 0, 0, 0},
- x86.ALEAL: {gc.LeftAddr | gc.RightWrite, 0, 0, 0},
- x86.AMOVBLSX: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVBLZX: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVBWSX: {gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVBWZX: {gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVWLSX: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVWLZX: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv, 0, 0, 0},
- x86.AMOVB: {gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- x86.AMOVL: {gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- x86.AMOVW: {gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- x86.AMOVSB: {gc.OK, DI | SI, DI | SI, 0},
- x86.AMOVSL: {gc.OK, DI | SI, DI | SI, 0},
- x86.AMOVSW: {gc.OK, DI | SI, DI | SI, 0},
- obj.ADUFFCOPY: {gc.OK, DI | SI, DI | SI | CX, 0},
- x86.AMOVSD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- x86.AMOVSS: {gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
+ x86.AFMOVDP: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.RightAddr},
+ x86.AFMOVFP: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.RightAddr},
+ x86.AFMOVLP: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.RightAddr},
+ x86.AFMOVWP: {Flags: gc.SizeW | gc.LeftRead | gc.RightWrite | gc.RightAddr},
+ x86.AFMOVVP: {Flags: gc.SizeQ | gc.LeftRead | gc.RightWrite | gc.RightAddr},
+ x86.AFMULD: {Flags: gc.SizeD | gc.LeftAddr | RightRdwr},
+ x86.AFMULDP: {Flags: gc.SizeD | gc.LeftAddr | RightRdwr},
+ x86.AFMULF: {Flags: gc.SizeF | gc.LeftAddr | RightRdwr},
+ x86.AIDIVB: {Flags: gc.SizeB | gc.LeftRead | gc.SetCarry, Reguse: AX, Regset: AX},
+ x86.AIDIVL: {Flags: gc.SizeL | gc.LeftRead | gc.SetCarry, Reguse: AX | DX, Regset: AX | DX},
+ x86.AIDIVW: {Flags: gc.SizeW | gc.LeftRead | gc.SetCarry, Reguse: AX | DX, Regset: AX | DX},
+ x86.AIMULB: {Flags: gc.SizeB | gc.LeftRead | gc.SetCarry, Reguse: AX, Regset: AX},
+ x86.AIMULL: {Flags: gc.SizeL | gc.LeftRead | gc.ImulAXDX | gc.SetCarry},
+ x86.AIMULW: {Flags: gc.SizeW | gc.LeftRead | gc.ImulAXDX | gc.SetCarry},
+ x86.AINCB: {Flags: gc.SizeB | RightRdwr},
+ x86.AINCL: {Flags: gc.SizeL | RightRdwr},
+ x86.AINCW: {Flags: gc.SizeW | RightRdwr},
+ x86.AJCC: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJCS: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJEQ: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJGE: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJGT: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJHI: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJLE: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJLS: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJLT: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJMI: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJNE: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJOC: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJOS: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJPC: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJPL: {Flags: gc.Cjmp | gc.UseCarry},
+ x86.AJPS: {Flags: gc.Cjmp | gc.UseCarry},
+ obj.AJMP: {Flags: gc.Jump | gc.Break | gc.KillCarry},
+ x86.ALEAL: {Flags: gc.LeftAddr | gc.RightWrite},
+ x86.AMOVBLSX: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVBLZX: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVBWSX: {Flags: gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVBWZX: {Flags: gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVWLSX: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVWLZX: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Conv},
+ x86.AMOVB: {Flags: gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move},
+ x86.AMOVL: {Flags: gc.SizeL | gc.LeftRead | gc.RightWrite | gc.Move},
+ x86.AMOVW: {Flags: gc.SizeW | gc.LeftRead | gc.RightWrite | gc.Move},
+ x86.AMOVSB: {Flags: gc.OK, Reguse: DI | SI, Regset: DI | SI},
+ x86.AMOVSL: {Flags: gc.OK, Reguse: DI | SI, Regset: DI | SI},
+ x86.AMOVSW: {Flags: gc.OK, Reguse: DI | SI, Regset: DI | SI},
+ obj.ADUFFCOPY: {Flags: gc.OK, Reguse: DI | SI, Regset: DI | SI | CX},
+ x86.AMOVSD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Move},
+ x86.AMOVSS: {Flags: gc.SizeF | gc.LeftRead | gc.RightWrite | gc.Move},
// We use MOVAPD as a faster synonym for MOVSD.
- x86.AMOVAPD: {gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Move, 0, 0, 0},
- x86.AMULB: {gc.SizeB | gc.LeftRead | gc.SetCarry, AX, AX, 0},
- x86.AMULL: {gc.SizeL | gc.LeftRead | gc.SetCarry, AX, AX | DX, 0},
- x86.AMULW: {gc.SizeW | gc.LeftRead | gc.SetCarry, AX, AX | DX, 0},
- x86.AMULSD: {gc.SizeD | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.AMULSS: {gc.SizeF | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.ANEGB: {gc.SizeB | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.ANEGL: {gc.SizeL | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.ANEGW: {gc.SizeW | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.ANOTB: {gc.SizeB | RightRdwr, 0, 0, 0},
- x86.ANOTL: {gc.SizeL | RightRdwr, 0, 0, 0},
- x86.ANOTW: {gc.SizeW | RightRdwr, 0, 0, 0},
- x86.AORB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AORL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AORW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.APOPL: {gc.SizeL | gc.RightWrite, 0, 0, 0},
- x86.APUSHL: {gc.SizeL | gc.LeftRead, 0, 0, 0},
- x86.ARCLB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ARCLL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ARCLW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ARCRB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ARCRL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ARCRW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.AREP: {gc.OK, CX, CX, 0},
- x86.AREPN: {gc.OK, CX, CX, 0},
- obj.ARET: {gc.Break | gc.KillCarry, 0, 0, 0},
- x86.AROLB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.AROLL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.AROLW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ARORB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ARORL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ARORW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASAHF: {gc.OK, AX, AX, 0},
- x86.ASALB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASALL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASALW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASARB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASARL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASARW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASBBB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ASBBL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ASBBW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry, 0, 0, 0},
- x86.ASETCC: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASETCS: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASETEQ: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASETGE: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASETGT: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASETHI: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASETLE: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASETLS: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASETLT: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASETMI: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASETNE: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASETOC: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASETOS: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASETPC: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASETPL: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASETPS: {gc.SizeB | RightRdwr | gc.UseCarry, 0, 0, 0},
- x86.ASHLB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASHLL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASHLW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASHRB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASHRL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASHRW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry, 0, 0, 0},
- x86.ASTOSB: {gc.OK, AX | DI, DI, 0},
- x86.ASTOSL: {gc.OK, AX | DI, DI, 0},
- x86.ASTOSW: {gc.OK, AX | DI, DI, 0},
- obj.ADUFFZERO: {gc.OK, AX | DI, DI, 0},
- x86.ASUBB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.ASUBL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.ASUBW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.ASUBSD: {gc.SizeD | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.ASUBSS: {gc.SizeF | gc.LeftRead | RightRdwr, 0, 0, 0},
- x86.ATESTB: {gc.SizeB | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ATESTL: {gc.SizeL | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.ATESTW: {gc.SizeW | gc.LeftRead | gc.RightRead | gc.SetCarry, 0, 0, 0},
- x86.AUCOMISD: {gc.SizeD | gc.LeftRead | gc.RightRead, 0, 0, 0},
- x86.AUCOMISS: {gc.SizeF | gc.LeftRead | gc.RightRead, 0, 0, 0},
- x86.AXCHGB: {gc.SizeB | LeftRdwr | RightRdwr, 0, 0, 0},
- x86.AXCHGL: {gc.SizeL | LeftRdwr | RightRdwr, 0, 0, 0},
- x86.AXCHGW: {gc.SizeW | LeftRdwr | RightRdwr, 0, 0, 0},
- x86.AXORB: {gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AXORL: {gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
- x86.AXORW: {gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry, 0, 0, 0},
+ x86.AMOVAPD: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Move},
+ x86.AMULB: {Flags: gc.SizeB | gc.LeftRead | gc.SetCarry, Reguse: AX, Regset: AX},
+ x86.AMULL: {Flags: gc.SizeL | gc.LeftRead | gc.SetCarry, Reguse: AX, Regset: AX | DX},
+ x86.AMULW: {Flags: gc.SizeW | gc.LeftRead | gc.SetCarry, Reguse: AX, Regset: AX | DX},
+ x86.AMULSD: {Flags: gc.SizeD | gc.LeftRead | RightRdwr},
+ x86.AMULSS: {Flags: gc.SizeF | gc.LeftRead | RightRdwr},
+ x86.ANEGB: {Flags: gc.SizeB | RightRdwr | gc.SetCarry},
+ x86.ANEGL: {Flags: gc.SizeL | RightRdwr | gc.SetCarry},
+ x86.ANEGW: {Flags: gc.SizeW | RightRdwr | gc.SetCarry},
+ x86.ANOTB: {Flags: gc.SizeB | RightRdwr},
+ x86.ANOTL: {Flags: gc.SizeL | RightRdwr},
+ x86.ANOTW: {Flags: gc.SizeW | RightRdwr},
+ x86.AORB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AORL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AORW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.APOPL: {Flags: gc.SizeL | gc.RightWrite},
+ x86.APUSHL: {Flags: gc.SizeL | gc.LeftRead},
+ x86.ARCLB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry},
+ x86.ARCLL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry},
+ x86.ARCLW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry},
+ x86.ARCRB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry},
+ x86.ARCRL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry},
+ x86.ARCRW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry | gc.UseCarry},
+ x86.AREP: {Flags: gc.OK, Reguse: CX, Regset: CX},
+ x86.AREPN: {Flags: gc.OK, Reguse: CX, Regset: CX},
+ obj.ARET: {Flags: gc.Break | gc.KillCarry},
+ x86.AROLB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.AROLL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.AROLW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ARORB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ARORL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ARORW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASAHF: {Flags: gc.OK, Reguse: AX, Regset: AX},
+ x86.ASALB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASALL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASALW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASARB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASARL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASARW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASBBB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry},
+ x86.ASBBL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry},
+ x86.ASBBW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry | gc.UseCarry},
+ x86.ASETCC: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASETCS: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASETEQ: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASETGE: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASETGT: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASETHI: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASETLE: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASETLS: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASETLT: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASETMI: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASETNE: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASETOC: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASETOS: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASETPC: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASETPL: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASETPS: {Flags: gc.SizeB | RightRdwr | gc.UseCarry},
+ x86.ASHLB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASHLL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASHLW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASHRB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASHRL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASHRW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.ShiftCX | gc.SetCarry},
+ x86.ASTOSB: {Flags: gc.OK, Reguse: AX | DI, Regset: DI},
+ x86.ASTOSL: {Flags: gc.OK, Reguse: AX | DI, Regset: DI},
+ x86.ASTOSW: {Flags: gc.OK, Reguse: AX | DI, Regset: DI},
+ obj.ADUFFZERO: {Flags: gc.OK, Reguse: AX | DI, Regset: DI},
+ x86.ASUBB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.ASUBL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.ASUBW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.ASUBSD: {Flags: gc.SizeD | gc.LeftRead | RightRdwr},
+ x86.ASUBSS: {Flags: gc.SizeF | gc.LeftRead | RightRdwr},
+ x86.ATESTB: {Flags: gc.SizeB | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ATESTL: {Flags: gc.SizeL | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.ATESTW: {Flags: gc.SizeW | gc.LeftRead | gc.RightRead | gc.SetCarry},
+ x86.AUCOMISD: {Flags: gc.SizeD | gc.LeftRead | gc.RightRead},
+ x86.AUCOMISS: {Flags: gc.SizeF | gc.LeftRead | gc.RightRead},
+ x86.AXCHGB: {Flags: gc.SizeB | LeftRdwr | RightRdwr},
+ x86.AXCHGL: {Flags: gc.SizeL | LeftRdwr | RightRdwr},
+ x86.AXCHGW: {Flags: gc.SizeW | LeftRdwr | RightRdwr},
+ x86.AXORB: {Flags: gc.SizeB | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AXORL: {Flags: gc.SizeL | gc.LeftRead | RightRdwr | gc.SetCarry},
+ x86.AXORW: {Flags: gc.SizeW | gc.LeftRead | RightRdwr | gc.SetCarry},
}
func proginfo(p *obj.Prog) {
// by clients such as the compiler. The exact meaning of this
// data is up to the client and is not interpreted by the cmd/internal/obj/... packages.
type ProgInfo struct {
- Flags uint32 // flag bits
- Reguse uint64 // registers implicitly used by this instruction
- Regset uint64 // registers implicitly set by this instruction
- Regindex uint64 // registers used by addressing mode
+ Flags uint32 // flag bits
+ Reguse uint64 // registers implicitly used by this instruction
+ Regset uint64 // registers implicitly set by this instruction
+ Regindex uint64 // registers used by addressing mode
+ _ struct{} // to prevent unkeyed literals
}
// Prog.as opcodes.