// to a new block.
var last *Value
var start, end int
+ var nonPtrStores int
values := b.Values
FindSeq:
for i := len(values) - 1; i >= 0; i-- {
last = w
end = i + 1
}
+ nonPtrStores = 0
case OpVarDef, OpVarLive:
continue
+ case OpStore:
+ if last == nil {
+ continue
+ }
+ nonPtrStores++
+ if nonPtrStores > 2 {
+ break FindSeq
+ }
default:
if last == nil {
continue
mem.Aux = w.Aux
case OpVarDef, OpVarLive:
mem = bEnd.NewValue1A(pos, w.Op, types.TypeMem, w.Aux, mem)
+ case OpStore:
+ ptr := w.Args[0]
+ val := w.Args[1]
+ mem = bEnd.NewValue3A(pos, OpStore, types.TypeMem, w.Aux, ptr, val, mem)
}
}
--- /dev/null
+// asmcheck
+
+// Copyright 2023 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package codegen
+
+func combine2string(p *[2]string, a, b string) {
+ // amd64:`.*runtime[.]gcWriteBarrier4\(SB\)`
+ // arm64:`.*runtime[.]gcWriteBarrier4\(SB\)`
+ p[0] = a
+ // amd64:-`.*runtime[.]gcWriteBarrier`
+ // arm64:-`.*runtime[.]gcWriteBarrier`
+ p[1] = b
+}
+
+func combine4string(p *[4]string, a, b, c, d string) {
+ // amd64:`.*runtime[.]gcWriteBarrier8\(SB\)`
+ // arm64:`.*runtime[.]gcWriteBarrier8\(SB\)`
+ p[0] = a
+ // amd64:-`.*runtime[.]gcWriteBarrier`
+ // arm64:-`.*runtime[.]gcWriteBarrier`
+ p[1] = b
+ // amd64:-`.*runtime[.]gcWriteBarrier`
+ // arm64:-`.*runtime[.]gcWriteBarrier`
+ p[2] = c
+ // amd64:-`.*runtime[.]gcWriteBarrier`
+ // arm64:-`.*runtime[.]gcWriteBarrier`
+ p[3] = d
+}
+
+func combine2slice(p *[2][]byte, a, b []byte) {
+ // amd64:`.*runtime[.]gcWriteBarrier4\(SB\)`
+ // arm64:`.*runtime[.]gcWriteBarrier4\(SB\)`
+ p[0] = a
+ // amd64:-`.*runtime[.]gcWriteBarrier`
+ // arm64:-`.*runtime[.]gcWriteBarrier`
+ p[1] = b
+}
+
+func combine4slice(p *[4][]byte, a, b, c, d []byte) {
+ // amd64:`.*runtime[.]gcWriteBarrier8\(SB\)`
+ // arm64:`.*runtime[.]gcWriteBarrier8\(SB\)`
+ p[0] = a
+ // amd64:-`.*runtime[.]gcWriteBarrier`
+ // arm64:-`.*runtime[.]gcWriteBarrier`
+ p[1] = b
+ // amd64:-`.*runtime[.]gcWriteBarrier`
+ // arm64:-`.*runtime[.]gcWriteBarrier`
+ p[2] = c
+ // amd64:-`.*runtime[.]gcWriteBarrier`
+ // arm64:-`.*runtime[.]gcWriteBarrier`
+ p[3] = d
+}