]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj: eliminate Ctxt.Mode
authorJosh Bleecher Snyder <josharian@gmail.com>
Wed, 22 Mar 2017 05:23:45 +0000 (22:23 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Wed, 22 Mar 2017 17:27:43 +0000 (17:27 +0000)
Replace Ctxt.Mode with a method, Ctxt.RegWidth,
which is calculated directly off the arch info.

I believe that Prog.Mode can also be removed; future CL.

This is a step towards obj.Link immutability.

Passes toolstash-check -all.

Updates #15756

Change-Id: Ifd7f8f6ed0a2fdc032d1dd306fcd695a14aa5bc5
Reviewed-on: https://go-review.googlesource.com/38446
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/cmd/internal/obj/link.go
src/cmd/internal/obj/mips/a.out.go
src/cmd/internal/obj/mips/asm0.go
src/cmd/internal/obj/mips/obj0.go
src/cmd/internal/obj/x86/asm6.go
src/cmd/internal/obj/x86/obj6.go
src/cmd/internal/sys/arch.go

index d397dec679716a194d9a14f1c6243338d82478f1..8d9e4e34764131883885248db4ca81c425996d7e 100644 (file)
@@ -748,7 +748,6 @@ type Link struct {
        Pc            int64
        DiagFunc      func(string, ...interface{})
        DebugInfo     func(fn *LSym) []*dwarf.Var
-       Mode          int
        Cursym        *LSym
        Version       int
        Errors        int
index f732ed5235348d98a3c1bece37d7f896ec67cfb9..0d838a75f8a7218483b6708b163046498460a4e0 100644 (file)
 
 package mips
 
-import "cmd/internal/obj"
+import (
+       "cmd/internal/obj"
+       "cmd/internal/sys"
+)
 
 //go:generate go run ../stringer.go -i $GOFILE -o anames.go -p mips
 
@@ -218,8 +221,8 @@ const (
 )
 
 const (
-       Mips32 = 32
-       Mips64 = 64
+       Mips32 = sys.MIPS
+       Mips64 = sys.MIPS64
 )
 
 const (
index 897073e95e190f60372acdaad5857e32e9b1a3ad..139b82726f89890e566ffa39c0f9e529ab39f129 100644 (file)
@@ -31,6 +31,7 @@ package mips
 
 import (
        "cmd/internal/obj"
+       "cmd/internal/sys"
        "fmt"
        "log"
        "sort"
@@ -47,14 +48,14 @@ const (
 )
 
 type Optab struct {
-       as    obj.As
-       a1    uint8
-       a2    uint8
-       a3    uint8
-       type_ int8
-       size  int8
-       param int16
-       mode  int
+       as     obj.As
+       a1     uint8
+       a2     uint8
+       a3     uint8
+       type_  int8
+       size   int8
+       param  int16
+       family sys.ArchFamily // 0 means both Mips32 and Mips64
 }
 
 var optab = []Optab{
@@ -465,7 +466,7 @@ func span0(ctxt *obj.Link, cursym *obj.LSym) {
 
                cursym.Size = c
        }
-       if ctxt.Mode&Mips64 != 0 {
+       if ctxt.Arch.Family == sys.MIPS64 {
                c += -c & (mips64FuncAlign - 1)
        }
        cursym.Size = c
@@ -702,7 +703,7 @@ func oplook(ctxt *obj.Link, p *obj.Prog) *Optab {
        c3 := &xcmp[a3]
        for i := range ops {
                op := &ops[i]
-               if int(op.a2) == a2 && c1[op.a1] && c3[op.a3] && (ctxt.Mode&op.mode == op.mode) {
+               if int(op.a2) == a2 && c1[op.a1] && c3[op.a3] && (op.family == 0 || ctxt.Arch.Family == op.family) {
                        p.Optab = uint16(cap(optab) - cap(ops) + i + 1)
                        return op
                }
@@ -1068,7 +1069,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
 
        add := AADDU
 
-       if ctxt.Mode&Mips64 != 0 {
+       if ctxt.Arch.Family == sys.MIPS64 {
                add = AADDVU
        }
        switch o.type_ {
@@ -1081,7 +1082,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
 
        case 1: /* mov r1,r2 ==> OR r1,r0,r2 */
                a := AOR
-               if p.As == AMOVW && ctxt.Mode&Mips64 != 0 {
+               if p.As == AMOVW && ctxt.Arch.Family == sys.MIPS64 {
                        a = AADDU // sign-extended to high 32 bits
                }
                o1 = OP_RRR(oprrr(ctxt, a), uint32(REGZERO), uint32(p.From.Reg), uint32(p.To.Reg))
index fe1ce9c02787bb31bad26952508774dd6c472ba4..11434751e22ff45a09b72a41906fb14f6620aac0 100644 (file)
@@ -38,18 +38,6 @@ import (
 )
 
 func progedit(ctxt *obj.Link, p *obj.Prog) {
-       // Maintain information about code generation mode.
-       if ctxt.Mode == 0 {
-               switch ctxt.Arch.Family {
-               default:
-                       ctxt.Diag("unsupported arch family")
-               case sys.MIPS:
-                       ctxt.Mode = Mips32
-               case sys.MIPS64:
-                       ctxt.Mode = Mips64
-               }
-       }
-
        p.From.Class = 0
        p.To.Class = 0
 
@@ -89,7 +77,7 @@ func progedit(ctxt *obj.Link, p *obj.Prog) {
        case AMOVD:
                if p.From.Type == obj.TYPE_FCONST {
                        i64 := math.Float64bits(p.From.Val.(float64))
-                       if i64 == 0 && ctxt.Mode&Mips64 != 0 {
+                       if i64 == 0 && ctxt.Arch.Family == sys.MIPS64 {
                                p.As = AMOVV
                                p.From.Type = obj.TYPE_REG
                                p.From.Reg = REGZERO
@@ -285,7 +273,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
        }
 
        var mov, add obj.As
-       if ctxt.Mode&Mips64 != 0 {
+       if ctxt.Arch.Family == sys.MIPS64 {
                add = AADDV
                mov = AMOVV
        } else {
@@ -303,7 +291,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
                        autosize = int32(textstksiz + ctxt.FixedFrameSize())
                        if (p.Mark&LEAF != 0) && autosize <= int32(ctxt.FixedFrameSize()) {
                                autosize = 0
-                       } else if autosize&4 != 0 && ctxt.Mode&Mips64 != 0 {
+                       } else if autosize&4 != 0 && ctxt.Arch.Family == sys.MIPS64 {
                                autosize += 4
                        }
 
@@ -534,7 +522,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
                }
        }
 
-       if ctxt.Mode&Mips32 != 0 {
+       if ctxt.Arch.Family == sys.MIPS {
                // rewrite MOVD into two MOVF in 32-bit mode to avoid unaligned memory access
                for p = cursym.Text; p != nil; p = p1 {
                        p1 = p.Link
@@ -633,7 +621,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog {
 
        var mov, add, sub obj.As
 
-       if ctxt.Mode&Mips64 != 0 {
+       if ctxt.Arch.Family == sys.MIPS64 {
                add = AADDV
                mov = AMOVV
                sub = ASUBVU
index 013ccce55639955aab685f6a1a94ac25bde46f60..5d649accc195b0c6418ee8f8bf680a74dac4f6a2 100644 (file)
@@ -32,6 +32,7 @@ package x86
 
 import (
        "cmd/internal/obj"
+       "cmd/internal/sys"
        "encoding/binary"
        "fmt"
        "log"
@@ -3299,7 +3300,7 @@ func doasm(ctxt *obj.Link, p *obj.Prog) {
                if ycover[ft+int(yt.from)] != 0 && ycover[f3t+int(yt.from3)] != 0 && ycover[tt+int(yt.to)] != 0 {
                        switch o.prefix {
                        case Px1: /* first option valid only in 32-bit mode */
-                               if ctxt.Mode == 64 && z == 0 {
+                               if ctxt.Arch.Family == sys.AMD64 && z == 0 {
                                        z += int(yt.zoffset) + xo
                                        continue
                                }
index 816141960207de364f503ebe2467e9cd3f2d1c6f..84fe9d7df1ea03b53c6e10d38fea5ac608536816 100644 (file)
@@ -73,11 +73,8 @@ func CanUse1InsnTLS(ctxt *obj.Link) bool {
 }
 
 func progedit(ctxt *obj.Link, p *obj.Prog) {
-       // Maintain information about code generation mode.
-       if ctxt.Mode == 0 {
-               ctxt.Mode = ctxt.Arch.RegSize * 8
-       }
-       p.Mode = int8(ctxt.Mode)
+       // TODO(josharian): eliminate Prog.Mode
+       p.Mode = int8(ctxt.Arch.RegSize * 8)
 
        // Thread-local storage references use the TLS pseudo-register.
        // As a register, TLS refers to the thread-local storage base, and it
index 22c8c321b0f5bcaaa4400d1dd90a9c2b6267539a..b2f8d0b8cb05141de8a197b6468fe3c0bf2046d1 100644 (file)
@@ -12,7 +12,8 @@ import "encoding/binary"
 type ArchFamily byte
 
 const (
-       AMD64 ArchFamily = iota
+       NoArch ArchFamily = iota
+       AMD64
        ARM
        ARM64
        I386