score-datadep.h revision 218822
1251881Speter/* score-datadep.h -- Score Instructions data dependency table
2251881Speter   Copyright 2006 Free Software Foundation, Inc.
3251881Speter   Contributed by:
4251881Speter   Mei Ligang (ligang@sunnorth.com.cn)
5251881Speter   Pei-Lin Tsai (pltsai@sunplus.com)
6251881Speter
7251881Speter   This file is part of GAS, the GNU Assembler.
8251881Speter
9251881Speter   GAS is free software; you can redistribute it and/or modify
10251881Speter   it under the terms of the GNU General Public License as published by
11251881Speter   the Free Software Foundation; either version 2, or (at your option)
12251881Speter   any later version.
13251881Speter
14251881Speter   GAS is distributed in the hope that it will be useful,
15251881Speter   but WITHOUT ANY WARRANTY; without even the implied warranty of
16251881Speter   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17251881Speter   GNU General Public License for more details.
18251881Speter
19251881Speter   You should have received a copy of the GNU General Public License
20251881Speter   along with GAS; see the file COPYING.  If not, write to the Free
21251881Speter   Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
22251881Speter   Boston, MA 02110-1301, USA.  */
23251881Speter
24251881Speter#ifndef SCORE_DATA_DEPENDENCY_H
25251881Speter#define SCORE_DATA_DEPENDENCY_H
26251881Speter
27251881Speter#define INSN_NAME_LEN 16
28251881Speter
29251881Speterenum insn_type_for_dependency
30251881Speter{
31251881Speter  D_pce,
32251881Speter  D_cond_br,
33251881Speter  D_cond_mv,
34251881Speter  D_cached,
35251881Speter  D_cachei,
36251881Speter  D_ldst,
37251881Speter  D_ldcombine,
38251881Speter  D_mtcr,
39251881Speter  D_mfcr,
40251881Speter  D_mfsr,
41251881Speter  D_mftlb,
42251881Speter  D_mtptlb,
43251881Speter  D_mtrtlb,
44251881Speter  D_stlb,
45251881Speter  D_all_insn
46251881Speter};
47251881Speter
48251881Speterstruct insn_to_dependency
49251881Speter{
50251881Speter  char *insn_name;
51251881Speter  enum insn_type_for_dependency type;
52251881Speter};
53251881Speter
54251881Speterstruct data_dependency
55251881Speter{
56251881Speter  enum insn_type_for_dependency pre_insn_type;
57251881Speter  char pre_reg[6];
58251881Speter  enum insn_type_for_dependency cur_insn_type;
59251881Speter  char cur_reg[6];
60251881Speter  int bubblenum_7;
61251881Speter  int bubblenum_5;
62251881Speter  int warn_or_error;           /* warning - 0; error - 1  */
63251881Speter};
64251881Speter
65251881Speterstatic const struct insn_to_dependency insn_to_dependency_table[] =
66251881Speter{
67251881Speter  /* pce instruction.  */
68251881Speter  {"pce",       D_pce},
69251881Speter  /* conditional branch instruction.  */
70251881Speter  {"bcs",       D_cond_br},
71251881Speter  {"bcc",       D_cond_br},
72251881Speter  {"bgtu",      D_cond_br},
73251881Speter  {"bleu",      D_cond_br},
74251881Speter  {"beq",       D_cond_br},
75251881Speter  {"bne",       D_cond_br},
76251881Speter  {"bgt",       D_cond_br},
77251881Speter  {"ble",       D_cond_br},
78251881Speter  {"bge",       D_cond_br},
79251881Speter  {"blt",       D_cond_br},
80251881Speter  {"bmi",       D_cond_br},
81251881Speter  {"bpl",       D_cond_br},
82251881Speter  {"bvs",       D_cond_br},
83251881Speter  {"bvc",       D_cond_br},
84251881Speter  {"bcsl",      D_cond_br},
85251881Speter  {"bccl",      D_cond_br},
86251881Speter  {"bgtul",     D_cond_br},
87251881Speter  {"bleul",     D_cond_br},
88251881Speter  {"beql",      D_cond_br},
89251881Speter  {"bnel",      D_cond_br},
90251881Speter  {"bgtl",      D_cond_br},
91251881Speter  {"blel",      D_cond_br},
92251881Speter  {"bgel",      D_cond_br},
93251881Speter  {"bltl",      D_cond_br},
94251881Speter  {"bmil",      D_cond_br},
95251881Speter  {"bpll",      D_cond_br},
96251881Speter  {"bvsl",      D_cond_br},
97251881Speter  {"bvcl",      D_cond_br},
98251881Speter  {"bcs!",      D_cond_br},
99251881Speter  {"bcc!",      D_cond_br},
100251881Speter  {"bgtu!",     D_cond_br},
101251881Speter  {"bleu!",     D_cond_br},
102251881Speter  {"beq!",      D_cond_br},
103251881Speter  {"bne!",      D_cond_br},
104251881Speter  {"bgt!",      D_cond_br},
105251881Speter  {"ble!",      D_cond_br},
106251881Speter  {"bge!",      D_cond_br},
107251881Speter  {"blt!",      D_cond_br},
108251881Speter  {"bmi!",      D_cond_br},
109251881Speter  {"bpl!",      D_cond_br},
110251881Speter  {"bvs!",      D_cond_br},
111251881Speter  {"bvc!",      D_cond_br},
112251881Speter  {"brcs",      D_cond_br},
113251881Speter  {"brcc",      D_cond_br},
114251881Speter  {"brgtu",     D_cond_br},
115251881Speter  {"brleu",     D_cond_br},
116251881Speter  {"breq",      D_cond_br},
117251881Speter  {"brne",      D_cond_br},
118251881Speter  {"brgt",      D_cond_br},
119251881Speter  {"brle",      D_cond_br},
120251881Speter  {"brge",      D_cond_br},
121251881Speter  {"brlt",      D_cond_br},
122251881Speter  {"brmi",      D_cond_br},
123251881Speter  {"brpl",      D_cond_br},
124251881Speter  {"brvs",      D_cond_br},
125251881Speter  {"brvc",      D_cond_br},
126251881Speter  {"brcsl",     D_cond_br},
127251881Speter  {"brccl",     D_cond_br},
128251881Speter  {"brgtul",    D_cond_br},
129251881Speter  {"brleul",    D_cond_br},
130251881Speter  {"breql",     D_cond_br},
131251881Speter  {"brnel",     D_cond_br},
132251881Speter  {"brgtl",     D_cond_br},
133251881Speter  {"brlel",     D_cond_br},
134251881Speter  {"brgel",     D_cond_br},
135251881Speter  {"brltl",     D_cond_br},
136251881Speter  {"brmil",     D_cond_br},
137251881Speter  {"brpll",     D_cond_br},
138251881Speter  {"brvsl",     D_cond_br},
139251881Speter  {"brvcl",     D_cond_br},
140251881Speter  {"brcs!",     D_cond_br},
141251881Speter  {"brcc!",     D_cond_br},
142251881Speter  {"brgtu!",    D_cond_br},
143251881Speter  {"brleu!",    D_cond_br},
144251881Speter  {"breq!",     D_cond_br},
145251881Speter  {"brne!",     D_cond_br},
146251881Speter  {"brgt!",     D_cond_br},
147251881Speter  {"brle!",     D_cond_br},
148251881Speter  {"brge!",     D_cond_br},
149251881Speter  {"brlt!",     D_cond_br},
150251881Speter  {"brmi!",     D_cond_br},
151251881Speter  {"brpl!",     D_cond_br},
152251881Speter  {"brvs!",     D_cond_br},
153251881Speter  {"brvc!",     D_cond_br},
154251881Speter  {"brcsl!",    D_cond_br},
155251881Speter  {"brccl!",    D_cond_br},
156251881Speter  {"brgtul!",   D_cond_br},
157251881Speter  {"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
254static 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
283