Merge branch 'devel'
[linux-2.6] / arch / blackfin / kernel / mcount.S
1 /*
2  * linux/arch/blackfin/mcount.S
3  *
4  * Copyright (C) 2006 Analog Devices Inc.
5  *
6  * 2007/04/12 Save index, length, modify and base registers. --rpm
7  */
8
9 #include <linux/linkage.h>
10 #include <asm/blackfin.h>
11
12 .text
13
14 .align 4        /* just in case */
15
16 ENTRY(__mcount)
17         [--sp] = i0;
18         [--sp] = i1;
19         [--sp] = i2;
20         [--sp] = i3;
21         [--sp] = l0;
22         [--sp] = l1;
23         [--sp] = l2;
24         [--sp] = l3;
25         [--sp] = m0;
26         [--sp] = m1;
27         [--sp] = m2;
28         [--sp] = m3;
29         [--sp] = b0;
30         [--sp] = b1;
31         [--sp] = b2;
32         [--sp] = b3;
33         [--sp] = ( r7:0, p5:0 );
34         [--sp] = ASTAT;
35
36         p1.L = _ipipe_trace_enable;
37         p1.H = _ipipe_trace_enable;
38         r7 = [p1];
39         CC = r7 == 0;
40         if CC jump out;
41         link 0x10;
42         r0 = 0x0;
43         [sp + 0xc] = r0; /* v */
44         r0 = 0x0;       /* type: IPIPE_TRACE_FN */
45         r1 = rets;
46         p0 = [fp];      /* p0: Prior FP */
47         r2 = [p0 + 4];  /* r2: Prior RETS */
48         call ___ipipe_trace;
49         unlink;
50 out:
51         ASTAT = [sp++];
52         ( r7:0, p5:0 ) = [sp++];
53         b3 = [sp++];
54         b2 = [sp++];
55         b1 = [sp++];
56         b0 = [sp++];
57         m3 = [sp++];
58         m2 = [sp++];
59         m1 = [sp++];
60         m0 = [sp++];
61         l3 = [sp++];
62         l2 = [sp++];
63         l1 = [sp++];
64         l0 = [sp++];
65         i3 = [sp++];
66         i2 = [sp++];
67         i1 = [sp++];
68         i0 = [sp++];
69         rts;
70 ENDPROC(__mcount)