diff options
Diffstat (limited to 'meta-microblaze/recipes-devtools/binutils/binutils/0023-Added-support-to-new-arithmetic-single-register-inst.patch')
-rw-r--r-- | meta-microblaze/recipes-devtools/binutils/binutils/0023-Added-support-to-new-arithmetic-single-register-inst.patch | 373 |
1 files changed, 0 insertions, 373 deletions
diff --git a/meta-microblaze/recipes-devtools/binutils/binutils/0023-Added-support-to-new-arithmetic-single-register-inst.patch b/meta-microblaze/recipes-devtools/binutils/binutils/0023-Added-support-to-new-arithmetic-single-register-inst.patch deleted file mode 100644 index 74b0f42a..00000000 --- a/meta-microblaze/recipes-devtools/binutils/binutils/0023-Added-support-to-new-arithmetic-single-register-inst.patch +++ /dev/null | |||
@@ -1,373 +0,0 @@ | |||
1 | From 3c197b12c4b680a230e8350ecd9a523be804fe3c Mon Sep 17 00:00:00 2001 | ||
2 | From: Nagaraju <nmekala@xilinx.com> | ||
3 | Date: Fri, 23 Aug 2019 16:18:43 +0530 | ||
4 | Subject: [PATCH 23/34] Added support to new arithmetic single register | ||
5 | instructions | ||
6 | |||
7 | Conflicts: | ||
8 | opcodes/microblaze-dis.c | ||
9 | |||
10 | Conflicts: | ||
11 | gas/config/tc-microblaze.c | ||
12 | opcodes/microblaze-dis.c | ||
13 | |||
14 | Conflicts: | ||
15 | gas/config/tc-microblaze.c | ||
16 | signed-off-by:Nagaraju <nmekala@xilinx.com> | ||
17 | Mahesh <mbodapat@xilinx.com> | ||
18 | Upstream-Status: Pending | ||
19 | |||
20 | Signed-off-by: Mark Hatle <mark.hatle@amd.com> | ||
21 | |||
22 | --- | ||
23 | gas/config/tc-microblaze.c | 147 ++++++++++++++++++++++++++++++++++++- | ||
24 | opcodes/microblaze-dis.c | 11 +++ | ||
25 | opcodes/microblaze-opc.h | 43 ++++++++++- | ||
26 | opcodes/microblaze-opcm.h | 5 +- | ||
27 | 4 files changed, 200 insertions(+), 6 deletions(-) | ||
28 | |||
29 | diff --git a/gas/config/tc-microblaze.c b/gas/config/tc-microblaze.c | ||
30 | index a1fb6ccbd44..27544b60ea3 100644 | ||
31 | --- a/gas/config/tc-microblaze.c | ||
32 | +++ b/gas/config/tc-microblaze.c | ||
33 | @@ -423,12 +423,33 @@ void | ||
34 | md_begin (void) | ||
35 | { | ||
36 | const struct op_code_struct * opcode; | ||
37 | + const char *prev_name = ""; | ||
38 | |||
39 | opcode_hash_control = str_htab_create (); | ||
40 | |||
41 | /* Insert unique names into hash table. */ | ||
42 | - for (opcode = microblaze_opcodes; opcode->name; opcode ++) | ||
43 | - str_hash_insert (opcode_hash_control, opcode->name, opcode, 0); | ||
44 | + for (opcode = (struct microblaze_opcodes *)microblaze_opcodes; opcode->name; opcode ++) | ||
45 | + { | ||
46 | + if (strcmp (prev_name, opcode->name)) | ||
47 | + { | ||
48 | + prev_name = (char *) opcode->name; | ||
49 | + str_hash_insert (opcode_hash_control, opcode->name, opcode, 0); | ||
50 | + } | ||
51 | + } | ||
52 | +} | ||
53 | + | ||
54 | +static int | ||
55 | +is_reg (char * s) | ||
56 | +{ | ||
57 | + int is_reg = 0; | ||
58 | + /* Strip leading whitespace. */ | ||
59 | + while (ISSPACE (* s)) | ||
60 | + ++ s; | ||
61 | + if (TOLOWER (s[0]) == 'r') | ||
62 | + { | ||
63 | + is_reg =1; | ||
64 | + } | ||
65 | + return is_reg; | ||
66 | } | ||
67 | |||
68 | /* Try to parse a reg name. */ | ||
69 | @@ -986,6 +1007,7 @@ md_assemble (char * str) | ||
70 | { | ||
71 | char * op_start; | ||
72 | char * op_end; | ||
73 | + char * temp_op_end; | ||
74 | struct op_code_struct * opcode, *opcode1; | ||
75 | char * output = NULL; | ||
76 | int nlen = 0; | ||
77 | @@ -996,9 +1018,10 @@ md_assemble (char * str) | ||
78 | unsigned reg3; | ||
79 | unsigned isize; | ||
80 | unsigned long immed = 0, immed2 = 0, temp; | ||
81 | - expressionS exp; | ||
82 | + expressionS exp,exp1; | ||
83 | char name[20]; | ||
84 | long immedl; | ||
85 | + int reg=0; | ||
86 | |||
87 | /* Drop leading whitespace. */ | ||
88 | while (ISSPACE (* str)) | ||
89 | @@ -1029,7 +1052,78 @@ md_assemble (char * str) | ||
90 | as_bad (_("unknown opcode \"%s\""), name); | ||
91 | return; | ||
92 | } | ||
93 | - | ||
94 | + | ||
95 | + if ((microblaze_arch_size == 64) && (streq (name, "addli") || streq (name, "addlic") || | ||
96 | + streq (name, "addlik") || streq (name, "addlikc") || streq (name, "rsubli") | ||
97 | + || streq (name, "rsublic") || streq (name, "rsublik") || streq (name, "rsublikc") | ||
98 | + || streq (name, "andli") || streq (name, "andnli") || streq (name, "orli") | ||
99 | + || streq (name, "xorli"))) | ||
100 | + { | ||
101 | + temp_op_end = op_end; | ||
102 | + if (strcmp (temp_op_end, "")) | ||
103 | + temp_op_end = parse_reg (temp_op_end + 1, ®1); /* Get rd. */ | ||
104 | + if (strcmp (temp_op_end, "")) | ||
105 | + reg = is_reg (temp_op_end + 1); | ||
106 | + if (reg) | ||
107 | + { | ||
108 | + | ||
109 | + opcode->inst_type=INST_TYPE_RD_R1_IMML; | ||
110 | + opcode->inst_offset_type = OPCODE_MASK_H; | ||
111 | + if (streq (name, "addli")) | ||
112 | + opcode->bit_sequence = ADDLI_MASK; | ||
113 | + else if (streq (name, "addlic")) | ||
114 | + opcode->bit_sequence = ADDLIC_MASK; | ||
115 | + else if (streq (name, "addlik")) | ||
116 | + opcode->bit_sequence = ADDLIK_MASK; | ||
117 | + else if (streq (name, "addlikc")) | ||
118 | + opcode->bit_sequence = ADDLIKC_MASK; | ||
119 | + else if (streq (name, "rsubli")) | ||
120 | + opcode->bit_sequence = RSUBLI_MASK; | ||
121 | + else if (streq (name, "rsublic")) | ||
122 | + opcode->bit_sequence = RSUBLIC_MASK; | ||
123 | + else if (streq (name, "rsublik")) | ||
124 | + opcode->bit_sequence = RSUBLIK_MASK; | ||
125 | + else if (streq (name, "rsublikc")) | ||
126 | + opcode->bit_sequence = RSUBLIKC_MASK; | ||
127 | + else if (streq (name, "andli")) | ||
128 | + opcode->bit_sequence = ANDLI_MASK; | ||
129 | + else if (streq (name, "andnli")) | ||
130 | + opcode->bit_sequence = ANDLNI_MASK; | ||
131 | + else if (streq (name, "orli")) | ||
132 | + opcode->bit_sequence = ORLI_MASK; | ||
133 | + else if (streq (name, "xorli")) | ||
134 | + opcode->bit_sequence = XORLI_MASK; | ||
135 | + } | ||
136 | + else | ||
137 | + { | ||
138 | + opcode->inst_type=INST_TYPE_RD_IMML; | ||
139 | + opcode->inst_offset_type = OPCODE_MASK_LIMM; | ||
140 | + if (streq (name, "addli")) | ||
141 | + opcode->bit_sequence = ADDLI_ONE_REG_MASK; | ||
142 | + else if (streq (name, "addlic")) | ||
143 | + opcode->bit_sequence = ADDLIC_ONE_REG_MASK; | ||
144 | + else if (streq (name, "addlik")) | ||
145 | + opcode->bit_sequence = ADDLIK_ONE_REG_MASK; | ||
146 | + else if (streq (name, "addlikc")) | ||
147 | + opcode->bit_sequence = ADDLIKC_ONE_REG_MASK; | ||
148 | + else if (streq (name, "rsubli")) | ||
149 | + opcode->bit_sequence = RSUBLI_ONE_REG_MASK; | ||
150 | + else if (streq (name, "rsublic")) | ||
151 | + opcode->bit_sequence = RSUBLIC_ONE_REG_MASK; | ||
152 | + else if (streq (name, "rsublik")) | ||
153 | + opcode->bit_sequence = RSUBLIK_ONE_REG_MASK; | ||
154 | + else if (streq (name, "rsublikc")) | ||
155 | + opcode->bit_sequence = RSUBLIKC_ONE_REG_MASK; | ||
156 | + else if (streq (name, "andli")) | ||
157 | + opcode->bit_sequence = ANDLI_ONE_REG_MASK; | ||
158 | + else if (streq (name, "andnli")) | ||
159 | + opcode->bit_sequence = ANDLNI_ONE_REG_MASK; | ||
160 | + else if (streq (name, "orli")) | ||
161 | + opcode->bit_sequence = ORLI_ONE_REG_MASK; | ||
162 | + else if (streq (name, "xorli")) | ||
163 | + opcode->bit_sequence = XORLI_ONE_REG_MASK; | ||
164 | + } | ||
165 | + } | ||
166 | inst = opcode->bit_sequence; | ||
167 | isize = 4; | ||
168 | |||
169 | @@ -1486,6 +1580,51 @@ md_assemble (char * str) | ||
170 | inst |= (immed << IMM_LOW) & IMM15_MASK; | ||
171 | break; | ||
172 | |||
173 | + case INST_TYPE_RD_IMML: | ||
174 | + if (strcmp (op_end, "")) | ||
175 | + op_end = parse_reg (op_end + 1, ®1); /* Get rd. */ | ||
176 | + else | ||
177 | + { | ||
178 | + as_fatal (_("Error in statement syntax")); | ||
179 | + reg1 = 0; | ||
180 | + } | ||
181 | + | ||
182 | + if (strcmp (op_end, "")) | ||
183 | + op_end = parse_imml (op_end + 1, & exp, MIN_IMML, MAX_IMML); | ||
184 | + else | ||
185 | + as_fatal (_("Error in statement syntax")); | ||
186 | + | ||
187 | + /* Check for spl registers. */ | ||
188 | + if (check_spl_reg (®1)) | ||
189 | + as_fatal (_("Cannot use special register with this instruction")); | ||
190 | + if (exp.X_op != O_constant) | ||
191 | + { | ||
192 | + char *opc = NULL; | ||
193 | + relax_substateT subtype; | ||
194 | + | ||
195 | + if (exp.X_md != 0) | ||
196 | + subtype = get_imm_otype(exp.X_md); | ||
197 | + else | ||
198 | + subtype = opcode->inst_offset_type; | ||
199 | + | ||
200 | + output = frag_var (rs_machine_dependent, | ||
201 | + isize * 2, | ||
202 | + isize * 2, | ||
203 | + subtype, | ||
204 | + exp.X_add_symbol, | ||
205 | + exp.X_add_number, | ||
206 | + (char *) opc); | ||
207 | + immedl = 0L; | ||
208 | + } | ||
209 | + else | ||
210 | + { | ||
211 | + output = frag_more (isize); | ||
212 | + immed = exp.X_add_number; | ||
213 | + } | ||
214 | + inst |= (reg1 << RD_LOW) & RD_MASK; | ||
215 | + inst |= (immed << IMM_LOW) & IMM16_MASK; | ||
216 | + break; | ||
217 | + | ||
218 | case INST_TYPE_R1_RFSL: | ||
219 | if (strcmp (op_end, "")) | ||
220 | op_end = parse_reg (op_end + 1, ®1); /* Get r1. */ | ||
221 | diff --git a/opcodes/microblaze-dis.c b/opcodes/microblaze-dis.c | ||
222 | index d837ebb38e2..b5a78dcfe09 100644 | ||
223 | --- a/opcodes/microblaze-dis.c | ||
224 | +++ b/opcodes/microblaze-dis.c | ||
225 | @@ -130,6 +130,14 @@ get_field_imm15 (struct string_buf *buf, long instr) | ||
226 | return p; | ||
227 | } | ||
228 | |||
229 | +get_field_imm16 (struct string_buf *buf, long instr) | ||
230 | +{ | ||
231 | + char *p = strbuf (buf); | ||
232 | + | ||
233 | + sprintf (p, "%d", (short)((instr & IMM16_MASK) >> IMM_LOW)); | ||
234 | + return p; | ||
235 | +} | ||
236 | + | ||
237 | static char * | ||
238 | get_field_special (struct string_buf *buf, long instr, | ||
239 | const struct op_code_struct *op) | ||
240 | @@ -457,6 +465,9 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info) | ||
241 | /* For mbar 16 or sleep insn. */ | ||
242 | case INST_TYPE_NONE: | ||
243 | break; | ||
244 | + case INST_TYPE_RD_IMML: | ||
245 | + print_func (stream, "\t%s, %s", get_field_rd (&buf, inst), get_field_imm16 (&buf, inst)); | ||
246 | + break; | ||
247 | /* For bit field insns. */ | ||
248 | case INST_TYPE_RD_R1_IMMW_IMMS: | ||
249 | print_func (stream, "\t%s, %s, %s, %s", get_field_rd (&buf, inst),get_field_r1(&buf, inst),get_field_immw (&buf, inst), get_field_imms (&buf, inst)); | ||
250 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h | ||
251 | index 6b25d12dace..82da7f1179a 100644 | ||
252 | --- a/opcodes/microblaze-opc.h | ||
253 | +++ b/opcodes/microblaze-opc.h | ||
254 | @@ -69,6 +69,7 @@ | ||
255 | #define INST_TYPE_RD_R1_IMMW_IMMS 21 | ||
256 | |||
257 | #define INST_TYPE_NONE 25 | ||
258 | +#define INST_TYPE_RD_IMML 26 | ||
259 | |||
260 | |||
261 | |||
262 | @@ -84,6 +85,7 @@ | ||
263 | #define IMMVAL_MASK_MFS 0x0000 | ||
264 | |||
265 | #define OPCODE_MASK_H 0xFC000000 /* High 6 bits only. */ | ||
266 | +#define OPCODE_MASK_LIMM 0xFC1F0000 /* High 6 bits and 12-16 bits */ | ||
267 | #define OPCODE_MASK_H1 0xFFE00000 /* High 11 bits. */ | ||
268 | #define OPCODE_MASK_H2 0xFC1F0000 /* High 6 and bits 20-16. */ | ||
269 | #define OPCODE_MASK_H12 0xFFFF0000 /* High 16. */ | ||
270 | @@ -106,6 +108,33 @@ | ||
271 | #define OPCODE_MASK_H34C 0xFC0007E0 /* High 6 bits and bits 21-26. */ | ||
272 | #define OPCODE_MASK_H8 0xFF000000 /* High 8 bits only. */ | ||
273 | |||
274 | +/*Defines to identify 64-bit single reg instructions */ | ||
275 | +#define ADDLI_ONE_REG_MASK 0x68000000 | ||
276 | +#define ADDLIC_ONE_REG_MASK 0x68020000 | ||
277 | +#define ADDLIK_ONE_REG_MASK 0x68040000 | ||
278 | +#define ADDLIKC_ONE_REG_MASK 0x68060000 | ||
279 | +#define RSUBLI_ONE_REG_MASK 0x68010000 | ||
280 | +#define RSUBLIC_ONE_REG_MASK 0x68030000 | ||
281 | +#define RSUBLIK_ONE_REG_MASK 0x68050000 | ||
282 | +#define RSUBLIKC_ONE_REG_MASK 0x68070000 | ||
283 | +#define ORLI_ONE_REG_MASK 0x68100000 | ||
284 | +#define ANDLI_ONE_REG_MASK 0x68110000 | ||
285 | +#define XORLI_ONE_REG_MASK 0x68120000 | ||
286 | +#define ANDLNI_ONE_REG_MASK 0x68130000 | ||
287 | +#define ADDLI_MASK 0x20000000 | ||
288 | +#define ADDLIC_MASK 0x28000000 | ||
289 | +#define ADDLIK_MASK 0x30000000 | ||
290 | +#define ADDLIKC_MASK 0x38000000 | ||
291 | +#define RSUBLI_MASK 0x24000000 | ||
292 | +#define RSUBLIC_MASK 0x2C000000 | ||
293 | +#define RSUBLIK_MASK 0x34000000 | ||
294 | +#define RSUBLIKC_MASK 0x3C000000 | ||
295 | +#define ANDLI_MASK 0xA4000000 | ||
296 | +#define ANDLNI_MASK 0xAC000000 | ||
297 | +#define ORLI_MASK 0xA0000000 | ||
298 | +#define XORLI_MASK 0xA8000000 | ||
299 | + | ||
300 | + | ||
301 | /* New Mask for msrset, msrclr insns. */ | ||
302 | #define OPCODE_MASK_H23N 0xFC1F8000 /* High 6 and bits 11 - 16. */ | ||
303 | /* Mask for mbar insn. */ | ||
304 | @@ -114,7 +143,7 @@ | ||
305 | #define DELAY_SLOT 1 | ||
306 | #define NO_DELAY_SLOT 0 | ||
307 | |||
308 | -#define MAX_OPCODES 412 | ||
309 | +#define MAX_OPCODES 424 | ||
310 | |||
311 | const struct op_code_struct | ||
312 | { | ||
313 | @@ -444,13 +473,21 @@ const struct op_code_struct | ||
314 | {"cmpl", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x14000101, OPCODE_MASK_H4, cmpl, arithmetic_inst }, | ||
315 | {"cmplu", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x14000103, OPCODE_MASK_H4, cmplu, arithmetic_inst }, | ||
316 | {"addli", INST_TYPE_RD_R1_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x20000000, OPCODE_MASK_H, invalid_inst, arithmetic_inst }, /* Identical to 32-bit */ | ||
317 | + {"addli", INST_TYPE_RD_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL,0x68000000, OPCODE_MASK_LIMM, addli, arithmetic_inst }, | ||
318 | {"rsubli", INST_TYPE_RD_R1_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x24000000, OPCODE_MASK_H, invalid_inst, arithmetic_inst }, /* Identical to 32-bit */ | ||
319 | + {"rsubli", INST_TYPE_RD_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL,0x68010000, OPCODE_MASK_LIMM, rsubli, arithmetic_inst }, | ||
320 | {"addlic", INST_TYPE_RD_R1_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x28000000, OPCODE_MASK_H, invalid_inst, arithmetic_inst }, /* Identical to 32-bit */ | ||
321 | + {"addlic", INST_TYPE_RD_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL,0x68020000, OPCODE_MASK_LIMM, addlic, arithmetic_inst }, | ||
322 | {"rsublic", INST_TYPE_RD_R1_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x2C000000, OPCODE_MASK_H, invalid_inst, arithmetic_inst }, /* Identical to 32-bit */ | ||
323 | + {"rsublic", INST_TYPE_RD_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL,0x68030000, OPCODE_MASK_LIMM, rsublic, arithmetic_inst }, | ||
324 | {"addlik", INST_TYPE_RD_R1_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x30000000, OPCODE_MASK_H, invalid_inst, arithmetic_inst }, /* Identical to 32-bit */ | ||
325 | + {"addlik", INST_TYPE_RD_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL,0x68040000, OPCODE_MASK_LIMM, addlik, arithmetic_inst }, | ||
326 | {"rsublik", INST_TYPE_RD_R1_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x34000000, OPCODE_MASK_H, invalid_inst, arithmetic_inst }, /* Identical to 32-bit */ | ||
327 | + {"rsublik", INST_TYPE_RD_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL,0x68050000, OPCODE_MASK_LIMM, rsublik, arithmetic_inst }, | ||
328 | {"addlikc", INST_TYPE_RD_R1_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x38000000, OPCODE_MASK_H, invalid_inst, arithmetic_inst }, /* Identical to 32-bit */ | ||
329 | + {"addlikc", INST_TYPE_RD_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL,0x68060000, OPCODE_MASK_LIMM, addlikc, arithmetic_inst }, | ||
330 | {"rsublikc",INST_TYPE_RD_R1_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x3C000000, OPCODE_MASK_H, invalid_inst, arithmetic_inst }, /* Identical to 32-bit */ | ||
331 | + {"rsublikc", INST_TYPE_RD_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL,0x68070000, OPCODE_MASK_LIMM, rsublikc, arithmetic_inst }, | ||
332 | {"mull", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x40000100, OPCODE_MASK_H4, mull, mult_inst }, | ||
333 | {"bslll", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x44000500, OPCODE_MASK_H3, bslll, barrel_shift_inst }, | ||
334 | {"bslra", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x44000300, OPCODE_MASK_H3, bslra, barrel_shift_inst }, | ||
335 | @@ -501,9 +538,13 @@ const struct op_code_struct | ||
336 | {"beaged", INST_TYPE_R1_R2, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x9FA00000, OPCODE_MASK_H14, beaged, branch_inst }, | ||
337 | {"bealged", INST_TYPE_R1_R2, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x9FA00100, OPCODE_MASK_H14, bealged, branch_inst }, | ||
338 | {"orli", INST_TYPE_RD_R1_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xA0000000, OPCODE_MASK_H, invalid_inst, logical_inst }, /* Identical to 32-bit */ | ||
339 | + {"orli", INST_TYPE_RD_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL,0x68100000, OPCODE_MASK_LIMM, orli, arithmetic_inst }, | ||
340 | {"andli", INST_TYPE_RD_R1_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xA4000000, OPCODE_MASK_H, invalid_inst, logical_inst }, /* Identical to 32-bit */ | ||
341 | + {"andli", INST_TYPE_RD_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL,0x68110000, OPCODE_MASK_LIMM, andli, arithmetic_inst }, | ||
342 | {"xorli", INST_TYPE_RD_R1_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xA8000000, OPCODE_MASK_H, invalid_inst, logical_inst }, /* Identical to 32-bit */ | ||
343 | + {"xorli", INST_TYPE_RD_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL,0x68120000, OPCODE_MASK_LIMM, xorli, arithmetic_inst }, | ||
344 | {"andnli", INST_TYPE_RD_R1_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xAC000000, OPCODE_MASK_H, invalid_inst, logical_inst }, /* Identical to 32-bit */ | ||
345 | + {"andnli", INST_TYPE_RD_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL,0x68130000, OPCODE_MASK_LIMM, andnli, arithmetic_inst }, | ||
346 | {"imml", INST_TYPE_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB2000000, OPCODE_MASK_H8, imml, immediate_inst }, | ||
347 | {"breai", INST_TYPE_IMM, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8010000, OPCODE_MASK_H12, breai, branch_inst }, | ||
348 | {"breaid", INST_TYPE_IMM, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8110000, OPCODE_MASK_H12, breaid, branch_inst }, | ||
349 | diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h | ||
350 | index b242ea73c7b..5c44a5ff0ac 100644 | ||
351 | --- a/opcodes/microblaze-opcm.h | ||
352 | +++ b/opcodes/microblaze-opcm.h | ||
353 | @@ -62,7 +62,9 @@ enum microblaze_instr | ||
354 | eaputd, teaputd, ecaputd, tecaputd, neaputd, tneaputd, necaputd, tnecaputd, | ||
355 | |||
356 | /* 64-bit instructions */ | ||
357 | - addl, rsubl, addlc, rsublc, addlk, rsublk, addlkc, rsublkc, cmpl, cmplu, mull, | ||
358 | + addl, addli, addlic, addlik, addlikc, rsubl, rsubli, rsublic, rsublik, rsublikc, | ||
359 | + addlc, rsublc, addlk, rsublk, addlkc, rsublkc, cmpl, cmplu, mull, | ||
360 | + andli, andnli, orli, xorli, | ||
361 | bslll, bslra, bslrl, bsllli, bslrai, bslrli, bslefi, bslifi, orl, andl, xorl, | ||
362 | andnl, pcmplbf, pcmpleq, pcmplne, srla, srlc, srll, sextl8, sextl16, sextl32, | ||
363 | brea, bread, breald, beaeq, bealeq, beaeqd, bealeqd, beane, bealne, beaned, | ||
364 | @@ -167,5 +169,6 @@ enum microblaze_instr_type | ||
365 | |||
366 | /* Imm mask for msrset, msrclr instructions. */ | ||
367 | #define IMM15_MASK 0x00007FFF | ||
368 | +#define IMM16_MASK 0x0000FFFF | ||
369 | |||
370 | #endif /* MICROBLAZE-OPCM */ | ||
371 | -- | ||
372 | 2.37.1 (Apple Git-137.1) | ||
373 | |||