Also, replace "PtrSize == 4 && Arch != amd64p32" with "RegSize == 4".
Passes toolstash-check -all.
Updates #19954.
Change-Id: I79b2ee9324f4fa53e34c9271d837ea288b5d7829
Reviewed-on: https://go-review.googlesource.com/41491
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
}
ot = dgopkgpath(lsym, ot, tpkg)
- ot = dsymptr(lsym, ot, lsym, ot+Widthptr+2*Widthptr+uncommonSize(t))
+ ot = dsymptr(lsym, ot, lsym, ot+3*Widthptr+uncommonSize(t))
ot = duintptr(lsym, ot, uint64(n))
ot = duintptr(lsym, ot, uint64(n))
dataAdd := imethodSize() * n
}
}
ot = dgopkgpath(lsym, ot, pkg)
- ot = dsymptr(lsym, ot, lsym, ot+Widthptr+2*Widthptr+uncommonSize(t))
+ ot = dsymptr(lsym, ot, lsym, ot+3*Widthptr+uncommonSize(t))
ot = duintptr(lsym, ot, uint64(n))
ot = duintptr(lsym, ot, uint64(n))
if ft.IsFloat() || tt.IsFloat() {
conv, ok := fpConvOpToSSA[twoTypes{s.concreteEtype(ft), s.concreteEtype(tt)}]
- if s.config.PtrSize == 4 && thearch.LinkArch.Name != "amd64p32" && thearch.LinkArch.Family != sys.MIPS {
+ if s.config.RegSize == 4 && thearch.LinkArch.Family != sys.MIPS {
if conv1, ok1 := fpConvOpToSSA32[twoTypes{s.concreteEtype(ft), s.concreteEtype(tt)}]; ok1 {
conv = conv1
}
}
- if thearch.LinkArch.Name == "arm64" {
+ if thearch.LinkArch.Family == sys.ARM64 {
if conv1, ok1 := uint64fpConvOpToSSA[twoTypes{s.concreteEtype(ft), s.concreteEtype(tt)}]; ok1 {
conv = conv1
}
intrinsics = map[intrinsicKey]intrinsicBuilder{}
var all []*sys.Arch
- var i4 []*sys.Arch
- var i8 []*sys.Arch
var p4 []*sys.Arch
var p8 []*sys.Arch
for _, a := range sys.Archs {
all = append(all, a)
- if a.PtrSize == 4 {
- i4 = append(i4, a)
- } else {
- i8 = append(i8, a)
- }
if a.PtrSize == 4 {
p4 = append(p4, a)
} else {
alias("runtime/internal/atomic", "Loadint64", "runtime/internal/atomic", "Load64", all...)
alias("runtime/internal/atomic", "Xaddint64", "runtime/internal/atomic", "Xadd64", all...)
- alias("runtime/internal/atomic", "Loaduint", "runtime/internal/atomic", "Load", i4...)
- alias("runtime/internal/atomic", "Loaduint", "runtime/internal/atomic", "Load64", i8...)
+ alias("runtime/internal/atomic", "Loaduint", "runtime/internal/atomic", "Load", p4...)
+ alias("runtime/internal/atomic", "Loaduint", "runtime/internal/atomic", "Load64", p8...)
alias("runtime/internal/atomic", "Loaduintptr", "runtime/internal/atomic", "Load", p4...)
alias("runtime/internal/atomic", "Loaduintptr", "runtime/internal/atomic", "Load64", p8...)
alias("runtime/internal/atomic", "Storeuintptr", "runtime/internal/atomic", "Store", p4...)
s.vars[&memVar] = s.newValue3A(ssa.OpStore, ssa.TypeMem, t, ptr, arg, s.mem())
off += size
}
- off = Rnd(off, int64(Widthptr))
- if thearch.LinkArch.Name == "amd64p32" {
- // amd64p32 wants 8-byte alignment of the start of the return values.
- off = Rnd(off, 8)
- }
+ off = Rnd(off, int64(Widthreg))
// Issue call
call := s.newValue1A(ssa.OpStaticCall, ssa.TypeMem, fn, s.mem())
var typedefs = [...]struct {
name string
etype types.EType
- width *int
sameas32 types.EType
sameas64 types.EType
}{
- {"int", TINT, &Widthptr, TINT32, TINT64},
- {"uint", TUINT, &Widthptr, TUINT32, TUINT64},
- {"uintptr", TUINTPTR, &Widthptr, TUINT32, TUINT64},
+ {"int", TINT, TINT32, TINT64},
+ {"uint", TUINT, TUINT32, TUINT64},
+ {"uintptr", TUINTPTR, TUINT32, TUINT64},
}
var builtinFuncs = [...]struct {
// binary
okfor[OADD] = okforadd[:]
-
okfor[OAND] = okforand[:]
okfor[OANDAND] = okforbool[:]
okfor[OANDNOT] = okforand[:]
// unary
okfor[OCOM] = okforand[:]
-
okfor[OMINUS] = okforarith[:]
okfor[ONOT] = okforbool[:]
okfor[OPLUS] = okforarith[:]
// special
okfor[OCAP] = okforcap[:]
-
okfor[OLEN] = okforlen[:]
// comparison
iscmp[OLT] = true
-
iscmp[OGT] = true
iscmp[OGE] = true
iscmp[OLE] = true
// simple aliases
simtype[TMAP] = types.Tptr
-
simtype[TCHAN] = types.Tptr
simtype[TFUNC] = types.Tptr
simtype[TUNSAFEPTR] = types.Tptr
s1 := builtinpkg.Lookup(s.name)
sameas := s.sameas32
- if *s.width == 8 {
+ if Widthptr == 8 {
sameas = s.sameas64
}
for _, name := range f.Names {
t := name.Type
switch {
- case t.IsInteger() && t.Size() == 8 && f.Config.PtrSize == 4:
+ case t.IsInteger() && t.Size() > f.Config.RegSize:
var elemType Type
if t.IsSigned() {
elemType = f.Config.Types.Int32
}
delete(f.NamedValues, name)
case t.IsFloat():
- // floats are never decomposed, even ones bigger than PtrSize
- case t.Size() > f.Config.PtrSize:
+ // floats are never decomposed, even ones bigger than RegSize
+ case t.Size() > f.Config.RegSize:
f.Fatalf("undecomposed named type %v %v", name, t)
default:
newNames = append(newNames, name)
func decomposeBuiltInPhi(v *Value) {
switch {
- case v.Type.IsInteger() && v.Type.Size() == 8 && v.Block.Func.Config.PtrSize == 4:
- if v.Block.Func.Config.arch == "amd64p32" {
- // Even though ints are 32 bits, we have 64-bit ops.
- break
- }
+ case v.Type.IsInteger() && v.Type.Size() > v.Block.Func.Config.RegSize:
decomposeInt64Phi(v)
case v.Type.IsComplex():
decomposeComplexPhi(v)
case v.Type.IsInterface():
decomposeInterfacePhi(v)
case v.Type.IsFloat():
- // floats are never decomposed, even ones bigger than PtrSize
- case v.Type.Size() > v.Block.Func.Config.PtrSize:
+ // floats are never decomposed, even ones bigger than RegSize
+ case v.Type.Size() > v.Block.Func.Config.RegSize:
v.Fatalf("undecomposed type %s", v.Type)
}
}
func dec(f *Func) {
applyRewrite(f, rewriteBlockdec, rewriteValuedec)
- if f.Config.PtrSize == 4 && f.Config.arch != "amd64p32" {
+ if f.Config.RegSize == 4 {
applyRewrite(f, rewriteBlockdec64, rewriteValuedec64)
}
}