Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / metag / kernel / ftrace_stub.S
1 /*
2  * Copyright (C) 2008 Imagination Technologies Ltd.
3  * Licensed under the GPL
4  *
5  */
6
7 #include <asm/ftrace.h>
8
9         .text
10 #ifdef CONFIG_DYNAMIC_FTRACE
11         .global _mcount_wrapper
12         .type   _mcount_wrapper,function
13 _mcount_wrapper:
14         MOV     PC,D0.4
15
16         .global _ftrace_caller
17         .type   _ftrace_caller,function
18 _ftrace_caller:
19         MSETL   [A0StP], D0Ar6, D0Ar4, D0Ar2, D0.4
20         MOV     D1Ar1, D0.4
21         MOV     D0Ar2, D1RtP
22         SUB     D1Ar1,D1Ar1,#MCOUNT_INSN_SIZE
23
24         .global _ftrace_call
25 _ftrace_call:
26         MOVT    D1RtP,#HI(_ftrace_stub)
27         CALL    D1RtP,#LO(_ftrace_stub)
28         GETL    D0.4,  D1RtP, [A0StP++#(-8)]
29         GETL    D0Ar2, D1Ar1, [A0StP++#(-8)]
30         GETL    D0Ar4, D1Ar3, [A0StP++#(-8)]
31         GETL    D0Ar6, D1Ar5, [A0StP++#(-8)]
32         MOV     PC, D0.4
33 #else
34
35         .global _mcount_wrapper
36         .type   _mcount_wrapper,function
37 _mcount_wrapper:
38         MSETL   [A0StP], D0Ar6, D0Ar4, D0Ar2, D0.4
39         MOV     D1Ar1, D0.4
40         MOV     D0Ar2, D1RtP
41         MOVT    D0Re0,#HI(_ftrace_trace_function)
42         ADD     D0Re0,D0Re0,#LO(_ftrace_trace_function)
43         GET     D1Ar3,[D0Re0]
44         MOVT    D1Re0,#HI(_ftrace_stub)
45         ADD     D1Re0,D1Re0,#LO(_ftrace_stub)
46         CMP     D1Ar3,D1Re0
47         BEQ     $Ltrace_exit
48         MOV     D1RtP,D1Ar3
49         SUB     D1Ar1,D1Ar1,#MCOUNT_INSN_SIZE
50         SWAP    PC,D1RtP
51 $Ltrace_exit:
52         GETL    D0.4,  D1RtP, [A0StP++#(-8)]
53         GETL    D0Ar2, D1Ar1, [A0StP++#(-8)]
54         GETL    D0Ar4, D1Ar3, [A0StP++#(-8)]
55         GETL    D0Ar6, D1Ar5, [A0StP++#(-8)]
56         MOV     PC, D0.4
57
58 #endif  /* CONFIG_DYNAMIC_FTRACE */
59
60         .global _ftrace_stub
61 _ftrace_stub:
62         MOV     PC,D1RtP