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