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