From 246822703849bc830085b4f173526d7f908c41d8 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Sat, 30 May 2015 15:08:46 -0700 Subject: [PATCH] cmd/compile/internal, cmd/internal/obj: used keyed ProgInfo literals Safer, more readable, shorter. Change-Id: I5cf1f438e20a3df45fc43cc5c870a533f7c524bf Reviewed-on: https://go-review.googlesource.com/10517 Reviewed-by: Minux Ma Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- src/cmd/compile/internal/amd64/prog.go | 432 ++++++++++++------------- src/cmd/compile/internal/arm/prog.go | 172 +++++----- src/cmd/compile/internal/arm64/prog.go | 170 +++++----- src/cmd/compile/internal/ppc64/prog.go | 128 ++++---- src/cmd/compile/internal/x86/prog.go | 422 ++++++++++++------------ src/cmd/internal/obj/link.go | 9 +- 6 files changed, 667 insertions(+), 666 deletions(-) diff --git a/src/cmd/compile/internal/amd64/prog.go b/src/cmd/compile/internal/amd64/prog.go index 00918c8691..5f4fe1c5ab 100644 --- a/src/cmd/compile/internal/amd64/prog.go +++ b/src/cmd/compile/internal/amd64/prog.go @@ -25,227 +25,227 @@ const ( // // 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 { diff --git a/src/cmd/compile/internal/arm/prog.go b/src/cmd/compile/internal/arm/prog.go index cdf9d29192..9dcec46ba4 100644 --- a/src/cmd/compile/internal/arm/prog.go +++ b/src/cmd/compile/internal/arm/prog.go @@ -24,114 +24,114 @@ const ( // // 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) { diff --git a/src/cmd/compile/internal/arm64/prog.go b/src/cmd/compile/internal/arm64/prog.go index 1106e788a5..4b498b7798 100644 --- a/src/cmd/compile/internal/arm64/prog.go +++ b/src/cmd/compile/internal/arm64/prog.go @@ -25,108 +25,108 @@ const ( // // 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) { diff --git a/src/cmd/compile/internal/ppc64/prog.go b/src/cmd/compile/internal/ppc64/prog.go index 328b2ce0cf..406f23571f 100644 --- a/src/cmd/compile/internal/ppc64/prog.go +++ b/src/cmd/compile/internal/ppc64/prog.go @@ -25,83 +25,83 @@ const ( // // 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 diff --git a/src/cmd/compile/internal/x86/prog.go b/src/cmd/compile/internal/x86/prog.go index f96a1aa945..ce432c17f3 100644 --- a/src/cmd/compile/internal/x86/prog.go +++ b/src/cmd/compile/internal/x86/prog.go @@ -31,229 +31,229 @@ var ( // // 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) { diff --git a/src/cmd/internal/obj/link.go b/src/cmd/internal/obj/link.go index 688c2785d1..3798e23333 100644 --- a/src/cmd/internal/obj/link.go +++ b/src/cmd/internal/obj/link.go @@ -247,10 +247,11 @@ func (p *Prog) From3Offset() int64 { // 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. -- 2.48.1