1214571Sdim/* score-inst.h -- Score Instructions Table
2214571Sdim   Copyright 2006 Free Software Foundation, Inc.
3214571Sdim   Contributed by:
4214571Sdim   Mei Ligang (ligang@sunnorth.com.cn)
5214571Sdim   Pei-Lin Tsai (pltsai@sunplus.com)
6214571Sdim
7214571Sdim   This file is part of GAS, the GNU Assembler.
8214571Sdim
9214571Sdim   GAS is free software; you can redistribute it and/or modify
10214571Sdim   it under the terms of the GNU General Public License as published by
11214571Sdim   the Free Software Foundation; either version 2, or (at your option)
12214571Sdim   any later version.
13214571Sdim
14214571Sdim   GAS is distributed in the hope that it will be useful,
15214571Sdim   but WITHOUT ANY WARRANTY; without even the implied warranty of
16214571Sdim   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17214571Sdim   GNU General Public License for more details.
18214571Sdim
19214571Sdim   You should have received a copy of the GNU General Public License
20214571Sdim   along with GAS; see the file COPYING.  If not, write to the Free
21214571Sdim   Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
22214571Sdim   02110-1301, USA.  */
23214571Sdim
24214571Sdim#ifndef SCORE_INST_H
25214571Sdim#define SCORE_INST_H
26214571Sdim
27214571Sdim#define LDST_UNALIGN_MASK 0x0000007f
28214571Sdim#define UA_LCB		  0x00000060
29214571Sdim#define UA_LCW		  0x00000062
30214571Sdim#define UA_LCE		  0x00000066
31214571Sdim#define UA_SCB		  0x00000068
32214571Sdim#define UA_SCW		  0x0000006a
33214571Sdim#define UA_SCE		  0x0000006e
34214571Sdim#define UA_LL		  0x0000000c
35214571Sdim#define UA_SC		  0x0000000e
36214571Sdim#define LDST16_RR_MASK   0x0000000f
37214571Sdim#define N16_LW           8
38214571Sdim#define N16_LH           9
39214571Sdim#define N16_POP          10
40214571Sdim#define N16_LBU          11
41214571Sdim#define N16_SW           12
42214571Sdim#define N16_SH           13
43214571Sdim#define N16_PUSH         14
44214571Sdim#define N16_SB           15
45214571Sdim#define LDST16_RI_MASK   0x7007
46214571Sdim#define N16_LWP          0x7000
47214571Sdim#define N16_LHP          0x7001
48214571Sdim#define N16_LBUP         0x7003
49214571Sdim#define N16_SWP          0x7004
50214571Sdim#define N16_SHP          0x7005
51214571Sdim#define N16_SBP          0x7007
52214571Sdim#define N16_LIU          0x5000
53214571Sdim
54214571Sdim#define OPC_PSEUDOLDST_MASK	0x00000007
55214571Sdim
56214571Sdimenum
57214571Sdim{
58214571Sdim  INSN_LW = 0,
59214571Sdim  INSN_LH = 1,
60214571Sdim  INSN_LHU = 2,
61214571Sdim  INSN_LB = 3,
62214571Sdim  INSN_SW = 4,
63214571Sdim  INSN_SH = 5,
64214571Sdim  INSN_LBU = 6,
65214571Sdim  INSN_SB = 7,
66214571Sdim};
67214571Sdim
68214571Sdim/* Sub opcdoe opcode.  */
69214571Sdimenum
70214571Sdim{
71214571Sdim  INSN16_LBU = 11,
72214571Sdim  INSN16_LH = 9,
73214571Sdim  INSN16_LW = 8,
74214571Sdim  INSN16_SB = 15,
75214571Sdim  INSN16_SH = 13,
76214571Sdim  INSN16_SW = 12,
77214571Sdim};
78214571Sdim
79214571Sdimenum
80214571Sdim{
81214571Sdim  LDST_NOUPDATE = 0,
82214571Sdim  LDST_PRE = 1,
83214571Sdim  LDST_POST = 2,
84214571Sdim};
85214571Sdim
86214571Sdimenum score_insn_type
87214571Sdim{
88214571Sdim  Rd_I4,
89214571Sdim  Rd_I5,
90214571Sdim  Rd_rvalueBP_I5,
91214571Sdim  Rd_lvalueBP_I5,
92214571Sdim  Rd_Rs_I5,
93214571Sdim  x_Rs_I5,
94214571Sdim  x_I5_x,
95214571Sdim  Rd_I8,
96214571Sdim  Rd_Rs_I14,
97214571Sdim  I15,
98214571Sdim  Rd_I16,
99214571Sdim  Rd_rvalueRs_SI10,
100214571Sdim  Rd_lvalueRs_SI10,
101214571Sdim  Rd_rvalueRs_preSI12,
102214571Sdim  Rd_rvalueRs_postSI12,
103214571Sdim  Rd_lvalueRs_preSI12,
104214571Sdim  Rd_lvalueRs_postSI12,
105214571Sdim  Rd_Rs_SI14,
106214571Sdim  Rd_rvalueRs_SI15,
107214571Sdim  Rd_lvalueRs_SI15,
108214571Sdim  Rd_SI16,
109214571Sdim  PC_DISP8div2,
110214571Sdim  PC_DISP11div2,
111214571Sdim  PC_DISP19div2,
112214571Sdim  PC_DISP24div2,
113214571Sdim  Rd_Rs_Rs,
114214571Sdim  x_Rs_x,
115214571Sdim  x_Rs_Rs,
116214571Sdim  Rd_Rs_x,
117214571Sdim  Rd_x_Rs,
118214571Sdim  Rd_x_x,
119214571Sdim  Rd_Rs,
120214571Sdim  Rd_HighRs,
121214571Sdim  Rd_lvalueRs,
122214571Sdim  Rd_rvalueRs,
123214571Sdim  Rd_lvalue32Rs,
124214571Sdim  Rd_rvalue32Rs,
125214571Sdim  x_Rs,
126214571Sdim  NO_OPD,
127214571Sdim  NO16_OPD,
128214571Sdim  OP5_rvalueRs_SI15,
129214571Sdim  I5_Rs_Rs_I5_OP5,
130214571Sdim  x_rvalueRs_post4,
131214571Sdim  Rd_rvalueRs_post4,
132214571Sdim  Rd_x_I5,
133214571Sdim  Rd_lvalueRs_post4,
134214571Sdim  x_lvalueRs_post4,
135214571Sdim  Rd_LowRs,
136214571Sdim  Rd_Rs_Rs_imm,
137214571Sdim  Insn_Type_PCE,
138214571Sdim  Insn_Type_SYN,
139214571Sdim  Insn_GP,
140214571Sdim  Insn_PIC,
141214571Sdim  Insn_internal,
142214571Sdim};
143214571Sdim
144214571Sdimenum score_data_type
145214571Sdim{
146214571Sdim  _IMM4 = 0,
147214571Sdim  _IMM5,
148214571Sdim  _IMM8,
149214571Sdim  _IMM14,
150214571Sdim  _IMM15,
151214571Sdim  _IMM16,
152214571Sdim  _SIMM10 = 6,
153214571Sdim  _SIMM12,
154214571Sdim  _SIMM14,
155214571Sdim  _SIMM15,
156214571Sdim  _SIMM16,
157214571Sdim  _SIMM14_NEG = 11,
158214571Sdim  _IMM16_NEG,
159214571Sdim  _SIMM16_NEG,
160214571Sdim  _IMM20,
161214571Sdim  _IMM25,
162214571Sdim  _DISP8div2 = 16,
163214571Sdim  _DISP11div2,
164214571Sdim  _DISP19div2,
165214571Sdim  _DISP24div2,
166214571Sdim  _VALUE,
167214571Sdim  _VALUE_HI16,
168214571Sdim  _VALUE_LO16,
169214571Sdim  _VALUE_LDST_LO16 = 23,
170214571Sdim  _SIMM16_LA,
171214571Sdim  _IMM5_RSHIFT_1,
172214571Sdim  _IMM5_RSHIFT_2,
173214571Sdim  _SIMM16_LA_POS,
174214571Sdim  _IMM5_RANGE_8_31,
175214571Sdim  _IMM10_RSHIFT_2,
176214571Sdim  _GP_IMM15 = 30,
177214571Sdim  _GP_IMM14 = 31,
178214571Sdim  _SIMM16_pic = 42,   /* Index in score_df_range.  */
179214571Sdim  _IMM16_LO16_pic = 43,
180214571Sdim  _IMM16_pic = 44,
181214571Sdim};
182214571Sdim
183214571Sdim#define REG_TMP			  1
184214571Sdim
185214571Sdim#define OP_REG_TYPE             (1 << 6)
186214571Sdim#define OP_IMM_TYPE             (1 << 7)
187214571Sdim#define OP_SH_REGD              (OP_REG_TYPE |20)
188214571Sdim#define	OP_SH_REGS1             (OP_REG_TYPE |15)
189214571Sdim#define OP_SH_REGS2             (OP_REG_TYPE |10)
190214571Sdim#define OP_SH_I                 (OP_IMM_TYPE | 1)
191214571Sdim#define OP_SH_RI15              (OP_IMM_TYPE | 0)
192214571Sdim#define OP_SH_I12               (OP_IMM_TYPE | 3)
193214571Sdim#define OP_SH_DISP24            (OP_IMM_TYPE | 1)
194214571Sdim#define OP_SH_DISP19_p1         (OP_IMM_TYPE |15)
195214571Sdim#define OP_SH_DISP19_p2         (OP_IMM_TYPE | 1)
196214571Sdim#define OP_SH_I5                (OP_IMM_TYPE |10)
197214571Sdim#define OP_SH_I10               (OP_IMM_TYPE | 5)
198214571Sdim#define OP_SH_COPID             (OP_IMM_TYPE | 5)
199214571Sdim#define OP_SH_TRAPI5            (OP_IMM_TYPE |15)
200214571Sdim#define OP_SH_I15               (OP_IMM_TYPE |10)
201214571Sdim
202214571Sdim#define OP16_SH_REGD            (OP_REG_TYPE | 8)
203214571Sdim#define	OP16_SH_REGS1           (OP_REG_TYPE | 4)
204214571Sdim#define	OP16_SH_I45             (OP_IMM_TYPE | 3)
205214571Sdim#define	OP16_SH_I8              (OP_IMM_TYPE | 0)
206214571Sdim#define OP16_SH_DISP8           (OP_IMM_TYPE | 0)
207214571Sdim#define OP16_SH_DISP11          (OP_IMM_TYPE | 1)
208214571Sdim
209214571Sdimstruct datafield_range
210214571Sdim{
211214571Sdim  int data_type;
212214571Sdim  int bits;
213214571Sdim  int range[2];
214214571Sdim};
215214571Sdim
216214571Sdimstruct datafield_range score_df_range[] =
217214571Sdim{
218214571Sdim  {_IMM4,             4,  {0, (1 << 4) - 1}},	        /* (     0 ~ 15   ) */
219214571Sdim  {_IMM5,             5,  {0, (1 << 5) - 1}},	        /* (     0 ~ 31   ) */
220214571Sdim  {_IMM8,             8,  {0, (1 << 8) - 1}},	        /* (     0 ~ 255  ) */
221214571Sdim  {_IMM14,            14, {0, (1 << 14) - 1}},	        /* (     0 ~ 16383) */
222214571Sdim  {_IMM15,            15, {0, (1 << 15) - 1}},	        /* (     0 ~ 32767) */
223214571Sdim  {_IMM16,            16, {0, (1 << 16) - 1}},	        /* (     0 ~ 65535) */
224214571Sdim  {_SIMM10,           10, {-(1 << 9), (1 << 9) - 1}},	/* (  -512 ~ 511  ) */
225214571Sdim  {_SIMM12,           12, {-(1 << 11), (1 << 11) - 1}},	/* ( -2048 ~ 2047 ) */
226214571Sdim  {_SIMM14,           14, {-(1 << 13), (1 << 13) - 1}},	/* ( -8192 ~ 8191 ) */
227214571Sdim  {_SIMM15,           15, {-(1 << 14), (1 << 14) - 1}},	/* (-16384 ~ 16383) */
228214571Sdim  {_SIMM16,           16, {-(1 << 15), (1 << 15) - 1}},	/* (-32768 ~ 32767) */
229214571Sdim  {_SIMM14_NEG,       14, {-(1 << 13), (1 << 13) - 1}},	/* ( -8191 ~ 8192 ) */
230214571Sdim  {_IMM16_NEG,        16, {0, (1 << 16) - 1}},	        /* (-65535 ~ 0    ) */
231214571Sdim  {_SIMM16_NEG,       16, {-(1 << 15), (1 << 15) - 1}},	/* (-32768 ~ 32767) */
232214571Sdim  {_IMM20,            20, {0, (1 << 20) - 1}},
233214571Sdim  {_IMM25,            25, {0, (1 << 25) - 1}},
234214571Sdim  {_DISP8div2,        8,  {-(1 << 8), (1 << 8) - 1}},	/* (  -256 ~ 255  ) */
235214571Sdim  {_DISP11div2,       11, {0, 0}},
236214571Sdim  {_DISP19div2,       19, {-(1 << 19), (1 << 19) - 1}},	/* (-524288 ~ 524287) */
237214571Sdim  {_DISP24div2,       24, {0, 0}},
238214571Sdim  {_VALUE,            32, {0, ((unsigned int)1 << 31) - 1}},
239214571Sdim  {_VALUE_HI16,       16, {0, (1 << 16) - 1}},
240214571Sdim  {_VALUE_LO16,       16, {0, (1 << 16) - 1}},
241214571Sdim  {_VALUE_LDST_LO16,  16, {0, (1 << 16) - 1}},
242214571Sdim  {_SIMM16_LA,        16, {-(1 << 15), (1 << 15) - 1}},	/* (-32768 ~ 32767) */
243214571Sdim  {_IMM5_RSHIFT_1,    5,  {0, (1 << 6) - 1}},	        /* (     0 ~ 63   ) */
244214571Sdim  {_IMM5_RSHIFT_2,    5,  {0, (1 << 7) - 1}},	        /* (     0 ~ 127  ) */
245214571Sdim  {_SIMM16_LA_POS,    16, {0, (1 << 15) - 1}},	        /* (     0 ~ 32767) */
246214571Sdim  {_IMM5_RANGE_8_31,  5,  {8, 31}},	                /* But for cop0 the valid data : (8 ~ 31). */
247214571Sdim  {_IMM10_RSHIFT_2,   10, {-(1 << 11), (1 << 11) - 1}},	/* For ldc#, stc#. */
248214571Sdim  {_SIMM10,           10, {0, (1 << 10) - 1}},	        /* ( -1024 ~ 1023 ) */
249214571Sdim  {_SIMM12,           12, {0, (1 << 12) - 1}},	        /* ( -2048 ~ 2047 ) */
250214571Sdim  {_SIMM14,           14, {0, (1 << 14) - 1}},          /* ( -8192 ~ 8191 ) */
251214571Sdim  {_SIMM15,           15, {0, (1 << 15) - 1}},	        /* (-16384 ~ 16383) */
252214571Sdim  {_SIMM16,           16, {0, (1 << 16) - 1}},	        /* (-65536 ~ 65536) */
253214571Sdim  {_SIMM14_NEG,       14, {0, (1 << 16) - 1}},          /* ( -8191 ~ 8192 ) */
254214571Sdim  {_IMM16_NEG,        16, {0, (1 << 16) - 1}},	        /* ( 65535 ~ 0    ) */
255214571Sdim  {_SIMM16_NEG,       16, {0, (1 << 16) - 1}},	        /* ( 65535 ~ 0    ) */
256214571Sdim  {_IMM20,            20, {0, (1 << 20) - 1}},	        /* (-32768 ~ 32767) */
257214571Sdim  {_IMM25,            25, {0, (1 << 25) - 1}},	        /* (-32768 ~ 32767) */
258214571Sdim  {_GP_IMM15,         15, {0, (1 << 15) - 1}},	        /* (     0 ~ 65535) */
259214571Sdim  {_GP_IMM14,         14, {0, (1 << 14) - 1}},	        /* (     0 ~ 65535) */
260214571Sdim  {_SIMM16_pic,       16, {-(1 << 15), (1 << 15) - 1}},	/* (-32768 ~ 32767) */
261214571Sdim  {_IMM16_LO16_pic,   16, {0, (1 << 16) - 1}},	        /* ( 65535 ~ 0    ) */
262214571Sdim  {_IMM16_pic,        16, {0, (1 << 16) - 1}},	        /* (     0 ~ 65535) */
263214571Sdim};
264214571Sdim
265214571Sdimstruct shift_bitmask
266214571Sdim{
267214571Sdim  int opd_type;
268214571Sdim  int opd_num;
269214571Sdim  struct datafield_range *df_range;
270214571Sdim  int sh[4];
271214571Sdim  long fieldbits[4];
272214571Sdim};
273214571Sdim
274214571Sdimstruct shift_bitmask score_sh_bits_map[] =
275214571Sdim{
276214571Sdim  {
277214571Sdim   Rd_I4, 2, &score_df_range[_IMM4],
278214571Sdim   {OP16_SH_REGD, OP16_SH_I45, 0, 0},
279214571Sdim   {0xf, 0xf, 0, 0},
280214571Sdim   },
281214571Sdim  {
282214571Sdim   Rd_I5, 2, &score_df_range[_IMM5],
283214571Sdim   {OP16_SH_REGD, OP16_SH_I45, 0, 0},
284214571Sdim   {0xf, 0x1f, 0, 0},
285214571Sdim   },
286214571Sdim  {
287214571Sdim   Rd_rvalueBP_I5, 2, &score_df_range[_IMM5],
288214571Sdim   {OP16_SH_REGD, OP16_SH_I45, 0, 0},
289214571Sdim   {0xf, 0x1f, 0, 0},
290214571Sdim   },
291214571Sdim  {
292214571Sdim   Rd_lvalueBP_I5, 2, &score_df_range[_IMM5],
293214571Sdim   {OP16_SH_REGD, OP16_SH_I45, 0, 0},
294214571Sdim   {0xf, 0x1f, 0, 0},
295214571Sdim   },
296214571Sdim  {
297214571Sdim   Rd_Rs_I5, 3, &score_df_range[_IMM5],
298214571Sdim   {OP_SH_REGD, OP_SH_REGS1, OP_SH_I5, 0},
299214571Sdim   {0x1f, 0x1f, 0x1f, 0},
300214571Sdim   },
301214571Sdim  {
302214571Sdim   x_Rs_I5, 2, &score_df_range[_IMM5],
303214571Sdim   {OP_SH_REGS1, OP_SH_I5, 0, 0},
304214571Sdim   {0x1f, 0x1f, 0, 0},
305214571Sdim   },
306214571Sdim  {
307214571Sdim   x_I5_x, 1, &score_df_range[_IMM5],
308214571Sdim   {OP_SH_TRAPI5, 0, 0, 0},
309214571Sdim   {0x1f, 0, 0, 0},
310214571Sdim   },
311214571Sdim  {
312214571Sdim   Rd_I8, 2, &score_df_range[_IMM8],
313214571Sdim   {OP16_SH_REGD, OP16_SH_I8, 0, 0},
314214571Sdim   {0xf, 0xff, 0, 0},
315214571Sdim   },
316214571Sdim  {
317214571Sdim   Rd_Rs_I14, 3, &score_df_range[_IMM14],
318214571Sdim   {OP_SH_REGD, OP_SH_REGS1, OP_SH_I, 0},
319214571Sdim   {0x1f, 0x1f, 0x3fff, 0},
320214571Sdim   },
321214571Sdim  {
322214571Sdim   I15, 1, &score_df_range[_IMM15],
323214571Sdim   {OP_SH_I15, 0, 0, 0},
324214571Sdim   {0x7fff, 0, 0, 0},
325214571Sdim   },
326214571Sdim  {
327214571Sdim   Rd_I16, 2, &score_df_range[_IMM16],
328214571Sdim   {OP_SH_REGD, OP_SH_I, 0, 0},
329214571Sdim   {0x1f, 0xffff, 0, 0},
330214571Sdim   },
331214571Sdim  {
332214571Sdim   Rd_rvalueRs_SI10, 3, &score_df_range[_SIMM10],
333214571Sdim   {OP_SH_REGD, OP_SH_REGS1, OP_SH_I10, 0},
334214571Sdim   {0x1f, 0x1f, 0x3ff, 0},
335214571Sdim   },
336214571Sdim  {
337214571Sdim   Rd_lvalueRs_SI10, 3, &score_df_range[_SIMM10],
338214571Sdim   {OP_SH_REGD, OP_SH_REGS1, OP_SH_I10, 0},
339214571Sdim   {0x1f, 0x1f, 0x3ff, 0},
340214571Sdim   },
341214571Sdim  {
342214571Sdim   Rd_rvalueRs_preSI12, 3, &score_df_range[_SIMM12],
343214571Sdim   {OP_SH_REGD, OP_SH_REGS1, OP_SH_I12, 0},
344214571Sdim   {0xf, 0xf, 0xfff, 0},
345214571Sdim   },
346214571Sdim  {
347214571Sdim   Rd_rvalueRs_postSI12, 3, &score_df_range[_SIMM12],
348214571Sdim   {OP_SH_REGD, OP_SH_REGS1, OP_SH_I12, 0},
349214571Sdim   {0xf, 0xf, 0xfff, 0},
350214571Sdim   },
351214571Sdim  {
352214571Sdim   Rd_lvalueRs_preSI12, 3, &score_df_range[_SIMM12],
353214571Sdim   {OP_SH_REGD, OP_SH_REGS1, OP_SH_I12, 0},
354214571Sdim   {0xf, 0xf, 0xfff, 0},
355214571Sdim   },
356214571Sdim  {
357214571Sdim   Rd_lvalueRs_postSI12, 3, &score_df_range[_SIMM12],
358214571Sdim   {OP_SH_REGD, OP_SH_REGS1, OP_SH_I12, 0},
359214571Sdim   {0xf, 0xf, 0xfff, 0},
360214571Sdim   },
361214571Sdim  {
362214571Sdim   Rd_Rs_SI14, 3, &score_df_range[_SIMM14],
363214571Sdim   {OP_SH_REGD, OP_SH_REGS1, OP_SH_I, 0},
364214571Sdim   {0x1f, 0x1f, 0x3fff, 0},
365214571Sdim   },
366214571Sdim  {
367214571Sdim   Rd_rvalueRs_SI15, 3, &score_df_range[_SIMM15],
368214571Sdim   {OP_SH_REGD, OP_SH_REGS1, OP_SH_RI15, 0},
369214571Sdim   {0x1f, 0x1f, 0x7fff, 0},
370214571Sdim   },
371214571Sdim  {
372214571Sdim   Rd_lvalueRs_SI15, 3, &score_df_range[_SIMM15],
373214571Sdim   {OP_SH_REGD, OP_SH_REGS1, OP_SH_RI15, 0},
374214571Sdim   {0x1f, 0x1f, 0x7fff, 0},
375214571Sdim   },
376214571Sdim  {
377214571Sdim   Rd_SI16, 2, &score_df_range[_SIMM16],
378214571Sdim   {OP_SH_REGD, OP_SH_I, 0, 0},
379214571Sdim   {0x1f, 0xffff, 0, 0},
380214571Sdim   },
381214571Sdim  {
382214571Sdim   PC_DISP8div2, 1, &score_df_range[_DISP8div2],
383214571Sdim   {OP16_SH_DISP8, 0, 0, 0},
384214571Sdim   {0xff, 0, 0, 0},
385214571Sdim   },
386214571Sdim  {
387214571Sdim   PC_DISP11div2, 1, &score_df_range[_DISP11div2],
388214571Sdim   {OP16_SH_DISP11, 0, 0, 0},
389214571Sdim   {0x7ff, 0, 0, 0},
390214571Sdim   },
391214571Sdim  {
392214571Sdim   PC_DISP19div2, 2, &score_df_range[_DISP19div2],
393214571Sdim   {OP_SH_DISP19_p1, OP_SH_DISP19_p2, 0, 0},
394214571Sdim   {0x3ff, 0x1ff, 0, 0},
395214571Sdim   },
396214571Sdim  {
397214571Sdim   PC_DISP24div2, 1, &score_df_range[_DISP24div2],
398214571Sdim   {OP_SH_DISP24, 0, 0, 0},
399214571Sdim   {0xffffff, 0, 0, 0},
400214571Sdim   },
401214571Sdim  {
402214571Sdim   Rd_Rs_Rs, 3, NULL,
403214571Sdim   {OP_SH_REGD, OP_SH_REGS1, OP_SH_REGS2, 0},
404214571Sdim   {0x1f, 0x1f, 0x1f, 0}
405214571Sdim   },
406214571Sdim  {
407214571Sdim   Rd_Rs_x, 2, NULL,
408214571Sdim   {OP_SH_REGD, OP_SH_REGS1, 0, 0},
409214571Sdim   {0x1f, 0x1f, 0, 0},
410214571Sdim   },
411214571Sdim  {
412214571Sdim   Rd_x_Rs, 2, NULL,
413214571Sdim   {OP_SH_REGD, OP_SH_REGS2, 0, 0},
414214571Sdim   {0x1f, 0x1f, 0, 0},
415214571Sdim   },
416214571Sdim  {
417214571Sdim   Rd_x_x, 1, NULL,
418214571Sdim   {OP_SH_REGD, 0, 0, 0},
419214571Sdim   {0x1f, 0, 0, 0},
420214571Sdim   },
421214571Sdim  {
422214571Sdim   x_Rs_Rs, 2, NULL,
423214571Sdim   {OP_SH_REGS1, OP_SH_REGS2, 0, 0},
424214571Sdim   {0x1f, 0x1f, 0, 0},
425214571Sdim   },
426214571Sdim  {
427214571Sdim   x_Rs_x, 1, NULL,
428214571Sdim   {OP_SH_REGS1, 0, 0, 0},
429214571Sdim   {0x1f, 0, 0, 0},
430214571Sdim   },
431214571Sdim  {
432214571Sdim   Rd_Rs, 2, NULL,
433214571Sdim   {OP16_SH_REGD, OP16_SH_REGS1, 0, 0},
434214571Sdim   {0xf, 0xf, 0, 0},
435214571Sdim   },
436214571Sdim  {
437214571Sdim   Rd_HighRs, 2, NULL,
438214571Sdim   {OP16_SH_REGD, OP16_SH_REGS1, 0, 0},
439214571Sdim   {0xf, 0xf, 0x1f, 0},
440214571Sdim   },
441214571Sdim  {
442214571Sdim   Rd_rvalueRs, 2, NULL,
443214571Sdim   {OP16_SH_REGD, OP16_SH_REGS1, 0, 0},
444214571Sdim   {0xf, 0xf, 0, 0},
445214571Sdim   },
446214571Sdim  {
447214571Sdim   Rd_lvalueRs, 2, NULL,
448214571Sdim   {OP16_SH_REGD, OP16_SH_REGS1, 0, 0},
449214571Sdim   {0xf, 0xf, 0, 0}
450214571Sdim   },
451214571Sdim   {
452214571Sdim   Rd_lvalue32Rs, 2, NULL,
453214571Sdim   {OP_SH_REGD, OP_SH_REGS1, 0, 0},
454214571Sdim   {0x1f, 0x1f, 0, 0},
455214571Sdim   },
456214571Sdim   {
457214571Sdim   Rd_rvalue32Rs, 2, NULL,
458214571Sdim   {OP_SH_REGD, OP_SH_REGS1, 0, 0},
459214571Sdim   {0x1f, 0x1f, 0, 0},
460214571Sdim   },
461214571Sdim  {
462214571Sdim   x_Rs, 1, NULL,
463214571Sdim   {OP16_SH_REGS1, 0, 0, 0},
464214571Sdim   {0xf, 0, 0, 0},
465214571Sdim   },
466214571Sdim  {
467214571Sdim   NO_OPD, 0, NULL,
468214571Sdim   {0, 0, 0, 0},
469214571Sdim   {0, 0, 0, 0},
470214571Sdim   },
471214571Sdim  {
472214571Sdim   NO16_OPD, 0, NULL,
473214571Sdim   {0, 0, 0, 0},
474214571Sdim   {0, 0, 0, 0},
475214571Sdim   },
476214571Sdim};
477214571Sdim
478214571Sdimstruct asm_opcode
479214571Sdim{
480214571Sdim  /* Instruction name.  */
481214571Sdim  const char *template;
482214571Sdim
483214571Sdim  /* Instruction Opcode.  */
484214571Sdim  unsigned long value;
485214571Sdim
486214571Sdim  /* Instruction bit mask.  */
487214571Sdim  unsigned long bitmask;
488214571Sdim
489214571Sdim  /* Relax instruction opcode.  0x8000 imply no relaxation.  */
490214571Sdim  unsigned long relax_value;
491214571Sdim
492214571Sdim  /* Instruction type.  */
493214571Sdim  enum score_insn_type type;
494214571Sdim
495214571Sdim  /* Function to call to parse args.  */
496214571Sdim  void (*parms) (char *);
497214571Sdim};
498214571Sdim
499214571Sdimenum insn_class
500214571Sdim{
501214571Sdim  INSN_CLASS_16,
502214571Sdim  INSN_CLASS_32,
503214571Sdim  INSN_CLASS_PCE,
504214571Sdim  INSN_CLASS_SYN
505214571Sdim};
506214571Sdim
507214571Sdim#endif
508