]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/binutils/include/opcode/score-datadep.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / binutils / include / opcode / score-datadep.h
1 /* score-datadep.h -- Score Instructions data dependency table
2    Copyright 2006 Free Software Foundation, Inc.
3    Contributed by: 
4    Mei Ligang (ligang@sunnorth.com.cn)
5    Pei-Lin Tsai (pltsai@sunplus.com)
6
7    This file is part of GAS, the GNU Assembler.
8
9    GAS is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2, or (at your option)
12    any later version.
13
14    GAS is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with GAS; see the file COPYING.  If not, write to the Free
21    Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
22    Boston, MA 02110-1301, USA.  */
23
24 #ifndef SCORE_DATA_DEPENDENCY_H
25 #define SCORE_DATA_DEPENDENCY_H
26
27 #define INSN_NAME_LEN 16
28
29 enum insn_type_for_dependency
30 {
31   D_pce,
32   D_cond_br,
33   D_cond_mv,
34   D_cached,
35   D_cachei,
36   D_ldst,
37   D_ldcombine,
38   D_mtcr,
39   D_mfcr,
40   D_mfsr,
41   D_mftlb,
42   D_mtptlb,
43   D_mtrtlb,
44   D_stlb,
45   D_all_insn
46 };
47
48 struct insn_to_dependency
49 {
50   char *insn_name;
51   enum insn_type_for_dependency type;
52 };
53
54 struct data_dependency
55 {
56   enum insn_type_for_dependency pre_insn_type;
57   char pre_reg[6];
58   enum insn_type_for_dependency cur_insn_type;
59   char cur_reg[6];
60   int bubblenum_7;
61   int bubblenum_5;
62   int warn_or_error;           /* warning - 0; error - 1  */
63 };
64
65 static const struct insn_to_dependency insn_to_dependency_table[] =
66 {
67   /* pce instruction.  */
68   {"pce",       D_pce},
69   /* conditional branch instruction.  */
70   {"bcs",       D_cond_br},
71   {"bcc",       D_cond_br},
72   {"bgtu",      D_cond_br},
73   {"bleu",      D_cond_br},
74   {"beq",       D_cond_br},
75   {"bne",       D_cond_br},
76   {"bgt",       D_cond_br},
77   {"ble",       D_cond_br},
78   {"bge",       D_cond_br},
79   {"blt",       D_cond_br},
80   {"bmi",       D_cond_br},
81   {"bpl",       D_cond_br},
82   {"bvs",       D_cond_br},
83   {"bvc",       D_cond_br},
84   {"bcsl",      D_cond_br},
85   {"bccl",      D_cond_br},
86   {"bgtul",     D_cond_br},
87   {"bleul",     D_cond_br},
88   {"beql",      D_cond_br},
89   {"bnel",      D_cond_br},
90   {"bgtl",      D_cond_br},
91   {"blel",      D_cond_br},
92   {"bgel",      D_cond_br},
93   {"bltl",      D_cond_br},
94   {"bmil",      D_cond_br},
95   {"bpll",      D_cond_br},
96   {"bvsl",      D_cond_br},
97   {"bvcl",      D_cond_br},
98   {"bcs!",      D_cond_br},
99   {"bcc!",      D_cond_br},
100   {"bgtu!",     D_cond_br},
101   {"bleu!",     D_cond_br},
102   {"beq!",      D_cond_br},
103   {"bne!",      D_cond_br},
104   {"bgt!",      D_cond_br},
105   {"ble!",      D_cond_br},
106   {"bge!",      D_cond_br},
107   {"blt!",      D_cond_br},
108   {"bmi!",      D_cond_br},
109   {"bpl!",      D_cond_br},
110   {"bvs!",      D_cond_br},
111   {"bvc!",      D_cond_br},
112   {"brcs",      D_cond_br},
113   {"brcc",      D_cond_br},
114   {"brgtu",     D_cond_br},
115   {"brleu",     D_cond_br},
116   {"breq",      D_cond_br},
117   {"brne",      D_cond_br},
118   {"brgt",      D_cond_br},
119   {"brle",      D_cond_br},
120   {"brge",      D_cond_br},
121   {"brlt",      D_cond_br},
122   {"brmi",      D_cond_br},
123   {"brpl",      D_cond_br},
124   {"brvs",      D_cond_br},
125   {"brvc",      D_cond_br},
126   {"brcsl",     D_cond_br},
127   {"brccl",     D_cond_br},
128   {"brgtul",    D_cond_br},
129   {"brleul",    D_cond_br},
130   {"breql",     D_cond_br},
131   {"brnel",     D_cond_br},
132   {"brgtl",     D_cond_br},
133   {"brlel",     D_cond_br},
134   {"brgel",     D_cond_br},
135   {"brltl",     D_cond_br},
136   {"brmil",     D_cond_br},
137   {"brpll",     D_cond_br},
138   {"brvsl",     D_cond_br},
139   {"brvcl",     D_cond_br},
140   {"brcs!",     D_cond_br},
141   {"brcc!",     D_cond_br},
142   {"brgtu!",    D_cond_br},
143   {"brleu!",    D_cond_br},
144   {"breq!",     D_cond_br},
145   {"brne!",     D_cond_br},
146   {"brgt!",     D_cond_br},
147   {"brle!",     D_cond_br},
148   {"brge!",     D_cond_br},
149   {"brlt!",     D_cond_br},
150   {"brmi!",     D_cond_br},
151   {"brpl!",     D_cond_br},
152   {"brvs!",     D_cond_br},
153   {"brvc!",     D_cond_br},
154   {"brcsl!",    D_cond_br},
155   {"brccl!",    D_cond_br},
156   {"brgtul!",   D_cond_br},
157   {"brleul!",   D_cond_br},
158   {"breql!",    D_cond_br},
159   {"brnel!",    D_cond_br},
160   {"brgtl!",    D_cond_br},
161   {"brlel!",    D_cond_br},
162   {"brgel!",    D_cond_br},
163   {"brltl!",    D_cond_br},
164   {"brmil!",    D_cond_br},
165   {"brpll!",    D_cond_br},
166   {"brvsl!",    D_cond_br},
167   {"brvcl!",    D_cond_br},
168   /* conditional move instruction.  */
169   {"mvcs",      D_cond_mv},
170   {"mvcc",      D_cond_mv},
171   {"mvgtu",     D_cond_mv},
172   {"mvleu",     D_cond_mv},
173   {"mveq",      D_cond_mv},
174   {"mvne",      D_cond_mv},
175   {"mvgt",      D_cond_mv},
176   {"mvle",      D_cond_mv},
177   {"mvge",      D_cond_mv},
178   {"mvlt",      D_cond_mv},
179   {"mvmi",      D_cond_mv},
180   {"mvpl",      D_cond_mv},
181   {"mvvs",      D_cond_mv},
182   {"mvvc",      D_cond_mv},
183   /* move spectial instruction.  */
184   {"mtcr",      D_mtcr},
185   {"mftlb",     D_mftlb},
186   {"mtptlb",    D_mtptlb},
187   {"mtrtlb",    D_mtrtlb},
188   {"stlb",      D_stlb},
189   {"mfcr",      D_mfcr},
190   {"mfsr",      D_mfsr},
191   /* cache instruction.  */
192   {"cache 8",   D_cached},
193   {"cache 9",   D_cached},
194   {"cache 10",  D_cached},
195   {"cache 11",  D_cached},
196   {"cache 12",  D_cached},
197   {"cache 13",  D_cached},
198   {"cache 14",  D_cached},
199   {"cache 24",  D_cached},
200   {"cache 26",  D_cached},
201   {"cache 27",  D_cached},
202   {"cache 29",  D_cached},
203   {"cache 30",  D_cached},
204   {"cache 31",  D_cached},
205   {"cache 0",   D_cachei},
206   {"cache 1",   D_cachei},
207   {"cache 2",   D_cachei},
208   {"cache 3",   D_cachei},
209   {"cache 4",   D_cachei},
210   {"cache 16",  D_cachei},
211   {"cache 17",  D_cachei},
212   /* load/store instruction.  */
213   {"lb",        D_ldst},
214   {"lbu",       D_ldst},
215   {"lbu!",      D_ldst},
216   {"lbup!",     D_ldst},
217   {"lh",        D_ldst},
218   {"lhu",       D_ldst},
219   {"lh!",       D_ldst},
220   {"lhp!",      D_ldst},
221   {"lw",        D_ldst},
222   {"lw!",       D_ldst},
223   {"lwp!",      D_ldst},
224   {"sb",        D_ldst},
225   {"sb!",       D_ldst},
226   {"sbp!",      D_ldst},
227   {"sh",        D_ldst},
228   {"sh!",       D_ldst},
229   {"shp!",      D_ldst},
230   {"sw",        D_ldst},
231   {"sw!",       D_ldst},
232   {"swp!",      D_ldst},
233   {"alw",       D_ldst},
234   {"asw",       D_ldst},
235   {"push!",     D_ldst},
236   {"pushhi!",   D_ldst},
237   {"pop!",      D_ldst},
238   {"pophi!",    D_ldst},
239   {"ldc1",      D_ldst},
240   {"ldc2",      D_ldst},
241   {"ldc3",      D_ldst},
242   {"stc1",      D_ldst},
243   {"stc2",      D_ldst},
244   {"stc3",      D_ldst},
245   {"scb",       D_ldst},
246   {"scw",       D_ldst},
247   {"sce",       D_ldst},
248   /* load combine instruction.  */
249   {"lcb",       D_ldcombine},
250   {"lcw",       D_ldcombine},
251   {"lce",       D_ldcombine},
252 };
253
254 static const struct data_dependency data_dependency_table[] =
255 {
256   /* Condition register.  */
257   {D_mtcr, "cr1", D_pce, "", 2, 1, 1},
258   {D_mtcr, "cr1", D_cond_br, "", 1, 0, 1},
259   {D_mtcr, "cr1", D_cond_mv, "", 1, 0, 1},
260   /* Status regiser.  */
261   {D_mtcr, "cr0", D_all_insn, "", 5, 4, 0},
262   /* CCR regiser.  */
263   {D_mtcr, "cr4", D_all_insn, "", 6, 5, 0},
264   /* EntryHi/EntryLo register.  */
265   {D_mftlb, "", D_mtptlb, "", 1, 1, 1},
266   {D_mftlb, "", D_mtrtlb, "", 1, 1, 1},
267   {D_mftlb, "", D_stlb, "", 1, 1,1},
268   {D_mftlb, "", D_mfcr, "cr11", 1, 1, 1},
269   {D_mftlb, "", D_mfcr, "cr12", 1, 1, 1},
270   /* Index register.  */
271   {D_stlb, "", D_mtptlb, "", 1, 1, 1},
272   {D_stlb, "", D_mftlb, "", 1, 1, 1},
273   {D_stlb, "", D_mfcr, "cr8", 2, 2, 1},
274   /* Cache.  */
275   {D_cached, "", D_ldst, "", 1, 1, 0},
276   {D_cached, "", D_ldcombine, "", 1, 1, 0},
277   {D_cachei, "", D_all_insn, "", 5, 4, 0},
278   /* Load combine.  */
279   {D_ldcombine, "", D_mfsr, "sr1", 3, 3, 1},
280 };
281
282 #endif