]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile, runtime: stop padding stackmaps to 4 bytes
authorMatthew Dempsky <mdempsky@google.com>
Tue, 11 Oct 2016 18:34:20 +0000 (11:34 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Tue, 11 Oct 2016 20:23:30 +0000 (20:23 +0000)
Shrinks cmd/go's text segment by 0.9%.

   text    data     bss     dec     hex filename
6447148  231643  146328 6825119  68249f go.before
6387404  231643  146328 6765375  673b3f go.after

Change-Id: I431e8482dbb11a7c1c77f2196cada43d5dad2981
Reviewed-on: https://go-review.googlesource.com/30817
Reviewed-by: Austin Clements <austin@google.com>
src/cmd/compile/internal/gc/obj.go
src/runtime/symtab.go

index 3610f16c747801c6b8d058eb13d365d7de7086fb..cb9ea52b62cdeac418697cfd7e90acb42aec49a7 100644 (file)
@@ -272,14 +272,10 @@ func duintptr(s *Sym, off int, v uint64) int {
 }
 
 func dbvec(s *Sym, off int, bv bvec) int {
-       for j := 0; int32(j) < bv.n; j += 32 {
+       // Runtime reads the bitmaps as byte arrays. Oblige.
+       for j := 0; int32(j) < bv.n; j += 8 {
                word := bv.b[j/32]
-
-               // Runtime reads the bitmaps as byte arrays. Oblige.
-               off = duint8(s, off, uint8(word))
-               off = duint8(s, off, uint8(word>>8))
-               off = duint8(s, off, uint8(word>>16))
-               off = duint8(s, off, uint8(word>>24))
+               off = duint8(s, off, uint8(word>>(uint(j)%32)))
        }
        return off
 }
index c1cca7037d7f6057f89d0d247d24a2bd2aec7390..24d63b70c009523299cc6fa09ba21d8c5b7283d2 100644 (file)
@@ -603,5 +603,5 @@ func stackmapdata(stkmap *stackmap, n int32) bitvector {
        if n < 0 || n >= stkmap.n {
                throw("stackmapdata: index out of range")
        }
-       return bitvector{stkmap.nbit, (*byte)(add(unsafe.Pointer(&stkmap.bytedata), uintptr(n*((stkmap.nbit+31)/32*4))))}
+       return bitvector{stkmap.nbit, (*byte)(add(unsafe.Pointer(&stkmap.bytedata), uintptr(n*((stkmap.nbit+7)/8))))}
 }