]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: eliminate arch-specific typedefs
authorMatthew Dempsky <mdempsky@google.com>
Thu, 3 Mar 2016 02:03:50 +0000 (18:03 -0800)
committerMatthew Dempsky <mdempsky@google.com>
Thu, 3 Mar 2016 02:23:37 +0000 (02:23 +0000)
Arch backends already provide us Widthint and Widthptr, which is ample
information to figure out how to define the universal "int", "uint",
and "uintptr" types.  No need for providing a generic typedef
mechanism beyond that.

Change-Id: I35c0c17a67c80605a9208b93d77d6960b2cbb17d
Reviewed-on: https://go-review.googlesource.com/20153
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Dave Cheney <dave@cheney.net>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/compile/internal/amd64/galign.go
src/cmd/compile/internal/arm/galign.go
src/cmd/compile/internal/arm64/galign.go
src/cmd/compile/internal/gc/align.go
src/cmd/compile/internal/gc/go.go
src/cmd/compile/internal/gc/lex.go
src/cmd/compile/internal/mips64/galign.go
src/cmd/compile/internal/ppc64/galign.go
src/cmd/compile/internal/x86/galign.go

index 9837ea6160d838027e90a3204c50a6dc16a00c0a..376fdf9f0a48b5b3a8d4979de7397e162314c499 100644 (file)
@@ -34,16 +34,6 @@ var (
        cmpptr int = x86.ACMPQ
 )
 
-/*
- * go declares several platform-specific type aliases:
- * int, uint, and uintptr
- */
-var typedefs = []gc.Typedef{
-       {"int", gc.TINT, gc.TINT64},
-       {"uint", gc.TUINT, gc.TUINT64},
-       {"uintptr", gc.TUINTPTR, gc.TUINT64},
-}
-
 func betypeinit() {
        gc.Widthptr = 8
        gc.Widthint = 8
@@ -55,9 +45,6 @@ func betypeinit() {
                movptr = x86.AMOVL
                leaptr = x86.ALEAL
                cmpptr = x86.ACMPL
-               typedefs[0].Sameas = gc.TINT32
-               typedefs[1].Sameas = gc.TUINT32
-               typedefs[2].Sameas = gc.TUINT32
        }
 
        if gc.Ctxt.Flag_dynlink {
@@ -75,7 +62,6 @@ func Main() {
        gc.Thearch.Thechar = thechar
        gc.Thearch.Thestring = thestring
        gc.Thearch.Thelinkarch = thelinkarch
-       gc.Thearch.Typedefs = typedefs
        gc.Thearch.REGSP = x86.REGSP
        gc.Thearch.REGCTXT = x86.REGCTXT
        gc.Thearch.REGCALLX = x86.REG_BX
index 58c7f7b95902c1a3c3b6533b229648f4cbba9179..6490191e40191c1c4eedd822a9e7be22822017ec 100644 (file)
@@ -21,16 +21,6 @@ func linkarchinit() {
 
 var MAXWIDTH int64 = (1 << 32) - 1
 
-/*
- * go declares several platform-specific type aliases:
- * int, uint, and uintptr
- */
-var typedefs = []gc.Typedef{
-       {"int", gc.TINT, gc.TINT32},
-       {"uint", gc.TUINT, gc.TUINT32},
-       {"uintptr", gc.TUINTPTR, gc.TUINT32},
-}
-
 func betypeinit() {
        gc.Widthptr = 4
        gc.Widthint = 4
@@ -41,7 +31,6 @@ func Main() {
        gc.Thearch.Thechar = thechar
        gc.Thearch.Thestring = thestring
        gc.Thearch.Thelinkarch = thelinkarch
-       gc.Thearch.Typedefs = typedefs
        gc.Thearch.REGSP = arm.REGSP
        gc.Thearch.REGCTXT = arm.REGCTXT
        gc.Thearch.REGCALLX = arm.REG_R1
index d61fd3cb9560588ecd6bdb3063189ab99c70cf06..93b1443bf22fd7b33697c14980055392404cc381 100644 (file)
@@ -21,16 +21,6 @@ func linkarchinit() {
 
 var MAXWIDTH int64 = 1 << 50
 
-/*
- * go declares several platform-specific type aliases:
- * int, uint, and uintptr
- */
-var typedefs = []gc.Typedef{
-       {"int", gc.TINT, gc.TINT64},
-       {"uint", gc.TUINT, gc.TUINT64},
-       {"uintptr", gc.TUINTPTR, gc.TUINT64},
-}
-
 func betypeinit() {
        gc.Widthptr = 8
        gc.Widthint = 8
@@ -41,7 +31,6 @@ func Main() {
        gc.Thearch.Thechar = thechar
        gc.Thearch.Thestring = thestring
        gc.Thearch.Thelinkarch = thelinkarch
-       gc.Thearch.Typedefs = typedefs
        gc.Thearch.REGSP = arm64.REGSP
        gc.Thearch.REGCTXT = arm64.REGCTXT
        gc.Thearch.REGCALLX = arm64.REGRT1
index f0122aff975f04dcf2cdd282940f5c517abd2eb3..3d2d12ec316327f6129131c24a7d06f25e98678c 100644 (file)
@@ -618,39 +618,6 @@ func typeinit() {
        Simtype[TFUNC] = Tptr
        Simtype[TUNSAFEPTR] = Tptr
 
-       // pick up the backend thearch.typedefs
-       for i = range Thearch.Typedefs {
-               s := Lookup(Thearch.Typedefs[i].Name)
-               s1 := Pkglookup(Thearch.Typedefs[i].Name, builtinpkg)
-
-               etype := Thearch.Typedefs[i].Etype
-               if int(etype) >= len(Types) {
-                       Fatalf("typeinit: %s bad etype", s.Name)
-               }
-               sameas := Thearch.Typedefs[i].Sameas
-               if int(sameas) >= len(Types) {
-                       Fatalf("typeinit: %s bad sameas", s.Name)
-               }
-               Simtype[etype] = sameas
-               minfltval[etype] = minfltval[sameas]
-               maxfltval[etype] = maxfltval[sameas]
-               Minintval[etype] = Minintval[sameas]
-               Maxintval[etype] = Maxintval[sameas]
-
-               t = Types[etype]
-               if t != nil {
-                       Fatalf("typeinit: %s already defined", s.Name)
-               }
-
-               t = typ(etype)
-               t.Sym = s1
-
-               dowidth(t)
-               Types[etype] = t
-               s1.Def = typenod(t)
-               s1.Def.Name = new(Name)
-       }
-
        Array_array = int(Rnd(0, int64(Widthptr)))
        Array_nel = int(Rnd(int64(Array_array)+int64(Widthptr), int64(Widthint)))
        Array_cap = int(Rnd(int64(Array_nel)+int64(Widthint), int64(Widthint)))
index e4fb1bcf00a6cdd5d89e285a0b2f888a551789b4..43158e06044a92da35979ce1eaa34bd3c99e85b2 100644 (file)
@@ -305,12 +305,6 @@ const (
        Ecomplit  = 1 << 11 // type in composite literal
 )
 
-type Typedef struct {
-       Name   string
-       Etype  EType
-       Sameas EType
-}
-
 type Sig struct {
        name   string
        pkg    *Pkg
@@ -670,7 +664,6 @@ type Arch struct {
        Thechar      int
        Thestring    string
        Thelinkarch  *obj.LinkArch
-       Typedefs     []Typedef
        REGSP        int
        REGCTXT      int
        REGCALLX     int // BX
index 6405dff68101859b3e0c9ab0585225b6bdfa9356..153928ec06af6020b2d796e56bf0e3eb78c23c30 100644 (file)
@@ -2077,6 +2077,18 @@ var basicTypes = [...]struct {
        {"any", TANY},
 }
 
+var typedefs = [...]struct {
+       name     string
+       etype    EType
+       width    *int
+       sameas32 EType
+       sameas64 EType
+}{
+       {"int", TINT, &Widthint, TINT32, TINT64},
+       {"uint", TUINT, &Widthint, TUINT32, TUINT64},
+       {"uintptr", TUINTPTR, &Widthptr, TUINT32, TUINT64},
+}
+
 var builtinFuncs = [...]struct {
        name string
        op   Op
@@ -2223,12 +2235,29 @@ func lexinit1() {
        s.Def = typenod(runetype)
        s.Def.Name = new(Name)
 
-       // backend-specific builtin types (e.g. int).
-       for i := range Thearch.Typedefs {
-               s := Pkglookup(Thearch.Typedefs[i].Name, builtinpkg)
-               s.Def = typenod(Types[Thearch.Typedefs[i].Etype])
-               s.Def.Name = new(Name)
-               s.Origpkg = builtinpkg
+       // backend-dependent builtin types (e.g. int).
+       for _, s := range typedefs {
+               s1 := Pkglookup(s.name, builtinpkg)
+
+               sameas := s.sameas32
+               if *s.width == 8 {
+                       sameas = s.sameas64
+               }
+
+               Simtype[s.etype] = sameas
+               minfltval[s.etype] = minfltval[sameas]
+               maxfltval[s.etype] = maxfltval[sameas]
+               Minintval[s.etype] = Minintval[sameas]
+               Maxintval[s.etype] = Maxintval[sameas]
+
+               t := typ(s.etype)
+               t.Sym = s1
+               Types[s.etype] = t
+               s1.Def = typenod(t)
+               s1.Def.Name = new(Name)
+               s1.Origpkg = builtinpkg
+
+               dowidth(t)
        }
 }
 
index 00ffe17016a5bd7b696baee4a195ffd7e30d1fcd..4f0d28e17545a653ead84616f8fc8d56aaac60fc 100644 (file)
@@ -29,16 +29,6 @@ func linkarchinit() {
 
 var MAXWIDTH int64 = 1 << 50
 
-/*
- * go declares several platform-specific type aliases:
- * int, uint, and uintptr
- */
-var typedefs = []gc.Typedef{
-       {"int", gc.TINT, gc.TINT64},
-       {"uint", gc.TUINT, gc.TUINT64},
-       {"uintptr", gc.TUINTPTR, gc.TUINT64},
-}
-
 func betypeinit() {
        gc.Widthptr = 8
        gc.Widthint = 8
@@ -49,7 +39,6 @@ func Main() {
        gc.Thearch.Thechar = thechar
        gc.Thearch.Thestring = thestring
        gc.Thearch.Thelinkarch = thelinkarch
-       gc.Thearch.Typedefs = typedefs
        gc.Thearch.REGSP = mips.REGSP
        gc.Thearch.REGCTXT = mips.REGCTXT
        gc.Thearch.REGCALLX = mips.REG_R1
index 2bd49fd3753e45c9b66aa0cbad86cac2ebe329bd..9a8773ddd1b2103adcd6c550e4a6c666b4334c2b 100644 (file)
@@ -29,16 +29,6 @@ func linkarchinit() {
 
 var MAXWIDTH int64 = 1 << 50
 
-/*
- * go declares several platform-specific type aliases:
- * int, uint, and uintptr
- */
-var typedefs = []gc.Typedef{
-       {"int", gc.TINT, gc.TINT64},
-       {"uint", gc.TUINT, gc.TUINT64},
-       {"uintptr", gc.TUINTPTR, gc.TUINT64},
-}
-
 func betypeinit() {
        gc.Widthptr = 8
        gc.Widthint = 8
@@ -54,7 +44,6 @@ func Main() {
        gc.Thearch.Thechar = thechar
        gc.Thearch.Thestring = thestring
        gc.Thearch.Thelinkarch = thelinkarch
-       gc.Thearch.Typedefs = typedefs
        gc.Thearch.REGSP = ppc64.REGSP
        gc.Thearch.REGCTXT = ppc64.REGCTXT
        gc.Thearch.REGCALLX = ppc64.REG_R3
index 2535e3e165af699ae4e5328f149d4aa765e9b47e..c871043bc883913964a3d7edeecb2fcb1c42259e 100644 (file)
@@ -23,16 +23,6 @@ func linkarchinit() {
 
 var MAXWIDTH int64 = (1 << 32) - 1
 
-/*
- * go declares several platform-specific type aliases:
- * int, uint, and uintptr
- */
-var typedefs = []gc.Typedef{
-       {"int", gc.TINT, gc.TINT32},
-       {"uint", gc.TUINT, gc.TUINT32},
-       {"uintptr", gc.TUINTPTR, gc.TUINT32},
-}
-
 func betypeinit() {
        gc.Widthptr = 4
        gc.Widthint = 4
@@ -43,7 +33,6 @@ func Main() {
        gc.Thearch.Thechar = thechar
        gc.Thearch.Thestring = thestring
        gc.Thearch.Thelinkarch = thelinkarch
-       gc.Thearch.Typedefs = typedefs
        gc.Thearch.REGSP = x86.REGSP
        gc.Thearch.REGCTXT = x86.REGCTXT
        gc.Thearch.REGCALLX = x86.REG_BX