OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [config/] [m32c/] [prologue.md] - Blame information for rev 282

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 282 jeremybenn
;; 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
;; .
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
 
152
(define_insn "epilogue_freit"
153
  [(unspec [(const_int 0)] UNS_FREIT)
154
   (return)
155
   ]
156
  ""
157
  "freit"
158
  [(set_attr "flags" "x")]
159
  )
160
 
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
  )
192
 
193
(define_insn "fset_b"
194
  [(unspec [(const_int 0)] UNS_FSETB)]
195
  ""
196
  "fset\tB"
197
  [(set_attr "flags" "n")]
198
  )
199
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.