]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj: remove AUSEFIELD pseudo-op
authorMatthew Dempsky <mdempsky@google.com>
Fri, 3 Mar 2017 22:27:24 +0000 (14:27 -0800)
committerMatthew Dempsky <mdempsky@google.com>
Mon, 6 Mar 2017 22:16:13 +0000 (22:16 +0000)
Instead, cmd/compile can directly emit R_USEFIELD relocations.

Manually verified rsc.io/tmp/fieldtrack still passes.

Change-Id: Ib1fb5ab902ff0ad17ef6a862a9a5692caf7f87d1
Reviewed-on: https://go-review.googlesource.com/37871
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
20 files changed:
src/cmd/compile/internal/amd64/prog.go
src/cmd/compile/internal/arm/prog.go
src/cmd/compile/internal/arm64/prog.go
src/cmd/compile/internal/gc/gsubr.go
src/cmd/compile/internal/gc/pgen.go
src/cmd/compile/internal/mips/prog.go
src/cmd/compile/internal/mips64/prog.go
src/cmd/compile/internal/ppc64/prog.go
src/cmd/compile/internal/s390x/prog.go
src/cmd/compile/internal/x86/prog.go
src/cmd/internal/obj/arm/asm5.go
src/cmd/internal/obj/arm64/asm7.go
src/cmd/internal/obj/line.go
src/cmd/internal/obj/link.go
src/cmd/internal/obj/mips/asm0.go
src/cmd/internal/obj/pcln.go
src/cmd/internal/obj/plist.go
src/cmd/internal/obj/ppc64/asm9.go
src/cmd/internal/obj/util.go
src/cmd/internal/obj/x86/asm6.go

index 1a71cc56d7242433a2747647305cf8f08eefbd40..372c1e6cb00542592957cf705a2640365af6c3a0 100644 (file)
@@ -27,7 +27,6 @@ var progtable = [x86.ALAST & obj.AMask]gc.ProgInfo{
        obj.AFUNCDATA: {Flags: gc.Pseudo},
        obj.APCDATA:   {Flags: gc.Pseudo},
        obj.AUNDEF:    {Flags: gc.Break},
-       obj.AUSEFIELD: {Flags: gc.OK},
        obj.AVARDEF:   {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARKILL:  {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARLIVE:  {Flags: gc.Pseudo | gc.LeftRead},
index 1b80ddefd0cd277d01b949411284a928d6b5198b..6a50336c0eea38faeb397fca7154ef476b7e1b73 100644 (file)
@@ -26,7 +26,6 @@ var progtable = [arm.ALAST & obj.AMask]gc.ProgInfo{
        obj.AFUNCDATA: {Flags: gc.Pseudo},
        obj.APCDATA:   {Flags: gc.Pseudo},
        obj.AUNDEF:    {Flags: gc.Break},
-       obj.AUSEFIELD: {Flags: gc.OK},
        obj.AVARDEF:   {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARKILL:  {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARLIVE:  {Flags: gc.Pseudo | gc.LeftRead},
index 7cb7517534cc24b0eef753b9603c30050ddaab65..d3a86cb2815f8260f53d88236c16f190a0f81349 100644 (file)
@@ -29,7 +29,6 @@ var progtable = [arm64.ALAST & obj.AMask]gc.ProgInfo{
        obj.AFUNCDATA: {Flags: gc.Pseudo},
        obj.APCDATA:   {Flags: gc.Pseudo},
        obj.AUNDEF:    {Flags: gc.Break},
-       obj.AUSEFIELD: {Flags: gc.OK},
        obj.AVARDEF:   {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARKILL:  {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARLIVE:  {Flags: gc.Pseudo | gc.LeftRead},
index bfa88eda1166d5b2fbb48ca5948ea2cdca26d34f..f1d6673b867059f8309559515404b7169f849d1d 100644 (file)
@@ -97,13 +97,6 @@ func ggloblLSym(s *obj.LSym, width int32, flags int16) {
        Ctxt.Globl(s, int64(width), int(flags))
 }
 
-func gtrack(s *Sym) {
-       p := Gins(obj.AUSEFIELD, nil, nil)
-       p.From.Type = obj.TYPE_MEM
-       p.From.Name = obj.NAME_EXTERN
-       p.From.Sym = Linksym(s)
-}
-
 func isfat(t *Type) bool {
        if t != nil {
                switch t.Etype {
@@ -289,8 +282,7 @@ func Patch(p *obj.Prog, to *obj.Prog) {
 // Gins inserts instruction as. f is from, t is to.
 func Gins(as obj.As, f, t *Node) *obj.Prog {
        switch as {
-       case obj.AVARKILL, obj.AVARLIVE, obj.AVARDEF,
-               obj.ATEXT, obj.AFUNCDATA, obj.AUSEFIELD:
+       case obj.AVARKILL, obj.AVARLIVE, obj.AVARDEF, obj.ATEXT, obj.AFUNCDATA:
        default:
                Fatalf("unhandled gins op %v", as)
        }
index 2ec0baaff4d9030a456c57f7492ca2df1c51ad4a..9719a8c4062fd4cca7d15de8b5d18b3a6eb4c0ef 100644 (file)
@@ -380,6 +380,8 @@ func compile(fn *Node) {
                nam = nil
        }
        ptxt := Gins(obj.ATEXT, nam, nil)
+       fnsym := ptxt.From.Sym
+
        ptxt.From3 = new(obj.Addr)
        if fn.Func.Dupok() {
                ptxt.From3.Offset |= obj.DUPOK
@@ -418,26 +420,19 @@ func compile(fn *Node) {
        gcargs := makefuncdatasym("gcargs·", obj.FUNCDATA_ArgsPointerMaps)
        gclocals := makefuncdatasym("gclocals·", obj.FUNCDATA_LocalsPointerMaps)
 
-       if obj.Fieldtrack_enabled != 0 && len(Curfn.Func.FieldTrack) > 0 {
-               trackSyms := make([]*Sym, 0, len(Curfn.Func.FieldTrack))
-               for sym := range Curfn.Func.FieldTrack {
-                       trackSyms = append(trackSyms, sym)
-               }
-               sort.Sort(symByName(trackSyms))
-               for _, sym := range trackSyms {
-                       gtrack(sym)
-               }
-       }
-
-       gendebug(ptxt.From.Sym, fn.Func.Dcl)
+       gendebug(fnsym, fn.Func.Dcl)
 
        genssa(ssafn, ptxt, gcargs, gclocals)
        ssafn.Free()
+
        obj.Flushplist(Ctxt, plist) // convert from Prog list to machine code
+       ptxt = nil                  // nil to prevent misuse; Prog may have been freed by Flushplist
+
+       fieldtrack(fnsym, fn.Func.FieldTrack)
 }
 
-func gendebug(fn *obj.LSym, decls []*Node) {
-       if fn == nil {
+func gendebug(fnsym *obj.LSym, decls []*Node) {
+       if fnsym == nil {
                return
        }
 
@@ -466,8 +461,30 @@ func gendebug(fn *obj.LSym, decls []*Node) {
                        Gotype:  Linksym(ngotype(n)),
                }
 
-               a.Link = fn.Autom
-               fn.Autom = a
+               a.Link = fnsym.Autom
+               fnsym.Autom = a
+       }
+}
+
+// fieldtrack adds R_USEFIELD relocations to fnsym to record any
+// struct fields that it used.
+func fieldtrack(fnsym *obj.LSym, tracked map[*Sym]struct{}) {
+       if fnsym == nil {
+               return
+       }
+       if obj.Fieldtrack_enabled == 0 || len(tracked) == 0 {
+               return
+       }
+
+       trackSyms := make([]*Sym, 0, len(tracked))
+       for sym := range tracked {
+               trackSyms = append(trackSyms, sym)
+       }
+       sort.Sort(symByName(trackSyms))
+       for _, sym := range trackSyms {
+               r := obj.Addrel(fnsym)
+               r.Sym = Linksym(sym)
+               r.Type = obj.R_USEFIELD
        }
 }
 
index 2113bb7e129a5746430ca5c37ef602f211f98d25..3061275f879dc9fe19e7eeb7de82fd93af249763 100644 (file)
@@ -29,7 +29,6 @@ var progtable = [mips.ALAST & obj.AMask]gc.ProgInfo{
        obj.AFUNCDATA: {Flags: gc.Pseudo},
        obj.APCDATA:   {Flags: gc.Pseudo},
        obj.AUNDEF:    {Flags: gc.Break},
-       obj.AUSEFIELD: {Flags: gc.OK},
        obj.AVARDEF:   {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARKILL:  {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARLIVE:  {Flags: gc.Pseudo | gc.LeftRead},
index 9c2c94a37f173c66cc831bbd51354f11bc82c760..cc62d6a20792aa22cd67f1d879c876945ff77b38 100644 (file)
@@ -29,7 +29,6 @@ var progtable = [mips.ALAST & obj.AMask]gc.ProgInfo{
        obj.AFUNCDATA: {Flags: gc.Pseudo},
        obj.APCDATA:   {Flags: gc.Pseudo},
        obj.AUNDEF:    {Flags: gc.Break},
-       obj.AUSEFIELD: {Flags: gc.OK},
        obj.AVARDEF:   {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARKILL:  {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARLIVE:  {Flags: gc.Pseudo | gc.LeftRead},
index 6646cf735505cd62e74c47bdb9219ba08da05f82..dc824ffda28c0d9810d772309620e46c9ed91447 100644 (file)
@@ -29,7 +29,6 @@ var progtable = [ppc64.ALAST & obj.AMask]gc.ProgInfo{
        obj.AFUNCDATA: {Flags: gc.Pseudo},
        obj.APCDATA:   {Flags: gc.Pseudo},
        obj.AUNDEF:    {Flags: gc.Break},
-       obj.AUSEFIELD: {Flags: gc.OK},
        obj.AVARDEF:   {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARKILL:  {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARLIVE:  {Flags: gc.Pseudo | gc.LeftRead},
index 07c1a45cd5a5924928bf98c8e8e7d38164fbebd9..42a85ead31b1c531840207ed4dd348e8d7ee1fab 100644 (file)
@@ -22,7 +22,6 @@ var progtable = [s390x.ALAST & obj.AMask]gc.ProgInfo{
        obj.AFUNCDATA & obj.AMask: {Flags: gc.Pseudo},
        obj.APCDATA & obj.AMask:   {Flags: gc.Pseudo},
        obj.AUNDEF & obj.AMask:    {Flags: gc.Break},
-       obj.AUSEFIELD & obj.AMask: {Flags: gc.OK},
        obj.AVARDEF & obj.AMask:   {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARKILL & obj.AMask:  {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARLIVE & obj.AMask:  {Flags: gc.Pseudo | gc.LeftRead},
index 33ea29d420983cc3b9bcbf490da004e0d57e2d20..70c55340baab25ca3f5590dd0528bb217ad2c4b9 100644 (file)
@@ -29,7 +29,6 @@ var progtable = [x86.ALAST & obj.AMask]gc.ProgInfo{
        obj.AFUNCDATA: {Flags: gc.Pseudo},
        obj.APCDATA:   {Flags: gc.Pseudo},
        obj.AUNDEF:    {Flags: gc.Break},
-       obj.AUSEFIELD: {Flags: gc.OK},
        obj.AVARDEF:   {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARKILL:  {Flags: gc.Pseudo | gc.RightWrite},
        obj.AVARLIVE:  {Flags: gc.Pseudo | gc.LeftRead},
index 1fd1a1ce141b7595d7ac1ddf69a207ca06c04ecd..89665b15e424f2c4d34652748d3bae28eb9675a1 100644 (file)
@@ -247,7 +247,6 @@ var optab = []Optab{
        {ACLZ, C_REG, C_NONE, C_REG, 97, 4, 0, 0, 0},
        {AMULWT, C_REG, C_REG, C_REG, 98, 4, 0, 0, 0},
        {AMULAWT, C_REG, C_REG, C_REGREG2, 99, 4, 0, 0, 0},
-       {obj.AUSEFIELD, C_ADDR, C_NONE, C_NONE, 0, 0, 0, 0, 0},
        {obj.APCDATA, C_LCON, C_NONE, C_LCON, 0, 0, 0, 0, 0},
        {obj.AFUNCDATA, C_LCON, C_NONE, C_ADDR, 0, 0, 0, 0, 0},
        {obj.ANOP, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0, 0},
@@ -609,7 +608,7 @@ func span5(ctxt *obj.Link, cursym *obj.LSym) {
                        }
                }
 
-               if m == 0 && (p.As != obj.AFUNCDATA && p.As != obj.APCDATA && p.As != ADATABUNDLEEND && p.As != obj.ANOP && p.As != obj.AUSEFIELD) {
+               if m == 0 && (p.As != obj.AFUNCDATA && p.As != obj.APCDATA && p.As != ADATABUNDLEEND && p.As != obj.ANOP) {
                        ctxt.Diag("zero-width instruction\n%v", p)
                        continue
                }
@@ -705,7 +704,7 @@ func span5(ctxt *obj.Link, cursym *obj.LSym) {
                        if m/4 > len(out) {
                                ctxt.Diag("instruction size too large: %d > %d", m/4, len(out))
                        }
-                       if m == 0 && (p.As != obj.AFUNCDATA && p.As != obj.APCDATA && p.As != ADATABUNDLEEND && p.As != obj.ANOP && p.As != obj.AUSEFIELD) {
+                       if m == 0 && (p.As != obj.AFUNCDATA && p.As != obj.APCDATA && p.As != ADATABUNDLEEND && p.As != obj.ANOP) {
                                if p.As == obj.ATEXT {
                                        ctxt.Autosize = int32(p.To.Offset + 4)
                                        continue
@@ -1410,8 +1409,7 @@ func buildop(ctxt *obj.Link) {
                        AWORD,
                        AMOVM,
                        ARFE,
-                       obj.ATEXT,
-                       obj.AUSEFIELD:
+                       obj.ATEXT:
                        break
 
                case AADDF:
index 1a0ca757035c8c52102bce70e3fd03f878d96f66..c5fc023a6d9b74c8f8973c9ea791e958eb160d97 100644 (file)
@@ -498,7 +498,6 @@ var optab = []Optab{
        {ASHA1C, C_VREG, C_REG, C_VREG, 1, 4, 0, 0, 0},
 
        {obj.AUNDEF, C_NONE, C_NONE, C_NONE, 90, 4, 0, 0, 0},
-       {obj.AUSEFIELD, C_ADDR, C_NONE, C_NONE, 0, 0, 0, 0, 0},
        {obj.APCDATA, C_VCON, C_NONE, C_VCON, 0, 0, 0, 0, 0},
        {obj.AFUNCDATA, C_VCON, C_NONE, C_ADDR, 0, 0, 0, 0, 0},
        {obj.ANOP, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0, 0},
@@ -555,7 +554,7 @@ func span7(ctxt *obj.Link, cursym *obj.LSym) {
                o = oplook(ctxt, p)
                m = int(o.size)
                if m == 0 {
-                       if p.As != obj.ANOP && p.As != obj.AFUNCDATA && p.As != obj.APCDATA && p.As != obj.AUSEFIELD {
+                       if p.As != obj.ANOP && p.As != obj.AFUNCDATA && p.As != obj.APCDATA {
                                ctxt.Diag("zero-width instruction\n%v", p)
                        }
                        continue
@@ -623,7 +622,7 @@ func span7(ctxt *obj.Link, cursym *obj.LSym) {
                        m = int(o.size)
 
                        if m == 0 {
-                               if p.As != obj.ANOP && p.As != obj.AFUNCDATA && p.As != obj.APCDATA && p.As != obj.AUSEFIELD {
+                               if p.As != obj.ANOP && p.As != obj.AFUNCDATA && p.As != obj.APCDATA {
                                        ctxt.Diag("zero-width instruction\n%v", p)
                                }
                                continue
@@ -1875,7 +1874,6 @@ func buildop(ctxt *obj.Link) {
 
                case obj.ANOP,
                        obj.AUNDEF,
-                       obj.AUSEFIELD,
                        obj.AFUNCDATA,
                        obj.APCDATA,
                        obj.ADUFFZERO,
index 540d56460d45e5cad694ea998fb66960ef63c2c0..a601b00787302a20d59516271a650bdd93e28146 100644 (file)
@@ -82,21 +82,3 @@ func linkgetlineFromPos(ctxt *Link, xpos src.XPos) (f *LSym, l int32) {
        // TODO(gri) Should this use relative or absolute line number?
        return Linklookup(ctxt, pos.SymFilename(), 0), int32(pos.RelLine())
 }
-
-func fieldtrack(ctxt *Link, cursym *LSym) {
-       p := cursym.Text
-       if p == nil || p.Link == nil { // handle external functions and ELF section symbols
-               return
-       }
-       ctxt.Cursym = cursym
-
-       for ; p != nil; p = p.Link {
-               if p.As == AUSEFIELD {
-                       r := Addrel(ctxt.Cursym)
-                       r.Off = 0
-                       r.Siz = 0
-                       r.Sym = p.From.Sym
-                       r.Type = R_USEFIELD
-               }
-       }
-}
index 296691b23a65b8f67c4e232e5d5dcfe273a8194a..a9881166a1b63164cfd818c7718a399a586cd984 100644 (file)
@@ -292,7 +292,6 @@ const (
        ARET
        ATEXT
        AUNDEF
-       AUSEFIELD
        AVARDEF
        AVARKILL
        AVARLIVE
index 48f2b7de4008aeb17961e81a963dc168da294b33..eee37a93368cd3f49db3c1106a18e89d14ac837c 100644 (file)
@@ -359,7 +359,6 @@ var optab = []Optab{
        {ABREAK, C_NONE, C_NONE, C_NONE, 5, 4, 0, 0},
 
        {obj.AUNDEF, C_NONE, C_NONE, C_NONE, 49, 4, 0, 0},
-       {obj.AUSEFIELD, C_ADDR, C_NONE, C_NONE, 0, 0, 0, 0},
        {obj.APCDATA, C_LCON, C_NONE, C_LCON, 0, 0, 0, 0},
        {obj.AFUNCDATA, C_SCON, C_NONE, C_ADDR, 0, 0, 0, 0},
        {obj.ANOP, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0},
@@ -396,7 +395,7 @@ func span0(ctxt *obj.Link, cursym *obj.LSym) {
                o = oplook(ctxt, p)
                m = int(o.size)
                if m == 0 {
-                       if p.As != obj.ANOP && p.As != obj.AFUNCDATA && p.As != obj.APCDATA && p.As != obj.AUSEFIELD {
+                       if p.As != obj.ANOP && p.As != obj.AFUNCDATA && p.As != obj.APCDATA {
                                ctxt.Diag("zero-width instruction\n%v", p)
                        }
                        continue
@@ -455,7 +454,7 @@ func span0(ctxt *obj.Link, cursym *obj.LSym) {
 
                        m = int(o.size)
                        if m == 0 {
-                               if p.As != obj.ANOP && p.As != obj.AFUNCDATA && p.As != obj.APCDATA && p.As != obj.AUSEFIELD {
+                               if p.As != obj.ANOP && p.As != obj.AFUNCDATA && p.As != obj.APCDATA {
                                        ctxt.Diag("zero-width instruction\n%v", p)
                                }
                                continue
@@ -988,7 +987,6 @@ func buildop(ctxt *obj.Link) {
                        obj.ANOP,
                        obj.ATEXT,
                        obj.AUNDEF,
-                       obj.AUSEFIELD,
                        obj.AFUNCDATA,
                        obj.APCDATA,
                        obj.ADUFFZERO,
index 44be031dceb804366423529944fab0cec35cab5d..3ed146aceafc797103509a565f57b60fdc103149 100644 (file)
@@ -127,7 +127,7 @@ func funcpctab(ctxt *Link, dst *Pcdata, func_ *LSym, desc string, valfunc func(*
 // Because p.Pos applies to p, phase == 0 (before p)
 // takes care of the update.
 func pctofileline(ctxt *Link, sym *LSym, oldval int32, p *Prog, phase int32, arg interface{}) int32 {
-       if p.As == ATEXT || p.As == ANOP || p.As == AUSEFIELD || p.Pos.Line() == 0 || phase == 1 {
+       if p.As == ATEXT || p.As == ANOP || p.Pos.Line() == 0 || phase == 1 {
                return oldval
        }
        f, l := linkgetlineFromPos(ctxt, p.Pos)
index a74352cdbab1ecd984dd55d9117660d9b699443c..8584020f04b6e485dcd7661040bc3954cca38483 100644 (file)
@@ -124,7 +124,6 @@ func flushplist(ctxt *Link, plist *Plist, freeProgs bool) {
                linkpatch(ctxt, s)
                ctxt.Arch.Preprocess(ctxt, s)
                ctxt.Arch.Assemble(ctxt, s)
-               fieldtrack(ctxt, s)
                linkpcln(ctxt, s)
                if freeProgs {
                        s.Text = nil
index 771f8e560500dcefd8d6c209bc77399c464fe1f4..90b796dd678ba74d202972c0f63d1ccee892b657 100644 (file)
@@ -539,7 +539,6 @@ var optab = []Optab{
        {ALSW, C_ZOREG, C_NONE, C_NONE, C_REG, 45, 4, 0},
        {ALSW, C_ZOREG, C_NONE, C_LCON, C_REG, 42, 4, 0},
        {obj.AUNDEF, C_NONE, C_NONE, C_NONE, C_NONE, 78, 4, 0},
-       {obj.AUSEFIELD, C_ADDR, C_NONE, C_NONE, C_NONE, 0, 0, 0},
        {obj.APCDATA, C_LCON, C_NONE, C_NONE, C_LCON, 0, 0, 0},
        {obj.AFUNCDATA, C_SCON, C_NONE, C_NONE, C_ADDR, 0, 0, 0},
        {obj.ANOP, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0},
@@ -576,7 +575,7 @@ func span9(ctxt *obj.Link, cursym *obj.LSym) {
                o = oplook(ctxt, p)
                m = int(o.size)
                if m == 0 {
-                       if p.As != obj.ANOP && p.As != obj.AFUNCDATA && p.As != obj.APCDATA && p.As != obj.AUSEFIELD {
+                       if p.As != obj.ANOP && p.As != obj.AFUNCDATA && p.As != obj.APCDATA {
                                ctxt.Diag("zero-width instruction\n%v", p)
                        }
                        continue
@@ -633,7 +632,7 @@ func span9(ctxt *obj.Link, cursym *obj.LSym) {
 
                        m = int(o.size)
                        if m == 0 {
-                               if p.As != obj.ANOP && p.As != obj.AFUNCDATA && p.As != obj.APCDATA && p.As != obj.AUSEFIELD {
+                               if p.As != obj.ANOP && p.As != obj.AFUNCDATA && p.As != obj.APCDATA {
                                        ctxt.Diag("zero-width instruction\n%v", p)
                                }
                                continue
@@ -1768,7 +1767,6 @@ func buildop(ctxt *obj.Link) {
                        obj.ANOP,
                        obj.ATEXT,
                        obj.AUNDEF,
-                       obj.AUSEFIELD,
                        obj.AFUNCDATA,
                        obj.APCDATA,
                        obj.ADUFFZERO,
index 1e48f8061637c6038b5009a6fa89668be2510f62..f1f832362b922ad413051c527426954f991cf755 100644 (file)
@@ -492,7 +492,6 @@ var Anames = []string{
        "RET",
        "TEXT",
        "UNDEF",
-       "USEFIELD",
        "VARDEF",
        "VARKILL",
        "VARLIVE",
index 466fb9cc8fabfcaea633a4e203f231b4384b5937..09c6b73789dd6984ef5ded9cc9fe9435d20e8b58 100644 (file)
@@ -1698,7 +1698,6 @@ var optab =
        {AXEND, ynone, Px, [23]uint8{0x0f, 01, 0xd5}},
        {AXTEST, ynone, Px, [23]uint8{0x0f, 01, 0xd6}},
        {AXGETBV, ynone, Pm, [23]uint8{01, 0xd0}},
-       {obj.AUSEFIELD, ynop, Px, [23]uint8{0, 0}},
        {obj.AFUNCDATA, yfuncdata, Px, [23]uint8{0, 0}},
        {obj.APCDATA, ypcdata, Px, [23]uint8{0, 0}},
        {obj.AVARDEF, nil, 0, [23]uint8{}},