mirror of
https://github.com/golang/go
synced 2024-11-18 10:54:40 -07:00
cmd/compile: clean up slice and string offsets/sizes
Minor cleanup: * Modernize comments. * Change from int to int64 to avoid conversions. * Use idiomatic names. Passes toolstash-check. Change-Id: I93560c81926c0f4e00f33129cb4846b53bea99e6 Reviewed-on: https://go-review.googlesource.com/c/go/+/227548 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
7a4247cd46
commit
376472ddb7
@ -319,10 +319,10 @@ func dowidth(t *types.Type) {
|
|||||||
Fatalf("dowidth any")
|
Fatalf("dowidth any")
|
||||||
|
|
||||||
case TSTRING:
|
case TSTRING:
|
||||||
if sizeof_String == 0 {
|
if sizeofString == 0 {
|
||||||
Fatalf("early dowidth string")
|
Fatalf("early dowidth string")
|
||||||
}
|
}
|
||||||
w = int64(sizeof_String)
|
w = sizeofString
|
||||||
t.Align = uint8(Widthptr)
|
t.Align = uint8(Widthptr)
|
||||||
|
|
||||||
case TARRAY:
|
case TARRAY:
|
||||||
@ -344,7 +344,7 @@ func dowidth(t *types.Type) {
|
|||||||
if t.Elem() == nil {
|
if t.Elem() == nil {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
w = int64(sizeof_Slice)
|
w = sizeofSlice
|
||||||
checkwidth(t.Elem())
|
checkwidth(t.Elem())
|
||||||
t.Align = uint8(Widthptr)
|
t.Align = uint8(Widthptr)
|
||||||
|
|
||||||
|
@ -64,32 +64,30 @@ const (
|
|||||||
_ = uint((1 << 3) - iota) // static assert for iota <= (1 << 3)
|
_ = uint((1 << 3) - iota) // static assert for iota <= (1 << 3)
|
||||||
)
|
)
|
||||||
|
|
||||||
// note this is the runtime representation
|
// Slices in the runtime are represented by three components:
|
||||||
// of the compilers slices.
|
|
||||||
//
|
//
|
||||||
// typedef struct
|
// type slice struct {
|
||||||
// { // must not move anything
|
// ptr unsafe.Pointer
|
||||||
// uchar array[8]; // pointer to data
|
// len int
|
||||||
// uchar nel[4]; // number of elements
|
// cap int
|
||||||
// uchar cap[4]; // allocated number of elements
|
// }
|
||||||
// } Slice;
|
|
||||||
var slice_array int // runtime offsetof(Slice,array) - same for String
|
|
||||||
|
|
||||||
var slice_nel int // runtime offsetof(Slice,nel) - same for String
|
|
||||||
|
|
||||||
var slice_cap int // runtime offsetof(Slice,cap)
|
|
||||||
|
|
||||||
var sizeof_Slice int // runtime sizeof(Slice)
|
|
||||||
|
|
||||||
// note this is the runtime representation
|
|
||||||
// of the compilers strings.
|
|
||||||
//
|
//
|
||||||
// typedef struct
|
// Strings in the runtime are represented by two components:
|
||||||
// { // must not move anything
|
//
|
||||||
// uchar array[8]; // pointer to data
|
// type string struct {
|
||||||
// uchar nel[4]; // number of elements
|
// ptr unsafe.Pointer
|
||||||
// } String;
|
// len int
|
||||||
var sizeof_String int // runtime sizeof(String)
|
// }
|
||||||
|
//
|
||||||
|
// These variables are the offsets of fields and sizes of these structs.
|
||||||
|
var (
|
||||||
|
slicePtrOffset int64
|
||||||
|
sliceLenOffset int64
|
||||||
|
sliceCapOffset int64
|
||||||
|
|
||||||
|
sizeofSlice int64
|
||||||
|
sizeofString int64
|
||||||
|
)
|
||||||
|
|
||||||
var pragcgobuf [][]string
|
var pragcgobuf [][]string
|
||||||
|
|
||||||
|
@ -130,11 +130,11 @@ func (s *InitSchedule) staticcopy(l *Node, r *Node) bool {
|
|||||||
a := s.inittemps[r]
|
a := s.inittemps[r]
|
||||||
|
|
||||||
n := l.copy()
|
n := l.copy()
|
||||||
n.Xoffset = l.Xoffset + int64(slice_array)
|
n.Xoffset = l.Xoffset + slicePtrOffset
|
||||||
gdata(n, nod(OADDR, a, nil), Widthptr)
|
gdata(n, nod(OADDR, a, nil), Widthptr)
|
||||||
n.Xoffset = l.Xoffset + int64(slice_nel)
|
n.Xoffset = l.Xoffset + sliceLenOffset
|
||||||
gdata(n, r.Right, Widthptr)
|
gdata(n, r.Right, Widthptr)
|
||||||
n.Xoffset = l.Xoffset + int64(slice_cap)
|
n.Xoffset = l.Xoffset + sliceCapOffset
|
||||||
gdata(n, r.Right, Widthptr)
|
gdata(n, r.Right, Widthptr)
|
||||||
return true
|
return true
|
||||||
|
|
||||||
@ -227,11 +227,11 @@ func (s *InitSchedule) staticassign(l *Node, r *Node) bool {
|
|||||||
a := staticname(ta)
|
a := staticname(ta)
|
||||||
s.inittemps[r] = a
|
s.inittemps[r] = a
|
||||||
n := l.copy()
|
n := l.copy()
|
||||||
n.Xoffset = l.Xoffset + int64(slice_array)
|
n.Xoffset = l.Xoffset + slicePtrOffset
|
||||||
gdata(n, nod(OADDR, a, nil), Widthptr)
|
gdata(n, nod(OADDR, a, nil), Widthptr)
|
||||||
n.Xoffset = l.Xoffset + int64(slice_nel)
|
n.Xoffset = l.Xoffset + sliceLenOffset
|
||||||
gdata(n, r.Right, Widthptr)
|
gdata(n, r.Right, Widthptr)
|
||||||
n.Xoffset = l.Xoffset + int64(slice_cap)
|
n.Xoffset = l.Xoffset + sliceCapOffset
|
||||||
gdata(n, r.Right, Widthptr)
|
gdata(n, r.Right, Widthptr)
|
||||||
|
|
||||||
// Fall through to init underlying array.
|
// Fall through to init underlying array.
|
||||||
@ -615,11 +615,11 @@ func slicelit(ctxt initContext, n *Node, var_ *Node, init *Nodes) {
|
|||||||
v.Type = types.Types[TINT]
|
v.Type = types.Types[TINT]
|
||||||
setintconst(&v, t.NumElem())
|
setintconst(&v, t.NumElem())
|
||||||
|
|
||||||
nam.Xoffset += int64(slice_array)
|
nam.Xoffset += slicePtrOffset
|
||||||
gdata(&nam, nod(OADDR, vstat, nil), Widthptr)
|
gdata(&nam, nod(OADDR, vstat, nil), Widthptr)
|
||||||
nam.Xoffset += int64(slice_nel) - int64(slice_array)
|
nam.Xoffset += sliceLenOffset - slicePtrOffset
|
||||||
gdata(&nam, &v, Widthptr)
|
gdata(&nam, &v, Widthptr)
|
||||||
nam.Xoffset += int64(slice_cap) - int64(slice_nel)
|
nam.Xoffset += sliceCapOffset - sliceLenOffset
|
||||||
gdata(&nam, &v, Widthptr)
|
gdata(&nam, &v, Widthptr)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
@ -2830,7 +2830,7 @@ func (s *state) append(n *Node, inplace bool) *ssa.Value {
|
|||||||
// Tell liveness we're about to build a new slice
|
// Tell liveness we're about to build a new slice
|
||||||
s.vars[&memVar] = s.newValue1A(ssa.OpVarDef, types.TypeMem, sn, s.mem())
|
s.vars[&memVar] = s.newValue1A(ssa.OpVarDef, types.TypeMem, sn, s.mem())
|
||||||
}
|
}
|
||||||
capaddr := s.newValue1I(ssa.OpOffPtr, s.f.Config.Types.IntPtr, int64(slice_cap), addr)
|
capaddr := s.newValue1I(ssa.OpOffPtr, s.f.Config.Types.IntPtr, sliceCapOffset, addr)
|
||||||
s.store(types.Types[TINT], capaddr, r[2])
|
s.store(types.Types[TINT], capaddr, r[2])
|
||||||
s.store(pt, addr, r[0])
|
s.store(pt, addr, r[0])
|
||||||
// load the value we just stored to avoid having to spill it
|
// load the value we just stored to avoid having to spill it
|
||||||
@ -2851,7 +2851,7 @@ func (s *state) append(n *Node, inplace bool) *ssa.Value {
|
|||||||
if inplace {
|
if inplace {
|
||||||
l = s.variable(&lenVar, types.Types[TINT]) // generates phi for len
|
l = s.variable(&lenVar, types.Types[TINT]) // generates phi for len
|
||||||
nl = s.newValue2(s.ssaOp(OADD, types.Types[TINT]), types.Types[TINT], l, s.constInt(types.Types[TINT], nargs))
|
nl = s.newValue2(s.ssaOp(OADD, types.Types[TINT]), types.Types[TINT], l, s.constInt(types.Types[TINT], nargs))
|
||||||
lenaddr := s.newValue1I(ssa.OpOffPtr, s.f.Config.Types.IntPtr, int64(slice_nel), addr)
|
lenaddr := s.newValue1I(ssa.OpOffPtr, s.f.Config.Types.IntPtr, sliceLenOffset, addr)
|
||||||
s.store(types.Types[TINT], lenaddr, nl)
|
s.store(types.Types[TINT], lenaddr, nl)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -342,13 +342,13 @@ func typeinit() {
|
|||||||
simtype[TFUNC] = TPTR
|
simtype[TFUNC] = TPTR
|
||||||
simtype[TUNSAFEPTR] = TPTR
|
simtype[TUNSAFEPTR] = TPTR
|
||||||
|
|
||||||
slice_array = int(Rnd(0, int64(Widthptr)))
|
slicePtrOffset = 0
|
||||||
slice_nel = int(Rnd(int64(slice_array)+int64(Widthptr), int64(Widthptr)))
|
sliceLenOffset = Rnd(slicePtrOffset+int64(Widthptr), int64(Widthptr))
|
||||||
slice_cap = int(Rnd(int64(slice_nel)+int64(Widthptr), int64(Widthptr)))
|
sliceCapOffset = Rnd(sliceLenOffset+int64(Widthptr), int64(Widthptr))
|
||||||
sizeof_Slice = int(Rnd(int64(slice_cap)+int64(Widthptr), int64(Widthptr)))
|
sizeofSlice = Rnd(sliceCapOffset+int64(Widthptr), int64(Widthptr))
|
||||||
|
|
||||||
// string is same as slice wo the cap
|
// string is same as slice wo the cap
|
||||||
sizeof_String = int(Rnd(int64(slice_nel)+int64(Widthptr), int64(Widthptr)))
|
sizeofString = Rnd(sliceLenOffset+int64(Widthptr), int64(Widthptr))
|
||||||
|
|
||||||
dowidth(types.Types[TSTRING])
|
dowidth(types.Types[TSTRING])
|
||||||
dowidth(types.Idealstring)
|
dowidth(types.Idealstring)
|
||||||
|
Loading…
Reference in New Issue
Block a user