PR ld/13683
[deliverable/binutils-gdb.git] / cpu / mep-c5.cpu
1 ; Copyright 2011 Free Software Foundation, Inc.
2 ;
3 ; Contributed by Red Hat Inc;
4 ;
5 ; This file is part of the GNU Binutils.
6 ;
7 ; This program is free software; you can redistribute it and/or modify
8 ; it under the terms of the GNU General Public License as published by
9 ; the Free Software Foundation; either version 3 of the License, or
10 ; (at your option) any later version.
11 ;
12 ; This program is distributed in the hope that it will be useful,
13 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 ; GNU General Public License for more details.
16 ;
17 ; You should have received a copy of the GNU General Public License
18 ; along with this program; if not, write to the Free Software
19 ; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20 ; MA 02110-1301, USA.
21
22 ; Insns introduced for the MeP-c5 core
23 ;
24
25 (dnf f-c5n4 "extended field" (all-mep-core-isas) 16 4)
26 (dnf f-c5n5 "extended field" (all-mep-core-isas) 20 4)
27 (dnf f-c5n6 "extended field" (all-mep-core-isas) 24 4)
28 (dnf f-c5n7 "extended field" (all-mep-core-isas) 28 4)
29 (dnf f-rl5 "register l c5" (all-mep-core-isas) 20 4)
30 (df f-12s20 "extended field" (all-mep-core-isas) 20 12 INT #f #f)
31
32 (dnop rl5 "register Rl c5" (all-mep-core-isas) h-gpr f-rl5)
33 (dnop cdisp12 "copro addend (12 bits)" (all-mep-core-isas) h-sint f-12s20)
34
35 (dnci stcb_r "store in control bus space" (VOLATILE (MACH c5))
36 "stcb $rn,($rma)"
37 (+ MAJ_7 rn rma (f-sub4 12))
38 (c-call VOID "do_stcb" rn (and rma #xffff))
39 ((mep (unit u-use-gpr (in usereg rn))
40 (unit u-use-gpr (in usereg rma))
41 (unit u-exec)
42 (unit u-stcb))))
43
44 (dnci ldcb_r "load from control bus space" (VOLATILE (MACH c5) (LATENCY 3))
45 "ldcb $rn,($rma)"
46 (+ MAJ_7 rn rma (f-sub4 13))
47 (set rn (c-call SI "do_ldcb" (and rma #xffff)))
48 ((mep (unit u-use-gpr (in usereg rma))
49 (unit u-ldcb)
50 (unit u-exec)
51 (unit u-ldcb-gpr (out loadreg rn)))))
52
53 (dnci pref "cache prefetch" ((MACH c5) VOLATILE)
54 "pref $cimm4,($rma)"
55 (+ MAJ_7 cimm4 rma (f-sub4 5))
56 (sequence ()
57 (c-call VOID "check_option_dcache" pc)
58 (c-call VOID "do_cache_prefetch" cimm4 rma pc))
59 ((mep (unit u-use-gpr (in usereg rma))
60 (unit u-exec))))
61
62 (dnci prefd "cache prefetch" ((MACH c5) VOLATILE)
63 "pref $cimm4,$sdisp16($rma)"
64 (+ MAJ_15 cimm4 rma (f-sub4 3) sdisp16)
65 (sequence ()
66 (c-call VOID "check_option_dcache" pc)
67 (c-call VOID "do_cache_prefetch" cimm4 (add INT rma (ext SI sdisp16)) pc))
68 ((mep (unit u-use-gpr (in usereg rma))
69 (unit u-exec))))
70
71 (dnci casb3 "compare and swap byte 3" ((MACH c5) VOLATILE OPTIONAL_BIT_INSN)
72 "casb3 $rl5,$rn,($rm)"
73 (+ MAJ_15 rn rm (f-sub4 #x1) (f-c5n4 #x2) rl5 (f-c5n6 #x0) (f-c5n7 #x0))
74 (sequence ()
75 (c-call VOID "do_casb3" (index-of rl5) rn rm pc)
76 (set rl5 rl5)
77 )
78 ((mep (unit u-use-gpr (in usereg rl5))
79 (unit u-load-gpr (out loadreg rl5))
80 (unit u-exec))))
81
82 (dnci cash3 "compare and swap halfword 3" ((MACH c5) VOLATILE OPTIONAL_BIT_INSN)
83 "cash3 $rl5,$rn,($rm)"
84 (+ MAJ_15 rn rm (f-sub4 #x1) (f-c5n4 #x2) rl5 (f-c5n6 #x0) (f-c5n7 #x1))
85 (sequence ()
86 (c-call VOID "do_cash3" (index-of rl5) rn rm pc)
87 (set rl5 rl5)
88 )
89 ((mep (unit u-use-gpr (in usereg rl5))
90 (unit u-load-gpr (out loadreg rl5))
91 (unit u-exec))))
92
93 (dnci casw3 "compare and swap word 3" ((MACH c5) VOLATILE OPTIONAL_BIT_INSN)
94 "casw3 $rl5,$rn,($rm)"
95 (+ MAJ_15 rn rm (f-sub4 #x1) (f-c5n4 #x2) rl5 (f-c5n6 #x0) (f-c5n7 #x2))
96 (sequence ()
97 (c-call VOID "do_casw3" (index-of rl5) rn rm pc)
98 (set rl5 rl5)
99 )
100 ((mep (unit u-use-gpr (in usereg rl5))
101 (unit u-load-gpr (out loadreg rl5))
102 (unit u-exec))))
103
104
105
106 (dnci sbcp "store byte coprocessor" (OPTIONAL_CP_INSN (STALL STORE) (MACH c5))
107 "sbcp $crn,$cdisp12($rma)"
108 (+ MAJ_15 crn rma (f-sub4 6) (f-ext4 0) cdisp12)
109 (sequence ()
110 (c-call "check_option_cp" pc)
111 (c-call VOID "check_write_to_text" (add rma (ext SI cdisp12)))
112 (set (mem QI (add rma (ext SI cdisp12))) (and crn #xff)))
113 ((mep (unit u-use-gpr (in usereg rma))
114 (unit u-exec))))
115
116 (dnci lbcp "load byte coprocessor" (OPTIONAL_CP_INSN (STALL STORE) (MACH c5))
117 "lbcp $crn,$cdisp12($rma)"
118 (+ MAJ_15 crn rma (f-sub4 6) (f-ext4 4) cdisp12)
119 (sequence ()
120 (c-call "check_option_cp" pc)
121 (set crn (ext SI (mem QI (add rma (ext SI cdisp12))))))
122 ((mep (unit u-use-gpr (in usereg rma))
123 (unit u-exec))))
124
125 (dnci lbucp "load byte coprocessor" (OPTIONAL_CP_INSN (STALL STORE) (MACH c5))
126 "lbucp $crn,$cdisp12($rma)"
127 (+ MAJ_15 crn rma (f-sub4 6) (f-ext4 12) cdisp12)
128 (sequence ()
129 (c-call "check_option_cp" pc)
130 (set crn (zext SI (mem QI (add rma (ext SI cdisp12))))))
131 ((mep (unit u-use-gpr (in usereg rma))
132 (unit u-exec))))
133
134
135 (dnci shcp "store half-word coprocessor" (OPTIONAL_CP_INSN (STALL STORE) (MACH c5))
136 "shcp $crn,$cdisp12($rma)"
137 (+ MAJ_15 crn rma (f-sub4 6) (f-ext4 1) cdisp12)
138 (sequence ()
139 (c-call "check_option_cp" pc)
140 (c-call VOID "check_write_to_text" (add rma (ext SI cdisp12)))
141 (set (mem HI (add rma (ext SI cdisp12))) (and crn #xffff)))
142 ((mep (unit u-use-gpr (in usereg rma))
143 (unit u-exec))))
144
145 (dnci lhcp "load half-word coprocessor" (OPTIONAL_CP_INSN (STALL STORE) (MACH c5))
146 "lhcp $crn,$cdisp12($rma)"
147 (+ MAJ_15 crn rma (f-sub4 6) (f-ext4 5) cdisp12)
148 (sequence ()
149 (c-call "check_option_cp" pc)
150 (set crn (ext SI (mem HI (add rma (ext SI cdisp12))))))
151 ((mep (unit u-use-gpr (in usereg rma))
152 (unit u-exec))))
153
154 (dnci lhucp "load half-word coprocessor" (OPTIONAL_CP_INSN (STALL STORE) (MACH c5))
155 "lhucp $crn,$cdisp12($rma)"
156 (+ MAJ_15 crn rma (f-sub4 6) (f-ext4 13) cdisp12)
157 (sequence ()
158 (c-call "check_option_cp" pc)
159 (set crn (zext SI (mem HI (add rma (ext SI cdisp12))))))
160 ((mep (unit u-use-gpr (in usereg rma))
161 (unit u-exec))))
162
163
164 (dnci lbucpa "load byte coprocessor" (OPTIONAL_CP_INSN (STALL LOAD) (MACH c5))
165 "lbucpa $crn,($rma+),$cdisp10"
166 (+ MAJ_15 crn rma (f-sub4 5) (f-ext4 #xC) (f-ext62 #x0) cdisp10)
167 (sequence ()
168 (c-call "check_option_cp" pc)
169 (set crn (zext SI (mem QI rma)))
170 (set rma (add rma cdisp10)))
171 ((mep (unit u-use-gpr (in usereg rma))
172 (unit u-exec))))
173
174 (dnci lhucpa "load half-word coprocessor" (OPTIONAL_CP_INSN (STALL LOAD) (MACH c5))
175 "lhucpa $crn,($rma+),$cdisp10a2"
176 (+ MAJ_15 crn rma (f-sub4 5) (f-ext4 #xD) (f-ext62 #x0) cdisp10a2)
177 (sequence ()
178 (c-call "check_option_cp" pc)
179 (set crn (zext SI (mem HI (and rma (inv SI 1)))))
180 (set rma (add rma (ext SI cdisp10a2))))
181 ((mep (unit u-use-gpr (in usereg rma))
182 (unit u-exec))))
183
184 (dnci lbucpm0 "lbucpm0" (OPTIONAL_CP_INSN (MACH c5))
185 "lbucpm0 $crn,($rma+),$cdisp10"
186 (+ MAJ_15 crn rma (f-sub4 5) (f-ext4 #xc) (f-ext62 #x2) cdisp10)
187 (sequence ()
188 (c-call "check_option_cp" pc)
189 (set crn (zext SI (mem QI rma)))
190 (set rma (mod0 cdisp10)))
191 ((mep (unit u-use-gpr (in usereg rma))
192 (unit u-exec))))
193
194 (dnci lhucpm0 "lhucpm0" (OPTIONAL_CP_INSN (MACH c5))
195 "lhucpm0 $crn,($rma+),$cdisp10a2"
196 (+ MAJ_15 crn rma (f-sub4 5) (f-ext4 #xd) (f-ext62 #x2) cdisp10a2)
197 (sequence ()
198 (c-call "check_option_cp" pc)
199 (set crn (zext SI (mem HI (and rma (inv SI 1)))))
200 (set rma (mod0 cdisp10a2)))
201 ((mep (unit u-use-gpr (in usereg rma))
202 (unit u-exec))))
203
204 (dnci lbucpm1 "lbucpm1" (OPTIONAL_CP_INSN (MACH c5))
205 "lbucpm1 $crn,($rma+),$cdisp10"
206 (+ MAJ_15 crn rma (f-sub4 5) (f-ext4 #xc) (f-ext62 #x3) cdisp10)
207 (sequence ()
208 (c-call "check_option_cp" pc)
209 (set crn (zext SI (mem QI rma)))
210 (set rma (mod1 cdisp10)))
211 ((mep (unit u-use-gpr (in usereg rma))
212 (unit u-exec))))
213
214 (dnci lhucpm1 "lhucpm1" (OPTIONAL_CP_INSN (MACH c5))
215 "lhucpm1 $crn,($rma+),$cdisp10a2"
216 (+ MAJ_15 crn rma (f-sub4 5) (f-ext4 #xd) (f-ext62 #x3) cdisp10a2)
217 (sequence ()
218 (c-call "check_option_cp" pc)
219 (set crn (zext SI (mem HI (and rma (inv SI 1)))))
220 (set rma (mod1 cdisp10a2)))
221 ((mep (unit u-use-gpr (in usereg rma))
222 (unit u-exec))))
223
224 (dnci uci "uci" ((MACH c5) VOLATILE)
225 "uci $rn,$rm,$uimm16"
226 (+ MAJ_15 rn rm (f-sub4 2) simm16)
227 (set rn (c-call SI "do_UCI" rn rm (zext SI uimm16) pc))
228 ((mep (unit u-use-gpr (in usereg rm))
229 (unit u-use-gpr (in usereg rn))
230 (unit u-exec))))
231
232 (dnf f-c5-rnm "register n/m" (all-mep-isas) 4 8)
233 (dnf f-c5-rm "register m" (all-mep-isas) 8 4)
234 (df f-c5-16u16 "general 16-bit u-val" (all-mep-isas) 16 16 UINT #f #f)
235
236 (dnmf f-c5-rmuimm20 "20-bit immediate in Rm/Imm16" (all-mep-isas) UINT
237 (f-c5-rm f-c5-16u16)
238 (sequence () ; insert
239 (set (ifield f-c5-rm) (srl (ifield f-c5-rmuimm20) 16))
240 (set (ifield f-c5-16u16) (and (ifield f-c5-rmuimm20) #xffff))
241 )
242 (sequence () ; extract
243 (set (ifield f-c5-rmuimm20) (or (ifield f-c5-16u16)
244 (sll (ifield f-c5-rm) 16)))
245 )
246 )
247 (dnop c5rmuimm20 "20-bit immediate in rm and imm16" (all-mep-core-isas) h-uint f-c5-rmuimm20)
248
249 (dnmf f-c5-rnmuimm24 "24-bit immediate in Rm/Imm16" (all-mep-isas) UINT
250 (f-c5-rnm f-c5-16u16)
251 (sequence () ; insert
252 (set (ifield f-c5-rnm) (srl (ifield f-c5-rnmuimm24) 16))
253 (set (ifield f-c5-16u16) (and (ifield f-c5-rnmuimm24) #xffff))
254 )
255 (sequence () ; extract
256 (set (ifield f-c5-rnmuimm24) (or (ifield f-c5-16u16)
257 (sll (ifield f-c5-rnm) 16)))
258 )
259 )
260 (dnop c5rnmuimm24 "24-bit immediate in rn, rm, and imm16" (all-mep-core-isas) h-uint f-c5-rnmuimm24)
261
262 (dnci dsp "dsp" ((MACH c5) VOLATILE)
263 "dsp $rn,$rm,$uimm16"
264 (+ MAJ_15 rn rm (f-sub4 0) uimm16)
265 (set rn (c-call SI "do_DSP" rn rm (zext SI uimm16) pc))
266 ((mep (unit u-use-gpr (in usereg rm))
267 (unit u-use-gpr (in usereg rn))
268 (unit u-exec))))
269
270 (dnci dsp0 "dsp0" ((MACH c5) VOLATILE NO-DIS ALIAS)
271 "dsp0 $c5rnmuimm24"
272 (+ MAJ_15 c5rnmuimm24 (f-sub4 0))
273 (c-call VOID "do_DSP" (zext SI c5rnmuimm24) pc)
274 ((mep (unit u-exec))))
275
276 (dnci dsp1 "dsp1" ((MACH c5) VOLATILE NO-DIS ALIAS)
277 "dsp1 $rn,$c5rmuimm20"
278 (+ MAJ_15 rn (f-sub4 0) c5rmuimm20)
279 (set rn (c-call SI "do_DSP" rn (zext SI c5rmuimm20) pc))
280 ((mep (unit u-use-gpr (in usereg rn))
281 (unit u-exec))))
This page took 0.035441 seconds and 4 git commands to generate.