aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.arch/riscv64-unwind-prologue-with-mv.s
blob: a5e2bda18d5102dcb7b02d8b8aae363bd4c31066 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/* Copyright 2021-2024 Free Software Foundation, Inc.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

/* This testcase contains a function where the 'c.mv' instruction is used in
   the prologue.

   The following functions are roughly equivalent to the following C code (with
   prologue crafted to contain the c.mv instruction):

     int bar () { return 0; }
     int foo () { return bar (); } */

	.option pic
	.text
	.align	1
	.globl	bar
	.type	bar, @function
bar:
	li	a0,0
	jr	ra
	.size	bar, .-bar

	.align	1
	.globl	foo
	.type	foo, @function
foo:
	addi	sp,sp,-32
	c.mv	t3,ra
	sd	t3,8(sp)
	call	bar
	ld	t3,8(sp)
	mv	ra,t3
	addi	sp,sp,32
	jr	ra
	.size	foo, .-foo
	.section	.note.GNU-stack,"",@progbits