1/*
2 * arch/xtensa/kernel/mcount.S
3 *
4 * Xtensa specific mcount support
5 *
6 * This file is subject to the terms and conditions of the GNU General Public
7 * License.  See the file "COPYING" in the main directory of this archive
8 * for more details.
9 *
10 * Copyright (C) 2013 Tensilica Inc.
11 */
12
13#include <linux/linkage.h>
14#include <asm/asmmacro.h>
15#include <asm/ftrace.h>
16
17/*
18 * Entry condition:
19 *
20 *   a2:	a0 of the caller
21 */
22
23ENTRY(_mcount)
24
25	abi_entry_default
26
27	movi	a4, ftrace_trace_function
28	l32i	a4, a4, 0
29	movi	a3, ftrace_stub
30	bne	a3, a4, 1f
31	abi_ret_default
32
331: 	xor	a7, a2, a1
34	movi	a3, 0x3fffffff
35	and	a7, a7, a3
36	xor	a7, a7, a1
37
38	xor	a6, a0, a1
39	and	a6, a6, a3
40	xor	a6, a6, a1
41	addi	a6, a6, -MCOUNT_INSN_SIZE
42	callx4	a4
43
44	abi_ret_default
45
46ENDPROC(_mcount)
47
48ENTRY(ftrace_stub)
49	abi_entry_default
50	abi_ret_default
51ENDPROC(ftrace_stub)
52