Reverting merge from trunk
[official-gcc.git] / libgcc / config / mep / lib1funcs.S
bloba5a72aa364b4753b5b36993a0468b742244f5f35
1 /* libgcc routines for Toshiba Media Processor.
2    Copyright (C) 2001-2013 Free Software Foundation, Inc.
4 This file is free software; you can redistribute it and/or modify it
5 under the terms of the GNU General Public License as published by the
6 Free Software Foundation; either version 3 of the License, or (at your
7 option) any later version.
8   
9 This file is distributed in the hope that it will be useful, but
10 WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 General Public License for more details.
13   
14 Under Section 7 of GPL version 3, you are granted additional
15 permissions described in the GCC Runtime Library Exception, version
16 3.1, as published by the Free Software Foundation.
18 You should have received a copy of the GNU General Public License and
19 a copy of the GCC Runtime Library Exception along with this program;
20 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
21 <http://www.gnu.org/licenses/>.  */
23 #define SAVEALL \
24         add3    $sp, $sp, -16*4 ; \
25         sw      $0, ($sp) ; \
26         sw      $1, 4($sp) ; \
27         sw      $2, 8($sp) ; \
28         sw      $3, 12($sp) ; \
29         sw      $4, 16($sp) ; \
30         sw      $5, 20($sp) ; \
31         sw      $6, 24($sp) ; \
32         sw      $7, 28($sp) ; \
33         sw      $8, 32($sp) ; \
34         sw      $9, 36($sp) ; \
35         sw      $10, 40($sp) ; \
36         sw      $11, 44($sp) ; \
37         sw      $12, 48($sp) ; \
38         sw      $13, 52($sp) ; \
39         sw      $14, 56($sp) ; \
40         ldc     $5, $lp ; \
41         add     $5, 3 ; \
42         mov     $6, -4 ; \
43         and     $5, $6
45 #define RESTOREALL \
46         stc     $5, $lp ; \
47         lw      $14, 56($sp) ; \
48         lw      $13, 52($sp) ; \
49         lw      $12, 48($sp) ; \
50         lw      $11, 44($sp) ; \
51         lw      $10, 40($sp) ; \
52         lw      $9, 36($sp) ; \
53         lw      $8, 32($sp) ; \
54         lw      $7, 28($sp) ; \
55         lw      $6, 24($sp) ; \
56         lw      $5, 20($sp) ; \
57         lw      $4, 16($sp) ; \
58         lw      $3, 12($sp) ; \
59         lw      $2, 8($sp) ; \
60         lw      $1, 4($sp) ; \
61         lw      $0, ($sp) ; \
62         add3    $sp, $sp, 16*4 ; \
63         ret
65 #ifdef L_mep_profile
66         .text
67         .global __mep_mcount
68 __mep_mcount:
69         SAVEALL
70         ldc     $1, $lp
71         mov     $2, $0
72         bsr     __mep_mcount_2
73         RESTOREALL
74 #endif
76 #ifdef L_mep_bb_init_trace
77         .text
78         .global __mep_bb_init_trace_func
79 __mep_bb_init_trace_func:
80         SAVEALL
81         lw      $1, ($5)
82         lw      $2, 4($5)
83         add     $5, 8
84         bsr     __bb_init_trace_func
85         RESTOREALL
86 #endif
88 #ifdef L_mep_bb_init
89         .text
90         .global __mep_bb_init_func
91 __mep_bb_init_func:
92         SAVEALL
93         lw      $1, ($5)
94         add     $5, 4
95         bsr     __bb_init_func
96         RESTOREALL
97 #endif
99 #ifdef L_mep_bb_trace
100         .text
101         .global __mep_bb_trace_func
102 __mep_bb_trace_func:
103         SAVEALL
104         movu    $3, __bb
105         lw      $1, ($5)
106         sw      $1, ($3)
107         lw      $2, 4($5)
108         sw      $2, 4($3)
109         add     $5, 8
110         bsr     __bb_trace_func
111         RESTOREALL
112 #endif
114 #ifdef L_mep_bb_increment
115         .text
116         .global __mep_bb_increment_func
117 __mep_bb_increment_func:
118         SAVEALL
119         lw      $1, ($5)
120         lw      $0, ($1)
121         add     $0, 1
122         sw      $0, ($1)
123         add     $5, 4
124         RESTOREALL
125 #endif