aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/internal/obj')
-rw-r--r--src/cmd/internal/obj/ar.go14
-rw-r--r--src/cmd/internal/obj/arm/asm5.go86
-rw-r--r--src/cmd/internal/obj/arm/obj5.go47
-rw-r--r--src/cmd/internal/obj/data.go34
-rw-r--r--src/cmd/internal/obj/go.go12
-rw-r--r--src/cmd/internal/obj/i386/asm8.go8
-rw-r--r--src/cmd/internal/obj/i386/obj8.go40
-rw-r--r--src/cmd/internal/obj/ld.go62
-rw-r--r--src/cmd/internal/obj/link.go16
-rw-r--r--src/cmd/internal/obj/objfile.go2
-rw-r--r--src/cmd/internal/obj/pcln.go46
-rw-r--r--src/cmd/internal/obj/ppc64/asm9.go60
-rw-r--r--src/cmd/internal/obj/ppc64/obj9.go48
-rw-r--r--src/cmd/internal/obj/sym.go12
-rw-r--r--src/cmd/internal/obj/x86/asm6.go32
-rw-r--r--src/cmd/internal/obj/x86/obj6.go42
16 files changed, 244 insertions, 317 deletions
diff --git a/src/cmd/internal/obj/ar.go b/src/cmd/internal/obj/ar.go
index 3991e730b0..7cbeafdda5 100644
--- a/src/cmd/internal/obj/ar.go
+++ b/src/cmd/internal/obj/ar.go
@@ -35,11 +35,11 @@ package obj
// THE SOFTWARE.
type ar_hdr struct {
- Name string
- Date string
- Uid string
- Gid string
- Mode string
- Size string
- Fmag string
+ name string
+ date string
+ uid string
+ gid string
+ mode string
+ size string
+ fmag string
}
diff --git a/src/cmd/internal/obj/arm/asm5.go b/src/cmd/internal/obj/arm/asm5.go
index aff9a17214..8e42d6b527 100644
--- a/src/cmd/internal/obj/arm/asm5.go
+++ b/src/cmd/internal/obj/arm/asm5.go
@@ -437,7 +437,7 @@ func asmoutnacl(ctxt *obj.Link, origPC int32, p *obj.Prog, o *Optab, out []uint3
// split it into two instructions:
// ADD $-100004, R13
// MOVW R14, 0(R13)
- q = new(obj.Prog)
+ q = ctxt.NewProg()
p.Scond &^= C_WBIT
*q = *p
@@ -462,14 +462,14 @@ func asmoutnacl(ctxt *obj.Link, origPC int32, p *obj.Prog, o *Optab, out []uint3
p.From = *a
p.From.Reg = 0
p.From.Type = obj.TYPE_CONST
- p.To = obj.Zprog.To
+ p.To = obj.Addr{}
p.To.Type = obj.TYPE_REG
p.To.Reg = REG_R13
// make q into p but load/store from 0(R13)
q.Spadj = 0
- *a2 = obj.Zprog.From
+ *a2 = obj.Addr{}
a2.Type = obj.TYPE_MEM
a2.Reg = REG_R13
a2.Sym = nil
@@ -514,7 +514,7 @@ func asmoutnacl(ctxt *obj.Link, origPC int32, p *obj.Prog, o *Optab, out []uint3
if p.Scond&(C_PBIT|C_WBIT) != 0 {
ctxt.Diag("unsupported instruction (.P/.W): %v", p)
}
- q = new(obj.Prog)
+ q = ctxt.NewProg()
*q = *p
if p.To.Type == obj.TYPE_MEM {
a2 = &q.To
@@ -535,12 +535,12 @@ func asmoutnacl(ctxt *obj.Link, origPC int32, p *obj.Prog, o *Optab, out []uint3
p.From = *a
p.From.Type = obj.TYPE_ADDR
- p.To = obj.Zprog.To
+ p.To = obj.Addr{}
p.To.Type = obj.TYPE_REG
p.To.Reg = REG_R11
// make q into p but load/store from 0(R11)
- *a2 = obj.Zprog.From
+ *a2 = obj.Addr{}
a2.Type = obj.TYPE_MEM
a2.Reg = REG_R11
@@ -606,7 +606,7 @@ func span5(ctxt *obj.Link, cursym *obj.LSym) {
p = p.Link
for ; p != nil || ctxt.Blitrl != nil; (func() { op = p; p = p.Link })() {
if p == nil {
- if checkpool(ctxt, op, 0) != 0 {
+ if checkpool(ctxt, op, 0) {
p = op
continue
}
@@ -638,7 +638,7 @@ func span5(ctxt *obj.Link, cursym *obj.LSym) {
if p.As == ACASE {
i = int(casesz(ctxt, p))
}
- if checkpool(ctxt, op, i) != 0 {
+ if checkpool(ctxt, op, i) {
p = op
continue
}
@@ -749,7 +749,7 @@ func span5(ctxt *obj.Link, cursym *obj.LSym) {
}
cursym.Size = int64(c)
- if !(bflag != 0) {
+ if bflag == 0 {
break
}
}
@@ -834,16 +834,16 @@ func span5(ctxt *obj.Link, cursym *obj.LSym) {
* drop the pool now, and branch round it.
* this happens only in extended basic blocks that exceed 4k.
*/
-func checkpool(ctxt *obj.Link, p *obj.Prog, sz int) int {
+func checkpool(ctxt *obj.Link, p *obj.Prog, sz int) bool {
if pool.size >= 0xff0 || immaddr(int32((p.Pc+int64(sz)+4)+4+int64(12+pool.size)-int64(pool.start+8))) == 0 {
return flushpool(ctxt, p, 1, 0)
} else if p.Link == nil {
return flushpool(ctxt, p, 2, 0)
}
- return 0
+ return false
}
-func flushpool(ctxt *obj.Link, p *obj.Prog, skip int, force int) int {
+func flushpool(ctxt *obj.Link, p *obj.Prog, skip int, force int) bool {
var q *obj.Prog
if ctxt.Blitrl != nil {
@@ -851,23 +851,21 @@ func flushpool(ctxt *obj.Link, p *obj.Prog, skip int, force int) int {
if false && skip == 1 {
fmt.Printf("note: flush literal pool at %x: len=%d ref=%x\n", uint64(p.Pc+4), pool.size, pool.start)
}
- q = new(obj.Prog)
+ q = ctxt.NewProg()
q.As = AB
q.To.Type = obj.TYPE_BRANCH
q.Pcond = p.Link
q.Link = ctxt.Blitrl
q.Lineno = p.Lineno
- q.Ctxt = p.Ctxt
ctxt.Blitrl = q
- } else if !(force != 0) && (p.Pc+int64(12+pool.size)-int64(pool.start) < 2048) { // 12 take into account the maximum nacl literal pool alignment padding size
- return 0
+ } else if force == 0 && (p.Pc+int64(12+pool.size)-int64(pool.start) < 2048) { // 12 take into account the maximum nacl literal pool alignment padding size
+ return false
}
if ctxt.Headtype == obj.Hnacl && pool.size%16 != 0 {
// if pool is not multiple of 16 bytes, add an alignment marker
- q = new(obj.Prog)
+ q = ctxt.NewProg()
q.As = ADATABUNDLEEND
- q.Ctxt = p.Ctxt
ctxt.Elitrl.Link = q
ctxt.Elitrl = q
}
@@ -888,10 +886,10 @@ func flushpool(ctxt *obj.Link, p *obj.Prog, skip int, force int) int {
pool.size = 0
pool.start = 0
pool.extra = 0
- return 1
+ return true
}
- return 0
+ return false
}
func addpool(ctxt *obj.Link, p *obj.Prog, a *obj.Addr) {
@@ -901,9 +899,8 @@ func addpool(ctxt *obj.Link, p *obj.Prog, a *obj.Addr) {
c = aclass(ctxt, a)
- t = obj.Zprog
+ t.Ctxt = ctxt
t.As = AWORD
- t.Ctxt = p.Ctxt
switch c {
default:
@@ -941,12 +938,9 @@ func addpool(ctxt *obj.Link, p *obj.Prog, a *obj.Addr) {
if ctxt.Headtype == obj.Hnacl && pool.size%16 == 0 {
// start a new data bundle
- q = new(obj.Prog)
-
- *q = obj.Zprog
+ q = ctxt.NewProg()
q.As = ADATABUNDLE
q.Pc = int64(pool.size)
- q.Ctxt = p.Ctxt
pool.size += 4
if ctxt.Blitrl == nil {
ctxt.Blitrl = q
@@ -958,7 +952,7 @@ func addpool(ctxt *obj.Link, p *obj.Prog, a *obj.Addr) {
ctxt.Elitrl = q
}
- q = new(obj.Prog)
+ q = ctxt.NewProg()
*q = t
q.Pc = int64(pool.size)
@@ -1740,7 +1734,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
case 13: /* op $lcon, [R], R */
o1 = omvl(ctxt, p, &p.From, REGTMP)
- if !(o1 != 0) {
+ if o1 == 0 {
break
}
o2 = oprrr(ctxt, int(p.As), int(p.Scond))
@@ -1836,7 +1830,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
case 30: /* mov/movb/movbu R,L(R) */
o1 = omvl(ctxt, p, &p.To, REGTMP)
- if !(o1 != 0) {
+ if o1 == 0 {
break
}
r = int(p.To.Reg)
@@ -1851,7 +1845,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
case 31: /* mov/movbu L(R),R -> lr[b] */
o1 = omvl(ctxt, p, &p.From, REGTMP)
- if !(o1 != 0) {
+ if o1 == 0 {
break
}
r = int(p.From.Reg)
@@ -1866,7 +1860,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
case 34: /* mov $lacon,R */
o1 = omvl(ctxt, p, &p.From, REGTMP)
- if !(o1 != 0) {
+ if o1 == 0 {
break
}
@@ -1984,7 +1978,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
case 52: /* floating point store, int32 offset UGLY */
o1 = omvl(ctxt, p, &p.To, REGTMP)
- if !(o1 != 0) {
+ if o1 == 0 {
break
}
r = int(p.To.Reg)
@@ -1997,7 +1991,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
case 53: /* floating point load, int32 offset UGLY */
o1 = omvl(ctxt, p, &p.From, REGTMP)
- if !(o1 != 0) {
+ if o1 == 0 {
break
}
r = int(p.From.Reg)
@@ -2122,7 +2116,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
case 64: /* mov/movb/movbu R,addr */
o1 = omvl(ctxt, p, &p.To, REGTMP)
- if !(o1 != 0) {
+ if o1 == 0 {
break
}
o2 = osr(ctxt, int(p.As), int(p.From.Reg), 0, REGTMP, int(p.Scond))
@@ -2134,7 +2128,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
case 65: /* mov/movbu addr,R */
o1 = omvl(ctxt, p, &p.From, REGTMP)
- if !(o1 != 0) {
+ if o1 == 0 {
break
}
o2 = olr(ctxt, 0, REGTMP, int(p.To.Reg), int(p.Scond))
@@ -2149,7 +2143,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
case 68: /* floating point store -> ADDR */
o1 = omvl(ctxt, p, &p.To, REGTMP)
- if !(o1 != 0) {
+ if o1 == 0 {
break
}
o2 = ofsr(ctxt, int(p.As), int(p.From.Reg), 0, REGTMP, int(p.Scond), p)
@@ -2161,7 +2155,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
case 69: /* floating point load <- ADDR */
o1 = omvl(ctxt, p, &p.From, REGTMP)
- if !(o1 != 0) {
+ if o1 == 0 {
break
}
o2 = ofsr(ctxt, int(p.As), int(p.To.Reg), 0, (REGTMP&15), int(p.Scond), p) | 1<<20
@@ -2197,7 +2191,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
case 72: /* movh/movhu R,L(R) -> strh */
o1 = omvl(ctxt, p, &p.To, REGTMP)
- if !(o1 != 0) {
+ if o1 == 0 {
break
}
r = int(p.To.Reg)
@@ -2209,7 +2203,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
case 73: /* movb/movh/movhu L(R),R -> ldrsb/ldrsh/ldrh */
o1 = omvl(ctxt, p, &p.From, REGTMP)
- if !(o1 != 0) {
+ if o1 == 0 {
break
}
r = int(p.From.Reg)
@@ -2394,7 +2388,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
case 93: /* movb/movh/movhu addr,R -> ldrsb/ldrsh/ldrh */
o1 = omvl(ctxt, p, &p.From, REGTMP)
- if !(o1 != 0) {
+ if o1 == 0 {
break
}
o2 = olhr(ctxt, 0, REGTMP, int(p.To.Reg), int(p.Scond))
@@ -2411,7 +2405,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
case 94: /* movh/movhu R,addr -> strh */
o1 = omvl(ctxt, p, &p.To, REGTMP)
- if !(o1 != 0) {
+ if o1 == 0 {
break
}
o2 = oshr(ctxt, int(p.From.Reg), 0, REGTMP, int(p.Scond))
@@ -2725,10 +2719,10 @@ func olr(ctxt *obj.Link, v int32, b int, r int, sc int) uint32 {
ctxt.Diag(".nil on LDR/STR instruction")
}
o = ((uint32(sc) & C_SCOND) ^ C_SCOND_XOR) << 28
- if !(sc&C_PBIT != 0) {
+ if sc&C_PBIT == 0 {
o |= 1 << 24
}
- if !(sc&C_UBIT != 0) {
+ if sc&C_UBIT == 0 {
o |= 1 << 23
}
if sc&C_WBIT != 0 {
@@ -2759,7 +2753,7 @@ func olhr(ctxt *obj.Link, v int32, b int, r int, sc int) uint32 {
ctxt.Diag(".nil on LDRH/STRH instruction")
}
o = ((uint32(sc) & C_SCOND) ^ C_SCOND_XOR) << 28
- if !(sc&C_PBIT != 0) {
+ if sc&C_PBIT == 0 {
o |= 1 << 24
}
if sc&C_WBIT != 0 {
@@ -2820,7 +2814,7 @@ func ofsr(ctxt *obj.Link, a int, r int, v int32, b int, sc int, p *obj.Prog) uin
ctxt.Diag(".nil on FLDR/FSTR instruction")
}
o = ((uint32(sc) & C_SCOND) ^ C_SCOND_XOR) << 28
- if !(sc&C_PBIT != 0) {
+ if sc&C_PBIT == 0 {
o |= 1 << 24
}
if sc&C_WBIT != 0 {
@@ -2860,7 +2854,7 @@ func ofsr(ctxt *obj.Link, a int, r int, v int32, b int, sc int, p *obj.Prog) uin
func omvl(ctxt *obj.Link, p *obj.Prog, a *obj.Addr, dr int) uint32 {
var v int32
var o1 uint32
- if !(p.Pcond != nil) {
+ if p.Pcond == nil {
aclass(ctxt, a)
v = immrot(^uint32(ctxt.Instoffset))
if v == 0 {
diff --git a/src/cmd/internal/obj/arm/obj5.go b/src/cmd/internal/obj/arm/obj5.go
index 406939e058..ce75ab1fa7 100644
--- a/src/cmd/internal/obj/arm/obj5.go
+++ b/src/cmd/internal/obj/arm/obj5.go
@@ -225,7 +225,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
cursym.Args = p.To.U.Argsize
if ctxt.Debugzerostack != 0 {
- if autoffset != 0 && !(p.From3.Offset&obj.NOSPLIT != 0) {
+ if autoffset != 0 && p.From3.Offset&obj.NOSPLIT == 0 {
// MOVW $4(R13), R1
p = obj.Appendp(ctxt, p)
@@ -370,7 +370,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
}
}
- if !(autosize != 0) && !(cursym.Text.Mark&LEAF != 0) {
+ if autosize == 0 && cursym.Text.Mark&LEAF == 0 {
if ctxt.Debugvlog != 0 {
fmt.Fprintf(ctxt.Bso, "save suppressed in: %s\n", cursym.Name)
obj.Bflush(ctxt.Bso)
@@ -381,13 +381,13 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
if cursym.Text.Mark&LEAF != 0 {
cursym.Leaf = 1
- if !(autosize != 0) {
+ if autosize == 0 {
break
}
}
- if !(p.From3.Offset&obj.NOSPLIT != 0) {
- p = stacksplit(ctxt, p, autosize, bool2int(!(cursym.Text.From3.Offset&obj.NEEDCTXT != 0))) // emit split check
+ if p.From3.Offset&obj.NOSPLIT == 0 {
+ p = stacksplit(ctxt, p, autosize, cursym.Text.From3.Offset&obj.NEEDCTXT == 0) // emit split check
}
// MOVW.W R14,$-autosize(SP)
@@ -493,9 +493,9 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
case obj.ARET:
obj.Nocache(p)
if cursym.Text.Mark&LEAF != 0 {
- if !(autosize != 0) {
+ if autosize == 0 {
p.As = AB
- p.From = obj.Zprog.From
+ p.From = obj.Addr{}
if p.To.Sym != nil { // retjmp
p.To.Type = obj.TYPE_BRANCH
} else {
@@ -662,8 +662,8 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
}
}
-func isfloatreg(a *obj.Addr) int {
- return bool2int(a.Type == obj.TYPE_REG && REG_F0 <= a.Reg && a.Reg <= REG_F15)
+func isfloatreg(a *obj.Addr) bool {
+ return a.Type == obj.TYPE_REG && REG_F0 <= a.Reg && a.Reg <= REG_F15
}
func softfloat(ctxt *obj.Link, cursym *obj.LSym) {
@@ -687,7 +687,7 @@ func softfloat(ctxt *obj.Link, cursym *obj.LSym) {
for p = cursym.Text; p != nil; p = p.Link {
switch p.As {
case AMOVW:
- if isfloatreg(&p.To) != 0 || isfloatreg(&p.From) != 0 {
+ if isfloatreg(&p.To) || isfloatreg(&p.From) {
goto soft
}
goto notsoft
@@ -721,13 +721,13 @@ func softfloat(ctxt *obj.Link, cursym *obj.LSym) {
}
soft:
- if !(wasfloat != 0) || (p.Mark&LABEL != 0) {
- next = new(obj.Prog)
+ if wasfloat == 0 || (p.Mark&LABEL != 0) {
+ next = ctxt.NewProg()
*next = *p
// BL _sfloat(SB)
- *p = obj.Zprog
-
+ *p = obj.Prog{}
+ p.Ctxt = ctxt
p.Link = next
p.As = ABL
p.To.Type = obj.TYPE_BRANCH
@@ -745,7 +745,7 @@ func softfloat(ctxt *obj.Link, cursym *obj.LSym) {
}
}
-func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, noctxt int) *obj.Prog {
+func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, noctxt bool) *obj.Prog {
// MOVW g_stackguard(g), R1
p = obj.Appendp(ctxt, p)
@@ -856,7 +856,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, noctxt int) *obj.P
if ctxt.Cursym.Cfunc != 0 {
p.To.Sym = obj.Linklookup(ctxt, "runtime.morestackc", 0)
} else {
- p.To.Sym = ctxt.Symmorestack[noctxt]
+ p.To.Sym = ctxt.Symmorestack[bool2int(noctxt)]
}
// BLS start
@@ -885,7 +885,7 @@ func follow(ctxt *obj.Link, s *obj.LSym) {
ctxt.Cursym = s
- firstp = new(obj.Prog)
+ firstp = ctxt.NewProg()
lastp = firstp
xfol(ctxt, s.Text, &lastp)
lastp.Link = nil
@@ -948,7 +948,7 @@ loop:
if q != nil && q.As != obj.ATEXT {
p.Mark |= FOLL
p = q
- if !(p.Mark&FOLL != 0) {
+ if p.Mark&FOLL == 0 {
goto loop
}
}
@@ -979,9 +979,9 @@ loop:
copy:
for {
- r = new(obj.Prog)
+ r = ctxt.NewProg()
*r = *p
- if !(r.Mark&FOLL != 0) {
+ if r.Mark&FOLL == 0 {
fmt.Printf("can't happen 1\n")
}
r.Mark |= FOLL
@@ -1003,10 +1003,10 @@ loop:
}
r.Pcond = p.Link
r.Link = p.Pcond
- if !(r.Link.Mark&FOLL != 0) {
+ if r.Link.Mark&FOLL == 0 {
xfol(ctxt, r.Link, last)
}
- if !(r.Pcond.Mark&FOLL != 0) {
+ if r.Pcond.Mark&FOLL == 0 {
fmt.Printf("can't happen 2\n")
}
return
@@ -1014,13 +1014,12 @@ loop:
}
a = AB
- q = new(obj.Prog)
+ q = ctxt.NewProg()
q.As = int16(a)
q.Lineno = p.Lineno
q.To.Type = obj.TYPE_BRANCH
q.To.Offset = p.Pc
q.Pcond = p
- q.Ctxt = p.Ctxt
p = q
}
diff --git a/src/cmd/internal/obj/data.go b/src/cmd/internal/obj/data.go
index 265e609bbe..66995a3cd7 100644
--- a/src/cmd/internal/obj/data.go
+++ b/src/cmd/internal/obj/data.go
@@ -142,7 +142,7 @@ func Setuintxx(ctxt *Link, s *LSym, off int64, v uint64, wid int64) int64 {
return off + wid
}
-func Adduintxx(ctxt *Link, s *LSym, v uint64, wid int) int64 {
+func adduintxx(ctxt *Link, s *LSym, v uint64, wid int) int64 {
var off int64
off = s.Size
@@ -150,23 +150,23 @@ func Adduintxx(ctxt *Link, s *LSym, v uint64, wid int) int64 {
return off
}
-func Adduint8(ctxt *Link, s *LSym, v uint8) int64 {
- return Adduintxx(ctxt, s, uint64(v), 1)
+func adduint8(ctxt *Link, s *LSym, v uint8) int64 {
+ return adduintxx(ctxt, s, uint64(v), 1)
}
-func Adduint16(ctxt *Link, s *LSym, v uint16) int64 {
- return Adduintxx(ctxt, s, uint64(v), 2)
+func adduint16(ctxt *Link, s *LSym, v uint16) int64 {
+ return adduintxx(ctxt, s, uint64(v), 2)
}
func Adduint32(ctxt *Link, s *LSym, v uint32) int64 {
- return Adduintxx(ctxt, s, uint64(v), 4)
+ return adduintxx(ctxt, s, uint64(v), 4)
}
func Adduint64(ctxt *Link, s *LSym, v uint64) int64 {
- return Adduintxx(ctxt, s, v, 8)
+ return adduintxx(ctxt, s, v, 8)
}
-func Setuint8(ctxt *Link, s *LSym, r int64, v uint8) int64 {
+func setuint8(ctxt *Link, s *LSym, r int64, v uint8) int64 {
return Setuintxx(ctxt, s, r, uint64(v), 1)
}
@@ -174,7 +174,7 @@ func setuint16(ctxt *Link, s *LSym, r int64, v uint16) int64 {
return Setuintxx(ctxt, s, r, uint64(v), 2)
}
-func Setuint32(ctxt *Link, s *LSym, r int64, v uint32) int64 {
+func setuint32(ctxt *Link, s *LSym, r int64, v uint32) int64 {
return Setuintxx(ctxt, s, r, uint64(v), 4)
}
@@ -182,7 +182,7 @@ func setuint64(ctxt *Link, s *LSym, r int64, v uint64) int64 {
return Setuintxx(ctxt, s, r, v, 8)
}
-func Addaddrplus(ctxt *Link, s *LSym, t *LSym, add int64) int64 {
+func addaddrplus(ctxt *Link, s *LSym, t *LSym, add int64) int64 {
var i int64
var r *Reloc
@@ -222,11 +222,11 @@ func addpcrelplus(ctxt *Link, s *LSym, t *LSym, add int64) int64 {
return i + int64(r.Siz)
}
-func Addaddr(ctxt *Link, s *LSym, t *LSym) int64 {
- return Addaddrplus(ctxt, s, t, 0)
+func addaddr(ctxt *Link, s *LSym, t *LSym) int64 {
+ return addaddrplus(ctxt, s, t, 0)
}
-func Setaddrplus(ctxt *Link, s *LSym, off int64, t *LSym, add int64) int64 {
+func setaddrplus(ctxt *Link, s *LSym, off int64, t *LSym, add int64) int64 {
var r *Reloc
if s.Type == 0 {
@@ -247,11 +247,11 @@ func Setaddrplus(ctxt *Link, s *LSym, off int64, t *LSym, add int64) int64 {
return off + int64(r.Siz)
}
-func Setaddr(ctxt *Link, s *LSym, off int64, t *LSym) int64 {
- return Setaddrplus(ctxt, s, off, t, 0)
+func setaddr(ctxt *Link, s *LSym, off int64, t *LSym) int64 {
+ return setaddrplus(ctxt, s, off, t, 0)
}
-func Addsize(ctxt *Link, s *LSym, t *LSym) int64 {
+func addsize(ctxt *Link, s *LSym, t *LSym) int64 {
var i int64
var r *Reloc
@@ -270,7 +270,7 @@ func Addsize(ctxt *Link, s *LSym, t *LSym) int64 {
return i + int64(r.Siz)
}
-func Addaddrplus4(ctxt *Link, s *LSym, t *LSym, add int64) int64 {
+func addaddrplus4(ctxt *Link, s *LSym, t *LSym, add int64) int64 {
var i int64
var r *Reloc
diff --git a/src/cmd/internal/obj/go.go b/src/cmd/internal/obj/go.go
index 3c176342ca..1bd10fcab8 100644
--- a/src/cmd/internal/obj/go.go
+++ b/src/cmd/internal/obj/go.go
@@ -17,8 +17,6 @@ var Framepointer_enabled int
var Fieldtrack_enabled int
-var Zprog Prog
-
// Toolchain experiments.
// These are controlled by the GOEXPERIMENT environment
// variable recorded when the toolchain is built.
@@ -72,11 +70,11 @@ func double2ieee(ieee *uint64, f float64) {
func Nopout(p *Prog) {
p.As = ANOP
- p.Scond = Zprog.Scond
- p.From = Zprog.From
- p.From3 = Zprog.From3
- p.Reg = Zprog.Reg
- p.To = Zprog.To
+ p.Scond = 0
+ p.From = Addr{}
+ p.From3 = Addr{}
+ p.Reg = 0
+ p.To = Addr{}
}
func Nocache(p *Prog) {
diff --git a/src/cmd/internal/obj/i386/asm8.go b/src/cmd/internal/obj/i386/asm8.go
index b176d50af5..97d4012c0d 100644
--- a/src/cmd/internal/obj/i386/asm8.go
+++ b/src/cmd/internal/obj/i386/asm8.go
@@ -1853,7 +1853,7 @@ func span8(ctxt *obj.Link, s *obj.LSym) {
ctxt.Diag("span must be looping")
log.Fatalf("bad code")
}
- if !(loop != 0) {
+ if loop == 0 {
break
}
}
@@ -3355,7 +3355,7 @@ found:
case Zlit:
for ; ; z++ {
op = int(o.op[z])
- if !(op != 0) {
+ if op == 0 {
break
}
ctxt.Andptr[0] = byte(op)
@@ -3365,7 +3365,7 @@ found:
case Zlitm_r:
for ; ; z++ {
op = int(o.op[z])
- if !(op != 0) {
+ if op == 0 {
break
}
ctxt.Andptr[0] = byte(op)
@@ -3400,7 +3400,7 @@ found:
tmp2 := z
z++
op = int(o.op[tmp2])
- if !(op != 0) {
+ if op == 0 {
break
}
ctxt.Andptr[0] = byte(op)
diff --git a/src/cmd/internal/obj/i386/obj8.go b/src/cmd/internal/obj/i386/obj8.go
index f833a9af52..ffb7524aa3 100644
--- a/src/cmd/internal/obj/i386/obj8.go
+++ b/src/cmd/internal/obj/i386/obj8.go
@@ -38,16 +38,16 @@ import (
"math"
)
-func canuselocaltls(ctxt *obj.Link) int {
+func canuselocaltls(ctxt *obj.Link) bool {
switch ctxt.Headtype {
case obj.Hlinux,
obj.Hnacl,
obj.Hplan9,
obj.Hwindows:
- return 0
+ return false
}
- return 1
+ return true
}
func progedit(ctxt *obj.Link, p *obj.Prog) {
@@ -56,7 +56,7 @@ func progedit(ctxt *obj.Link, p *obj.Prog) {
var q *obj.Prog
// See obj6.c for discussion of TLS.
- if canuselocaltls(ctxt) != 0 {
+ if canuselocaltls(ctxt) {
// Reduce TLS initial exec model to TLS local exec model.
// Sequences like
// MOVL TLS, BX
@@ -261,13 +261,13 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
q = nil
- if !(p.From3.Offset&obj.NOSPLIT != 0) || (p.From3.Offset&obj.WRAPPER != 0) {
+ if p.From3.Offset&obj.NOSPLIT == 0 || (p.From3.Offset&obj.WRAPPER != 0) {
p = obj.Appendp(ctxt, p)
p = load_g_cx(ctxt, p) // load g into CX
}
- if !(cursym.Text.From3.Offset&obj.NOSPLIT != 0) {
- p = stacksplit(ctxt, p, autoffset, bool2int(!(cursym.Text.From3.Offset&obj.NEEDCTXT != 0)), &q) // emit split check
+ if cursym.Text.From3.Offset&obj.NOSPLIT == 0 {
+ p = stacksplit(ctxt, p, autoffset, cursym.Text.From3.Offset&obj.NEEDCTXT == 0, &q) // emit split check
}
if autoffset != 0 {
@@ -367,7 +367,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
p2.Pcond = p
}
- if ctxt.Debugzerostack != 0 && autoffset != 0 && !(cursym.Text.From3.Offset&obj.NOSPLIT != 0) {
+ if ctxt.Debugzerostack != 0 && autoffset != 0 && cursym.Text.From3.Offset&obj.NOSPLIT == 0 {
// 8l -Z means zero the stack frame on entry.
// This slows down function calls but can help avoid
// false positives in garbage collection.
@@ -507,7 +507,7 @@ func load_g_cx(ctxt *obj.Link, p *obj.Prog) *obj.Prog {
// Returns last new instruction.
// On return, *jmpok is the instruction that should jump
// to the stack frame allocation if no split is needed.
-func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, noctxt int, jmpok **obj.Prog) *obj.Prog {
+func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, noctxt bool, jmpok **obj.Prog) *obj.Prog {
var q *obj.Prog
var q1 *obj.Prog
@@ -659,7 +659,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, noctxt int, jmpok
if ctxt.Cursym.Cfunc != 0 {
p.To.Sym = obj.Linklookup(ctxt, "runtime.morestackc", 0)
} else {
- p.To.Sym = ctxt.Symmorestack[noctxt]
+ p.To.Sym = ctxt.Symmorestack[bool2int(noctxt)]
}
p = obj.Appendp(ctxt, p)
@@ -684,27 +684,27 @@ func follow(ctxt *obj.Link, s *obj.LSym) {
ctxt.Cursym = s
- firstp = new(obj.Prog)
+ firstp = ctxt.NewProg()
lastp = firstp
xfol(ctxt, s.Text, &lastp)
lastp.Link = nil
s.Text = firstp.Link
}
-func nofollow(a int) int {
+func nofollow(a int) bool {
switch a {
case obj.AJMP,
obj.ARET,
AIRETL,
AIRETW,
obj.AUNDEF:
- return 1
+ return true
}
- return 0
+ return false
}
-func pushpop(a int) int {
+func pushpop(a int) bool {
switch a {
case APUSHL,
APUSHFL,
@@ -714,10 +714,10 @@ func pushpop(a int) int {
APOPFL,
APOPW,
APOPFW:
- return 1
+ return true
}
- return 0
+ return false
}
func relinv(a int) int {
@@ -802,7 +802,7 @@ loop:
continue
}
- if nofollow(a) != 0 || pushpop(a) != 0 {
+ if nofollow(a) || pushpop(a) {
break // NOTE(rsc): arm does goto copy
}
if q.Pcond == nil || q.Pcond.Mark != 0 {
@@ -839,7 +839,7 @@ loop:
/* */
}
}
- q = new(obj.Prog)
+ q = ctxt.NewProg()
q.As = obj.AJMP
q.Lineno = p.Lineno
q.To.Type = obj.TYPE_BRANCH
@@ -856,7 +856,7 @@ loop:
a = int(p.As)
/* continue loop with what comes after p */
- if nofollow(a) != 0 {
+ if nofollow(a) {
return
}
if p.Pcond != nil && a != obj.ACALL {
diff --git a/src/cmd/internal/obj/ld.go b/src/cmd/internal/obj/ld.go
index a53c8676e6..99cf64a3ed 100644
--- a/src/cmd/internal/obj/ld.go
+++ b/src/cmd/internal/obj/ld.go
@@ -31,50 +31,6 @@
package obj
-import (
- "fmt"
- "os"
- "path"
- "strings"
-)
-
-func addlib(ctxt *Link, src, obj, pathname string) {
- name := path.Clean(pathname)
-
- // runtime.a -> runtime
- short := strings.TrimSuffix(name, ".a")
-
- // already loaded?
- for i := range ctxt.Library {
- if ctxt.Library[i].Pkg == short {
- return
- }
- }
-
- var pname string
- // runtime -> runtime.a for search
- if (!(ctxt.Windows != 0) && name[0] == '/') || (ctxt.Windows != 0 && name[1] == ':') {
- pname = name
- } else {
- // try dot, -L "libdir", and then goroot.
- for _, dir := range ctxt.Libdir {
- pname = dir + "/" + name
- if _, err := os.Stat(pname); !os.IsNotExist(err) {
- break
- }
- }
- }
- pname = path.Clean(pname)
-
- // runtime.a -> runtime
- pname = strings.TrimSuffix(pname, ".a")
-
- if ctxt.Debugvlog > 1 && ctxt.Bso != nil {
- fmt.Fprintf(ctxt.Bso, "%5.2f addlib: %s %s pulls in %s\n", Cputime(), obj, src, pname)
- }
- Addlibpath(ctxt, src, obj, pname, name)
-}
-
/*
* add library to library list.
* srcref: src file referring to package
@@ -82,24 +38,6 @@ func addlib(ctxt *Link, src, obj, pathname string) {
* file: object file, e.g., /home/rsc/go/pkg/container/vector.a
* pkg: package import path, e.g. container/vector
*/
-func Addlibpath(ctxt *Link, srcref, objref, file, pkg string) {
- for _, lib := range ctxt.Library {
- if lib.File == file {
- return
- }
- }
-
- if ctxt.Debugvlog > 1 && ctxt.Bso != nil {
- fmt.Fprintf(ctxt.Bso, "%5.2f addlibpath: srcref: %s objref: %s file: %s pkg: %s\n", Cputime(), srcref, objref, file, pkg)
- }
-
- ctxt.Library = append(ctxt.Library, Library{
- Objref: objref,
- Srcref: srcref,
- File: file,
- Pkg: pkg,
- })
-}
const (
LOG = 5
diff --git a/src/cmd/internal/obj/link.go b/src/cmd/internal/obj/link.go
index d256fbbb18..7daf12e8f2 100644
--- a/src/cmd/internal/obj/link.go
+++ b/src/cmd/internal/obj/link.go
@@ -280,14 +280,14 @@ type Pcdata struct {
}
type Pciter struct {
- D Pcdata
- P []byte
- Pc uint32
- Nextpc uint32
- Pcscale uint32
- Value int32
- Start int
- Done int
+ d Pcdata
+ p []byte
+ pc uint32
+ nextpc uint32
+ pcscale uint32
+ value int32
+ start int
+ done int
}
// An Addr is an argument to an instruction.
diff --git a/src/cmd/internal/obj/objfile.go b/src/cmd/internal/obj/objfile.go
index 7e4482ccf6..b15bd007af 100644
--- a/src/cmd/internal/obj/objfile.go
+++ b/src/cmd/internal/obj/objfile.go
@@ -188,7 +188,7 @@ func Writeobjdirect(ctxt *Link, b *Biobuf) {
}
}
- if !(found != 0) {
+ if found == 0 {
p = Appendp(ctxt, s.Text)
p.As = AFUNCDATA
p.From.Type = TYPE_CONST
diff --git a/src/cmd/internal/obj/pcln.go b/src/cmd/internal/obj/pcln.go
index 746ca2dd8d..f5cdd3a099 100644
--- a/src/cmd/internal/obj/pcln.go
+++ b/src/cmd/internal/obj/pcln.go
@@ -307,7 +307,7 @@ func getvarint(pp *[]byte) uint32 {
v |= uint32(p[0]&0x7F) << uint(shift)
tmp7 := p
p = p[1:]
- if !(tmp7[0]&0x80 != 0) {
+ if tmp7[0]&0x80 == 0 {
break
}
}
@@ -316,45 +316,45 @@ func getvarint(pp *[]byte) uint32 {
return v
}
-func Pciternext(it *Pciter) {
+func pciternext(it *Pciter) {
var v uint32
var dv int32
- it.Pc = it.Nextpc
- if it.Done != 0 {
+ it.pc = it.nextpc
+ if it.done != 0 {
return
}
- if -cap(it.P) >= -cap(it.D.P[len(it.D.P):]) {
- it.Done = 1
+ if -cap(it.p) >= -cap(it.d.P[len(it.d.P):]) {
+ it.done = 1
return
}
// value delta
- v = getvarint(&it.P)
+ v = getvarint(&it.p)
- if v == 0 && !(it.Start != 0) {
- it.Done = 1
+ if v == 0 && it.start == 0 {
+ it.done = 1
return
}
- it.Start = 0
+ it.start = 0
dv = int32(v>>1) ^ (int32(v<<31) >> 31)
- it.Value += dv
+ it.value += dv
// pc delta
- v = getvarint(&it.P)
+ v = getvarint(&it.p)
- it.Nextpc = it.Pc + v*it.Pcscale
+ it.nextpc = it.pc + v*it.pcscale
}
-func Pciterinit(ctxt *Link, it *Pciter, d *Pcdata) {
- it.D = *d
- it.P = it.D.P
- it.Pc = 0
- it.Nextpc = 0
- it.Value = -1
- it.Start = 1
- it.Done = 0
- it.Pcscale = uint32(ctxt.Arch.Minlc)
- Pciternext(it)
+func pciterinit(ctxt *Link, it *Pciter, d *Pcdata) {
+ it.d = *d
+ it.p = it.d.P
+ it.pc = 0
+ it.nextpc = 0
+ it.value = -1
+ it.start = 1
+ it.done = 0
+ it.pcscale = uint32(ctxt.Arch.Minlc)
+ pciternext(it)
}
diff --git a/src/cmd/internal/obj/ppc64/asm9.go b/src/cmd/internal/obj/ppc64/asm9.go
index 1433710944..a4e46be9e2 100644
--- a/src/cmd/internal/obj/ppc64/asm9.go
+++ b/src/cmd/internal/obj/ppc64/asm9.go
@@ -470,16 +470,14 @@ func span9(ctxt *obj.Link, cursym *obj.LSym) {
if (o.type_ == 16 || o.type_ == 17) && p.Pcond != nil {
otxt = p.Pcond.Pc - c
if otxt < -(1<<15)+10 || otxt >= (1<<15)-10 {
- q = new(obj.Prog)
- q.Ctxt = p.Ctxt
+ q = ctxt.NewProg()
q.Link = p.Link
p.Link = q
q.As = ABR
q.To.Type = obj.TYPE_BRANCH
q.Pcond = p.Pcond
p.Pcond = q
- q = new(obj.Prog)
- q.Ctxt = p.Ctxt
+ q = ctxt.NewProg()
q.Link = p.Link
p.Link = q
q.As = ABR
@@ -534,12 +532,12 @@ func span9(ctxt *obj.Link, cursym *obj.LSym) {
}
}
-func isint32(v int64) int {
- return bool2int(int64(int32(v)) == v)
+func isint32(v int64) bool {
+ return int64(int32(v)) == v
}
-func isuint32(v uint64) int {
- return bool2int(uint64(uint32(v)) == v)
+func isuint32(v uint64) bool {
+ return uint64(uint32(v)) == v
}
func aclass(ctxt *obj.Link, a *obj.Addr) int {
@@ -637,7 +635,7 @@ func aclass(ctxt *obj.Link, a *obj.Addr) int {
if -BIG <= ctxt.Instoffset && ctxt.Instoffset <= BIG {
return C_SACON
}
- if isint32(ctxt.Instoffset) != 0 {
+ if isint32(ctxt.Instoffset) {
return C_LACON
}
return C_DACON
@@ -689,10 +687,10 @@ func aclass(ctxt *obj.Link, a *obj.Addr) int {
if ctxt.Instoffset <= 0xffff {
return C_ANDCON
}
- if ctxt.Instoffset&0xffff == 0 && isuint32(uint64(ctxt.Instoffset)) != 0 { /* && (instoffset & (1<<31)) == 0) */
+ if ctxt.Instoffset&0xffff == 0 && isuint32(uint64(ctxt.Instoffset)) { /* && (instoffset & (1<<31)) == 0) */
return C_UCON
}
- if isint32(ctxt.Instoffset) != 0 || isuint32(uint64(ctxt.Instoffset)) != 0 {
+ if isint32(ctxt.Instoffset) || isuint32(uint64(ctxt.Instoffset)) {
return C_LCON
}
return C_DCON
@@ -701,10 +699,10 @@ func aclass(ctxt *obj.Link, a *obj.Addr) int {
if ctxt.Instoffset >= -0x8000 {
return C_ADDCON
}
- if ctxt.Instoffset&0xffff == 0 && isint32(ctxt.Instoffset) != 0 {
+ if ctxt.Instoffset&0xffff == 0 && isint32(ctxt.Instoffset) {
return C_UCON
}
- if isint32(ctxt.Instoffset) != 0 {
+ if isint32(ctxt.Instoffset) {
return C_LCON
}
return C_DCON
@@ -1407,20 +1405,20 @@ func addaddrreloc(ctxt *obj.Link, s *obj.LSym, o1 *uint32, o2 *uint32) {
/*
* 32-bit masks
*/
-func getmask(m []byte, v uint32) int {
+func getmask(m []byte, v uint32) bool {
var i int
m[1] = 0
m[0] = m[1]
if v != ^uint32(0) && v&(1<<31) != 0 && v&1 != 0 { /* MB > ME */
- if getmask(m, ^v) != 0 {
+ if getmask(m, ^v) {
i = int(m[0])
m[0] = m[1] + 1
m[1] = byte(i - 1)
- return 1
+ return true
}
- return 0
+ return false
}
for i = 0; i < 32; i++ {
@@ -1429,25 +1427,25 @@ func getmask(m []byte, v uint32) int {
for {
m[1] = byte(i)
i++
- if !(i < 32 && v&(1<<uint(31-i)) != 0) {
+ if i >= 32 || v&(1<<uint(31-i)) == 0 {
break
}
}
for ; i < 32; i++ {
if v&(1<<uint(31-i)) != 0 {
- return 0
+ return false
}
}
- return 1
+ return true
}
}
- return 0
+ return false
}
func maskgen(ctxt *obj.Link, p *obj.Prog, m []byte, v uint32) {
- if !(getmask(m, v) != 0) {
+ if !getmask(m, v) {
ctxt.Diag("cannot generate mask #%x\n%v", v, p)
}
}
@@ -1455,7 +1453,7 @@ func maskgen(ctxt *obj.Link, p *obj.Prog, m []byte, v uint32) {
/*
* 64-bit masks (rldic etc)
*/
-func getmask64(m []byte, v uint64) int {
+func getmask64(m []byte, v uint64) bool {
var i int
m[1] = 0
@@ -1466,25 +1464,25 @@ func getmask64(m []byte, v uint64) int {
for {
m[1] = byte(i)
i++
- if !(i < 64 && v&(uint64(1)<<uint(63-i)) != 0) {
+ if i >= 64 || v&(uint64(1)<<uint(63-i)) == 0 {
break
}
}
for ; i < 64; i++ {
if v&(uint64(1)<<uint(63-i)) != 0 {
- return 0
+ return false
}
}
- return 1
+ return true
}
}
- return 0
+ return false
}
func maskgen64(ctxt *obj.Link, p *obj.Prog, m []byte, v uint64) {
- if !(getmask64(m, v) != 0) {
+ if !getmask64(m, v) {
ctxt.Diag("cannot generate mask #%x\n%v", v, p)
}
}
@@ -1493,7 +1491,7 @@ func loadu32(r int, d int64) uint32 {
var v int32
v = int32(d >> 16)
- if isuint32(uint64(d)) != 0 {
+ if isuint32(uint64(d)) {
return LOP_IRR(OP_ORIS, uint32(r), REGZERO, uint32(v))
}
return AOP_IRR(OP_ADDIS, uint32(r), REGZERO, uint32(v))
@@ -1574,7 +1572,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
log.Fatalf("invalid handling of %v", p)
}
v >>= 16
- if r == REGZERO && isuint32(uint64(d)) != 0 {
+ if r == REGZERO && isuint32(uint64(d)) {
o1 = LOP_IRR(OP_ORIS, uint32(p.To.Reg), REGZERO, uint32(v))
break
}
@@ -1862,7 +1860,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
if r == 0 {
r = int(p.To.Reg)
}
- if p.As == AADD && (!(r0iszero != 0 /*TypeKind(100016)*/) && p.Reg == 0 || r0iszero != 0 /*TypeKind(100016)*/ && p.To.Reg == 0) {
+ if p.As == AADD && (r0iszero == 0 /*TypeKind(100016)*/ && p.Reg == 0 || r0iszero != 0 /*TypeKind(100016)*/ && p.To.Reg == 0) {
ctxt.Diag("literal operation on R0\n%v", p)
}
o1 = AOP_IRR(uint32(opirr(ctxt, int(p.As)+ALAST)), uint32(p.To.Reg), uint32(r), uint32(v)>>16)
diff --git a/src/cmd/internal/obj/ppc64/obj9.go b/src/cmd/internal/obj/ppc64/obj9.go
index 4675a9e7b0..7524674dd8 100644
--- a/src/cmd/internal/obj/ppc64/obj9.go
+++ b/src/cmd/internal/obj/ppc64/obj9.go
@@ -289,7 +289,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
p.Pcond = q1
}
- if !(q1.Mark&LEAF != 0) {
+ if q1.Mark&LEAF == 0 {
q1.Mark |= LABEL
}
} else {
@@ -341,15 +341,15 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
}
p.To.Offset = int64(autosize) - 8
- if !(p.From3.Offset&obj.NOSPLIT != 0) {
- p = stacksplit(ctxt, p, autosize, bool2int(!(cursym.Text.From3.Offset&obj.NEEDCTXT != 0))) // emit split check
+ if p.From3.Offset&obj.NOSPLIT == 0 {
+ p = stacksplit(ctxt, p, autosize, cursym.Text.From3.Offset&obj.NEEDCTXT == 0) // emit split check
}
q = p
if autosize != 0 {
/* use MOVDU to adjust R1 when saving R31, if autosize is small */
- if !(cursym.Text.Mark&LEAF != 0) && autosize >= -BIG && autosize <= BIG {
+ if cursym.Text.Mark&LEAF == 0 && autosize >= -BIG && autosize <= BIG {
mov = AMOVDU
aoffset = int(-autosize)
} else {
@@ -362,7 +362,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
q.To.Reg = REGSP
q.Spadj = +autosize
}
- } else if !(cursym.Text.Mark&LEAF != 0) {
+ } else if cursym.Text.Mark&LEAF == 0 {
if ctxt.Debugvlog != 0 {
fmt.Fprintf(ctxt.Bso, "save suppressed in: %s\n", cursym.Name)
obj.Bflush(ctxt.Bso)
@@ -499,9 +499,9 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
}
if cursym.Text.Mark&LEAF != 0 {
- if !(autosize != 0) {
+ if autosize == 0 {
p.As = ABR
- p.From = obj.Zprog.From
+ p.From = obj.Addr{}
p.To.Type = obj.TYPE_REG
p.To.Reg = REG_LR
p.Mark |= BRANCH
@@ -515,7 +515,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
p.To.Reg = REGSP
p.Spadj = -autosize
- q = p.Ctxt.NewProg()
+ q = ctxt.NewProg()
q.As = ABR
q.Lineno = p.Lineno
q.To.Type = obj.TYPE_REG
@@ -535,7 +535,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
p.To.Type = obj.TYPE_REG
p.To.Reg = REGTMP
- q = p.Ctxt.NewProg()
+ q = ctxt.NewProg()
q.As = AMOVD
q.Lineno = p.Lineno
q.From.Type = obj.TYPE_REG
@@ -549,7 +549,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
if false {
// Debug bad returns
- q = p.Ctxt.NewProg()
+ q = ctxt.NewProg()
q.As = AMOVD
q.Lineno = p.Lineno
q.From.Type = obj.TYPE_MEM
@@ -564,7 +564,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
}
if autosize != 0 {
- q = p.Ctxt.NewProg()
+ q = ctxt.NewProg()
q.As = AADD
q.Lineno = p.Lineno
q.From.Type = obj.TYPE_CONST
@@ -577,7 +577,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
p.Link = q
}
- q1 = p.Ctxt.NewProg()
+ q1 = ctxt.NewProg()
q1.As = ABR
q1.Lineno = p.Lineno
q1.To.Type = obj.TYPE_REG
@@ -641,7 +641,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
q = p;
}
*/
-func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, noctxt int) *obj.Prog {
+func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, noctxt bool) *obj.Prog {
var q *obj.Prog
var q1 *obj.Prog
@@ -774,7 +774,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, noctxt int) *obj.P
if ctxt.Cursym.Cfunc != 0 {
p.To.Sym = obj.Linklookup(ctxt, "runtime.morestackc", 0)
} else {
- p.To.Sym = ctxt.Symmorestack[noctxt]
+ p.To.Sym = ctxt.Symmorestack[bool2int(noctxt)]
}
// BR start
@@ -799,7 +799,7 @@ func follow(ctxt *obj.Link, s *obj.LSym) {
ctxt.Cursym = s
- firstp = new(obj.Prog)
+ firstp = ctxt.NewProg()
lastp = firstp
xfol(ctxt, s.Text, &lastp)
lastp.Link = nil
@@ -853,7 +853,7 @@ loop:
p = p.Link
xfol(ctxt, p, last)
p = q
- if p != nil && !(p.Mark&FOLL != 0) {
+ if p != nil && p.Mark&FOLL == 0 {
goto loop
}
return
@@ -862,7 +862,7 @@ loop:
if q != nil {
p.Mark |= FOLL
p = q
- if !(p.Mark&FOLL != 0) {
+ if p.Mark&FOLL == 0 {
goto loop
}
}
@@ -885,19 +885,19 @@ loop:
if a == ABR || a == ARETURN || a == ARFI || a == ARFCI || a == ARFID || a == AHRFID {
goto copy
}
- if !(q.Pcond != nil) || (q.Pcond.Mark&FOLL != 0) {
+ if q.Pcond == nil || (q.Pcond.Mark&FOLL != 0) {
continue
}
b = relinv(a)
- if !(b != 0) {
+ if b == 0 {
continue
}
copy:
for {
- r = new(obj.Prog)
+ r = ctxt.NewProg()
*r = *p
- if !(r.Mark&FOLL != 0) {
+ if r.Mark&FOLL == 0 {
fmt.Printf("cant happen 1\n")
}
r.Mark |= FOLL
@@ -916,10 +916,10 @@ loop:
r.As = int16(b)
r.Pcond = p.Link
r.Link = p.Pcond
- if !(r.Link.Mark&FOLL != 0) {
+ if r.Link.Mark&FOLL == 0 {
xfol(ctxt, r.Link, last)
}
- if !(r.Pcond.Mark&FOLL != 0) {
+ if r.Pcond.Mark&FOLL == 0 {
fmt.Printf("cant happen 2\n")
}
return
@@ -927,7 +927,7 @@ loop:
}
a = ABR
- q = p.Ctxt.NewProg()
+ q = ctxt.NewProg()
q.As = int16(a)
q.Lineno = p.Lineno
q.To.Type = obj.TYPE_BRANCH
diff --git a/src/cmd/internal/obj/sym.go b/src/cmd/internal/obj/sym.go
index e1ba5de023..30d0eb1751 100644
--- a/src/cmd/internal/obj/sym.go
+++ b/src/cmd/internal/obj/sym.go
@@ -100,7 +100,7 @@ var headers = []struct {
}{"windowsgui", Hwindows},
}
-func Headtype(name string) int {
+func headtype(name string) int {
var i int
for i = 0; i < len(headers); i++ {
@@ -146,7 +146,7 @@ func Linknew(arch *LinkArch) *Link {
ctxt.Pathname = buf
- ctxt.Headtype = Headtype(Getgoos())
+ ctxt.Headtype = headtype(Getgoos())
if ctxt.Headtype < 0 {
log.Fatalf("unknown goos %s", Getgoos())
}
@@ -222,7 +222,7 @@ func Linknew(arch *LinkArch) *Link {
return ctxt
}
-func Linknewsym(ctxt *Link, symb string, v int) *LSym {
+func linknewsym(ctxt *Link, symb string, v int) *LSym {
var s *LSym
s = new(LSym)
@@ -261,11 +261,11 @@ func _lookup(ctxt *Link, symb string, v int, creat int) *LSym {
return s
}
}
- if !(creat != 0) {
+ if creat == 0 {
return nil
}
- s = Linknewsym(ctxt, symb, v)
+ s = linknewsym(ctxt, symb, v)
s.Extname = s.Name
s.Hash = ctxt.Hash[h]
ctxt.Hash[h] = s
@@ -278,7 +278,7 @@ func Linklookup(ctxt *Link, name string, v int) *LSym {
}
// read-only lookup
-func Linkrlookup(ctxt *Link, name string, v int) *LSym {
+func linkrlookup(ctxt *Link, name string, v int) *LSym {
return _lookup(ctxt, name, v, 0)
}
diff --git a/src/cmd/internal/obj/x86/asm6.go b/src/cmd/internal/obj/x86/asm6.go
index 1d86d46cee..3c1213e9c3 100644
--- a/src/cmd/internal/obj/x86/asm6.go
+++ b/src/cmd/internal/obj/x86/asm6.go
@@ -2118,9 +2118,9 @@ var opindex [ALAST + 1]*Optab
// It does not seem to be necessary for any other systems. This is probably working
// around a Solaris-specific bug that should be fixed differently, but we don't know
// what that bug is. And this does fix it.
-func isextern(s *obj.LSym) int {
+func isextern(s *obj.LSym) bool {
// All the Solaris dynamic imports from libc.so begin with "libc_".
- return bool2int(strings.HasPrefix(s.Name, "libc_"))
+ return strings.HasPrefix(s.Name, "libc_")
}
// single-instruction no-ops of various lengths.
@@ -2348,7 +2348,7 @@ func span6(ctxt *obj.Link, s *obj.LSym) {
ctxt.Diag("span must be looping")
log.Fatalf("loop")
}
- if !(loop != 0) {
+ if loop == 0 {
break
}
}
@@ -2589,7 +2589,7 @@ func oclass(ctxt *obj.Link, p *obj.Prog, a *obj.Addr) int {
switch a.Name {
case obj.NAME_EXTERN,
obj.NAME_STATIC:
- if a.Sym != nil && isextern(a.Sym) != 0 {
+ if a.Sym != nil && isextern(a.Sym) {
return Yi32
}
return Yiauto // use pc-relative addressing
@@ -2997,7 +2997,7 @@ func vaddr(ctxt *obj.Link, p *obj.Prog, a *obj.Addr, r *obj.Reloc) int64 {
log.Fatalf("reloc")
}
- if isextern(s) != 0 {
+ if isextern(s) {
r.Siz = 4
r.Type = obj.R_ADDR
} else {
@@ -3074,7 +3074,7 @@ func asmandsz(ctxt *obj.Link, p *obj.Prog, a *obj.Addr, r int, rex int, m64 int)
switch a.Name {
case obj.NAME_EXTERN,
obj.NAME_STATIC:
- if !(isextern(a.Sym) != 0) {
+ if !isextern(a.Sym) {
goto bad
}
base = REG_NONE
@@ -3136,7 +3136,7 @@ func asmandsz(ctxt *obj.Link, p *obj.Prog, a *obj.Addr, r int, rex int, m64 int)
ctxt.Rexflag |= regrex[base]&Rxb | rex
if base == REG_NONE || (REG_CS <= base && base <= REG_GS) || base == REG_TLS {
- if (a.Sym == nil || !(isextern(a.Sym) != 0)) && base == REG_NONE && (a.Name == obj.NAME_STATIC || a.Name == obj.NAME_EXTERN) || ctxt.Asmode != 64 {
+ if (a.Sym == nil || !isextern(a.Sym)) && base == REG_NONE && (a.Name == obj.NAME_STATIC || a.Name == obj.NAME_EXTERN) || ctxt.Asmode != 64 {
ctxt.Andptr[0] = byte(0<<6 | 5<<0 | r<<3)
ctxt.Andptr = ctxt.Andptr[1:]
goto putrelv
@@ -3370,18 +3370,18 @@ var ymovtab = []Movtab{
Movtab{0, 0, 0, 0, [4]uint8{}},
}
-func isax(a *obj.Addr) int {
+func isax(a *obj.Addr) bool {
switch a.Reg {
case REG_AX,
REG_AL,
REG_AH:
- return 1
+ return true
}
if a.Index == REG_AX {
- return 1
+ return true
}
- return 0
+ return false
}
func subreg(p *obj.Prog, from int, to int) {
@@ -3587,7 +3587,7 @@ found:
case Zlit:
for ; ; z++ {
op = int(o.op[z])
- if !(op != 0) {
+ if op == 0 {
break
}
ctxt.Andptr[0] = byte(op)
@@ -3597,7 +3597,7 @@ found:
case Zlitm_r:
for ; ; z++ {
op = int(o.op[z])
- if !(op != 0) {
+ if op == 0 {
break
}
ctxt.Andptr[0] = byte(op)
@@ -3652,7 +3652,7 @@ found:
tmp1 := z
z++
op = int(o.op[tmp1])
- if !(op != 0) {
+ if op == 0 {
break
}
ctxt.Andptr[0] = byte(op)
@@ -4097,7 +4097,7 @@ bad:
z = int(p.From.Reg)
if p.From.Type == obj.TYPE_REG && z >= REG_BP && z <= REG_DI {
- if isax(&p.To) != 0 || p.To.Type == obj.TYPE_NONE {
+ if isax(&p.To) || p.To.Type == obj.TYPE_NONE {
// We certainly don't want to exchange
// with AX if the op is MUL or DIV.
ctxt.Andptr[0] = 0x87
@@ -4122,7 +4122,7 @@ bad:
z = int(p.To.Reg)
if p.To.Type == obj.TYPE_REG && z >= REG_BP && z <= REG_DI {
- if isax(&p.From) != 0 {
+ if isax(&p.From) {
ctxt.Andptr[0] = 0x87
ctxt.Andptr = ctxt.Andptr[1:] /* xchg rhs,bx */
asmando(ctxt, p, &p.To, reg[REG_BX])
diff --git a/src/cmd/internal/obj/x86/obj6.go b/src/cmd/internal/obj/x86/obj6.go
index c1ad6b7a42..0dc4c3a57e 100644
--- a/src/cmd/internal/obj/x86/obj6.go
+++ b/src/cmd/internal/obj/x86/obj6.go
@@ -38,14 +38,14 @@ import (
"math"
)
-func canuselocaltls(ctxt *obj.Link) int {
+func canuselocaltls(ctxt *obj.Link) bool {
switch ctxt.Headtype {
case obj.Hplan9,
obj.Hwindows:
- return 0
+ return false
}
- return 1
+ return true
}
func progedit(ctxt *obj.Link, p *obj.Prog) {
@@ -86,7 +86,7 @@ func progedit(ctxt *obj.Link, p *obj.Prog) {
// access TLS, and they are rewritten appropriately first here in
// liblink and then finally using relocations in the linker.
- if canuselocaltls(ctxt) != 0 {
+ if canuselocaltls(ctxt) {
// Reduce TLS initial exec model to TLS local exec model.
// Sequences like
// MOVQ TLS, BX
@@ -366,7 +366,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
cursym.Args = int32(textarg)
cursym.Locals = int32(p.To.Offset)
- if autoffset < obj.StackSmall && !(p.From3.Offset&obj.NOSPLIT != 0) {
+ if autoffset < obj.StackSmall && p.From3.Offset&obj.NOSPLIT == 0 {
for q = p; q != nil; q = q.Link {
if q.As == obj.ACALL {
goto noleaf
@@ -381,13 +381,13 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
}
q = nil
- if !(p.From3.Offset&obj.NOSPLIT != 0) || (p.From3.Offset&obj.WRAPPER != 0) {
+ if p.From3.Offset&obj.NOSPLIT == 0 || (p.From3.Offset&obj.WRAPPER != 0) {
p = obj.Appendp(ctxt, p)
p = load_g_cx(ctxt, p) // load g into CX
}
- if !(cursym.Text.From3.Offset&obj.NOSPLIT != 0) {
- p = stacksplit(ctxt, p, autoffset, int32(textarg), bool2int(!(cursym.Text.From3.Offset&obj.NEEDCTXT != 0)), &q) // emit split check
+ if cursym.Text.From3.Offset&obj.NOSPLIT == 0 {
+ p = stacksplit(ctxt, p, autoffset, int32(textarg), cursym.Text.From3.Offset&obj.NEEDCTXT == 0, &q) // emit split check
}
if autoffset != 0 {
@@ -540,7 +540,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
p2.Pcond = p
}
- if ctxt.Debugzerostack != 0 && autoffset != 0 && !(cursym.Text.From3.Offset&obj.NOSPLIT != 0) {
+ if ctxt.Debugzerostack != 0 && autoffset != 0 && cursym.Text.From3.Offset&obj.NOSPLIT == 0 {
// 6l -Z means zero the stack frame on entry.
// This slows down function calls but can help avoid
// false positives in garbage collection.
@@ -722,7 +722,7 @@ func load_g_cx(ctxt *obj.Link, p *obj.Prog) *obj.Prog {
// Returns last new instruction.
// On return, *jmpok is the instruction that should jump
// to the stack frame allocation if no split is needed.
-func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, textarg int32, noctxt int, jmpok **obj.Prog) *obj.Prog {
+func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, textarg int32, noctxt bool, jmpok **obj.Prog) *obj.Prog {
var q *obj.Prog
var q1 *obj.Prog
var cmp int
@@ -853,7 +853,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, textarg int32, noc
if ctxt.Cursym.Cfunc != 0 {
p.To.Sym = obj.Linklookup(ctxt, "runtime.morestackc", 0)
} else {
- p.To.Sym = ctxt.Symmorestack[noctxt]
+ p.To.Sym = ctxt.Symmorestack[bool2int(noctxt)]
}
p = obj.Appendp(ctxt, p)
@@ -878,14 +878,14 @@ func follow(ctxt *obj.Link, s *obj.LSym) {
ctxt.Cursym = s
- firstp = new(obj.Prog)
+ firstp = ctxt.NewProg()
lastp = firstp
xfol(ctxt, s.Text, &lastp)
lastp.Link = nil
s.Text = firstp.Link
}
-func nofollow(a int) int {
+func nofollow(a int) bool {
switch a {
case obj.AJMP,
obj.ARET,
@@ -896,13 +896,13 @@ func nofollow(a int) int {
ARETFQ,
ARETFW,
obj.AUNDEF:
- return 1
+ return true
}
- return 0
+ return false
}
-func pushpop(a int) int {
+func pushpop(a int) bool {
switch a {
case APUSHL,
APUSHFL,
@@ -916,10 +916,10 @@ func pushpop(a int) int {
APOPFQ,
APOPW,
APOPFW:
- return 1
+ return true
}
- return 0
+ return false
}
func relinv(a int) int {
@@ -1004,7 +1004,7 @@ loop:
continue
}
- if nofollow(a) != 0 || pushpop(a) != 0 {
+ if nofollow(a) || pushpop(a) {
break // NOTE(rsc): arm does goto copy
}
if q.Pcond == nil || q.Pcond.Mark != 0 {
@@ -1041,7 +1041,7 @@ loop:
/* */
}
}
- q = new(obj.Prog)
+ q = ctxt.NewProg()
q.As = obj.AJMP
q.Lineno = p.Lineno
q.To.Type = obj.TYPE_BRANCH
@@ -1058,7 +1058,7 @@ loop:
a = int(p.As)
/* continue loop with what comes after p */
- if nofollow(a) != 0 {
+ if nofollow(a) {
return
}
if p.Pcond != nil && a != obj.ACALL {