lm32-opinst.c revision 1.11 1 1.8 christos /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */
2 1.1 christos /* Semantic operand instances for lm32.
3 1.1 christos
4 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN.
5 1.1 christos
6 1.11 christos Copyright (C) 1996-2024 Free Software Foundation, Inc.
7 1.1 christos
8 1.1 christos This file is part of the GNU Binutils and/or GDB, the GNU debugger.
9 1.1 christos
10 1.1 christos This file is free software; you can redistribute it and/or modify
11 1.1 christos it under the terms of the GNU General Public License as published by
12 1.1 christos the Free Software Foundation; either version 3, or (at your option)
13 1.1 christos any later version.
14 1.1 christos
15 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT
16 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
18 1.1 christos License for more details.
19 1.1 christos
20 1.1 christos You should have received a copy of the GNU General Public License along
21 1.1 christos with this program; if not, write to the Free Software Foundation, Inc.,
22 1.1 christos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
23 1.1 christos
24 1.1 christos */
25 1.1 christos
26 1.1 christos #include "sysdep.h"
27 1.1 christos #include "ansidecl.h"
28 1.1 christos #include "bfd.h"
29 1.1 christos #include "symcat.h"
30 1.1 christos #include "lm32-desc.h"
31 1.1 christos #include "lm32-opc.h"
32 1.1 christos
33 1.1 christos /* Operand references. */
34 1.1 christos
35 1.1 christos #define OP_ENT(op) LM32_OPERAND_##op
36 1.1 christos #define INPUT CGEN_OPINST_INPUT
37 1.1 christos #define OUTPUT CGEN_OPINST_OUTPUT
38 1.1 christos #define END CGEN_OPINST_END
39 1.1 christos #define COND_REF CGEN_OPINST_COND_REF
40 1.1 christos
41 1.1 christos static const CGEN_OPINST sfmt_empty_ops[] ATTRIBUTE_UNUSED = {
42 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
43 1.1 christos };
44 1.1 christos
45 1.1 christos static const CGEN_OPINST sfmt_add_ops[] ATTRIBUTE_UNUSED = {
46 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
47 1.1 christos { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
48 1.1 christos { OUTPUT, "r2", HW_H_GR, CGEN_MODE_SI, OP_ENT (R2), 0, 0 },
49 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
50 1.1 christos };
51 1.1 christos
52 1.1 christos static const CGEN_OPINST sfmt_addi_ops[] ATTRIBUTE_UNUSED = {
53 1.1 christos { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
54 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
55 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
56 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
57 1.1 christos };
58 1.1 christos
59 1.1 christos static const CGEN_OPINST sfmt_andi_ops[] ATTRIBUTE_UNUSED = {
60 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
61 1.1 christos { INPUT, "uimm", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (UIMM), 0, 0 },
62 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
63 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
64 1.1 christos };
65 1.1 christos
66 1.1 christos static const CGEN_OPINST sfmt_andhii_ops[] ATTRIBUTE_UNUSED = {
67 1.1 christos { INPUT, "hi16", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (HI16), 0, 0 },
68 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
69 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
70 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
71 1.1 christos };
72 1.1 christos
73 1.1 christos static const CGEN_OPINST sfmt_b_ops[] ATTRIBUTE_UNUSED = {
74 1.1 christos { INPUT, "f_r0", HW_H_UINT, CGEN_MODE_UINT, 0, 0, 0 },
75 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
76 1.1 christos { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
77 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
78 1.1 christos };
79 1.1 christos
80 1.1 christos static const CGEN_OPINST sfmt_bi_ops[] ATTRIBUTE_UNUSED = {
81 1.1 christos { INPUT, "call", HW_H_IADDR, CGEN_MODE_USI, OP_ENT (CALL), 0, 0 },
82 1.1 christos { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
83 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
84 1.1 christos };
85 1.1 christos
86 1.1 christos static const CGEN_OPINST sfmt_be_ops[] ATTRIBUTE_UNUSED = {
87 1.1 christos { INPUT, "branch", HW_H_IADDR, CGEN_MODE_USI, OP_ENT (BRANCH), 0, COND_REF },
88 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
89 1.1 christos { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
90 1.1 christos { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF },
91 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
92 1.1 christos };
93 1.1 christos
94 1.1 christos static const CGEN_OPINST sfmt_call_ops[] ATTRIBUTE_UNUSED = {
95 1.1 christos { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
96 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
97 1.1 christos { OUTPUT, "h_gr_SI_29", HW_H_GR, CGEN_MODE_SI, 0, 29, 0 },
98 1.1 christos { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
99 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
100 1.1 christos };
101 1.1 christos
102 1.1 christos static const CGEN_OPINST sfmt_calli_ops[] ATTRIBUTE_UNUSED = {
103 1.1 christos { INPUT, "call", HW_H_IADDR, CGEN_MODE_USI, OP_ENT (CALL), 0, 0 },
104 1.1 christos { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
105 1.1 christos { OUTPUT, "h_gr_SI_29", HW_H_GR, CGEN_MODE_SI, 0, 29, 0 },
106 1.1 christos { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
107 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
108 1.1 christos };
109 1.1 christos
110 1.1 christos static const CGEN_OPINST sfmt_divu_ops[] ATTRIBUTE_UNUSED = {
111 1.1 christos { INPUT, "f_r0", HW_H_UINT, CGEN_MODE_UINT, 0, 0, 0 },
112 1.1 christos { INPUT, "f_r1", HW_H_UINT, CGEN_MODE_UINT, 0, 0, 0 },
113 1.1 christos { INPUT, "f_r2", HW_H_UINT, CGEN_MODE_UINT, 0, 0, 0 },
114 1.1 christos { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
115 1.1 christos { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
116 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
117 1.1 christos };
118 1.1 christos
119 1.1 christos static const CGEN_OPINST sfmt_lb_ops[] ATTRIBUTE_UNUSED = {
120 1.1 christos { INPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
121 1.1 christos { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
122 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
123 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
124 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
125 1.1 christos };
126 1.1 christos
127 1.1 christos static const CGEN_OPINST sfmt_lh_ops[] ATTRIBUTE_UNUSED = {
128 1.1 christos { INPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
129 1.1 christos { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
130 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
131 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
132 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
133 1.1 christos };
134 1.1 christos
135 1.1 christos static const CGEN_OPINST sfmt_lw_ops[] ATTRIBUTE_UNUSED = {
136 1.1 christos { INPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
137 1.1 christos { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
138 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
139 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
140 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
141 1.1 christos };
142 1.1 christos
143 1.1 christos static const CGEN_OPINST sfmt_ori_ops[] ATTRIBUTE_UNUSED = {
144 1.1 christos { INPUT, "lo16", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (LO16), 0, 0 },
145 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
146 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
147 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
148 1.1 christos };
149 1.1 christos
150 1.1 christos static const CGEN_OPINST sfmt_rcsr_ops[] ATTRIBUTE_UNUSED = {
151 1.1 christos { INPUT, "csr", HW_H_CSR, CGEN_MODE_SI, OP_ENT (CSR), 0, 0 },
152 1.1 christos { OUTPUT, "r2", HW_H_GR, CGEN_MODE_SI, OP_ENT (R2), 0, 0 },
153 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
154 1.1 christos };
155 1.1 christos
156 1.1 christos static const CGEN_OPINST sfmt_sb_ops[] ATTRIBUTE_UNUSED = {
157 1.1 christos { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
158 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
159 1.1 christos { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
160 1.1 christos { OUTPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
161 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
162 1.1 christos };
163 1.1 christos
164 1.1 christos static const CGEN_OPINST sfmt_sextb_ops[] ATTRIBUTE_UNUSED = {
165 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
166 1.1 christos { OUTPUT, "r2", HW_H_GR, CGEN_MODE_SI, OP_ENT (R2), 0, 0 },
167 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
168 1.1 christos };
169 1.1 christos
170 1.1 christos static const CGEN_OPINST sfmt_sh_ops[] ATTRIBUTE_UNUSED = {
171 1.1 christos { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
172 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
173 1.1 christos { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
174 1.1 christos { OUTPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
175 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
176 1.1 christos };
177 1.1 christos
178 1.1 christos static const CGEN_OPINST sfmt_sw_ops[] ATTRIBUTE_UNUSED = {
179 1.1 christos { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
180 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
181 1.1 christos { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
182 1.1 christos { OUTPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
183 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
184 1.1 christos };
185 1.1 christos
186 1.1 christos static const CGEN_OPINST sfmt_user_ops[] ATTRIBUTE_UNUSED = {
187 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
188 1.1 christos { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
189 1.1 christos { INPUT, "user", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (USER), 0, 0 },
190 1.1 christos { OUTPUT, "r2", HW_H_GR, CGEN_MODE_SI, OP_ENT (R2), 0, 0 },
191 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
192 1.1 christos };
193 1.1 christos
194 1.1 christos static const CGEN_OPINST sfmt_wcsr_ops[] ATTRIBUTE_UNUSED = {
195 1.1 christos { INPUT, "f_csr", HW_H_UINT, CGEN_MODE_UINT, 0, 0, 0 },
196 1.1 christos { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
197 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
198 1.1 christos };
199 1.1 christos
200 1.1 christos static const CGEN_OPINST sfmt_break_ops[] ATTRIBUTE_UNUSED = {
201 1.1 christos { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
202 1.1 christos { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
203 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
204 1.1 christos };
205 1.1 christos
206 1.1 christos static const CGEN_OPINST sfmt_bret_ops[] ATTRIBUTE_UNUSED = {
207 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
208 1.1 christos { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
209 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
210 1.1 christos };
211 1.1 christos
212 1.1 christos static const CGEN_OPINST sfmt_mvi_ops[] ATTRIBUTE_UNUSED = {
213 1.1 christos { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
214 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
215 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
216 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
217 1.1 christos };
218 1.1 christos
219 1.1 christos static const CGEN_OPINST sfmt_mvui_ops[] ATTRIBUTE_UNUSED = {
220 1.1 christos { INPUT, "lo16", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (LO16), 0, 0 },
221 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
222 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
223 1.1 christos };
224 1.1 christos
225 1.1 christos static const CGEN_OPINST sfmt_mvhi_ops[] ATTRIBUTE_UNUSED = {
226 1.1 christos { INPUT, "hi16", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (HI16), 0, 0 },
227 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
228 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
229 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
230 1.1 christos };
231 1.1 christos
232 1.1 christos static const CGEN_OPINST sfmt_mva_ops[] ATTRIBUTE_UNUSED = {
233 1.1 christos { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
234 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
235 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
236 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
237 1.1 christos };
238 1.1 christos
239 1.1 christos static const CGEN_OPINST sfmt_nop_ops[] ATTRIBUTE_UNUSED = {
240 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
241 1.1 christos { OUTPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
242 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
243 1.1 christos };
244 1.1 christos
245 1.1 christos static const CGEN_OPINST sfmt_lbgprel_ops[] ATTRIBUTE_UNUSED = {
246 1.1 christos { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
247 1.1 christos { INPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
248 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
249 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
250 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
251 1.1 christos };
252 1.1 christos
253 1.1 christos static const CGEN_OPINST sfmt_lhgprel_ops[] ATTRIBUTE_UNUSED = {
254 1.1 christos { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
255 1.1 christos { INPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
256 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
257 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
258 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
259 1.1 christos };
260 1.1 christos
261 1.1 christos static const CGEN_OPINST sfmt_lwgprel_ops[] ATTRIBUTE_UNUSED = {
262 1.1 christos { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
263 1.1 christos { INPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
264 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
265 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
266 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
267 1.1 christos };
268 1.1 christos
269 1.1 christos static const CGEN_OPINST sfmt_sbgprel_ops[] ATTRIBUTE_UNUSED = {
270 1.1 christos { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
271 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
272 1.1 christos { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
273 1.1 christos { OUTPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
274 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
275 1.1 christos };
276 1.1 christos
277 1.1 christos static const CGEN_OPINST sfmt_shgprel_ops[] ATTRIBUTE_UNUSED = {
278 1.1 christos { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
279 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
280 1.1 christos { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
281 1.1 christos { OUTPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
282 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
283 1.1 christos };
284 1.1 christos
285 1.1 christos static const CGEN_OPINST sfmt_swgprel_ops[] ATTRIBUTE_UNUSED = {
286 1.1 christos { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
287 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
288 1.1 christos { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
289 1.1 christos { OUTPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
290 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
291 1.1 christos };
292 1.1 christos
293 1.1 christos static const CGEN_OPINST sfmt_lwgotrel_ops[] ATTRIBUTE_UNUSED = {
294 1.1 christos { INPUT, "got16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOT16), 0, 0 },
295 1.1 christos { INPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_got16", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
296 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
297 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
298 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
299 1.1 christos };
300 1.1 christos
301 1.1 christos static const CGEN_OPINST sfmt_orhigotoffi_ops[] ATTRIBUTE_UNUSED = {
302 1.1 christos { INPUT, "gotoffhi16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFHI16), 0, 0 },
303 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
304 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
305 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
306 1.1 christos };
307 1.1 christos
308 1.1 christos static const CGEN_OPINST sfmt_addgotoff_ops[] ATTRIBUTE_UNUSED = {
309 1.1 christos { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
310 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
311 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
312 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
313 1.1 christos };
314 1.1 christos
315 1.1 christos static const CGEN_OPINST sfmt_swgotoff_ops[] ATTRIBUTE_UNUSED = {
316 1.1 christos { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
317 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
318 1.1 christos { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
319 1.1 christos { OUTPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
320 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
321 1.1 christos };
322 1.1 christos
323 1.1 christos static const CGEN_OPINST sfmt_lwgotoff_ops[] ATTRIBUTE_UNUSED = {
324 1.1 christos { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
325 1.1 christos { INPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
326 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
327 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
328 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
329 1.1 christos };
330 1.1 christos
331 1.1 christos static const CGEN_OPINST sfmt_shgotoff_ops[] ATTRIBUTE_UNUSED = {
332 1.1 christos { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
333 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
334 1.1 christos { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
335 1.1 christos { OUTPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
336 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
337 1.1 christos };
338 1.1 christos
339 1.1 christos static const CGEN_OPINST sfmt_lhgotoff_ops[] ATTRIBUTE_UNUSED = {
340 1.1 christos { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
341 1.1 christos { INPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
342 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
343 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
344 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
345 1.1 christos };
346 1.1 christos
347 1.1 christos static const CGEN_OPINST sfmt_sbgotoff_ops[] ATTRIBUTE_UNUSED = {
348 1.1 christos { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
349 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
350 1.1 christos { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
351 1.1 christos { OUTPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
352 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
353 1.1 christos };
354 1.1 christos
355 1.1 christos static const CGEN_OPINST sfmt_lbgotoff_ops[] ATTRIBUTE_UNUSED = {
356 1.1 christos { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
357 1.1 christos { INPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
358 1.1 christos { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
359 1.1 christos { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
360 1.1 christos { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
361 1.1 christos };
362 1.1 christos
363 1.1 christos #undef OP_ENT
364 1.1 christos #undef INPUT
365 1.1 christos #undef OUTPUT
366 1.1 christos #undef END
367 1.1 christos #undef COND_REF
368 1.1 christos
369 1.1 christos /* Operand instance lookup table. */
370 1.1 christos
371 1.1 christos static const CGEN_OPINST *lm32_cgen_opinst_table[MAX_INSNS] = {
372 1.1 christos 0,
373 1.1 christos & sfmt_add_ops[0],
374 1.1 christos & sfmt_addi_ops[0],
375 1.1 christos & sfmt_add_ops[0],
376 1.1 christos & sfmt_andi_ops[0],
377 1.1 christos & sfmt_andhii_ops[0],
378 1.1 christos & sfmt_b_ops[0],
379 1.1 christos & sfmt_bi_ops[0],
380 1.1 christos & sfmt_be_ops[0],
381 1.1 christos & sfmt_be_ops[0],
382 1.1 christos & sfmt_be_ops[0],
383 1.1 christos & sfmt_be_ops[0],
384 1.1 christos & sfmt_be_ops[0],
385 1.1 christos & sfmt_be_ops[0],
386 1.1 christos & sfmt_call_ops[0],
387 1.1 christos & sfmt_calli_ops[0],
388 1.1 christos & sfmt_add_ops[0],
389 1.1 christos & sfmt_addi_ops[0],
390 1.1 christos & sfmt_add_ops[0],
391 1.1 christos & sfmt_addi_ops[0],
392 1.1 christos & sfmt_add_ops[0],
393 1.1 christos & sfmt_addi_ops[0],
394 1.1 christos & sfmt_add_ops[0],
395 1.1 christos & sfmt_andi_ops[0],
396 1.1 christos & sfmt_add_ops[0],
397 1.1 christos & sfmt_andi_ops[0],
398 1.1 christos & sfmt_add_ops[0],
399 1.1 christos & sfmt_addi_ops[0],
400 1.1 christos & sfmt_divu_ops[0],
401 1.1 christos & sfmt_lb_ops[0],
402 1.1 christos & sfmt_lb_ops[0],
403 1.1 christos & sfmt_lh_ops[0],
404 1.1 christos & sfmt_lh_ops[0],
405 1.1 christos & sfmt_lw_ops[0],
406 1.1 christos & sfmt_divu_ops[0],
407 1.1 christos & sfmt_add_ops[0],
408 1.1 christos & sfmt_addi_ops[0],
409 1.1 christos & sfmt_add_ops[0],
410 1.1 christos & sfmt_andi_ops[0],
411 1.1 christos & sfmt_add_ops[0],
412 1.1 christos & sfmt_ori_ops[0],
413 1.1 christos & sfmt_andhii_ops[0],
414 1.1 christos & sfmt_rcsr_ops[0],
415 1.1 christos & sfmt_sb_ops[0],
416 1.1 christos & sfmt_sextb_ops[0],
417 1.1 christos & sfmt_sextb_ops[0],
418 1.1 christos & sfmt_sh_ops[0],
419 1.1 christos & sfmt_add_ops[0],
420 1.1 christos & sfmt_addi_ops[0],
421 1.1 christos & sfmt_add_ops[0],
422 1.1 christos & sfmt_addi_ops[0],
423 1.1 christos & sfmt_add_ops[0],
424 1.1 christos & sfmt_addi_ops[0],
425 1.1 christos & sfmt_add_ops[0],
426 1.1 christos & sfmt_sw_ops[0],
427 1.1 christos & sfmt_user_ops[0],
428 1.1 christos & sfmt_wcsr_ops[0],
429 1.1 christos & sfmt_add_ops[0],
430 1.1 christos & sfmt_andi_ops[0],
431 1.1 christos & sfmt_add_ops[0],
432 1.1 christos & sfmt_andi_ops[0],
433 1.1 christos & sfmt_break_ops[0],
434 1.1 christos & sfmt_break_ops[0],
435 1.1 christos & sfmt_bret_ops[0],
436 1.1 christos & sfmt_bret_ops[0],
437 1.1 christos & sfmt_bret_ops[0],
438 1.1 christos & sfmt_sextb_ops[0],
439 1.1 christos & sfmt_mvi_ops[0],
440 1.1 christos & sfmt_mvui_ops[0],
441 1.1 christos & sfmt_mvhi_ops[0],
442 1.1 christos & sfmt_mva_ops[0],
443 1.1 christos & sfmt_sextb_ops[0],
444 1.1 christos & sfmt_nop_ops[0],
445 1.1 christos & sfmt_lbgprel_ops[0],
446 1.1 christos & sfmt_lbgprel_ops[0],
447 1.1 christos & sfmt_lhgprel_ops[0],
448 1.1 christos & sfmt_lhgprel_ops[0],
449 1.1 christos & sfmt_lwgprel_ops[0],
450 1.1 christos & sfmt_sbgprel_ops[0],
451 1.1 christos & sfmt_shgprel_ops[0],
452 1.1 christos & sfmt_swgprel_ops[0],
453 1.1 christos & sfmt_lwgotrel_ops[0],
454 1.1 christos & sfmt_orhigotoffi_ops[0],
455 1.1 christos & sfmt_addgotoff_ops[0],
456 1.1 christos & sfmt_swgotoff_ops[0],
457 1.1 christos & sfmt_lwgotoff_ops[0],
458 1.1 christos & sfmt_shgotoff_ops[0],
459 1.1 christos & sfmt_lhgotoff_ops[0],
460 1.1 christos & sfmt_lhgotoff_ops[0],
461 1.1 christos & sfmt_sbgotoff_ops[0],
462 1.1 christos & sfmt_lbgotoff_ops[0],
463 1.1 christos & sfmt_lbgotoff_ops[0],
464 1.1 christos };
465 1.1 christos
466 1.1 christos /* Function to call before using the operand instance table. */
467 1.1 christos
468 1.1 christos void
469 1.6 christos lm32_cgen_init_opinst_table (CGEN_CPU_DESC cd)
470 1.1 christos {
471 1.1 christos int i;
472 1.1 christos const CGEN_OPINST **oi = & lm32_cgen_opinst_table[0];
473 1.1 christos CGEN_INSN *insns = (CGEN_INSN *) cd->insn_table.init_entries;
474 1.1 christos for (i = 0; i < MAX_INSNS; ++i)
475 1.1 christos insns[i].opinst = oi[i];
476 1.1 christos }
477