blob: de0626790c55f030bec4e56e1ea334e316800515 [file] [log] [blame]
// Copyright 2024 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.
TEXT ·bad1(SB), 0, $0
MOVD $0, R29 // want `frame pointer is clobbered before saving`
RET
TEXT ·bad2(SB), 0, $0
MOVD R1, R29 // want `frame pointer is clobbered before saving`
RET
TEXT ·bad3(SB), 0, $0
MOVD 6(R2), R29 // want `frame pointer is clobbered before saving`
RET
TEXT ·bad4(SB), 0, $0
LDP 0(R1), (R26, R29) // want `frame pointer is clobbered before saving`
RET
TEXT ·bad5(SB), 0, $0
AND $0x1, R3, R29 // want `frame pointer is clobbered before saving`
RET
TEXT ·bad6(SB), 0, $0
CMP R1, R2
BEQ skip
// Assume that the above conditional branch is not taken
MOVD $0, R29 // want `frame pointer is clobbered before saving`
skip:
RET
TEXT ·bad7(SB), 0, $0
BL ·good4(SB)
AND $0x1, R3, R29 // want `frame pointer is clobbered before saving`
RET
TEXT ·good1(SB), 0, $0
STPW (R29, R30), -32(RSP)
MOVD $0, R29 // this is ok
LDPW 32(RSP), (R29, R30)
RET
TEXT ·good2(SB), 0, $0
MOVD R29, R1
MOVD $0, R29 // this is ok
MOVD R1, R29
RET
TEXT ·good3(SB), 0, $0
CMP R1, R2
B skip
MOVD $0, R29 // this is ok
skip:
RET
TEXT ·good4(SB), 0, $0
RET
MOVD $0, R29 // this is ok
RET
TEXT ·good5(SB), 0, $8
MOVD $0, R29 // this is ok
RET