Mercurial > hg > CbC > CbC_gcc
annotate gcc/config/m32c/prologue.md @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | 04ced10e8804 |
rev | line source |
---|---|
0 | 1 ;; Machine Descriptions for R8C/M16C/M32C |
2 ;; Copyright (C) 2005, 2007, 2008 | |
3 ;; Free Software Foundation, Inc. | |
4 ;; Contributed by Red Hat. | |
5 ;; | |
6 ;; This file is part of GCC. | |
7 ;; | |
8 ;; GCC is free software; you can redistribute it and/or modify it | |
9 ;; under the terms of the GNU General Public License as published | |
10 ;; by the Free Software Foundation; either version 3, or (at your | |
11 ;; option) any later version. | |
12 ;; | |
13 ;; GCC is distributed in the hope that it will be useful, but WITHOUT | |
14 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
15 ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public | |
16 ;; License for more details. | |
17 ;; | |
18 ;; You should have received a copy of the GNU General Public License | |
19 ;; along with GCC; see the file COPYING3. If not see | |
20 ;; <http://www.gnu.org/licenses/>. | |
21 | |
22 ;; Prologue and epilogue patterns | |
23 | |
24 (define_expand "prologue" | |
25 [(const_int 1)] | |
26 "" | |
27 "m32c_emit_prologue(); DONE;" | |
28 ) | |
29 | |
30 ; For the next two, operands[0] is the amount of stack space we want | |
31 ; to reserve. | |
32 | |
33 ; We assume dwarf2out will process each set in sequence. | |
34 (define_insn "prologue_enter_16" | |
35 [(set (mem:HI (plus:HI (reg:HI SP_REGNO) (const_int -2))) | |
36 (reg:HI FB_REGNO)) | |
37 (set (reg:HI FB_REGNO) | |
38 (plus:HI (reg:HI SP_REGNO) (const_int -2))) | |
39 (set (reg:HI SP_REGNO) | |
40 (minus:HI (reg:HI SP_REGNO) | |
41 (match_operand 0 "const_int_operand" "i"))) | |
42 ] | |
43 "TARGET_A16" | |
44 { | |
45 /* This is due to binutils bug gas/4659. */ | |
46 if (INTVAL (operands[0]) == 2) | |
47 return "enter\t#0"; | |
48 return "enter\t%0-2"; | |
49 } | |
50 [(set_attr "flags" "x")] | |
51 ) | |
52 | |
53 (define_insn "prologue_enter_24" | |
54 [(set (mem:SI (plus:PSI (reg:PSI SP_REGNO) (const_int -4))) | |
55 (reg:SI FB_REGNO)) | |
56 (set (reg:PSI FB_REGNO) | |
57 (plus:PSI (reg:PSI SP_REGNO) (const_int -4))) | |
58 (set (reg:PSI SP_REGNO) | |
59 (minus:PSI (reg:PSI SP_REGNO) | |
60 (match_operand 0 "const_int_operand" "i"))) | |
61 ] | |
62 "TARGET_A24" | |
63 { | |
64 /* This is due to binutils bug gas/4659. */ | |
65 if (INTVAL (operands[0]) == 4) | |
66 return "enter\t#0"; | |
67 return "enter\t%0-4"; | |
68 } | |
69 [(set_attr "flags" "x")] | |
70 ) | |
71 | |
72 ; Just a comment, for debugging the assembler output. | |
73 (define_insn "prologue_end" | |
74 [(unspec_volatile [(const_int 0)] UNS_PROLOGUE_END)] | |
75 "" | |
76 "; end of prologue" | |
77 [(set_attr "flags" "n")] | |
78 ) | |
79 | |
80 | |
81 | |
82 (define_expand "epilogue" | |
83 [(const_int 1)] | |
84 "" | |
85 "m32c_emit_epilogue(); DONE;" | |
86 ) | |
87 | |
88 (define_expand "eh_return" | |
89 [(match_operand:PSI 0 "" "")] | |
90 "" | |
91 "m32c_emit_eh_epilogue(operands[0]); DONE;" | |
92 ) | |
93 | |
94 (define_insn "eh_epilogue" | |
95 [(set (pc) | |
96 (unspec_volatile [(match_operand 0 "m32c_r1_operand" "") | |
97 (match_operand 1 "m32c_r0_operand" "") | |
98 ] UNS_EH_EPILOGUE))] | |
99 "" | |
100 "jmp.a\t__m32c_eh_return" | |
101 [(set_attr "flags" "x")] | |
102 ) | |
103 | |
104 (define_insn "epilogue_exitd_16" | |
105 [(set (reg:HI SP_REGNO) | |
106 (plus:HI (reg:HI FB_REGNO) | |
107 (const_int 2))) | |
108 (set (reg:HI FB_REGNO) | |
109 (mem:HI (reg:HI FB_REGNO))) | |
110 (return) | |
111 ] | |
112 "TARGET_A16" | |
113 "exitd" | |
114 [(set_attr "flags" "x")] | |
115 ) | |
116 | |
117 (define_insn "epilogue_reit_16" | |
118 [(set (reg:HI SP_REGNO) | |
119 (plus:HI (reg:HI SP_REGNO) | |
120 (const_int 4))) | |
121 (return) | |
122 ] | |
123 "TARGET_A16" | |
124 "reit" | |
125 [(set_attr "flags" "x")] | |
126 ) | |
127 | |
128 (define_insn "epilogue_exitd_24" | |
129 [(set (reg:PSI SP_REGNO) | |
130 (plus:PSI (reg:PSI FB_REGNO) | |
131 (const_int 4))) | |
132 (set (reg:PSI FB_REGNO) | |
133 (mem:PSI (reg:PSI FB_REGNO))) | |
134 (return) | |
135 ] | |
136 "TARGET_A24" | |
137 "exitd" | |
138 [(set_attr "flags" "x")] | |
139 ) | |
140 | |
141 (define_insn "epilogue_reit_24" | |
142 [(set (reg:PSI SP_REGNO) | |
143 (plus:PSI (reg:PSI SP_REGNO) | |
144 (const_int 6))) | |
145 (return) | |
146 ] | |
147 "TARGET_A24" | |
148 "reit" | |
149 [(set_attr "flags" "x")] | |
150 ) | |
151 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
152 (define_insn "epilogue_freit" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
153 [(unspec [(const_int 0)] UNS_FREIT) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
154 (return) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
155 ] |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
156 "" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
157 "freit" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
158 [(set_attr "flags" "x")] |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
159 ) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
160 |
0 | 161 (define_insn "epilogue_rts" |
162 [(return) | |
163 ] | |
164 "" | |
165 "rts" | |
166 [(set_attr "flags" "x")] | |
167 ) | |
168 | |
169 (define_insn "epilogue_start" | |
170 [(unspec_volatile [(const_int 0)] UNS_EPILOGUE_START)] | |
171 "" | |
172 "; start of epilogue" | |
173 [(set_attr "flags" "n")] | |
174 ) | |
175 | |
176 | |
177 ; These are used by the prologue/epilogue code. | |
178 | |
179 (define_insn "pushm" | |
180 [(unspec [(match_operand 0 "const_int_operand" "i")] UNS_PUSHM)] | |
181 "" | |
182 "pushm\t%p0" | |
183 [(set_attr "flags" "n")] | |
184 ) | |
185 | |
186 (define_insn "popm" | |
187 [(unspec [(match_operand 0 "const_int_operand" "i")] UNS_POPM)] | |
188 "" | |
189 "popm\t%p0" | |
190 [(set_attr "flags" "n")] | |
191 ) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
192 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
193 (define_insn "fset_b" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
194 [(unspec [(const_int 0)] UNS_FSETB)] |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
195 "" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
196 "fset\tB" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
197 [(set_attr "flags" "n")] |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
198 ) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
199 |