Skip to content

Commit 2326c24

Browse files
stemar94crawshaw
authored andcommitted
cmd/internal/obj: convert fields of LSym from uint8 to bool
No performance regression measurable: name old time/op new time/op delta Template 432ms ± 3% 422ms ± 2% -2.34% (p=0.010 n=10+9) GoTypes 1.46s ± 1% 1.46s ± 1% ~ (p=0.796 n=10+10) Compiler 7.15s ± 1% 7.14s ± 1% ~ (p=0.447 n=10+9) Change-Id: I21b93cb989017b6fec2215de2423d87f25cf538c Reviewed-on: https://go-review.googlesource.com/21220 Reviewed-by: David Crawshaw <crawshaw@golang.org> Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
1 parent 8eec2bb commit 2326c24

File tree

8 files changed

+54
-42
lines changed

8 files changed

+54
-42
lines changed

src/cmd/compile/internal/gc/pgen.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ func gcsymdup(s *Sym) {
135135
Fatalf("cannot rosymdup %s with relocations", ls.Name)
136136
}
137137
ls.Name = fmt.Sprintf("gclocals·%x", md5.Sum(ls.P))
138-
ls.Dupok = 1
138+
ls.Dupok = true
139139
}
140140

141141
func emitptrargsmap() {
@@ -442,7 +442,7 @@ func compile(fn *Node) {
442442
ptxt.From3.Offset |= obj.REFLECTMETHOD
443443
}
444444
if fn.Func.Pragma&Systemstack != 0 {
445-
ptxt.From.Sym.Cfunc = 1
445+
ptxt.From.Sym.Cfunc = true
446446
}
447447

448448
// Clumsy but important.

src/cmd/internal/obj/arm/obj5.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
367367
}
368368

369369
if cursym.Text.Mark&LEAF != 0 {
370-
cursym.Leaf = 1
370+
cursym.Leaf = true
371371
if autosize == 0 {
372372
break
373373
}
@@ -709,7 +709,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog {
709709
p.From.Type = obj.TYPE_MEM
710710
p.From.Reg = REGG
711711
p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0
712-
if ctxt.Cursym.Cfunc != 0 {
712+
if ctxt.Cursym.Cfunc {
713713
p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1
714714
}
715715
p.To.Type = obj.TYPE_REG
@@ -822,7 +822,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog {
822822
call.To.Type = obj.TYPE_BRANCH
823823
morestack := "runtime.morestack"
824824
switch {
825-
case ctxt.Cursym.Cfunc != 0:
825+
case ctxt.Cursym.Cfunc:
826826
morestack = "runtime.morestackc"
827827
case ctxt.Cursym.Text.From3.Offset&obj.NEEDCTXT == 0:
828828
morestack = "runtime.morestack_noctxt"

src/cmd/internal/obj/arm64/obj7.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog {
5757
p.From.Type = obj.TYPE_MEM
5858
p.From.Reg = REGG
5959
p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0
60-
if ctxt.Cursym.Cfunc != 0 {
60+
if ctxt.Cursym.Cfunc {
6161
p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1
6262
}
6363
p.To.Type = obj.TYPE_REG
@@ -193,7 +193,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog {
193193
call.To.Type = obj.TYPE_BRANCH
194194
morestack := "runtime.morestack"
195195
switch {
196-
case ctxt.Cursym.Cfunc != 0:
196+
case ctxt.Cursym.Cfunc:
197197
morestack = "runtime.morestackc"
198198
case ctxt.Cursym.Text.From3.Offset&obj.NEEDCTXT == 0:
199199
morestack = "runtime.morestack_noctxt"
@@ -718,7 +718,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
718718
aoffset = 0xF0
719719
}
720720
if cursym.Text.Mark&LEAF != 0 {
721-
cursym.Leaf = 1
721+
cursym.Leaf = true
722722
if ctxt.Autosize == 0 {
723723
break
724724
}

src/cmd/internal/obj/link.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -309,12 +309,12 @@ type LSym struct {
309309
Name string
310310
Type int16
311311
Version int16
312-
Dupok uint8
313-
Cfunc uint8
314-
Nosplit uint8
315-
Leaf uint8
316-
Seenglobl uint8
317-
Onlist uint8
312+
Dupok bool
313+
Cfunc bool
314+
Nosplit bool
315+
Leaf bool
316+
Seenglobl bool
317+
Onlist bool
318318

319319
// ReflectMethod means the function may call reflect.Type.Method or
320320
// reflect.Type.MethodByName. Matching is imprecise (as reflect.Type

src/cmd/internal/obj/mips/obj0.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
302302
}
303303

304304
if cursym.Text.Mark&LEAF != 0 {
305-
cursym.Leaf = 1
305+
cursym.Leaf = true
306306
break
307307
}
308308

@@ -560,7 +560,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog {
560560
p.From.Type = obj.TYPE_MEM
561561
p.From.Reg = REGG
562562
p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0
563-
if ctxt.Cursym.Cfunc != 0 {
563+
if ctxt.Cursym.Cfunc {
564564
p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1
565565
}
566566
p.To.Type = obj.TYPE_REG
@@ -690,7 +690,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog {
690690

691691
p.As = AJAL
692692
p.To.Type = obj.TYPE_BRANCH
693-
if ctxt.Cursym.Cfunc != 0 {
693+
if ctxt.Cursym.Cfunc {
694694
p.To.Sym = obj.Linklookup(ctxt, "runtime.morestackc", 0)
695695
} else if ctxt.Cursym.Text.From3.Offset&obj.NEEDCTXT == 0 {
696696
p.To.Sym = obj.Linklookup(ctxt, "runtime.morestack_noctxt", 0)

src/cmd/internal/obj/objfile.go

+30-18
Original file line numberDiff line numberDiff line change
@@ -170,23 +170,22 @@ func flushplist(ctxt *Link, freeProgs bool) {
170170

171171
case AGLOBL:
172172
s := p.From.Sym
173-
tmp6 := s.Seenglobl
174-
s.Seenglobl++
175-
if tmp6 != 0 {
173+
if s.Seenglobl {
176174
fmt.Printf("duplicate %v\n", p)
177175
}
178-
if s.Onlist != 0 {
176+
s.Seenglobl = true
177+
if s.Onlist {
179178
log.Fatalf("symbol %s listed multiple times", s.Name)
180179
}
181-
s.Onlist = 1
180+
s.Onlist = true
182181
ctxt.Data = append(ctxt.Data, s)
183182
s.Size = p.To.Offset
184183
if s.Type == 0 || s.Type == SXREF {
185184
s.Type = SBSS
186185
}
187186
flag := int(p.From3.Offset)
188187
if flag&DUPOK != 0 {
189-
s.Dupok = 1
188+
s.Dupok = true
190189
}
191190
if flag&RODATA != 0 {
192191
s.Type = SRODATA
@@ -209,17 +208,17 @@ func flushplist(ctxt *Link, freeProgs bool) {
209208
if s.Text != nil {
210209
log.Fatalf("duplicate TEXT for %s", s.Name)
211210
}
212-
if s.Onlist != 0 {
211+
if s.Onlist {
213212
log.Fatalf("symbol %s listed multiple times", s.Name)
214213
}
215-
s.Onlist = 1
214+
s.Onlist = true
216215
text = append(text, s)
217216
flag := int(p.From3Offset())
218217
if flag&DUPOK != 0 {
219-
s.Dupok = 1
218+
s.Dupok = true
220219
}
221220
if flag&NOSPLIT != 0 {
222-
s.Nosplit = 1
221+
s.Nosplit = true
223222
}
224223
if flag&REFLECTMETHOD != 0 {
225224
s.ReflectMethod = true
@@ -437,19 +436,19 @@ func writesym(ctxt *Link, b *Biobuf, s *LSym) {
437436
if s.Type != 0 {
438437
fmt.Fprintf(ctxt.Bso, "t=%d ", s.Type)
439438
}
440-
if s.Dupok != 0 {
439+
if s.Dupok {
441440
fmt.Fprintf(ctxt.Bso, "dupok ")
442441
}
443-
if s.Cfunc != 0 {
442+
if s.Cfunc {
444443
fmt.Fprintf(ctxt.Bso, "cfunc ")
445444
}
446-
if s.Nosplit != 0 {
445+
if s.Nosplit {
447446
fmt.Fprintf(ctxt.Bso, "nosplit ")
448447
}
449448
fmt.Fprintf(ctxt.Bso, "size=%d", s.Size)
450449
if s.Type == STEXT {
451450
fmt.Fprintf(ctxt.Bso, " args=%#x locals=%#x", uint64(s.Args), uint64(s.Locals))
452-
if s.Leaf != 0 {
451+
if s.Leaf {
453452
fmt.Fprintf(ctxt.Bso, " leaf")
454453
}
455454
}
@@ -499,9 +498,12 @@ func writesym(ctxt *Link, b *Biobuf, s *LSym) {
499498
Bputc(b, 0xfe)
500499
wrint(b, int64(s.Type))
501500
wrsym(b, s)
502-
flags := int64(s.Dupok)
501+
flags := int64(0)
502+
if s.Dupok {
503+
flags |= 1
504+
}
503505
if s.Local {
504-
flags |= 2
506+
flags |= 1 << 1
505507
}
506508
wrint(b, flags)
507509
wrint(b, s.Size)
@@ -522,8 +524,18 @@ func writesym(ctxt *Link, b *Biobuf, s *LSym) {
522524
if s.Type == STEXT {
523525
wrint(b, int64(s.Args))
524526
wrint(b, int64(s.Locals))
525-
wrint(b, int64(s.Nosplit))
526-
flags := int64(s.Leaf) | int64(s.Cfunc)<<1
527+
if s.Nosplit {
528+
wrint(b, 1)
529+
} else {
530+
wrint(b, 0)
531+
}
532+
flags := int64(0)
533+
if s.Leaf {
534+
flags |= 1
535+
}
536+
if s.Cfunc {
537+
flags |= 1 << 1
538+
}
527539
if s.ReflectMethod {
528540
flags |= 1 << 2
529541
}

src/cmd/internal/obj/ppc64/obj9.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
534534
}
535535

536536
if cursym.Text.Mark&LEAF != 0 {
537-
cursym.Leaf = 1
537+
cursym.Leaf = true
538538
break
539539
}
540540

@@ -828,7 +828,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog {
828828
p.From.Type = obj.TYPE_MEM
829829
p.From.Reg = REGG
830830
p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0
831-
if ctxt.Cursym.Cfunc != 0 {
831+
if ctxt.Cursym.Cfunc {
832832
p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1
833833
}
834834
p.To.Type = obj.TYPE_REG
@@ -943,7 +943,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog {
943943
}
944944

945945
var morestacksym *obj.LSym
946-
if ctxt.Cursym.Cfunc != 0 {
946+
if ctxt.Cursym.Cfunc {
947947
morestacksym = obj.Linklookup(ctxt, "runtime.morestackc", 0)
948948
} else if ctxt.Cursym.Text.From3.Offset&obj.NEEDCTXT == 0 {
949949
morestacksym = obj.Linklookup(ctxt, "runtime.morestack_noctxt", 0)

src/cmd/internal/obj/x86/obj6.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -985,7 +985,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, textarg int32) *ob
985985
p.From.Reg = REG_SP
986986
indir_cx(ctxt, p, &p.To)
987987
p.To.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0
988-
if ctxt.Cursym.Cfunc != 0 {
988+
if ctxt.Cursym.Cfunc {
989989
p.To.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1
990990
}
991991
} else if framesize <= obj.StackBig {
@@ -1007,7 +1007,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, textarg int32) *ob
10071007
p.From.Reg = REG_AX
10081008
indir_cx(ctxt, p, &p.To)
10091009
p.To.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0
1010-
if ctxt.Cursym.Cfunc != 0 {
1010+
if ctxt.Cursym.Cfunc {
10111011
p.To.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1
10121012
}
10131013
} else {
@@ -1031,7 +1031,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, textarg int32) *ob
10311031
p.As = mov
10321032
indir_cx(ctxt, p, &p.From)
10331033
p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0
1034-
if ctxt.Cursym.Cfunc != 0 {
1034+
if ctxt.Cursym.Cfunc {
10351035
p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1
10361036
}
10371037
p.To.Type = obj.TYPE_REG
@@ -1095,7 +1095,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, textarg int32) *ob
10951095
call.To.Type = obj.TYPE_BRANCH
10961096
morestack := "runtime.morestack"
10971097
switch {
1098-
case ctxt.Cursym.Cfunc != 0:
1098+
case ctxt.Cursym.Cfunc:
10991099
morestack = "runtime.morestackc"
11001100
case ctxt.Cursym.Text.From3Offset()&obj.NEEDCTXT == 0:
11011101
morestack = "runtime.morestack_noctxt"

0 commit comments

Comments
 (0)