Automatic date update in version.in
[deliverable/binutils-gdb.git] / opcodes / arc-fxi.h
CommitLineData
886a2506 1/* Insert/extract functions for the ARC opcodes.
250d07de 2 Copyright (C) 2015-2021 Free Software Foundation, Inc.
886a2506
NC
3
4 Contributed by Claudiu Zissulescu (claziss@synopsys.com)
5
6 This file is part of libopcodes.
7
8 This library is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
12
13 It is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software Foundation,
20 Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
21
22#ifndef INSERT_LIMM
23#define INSERT_LIMM
24/* mask = 00000000000000000000000000000000
25 insn = 00100bbb00101111FBBB111110001001. */
bdfe53e3
AB
26static unsigned long long
27insert_limm (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a
AM
28 long long int value ATTRIBUTE_UNUSED,
29 const char **errmsg ATTRIBUTE_UNUSED)
886a2506
NC
30{
31
32 return insn;
33}
34#endif /* INSERT_LIMM */
35
36#ifndef EXTRACT_LIMM
37#define EXTRACT_LIMM
38/* mask = 00000000000000000000000000000000. */
39static ATTRIBUTE_UNUSED int
78933a4a
AM
40extract_limm (unsigned long long insn ATTRIBUTE_UNUSED,
41 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
42{
43 unsigned value = 0;
44
45 return value;
46}
47#endif /* EXTRACT_LIMM */
48
49#ifndef INSERT_UIMM6_20
50#define INSERT_UIMM6_20
51/* mask = 00000000000000000000111111000000
52 insn = 00100bbb01101111FBBBuuuuuu001001. */
bdfe53e3
AB
53static unsigned long long
54insert_uimm6_20 (unsigned long long insn ATTRIBUTE_UNUSED,
55 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
56 const char **errmsg ATTRIBUTE_UNUSED)
57{
58
59 insn |= ((value >> 0) & 0x003f) << 6;
60
61 return insn;
62}
63#endif /* INSERT_UIMM6_20 */
64
65#ifndef EXTRACT_UIMM6_20
66#define EXTRACT_UIMM6_20
67/* mask = 00000000000000000000111111000000. */
bdfe53e3
AB
68static long long int
69extract_uimm6_20 (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 70 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
71{
72 unsigned value = 0;
73
74 value |= ((insn >> 6) & 0x003f) << 0;
75
76 return value;
77}
78#endif /* EXTRACT_UIMM6_20 */
79
80#ifndef INSERT_SIMM12_20
81#define INSERT_SIMM12_20
82/* mask = 00000000000000000000111111222222
83 insn = 00110bbb10101000FBBBssssssSSSSSS. */
bdfe53e3
AB
84static unsigned long long
85insert_simm12_20 (unsigned long long insn ATTRIBUTE_UNUSED,
86 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
87 const char **errmsg ATTRIBUTE_UNUSED)
88{
89
90 insn |= ((value >> 0) & 0x003f) << 6;
91 insn |= ((value >> 6) & 0x003f) << 0;
92
93 return insn;
94}
95#endif /* INSERT_SIMM12_20 */
96
97#ifndef EXTRACT_SIMM12_20
98#define EXTRACT_SIMM12_20
99/* mask = 00000000000000000000111111222222. */
bdfe53e3
AB
100static long long int
101extract_simm12_20 (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 102 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
103{
104 int value = 0;
105
106 value |= ((insn >> 6) & 0x003f) << 0;
107 value |= ((insn >> 0) & 0x003f) << 6;
108
109 /* Extend the sign. */
110 int signbit = 1 << (12 - 1);
111 value = (value ^ signbit) - signbit;
112
113 return value;
114}
115#endif /* EXTRACT_SIMM12_20 */
116
117#ifndef INSERT_SIMM3_5_S
118#define INSERT_SIMM3_5_S
119/* mask = 0000011100000000
120 insn = 01110ssshhh001HH. */
121static ATTRIBUTE_UNUSED unsigned
bdfe53e3
AB
122insert_simm3_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
123 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
124 const char **errmsg ATTRIBUTE_UNUSED)
125{
126
127 insn |= ((value >> 0) & 0x0007) << 8;
128
129 return insn;
130}
131#endif /* INSERT_SIMM3_5_S */
132
133#ifndef EXTRACT_SIMM3_5_S
134#define EXTRACT_SIMM3_5_S
135/* mask = 0000011100000000. */
136static ATTRIBUTE_UNUSED int
bdfe53e3 137extract_simm3_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 138 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
139{
140 int value = 0;
141
142 value |= ((insn >> 8) & 0x0007) << 0;
143
144 /* Extend the sign. */
145 int signbit = 1 << (3 - 1);
146 value = (value ^ signbit) - signbit;
147
148 return value;
149}
150#endif /* EXTRACT_SIMM3_5_S */
151
152#ifndef INSERT_LIMM_S
153#define INSERT_LIMM_S
154/* mask = 0000000000000000
155 insn = 01110sss11000111. */
156static ATTRIBUTE_UNUSED unsigned
bdfe53e3
AB
157insert_limm_s (unsigned long long insn ATTRIBUTE_UNUSED,
158 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
159 const char **errmsg ATTRIBUTE_UNUSED)
160{
161
162 return insn;
163}
164#endif /* INSERT_LIMM_S */
165
166#ifndef EXTRACT_LIMM_S
167#define EXTRACT_LIMM_S
168/* mask = 0000000000000000. */
169static ATTRIBUTE_UNUSED int
78933a4a
AM
170extract_limm_s (unsigned long long insn ATTRIBUTE_UNUSED,
171 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
172{
173 unsigned value = 0;
174
175 return value;
176}
177#endif /* EXTRACT_LIMM_S */
178
179#ifndef INSERT_UIMM7_A32_11_S
180#define INSERT_UIMM7_A32_11_S
181/* mask = 0000000000011111
182 insn = 11000bbb100uuuuu. */
bdfe53e3
AB
183static unsigned long long
184insert_uimm7_a32_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
185 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
186 const char **errmsg ATTRIBUTE_UNUSED)
187{
188 if (value & 0x03)
189 *errmsg = _("Target address is not 32bit aligned.");
190
191 insn |= ((value >> 2) & 0x001f) << 0;
192
193 return insn;
194}
195#endif /* INSERT_UIMM7_A32_11_S */
196
197#ifndef EXTRACT_UIMM7_A32_11_S
198#define EXTRACT_UIMM7_A32_11_S
199/* mask = 0000000000011111. */
bdfe53e3
AB
200static long long int
201extract_uimm7_a32_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 202 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
203{
204 unsigned value = 0;
205
206 value |= ((insn >> 0) & 0x001f) << 2;
207
208 return value;
209}
210#endif /* EXTRACT_UIMM7_A32_11_S */
211
212#ifndef INSERT_UIMM7_9_S
213#define INSERT_UIMM7_9_S
214/* mask = 0000000001111111
215 insn = 11100bbb0uuuuuuu. */
bdfe53e3
AB
216static unsigned long long
217insert_uimm7_9_s (unsigned long long insn ATTRIBUTE_UNUSED,
218 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
219 const char **errmsg ATTRIBUTE_UNUSED)
220{
221
222 insn |= ((value >> 0) & 0x007f) << 0;
223
224 return insn;
225}
226#endif /* INSERT_UIMM7_9_S */
227
228#ifndef EXTRACT_UIMM7_9_S
229#define EXTRACT_UIMM7_9_S
230/* mask = 0000000001111111. */
bdfe53e3
AB
231static long long int
232extract_uimm7_9_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 233 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
234{
235 unsigned value = 0;
236
237 value |= ((insn >> 0) & 0x007f) << 0;
238
239 return value;
240}
241#endif /* EXTRACT_UIMM7_9_S */
242
243#ifndef INSERT_UIMM3_13_S
244#define INSERT_UIMM3_13_S
245/* mask = 0000000000000111
246 insn = 01101bbbccc00uuu. */
bdfe53e3
AB
247static unsigned long long
248insert_uimm3_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
249 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
250 const char **errmsg ATTRIBUTE_UNUSED)
251{
252
253 insn |= ((value >> 0) & 0x0007) << 0;
254
255 return insn;
256}
257#endif /* INSERT_UIMM3_13_S */
258
259#ifndef EXTRACT_UIMM3_13_S
260#define EXTRACT_UIMM3_13_S
261/* mask = 0000000000000111. */
bdfe53e3
AB
262static long long int
263extract_uimm3_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 264 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
265{
266 unsigned value = 0;
267
268 value |= ((insn >> 0) & 0x0007) << 0;
269
270 return value;
271}
272#endif /* EXTRACT_UIMM3_13_S */
273
274#ifndef INSERT_SIMM11_A32_7_S
275#define INSERT_SIMM11_A32_7_S
276/* mask = 0000000111111111
277 insn = 1100111sssssssss. */
bdfe53e3
AB
278static unsigned long long
279insert_simm11_a32_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
280 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
281 const char **errmsg ATTRIBUTE_UNUSED)
282{
283 if (value & 0x03)
284 *errmsg = _("Target address is not 32bit aligned.");
285
286 insn |= ((value >> 2) & 0x01ff) << 0;
287
288 return insn;
289}
290#endif /* INSERT_SIMM11_A32_7_S */
291
292#ifndef EXTRACT_SIMM11_A32_7_S
293#define EXTRACT_SIMM11_A32_7_S
294/* mask = 0000000111111111. */
bdfe53e3
AB
295static long long int
296extract_simm11_a32_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 297 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
298{
299 int value = 0;
300
301 value |= ((insn >> 0) & 0x01ff) << 2;
302
303 /* Extend the sign. */
304 int signbit = 1 << (11 - 1);
305 value = (value ^ signbit) - signbit;
306
307 return value;
308}
309#endif /* EXTRACT_SIMM11_A32_7_S */
310
311#ifndef INSERT_UIMM6_13_S
312#define INSERT_UIMM6_13_S
313/* mask = 0000000002220111
314 insn = 01001bbb0UUU1uuu. */
bdfe53e3
AB
315static unsigned long long
316insert_uimm6_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
317 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
318 const char **errmsg ATTRIBUTE_UNUSED)
319{
320
321 insn |= ((value >> 0) & 0x0007) << 0;
322 insn |= ((value >> 3) & 0x0007) << 4;
323
324 return insn;
325}
326#endif /* INSERT_UIMM6_13_S */
327
328#ifndef EXTRACT_UIMM6_13_S
329#define EXTRACT_UIMM6_13_S
330/* mask = 0000000002220111. */
bdfe53e3
AB
331static long long int
332extract_uimm6_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 333 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
334{
335 unsigned value = 0;
336
337 value |= ((insn >> 0) & 0x0007) << 0;
338 value |= ((insn >> 4) & 0x0007) << 3;
339
340 return value;
341}
342#endif /* EXTRACT_UIMM6_13_S */
343
344#ifndef INSERT_UIMM5_11_S
345#define INSERT_UIMM5_11_S
346/* mask = 0000000000011111
347 insn = 10111bbb000uuuuu. */
bdfe53e3
AB
348static unsigned long long
349insert_uimm5_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
350 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
351 const char **errmsg ATTRIBUTE_UNUSED)
352{
353
354 insn |= ((value >> 0) & 0x001f) << 0;
355
356 return insn;
357}
358#endif /* INSERT_UIMM5_11_S */
359
360#ifndef EXTRACT_UIMM5_11_S
361#define EXTRACT_UIMM5_11_S
362/* mask = 0000000000011111. */
bdfe53e3
AB
363static long long int
364extract_uimm5_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 365 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
366{
367 unsigned value = 0;
368
369 value |= ((insn >> 0) & 0x001f) << 0;
370
371 return value;
372}
373#endif /* EXTRACT_UIMM5_11_S */
374
375#ifndef INSERT_SIMM9_A16_8
376#define INSERT_SIMM9_A16_8
377/* mask = 00000000111111102000000000000000
378 insn = 00001bbbsssssss1SBBBCCCCCCN01110. */
bdfe53e3
AB
379static unsigned long long
380insert_simm9_a16_8 (unsigned long long insn ATTRIBUTE_UNUSED,
381 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
382 const char **errmsg ATTRIBUTE_UNUSED)
383{
384 if (value & 0x01)
385 *errmsg = _("Target address is not 16bit aligned.");
386
387 insn |= ((value >> 1) & 0x007f) << 17;
388 insn |= ((value >> 8) & 0x0001) << 15;
389
390 return insn;
391}
392#endif /* INSERT_SIMM9_A16_8 */
393
394#ifndef EXTRACT_SIMM9_A16_8
395#define EXTRACT_SIMM9_A16_8
396/* mask = 00000000111111102000000000000000. */
bdfe53e3
AB
397static long long int
398extract_simm9_a16_8 (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 399 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
400{
401 int value = 0;
402
403 value |= ((insn >> 17) & 0x007f) << 1;
404 value |= ((insn >> 15) & 0x0001) << 8;
405
406 /* Extend the sign. */
407 int signbit = 1 << (9 - 1);
408 value = (value ^ signbit) - signbit;
409
410 return value;
411}
412#endif /* EXTRACT_SIMM9_A16_8 */
413
414#ifndef INSERT_UIMM6_8
415#define INSERT_UIMM6_8
416/* mask = 00000000000000000000111111000000
417 insn = 00001bbbsssssss1SBBBuuuuuuN11110. */
bdfe53e3
AB
418static unsigned long long
419insert_uimm6_8 (unsigned long long insn ATTRIBUTE_UNUSED,
420 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
421 const char **errmsg ATTRIBUTE_UNUSED)
422{
423
424 insn |= ((value >> 0) & 0x003f) << 6;
425
426 return insn;
427}
428#endif /* INSERT_UIMM6_8 */
429
430#ifndef EXTRACT_UIMM6_8
431#define EXTRACT_UIMM6_8
432/* mask = 00000000000000000000111111000000. */
bdfe53e3
AB
433static long long int
434extract_uimm6_8 (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 435 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
436{
437 unsigned value = 0;
438
439 value |= ((insn >> 6) & 0x003f) << 0;
440
441 return value;
442}
443#endif /* EXTRACT_UIMM6_8 */
444
445#ifndef INSERT_SIMM21_A16_5
446#define INSERT_SIMM21_A16_5
447/* mask = 00000111111111102222222222000000
448 insn = 00000ssssssssss0SSSSSSSSSSNQQQQQ. */
bdfe53e3
AB
449static unsigned long long
450insert_simm21_a16_5 (unsigned long long insn ATTRIBUTE_UNUSED,
451 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
452 const char **errmsg ATTRIBUTE_UNUSED)
453{
454 if (value & 0x01)
455 *errmsg = _("Target address is not 16bit aligned.");
456
457 insn |= ((value >> 1) & 0x03ff) << 17;
458 insn |= ((value >> 11) & 0x03ff) << 6;
459
460 return insn;
461}
462#endif /* INSERT_SIMM21_A16_5 */
463
464#ifndef EXTRACT_SIMM21_A16_5
465#define EXTRACT_SIMM21_A16_5
466/* mask = 00000111111111102222222222000000. */
bdfe53e3
AB
467static long long int
468extract_simm21_a16_5 (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 469 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
470{
471 int value = 0;
472
473 value |= ((insn >> 17) & 0x03ff) << 1;
474 value |= ((insn >> 6) & 0x03ff) << 11;
475
476 /* Extend the sign. */
477 int signbit = 1 << (21 - 1);
478 value = (value ^ signbit) - signbit;
479
480 return value;
481}
482#endif /* EXTRACT_SIMM21_A16_5 */
483
484#ifndef INSERT_SIMM25_A16_5
485#define INSERT_SIMM25_A16_5
486/* mask = 00000111111111102222222222003333
487 insn = 00000ssssssssss1SSSSSSSSSSNRtttt. */
bdfe53e3
AB
488static unsigned long long
489insert_simm25_a16_5 (unsigned long long insn ATTRIBUTE_UNUSED,
490 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
491 const char **errmsg ATTRIBUTE_UNUSED)
492{
493 if (value & 0x01)
494 *errmsg = _("Target address is not 16bit aligned.");
495
496 insn |= ((value >> 1) & 0x03ff) << 17;
497 insn |= ((value >> 11) & 0x03ff) << 6;
498 insn |= ((value >> 21) & 0x000f) << 0;
499
500 return insn;
501}
502#endif /* INSERT_SIMM25_A16_5 */
503
504#ifndef EXTRACT_SIMM25_A16_5
505#define EXTRACT_SIMM25_A16_5
506/* mask = 00000111111111102222222222003333. */
bdfe53e3
AB
507static long long int
508extract_simm25_a16_5 (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 509 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
510{
511 int value = 0;
512
513 value |= ((insn >> 17) & 0x03ff) << 1;
514 value |= ((insn >> 6) & 0x03ff) << 11;
515 value |= ((insn >> 0) & 0x000f) << 21;
516
517 /* Extend the sign. */
518 int signbit = 1 << (25 - 1);
519 value = (value ^ signbit) - signbit;
520
521 return value;
522}
523#endif /* EXTRACT_SIMM25_A16_5 */
524
525#ifndef INSERT_SIMM10_A16_7_S
526#define INSERT_SIMM10_A16_7_S
527/* mask = 0000000111111111
528 insn = 1111001sssssssss. */
bdfe53e3
AB
529static unsigned long long
530insert_simm10_a16_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
531 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
532 const char **errmsg ATTRIBUTE_UNUSED)
533{
534 if (value & 0x01)
535 *errmsg = _("Target address is not 16bit aligned.");
536
537 insn |= ((value >> 1) & 0x01ff) << 0;
538
539 return insn;
540}
541#endif /* INSERT_SIMM10_A16_7_S */
542
543#ifndef EXTRACT_SIMM10_A16_7_S
544#define EXTRACT_SIMM10_A16_7_S
545/* mask = 0000000111111111. */
bdfe53e3
AB
546static long long int
547extract_simm10_a16_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 548 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
549{
550 int value = 0;
551
552 value |= ((insn >> 0) & 0x01ff) << 1;
553
554 /* Extend the sign. */
555 int signbit = 1 << (10 - 1);
556 value = (value ^ signbit) - signbit;
557
558 return value;
559}
560#endif /* EXTRACT_SIMM10_A16_7_S */
561
562#ifndef INSERT_SIMM7_A16_10_S
563#define INSERT_SIMM7_A16_10_S
564/* mask = 0000000000111111
565 insn = 1111011000ssssss. */
bdfe53e3
AB
566static unsigned long long
567insert_simm7_a16_10_s (unsigned long long insn ATTRIBUTE_UNUSED,
568 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
569 const char **errmsg ATTRIBUTE_UNUSED)
570{
571 if (value & 0x01)
572 *errmsg = _("Target address is not 16bit aligned.");
573
574 insn |= ((value >> 1) & 0x003f) << 0;
575
576 return insn;
577}
578#endif /* INSERT_SIMM7_A16_10_S */
579
580#ifndef EXTRACT_SIMM7_A16_10_S
581#define EXTRACT_SIMM7_A16_10_S
582/* mask = 0000000000111111. */
bdfe53e3
AB
583static long long int
584extract_simm7_a16_10_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 585 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
586{
587 int value = 0;
588
589 value |= ((insn >> 0) & 0x003f) << 1;
590
591 /* Extend the sign. */
592 int signbit = 1 << (7 - 1);
593 value = (value ^ signbit) - signbit;
594
595 return value;
596}
597#endif /* EXTRACT_SIMM7_A16_10_S */
598
599#ifndef INSERT_SIMM21_A32_5
600#define INSERT_SIMM21_A32_5
601/* mask = 00000111111111002222222222000000
602 insn = 00001sssssssss00SSSSSSSSSSNQQQQQ. */
bdfe53e3
AB
603static unsigned long long
604insert_simm21_a32_5 (unsigned long long insn ATTRIBUTE_UNUSED,
605 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
606 const char **errmsg ATTRIBUTE_UNUSED)
607{
608 if (value & 0x03)
609 *errmsg = _("Target address is not 32bit aligned.");
610
611 insn |= ((value >> 2) & 0x01ff) << 18;
612 insn |= ((value >> 11) & 0x03ff) << 6;
613
614 return insn;
615}
616#endif /* INSERT_SIMM21_A32_5 */
617
618#ifndef EXTRACT_SIMM21_A32_5
619#define EXTRACT_SIMM21_A32_5
620/* mask = 00000111111111002222222222000000. */
bdfe53e3
AB
621static long long int
622extract_simm21_a32_5 (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 623 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
624{
625 int value = 0;
626
627 value |= ((insn >> 18) & 0x01ff) << 2;
628 value |= ((insn >> 6) & 0x03ff) << 11;
629
630 /* Extend the sign. */
631 int signbit = 1 << (21 - 1);
632 value = (value ^ signbit) - signbit;
633
634 return value;
635}
636#endif /* EXTRACT_SIMM21_A32_5 */
637
638#ifndef INSERT_SIMM25_A32_5
639#define INSERT_SIMM25_A32_5
640/* mask = 00000111111111002222222222003333
641 insn = 00001sssssssss10SSSSSSSSSSNRtttt. */
bdfe53e3
AB
642static unsigned long long
643insert_simm25_a32_5 (unsigned long long insn ATTRIBUTE_UNUSED,
644 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
645 const char **errmsg ATTRIBUTE_UNUSED)
646{
647 if (value & 0x03)
648 *errmsg = _("Target address is not 32bit aligned.");
649
650 insn |= ((value >> 2) & 0x01ff) << 18;
651 insn |= ((value >> 11) & 0x03ff) << 6;
652 insn |= ((value >> 21) & 0x000f) << 0;
653
654 return insn;
655}
656#endif /* INSERT_SIMM25_A32_5 */
657
658#ifndef EXTRACT_SIMM25_A32_5
659#define EXTRACT_SIMM25_A32_5
660/* mask = 00000111111111002222222222003333. */
bdfe53e3
AB
661static long long int
662extract_simm25_a32_5 (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 663 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
664{
665 int value = 0;
666
667 value |= ((insn >> 18) & 0x01ff) << 2;
668 value |= ((insn >> 6) & 0x03ff) << 11;
669 value |= ((insn >> 0) & 0x000f) << 21;
670
671 /* Extend the sign. */
672 int signbit = 1 << (25 - 1);
673 value = (value ^ signbit) - signbit;
674
675 return value;
676}
677#endif /* EXTRACT_SIMM25_A32_5 */
678
679#ifndef INSERT_SIMM13_A32_5_S
680#define INSERT_SIMM13_A32_5_S
681/* mask = 0000011111111111
682 insn = 11111sssssssssss. */
bdfe53e3
AB
683static unsigned long long
684insert_simm13_a32_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
685 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
686 const char **errmsg ATTRIBUTE_UNUSED)
687{
688 if (value & 0x03)
689 *errmsg = _("Target address is not 32bit aligned.");
690
691 insn |= ((value >> 2) & 0x07ff) << 0;
692
693 return insn;
694}
695#endif /* INSERT_SIMM13_A32_5_S */
696
697#ifndef EXTRACT_SIMM13_A32_5_S
698#define EXTRACT_SIMM13_A32_5_S
699/* mask = 0000011111111111. */
bdfe53e3
AB
700static long long int
701extract_simm13_a32_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 702 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
703{
704 int value = 0;
705
706 value |= ((insn >> 0) & 0x07ff) << 2;
707
708 /* Extend the sign. */
709 int signbit = 1 << (13 - 1);
710 value = (value ^ signbit) - signbit;
711
712 return value;
713}
714#endif /* EXTRACT_SIMM13_A32_5_S */
715
716#ifndef INSERT_SIMM8_A16_9_S
717#define INSERT_SIMM8_A16_9_S
718/* mask = 0000000001111111
719 insn = 11101bbb1sssssss. */
bdfe53e3
AB
720static unsigned long long
721insert_simm8_a16_9_s (unsigned long long insn ATTRIBUTE_UNUSED,
722 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
723 const char **errmsg ATTRIBUTE_UNUSED)
724{
725 if (value & 0x01)
726 *errmsg = _("Target address is not 16bit aligned.");
727
728 insn |= ((value >> 1) & 0x007f) << 0;
729
730 return insn;
731}
732#endif /* INSERT_SIMM8_A16_9_S */
733
734#ifndef EXTRACT_SIMM8_A16_9_S
735#define EXTRACT_SIMM8_A16_9_S
736/* mask = 0000000001111111. */
bdfe53e3
AB
737static long long int
738extract_simm8_a16_9_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 739 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
740{
741 int value = 0;
742
743 value |= ((insn >> 0) & 0x007f) << 1;
744
745 /* Extend the sign. */
746 int signbit = 1 << (8 - 1);
747 value = (value ^ signbit) - signbit;
748
749 return value;
750}
751#endif /* EXTRACT_SIMM8_A16_9_S */
752
753#ifndef INSERT_UIMM3_23
754#define INSERT_UIMM3_23
755/* mask = 00000000000000000000000111000000
756 insn = 00100011011011110001RRRuuu111111. */
bdfe53e3
AB
757static unsigned long long
758insert_uimm3_23 (unsigned long long insn ATTRIBUTE_UNUSED,
759 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
760 const char **errmsg ATTRIBUTE_UNUSED)
761{
762
763 insn |= ((value >> 0) & 0x0007) << 6;
764
765 return insn;
766}
767#endif /* INSERT_UIMM3_23 */
768
769#ifndef EXTRACT_UIMM3_23
770#define EXTRACT_UIMM3_23
771/* mask = 00000000000000000000000111000000. */
bdfe53e3
AB
772static long long int
773extract_uimm3_23 (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 774 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
775{
776 unsigned value = 0;
777
778 value |= ((insn >> 6) & 0x0007) << 0;
779
780 return value;
781}
782#endif /* EXTRACT_UIMM3_23 */
783
784#ifndef INSERT_UIMM10_6_S
785#define INSERT_UIMM10_6_S
786/* mask = 0000001111111111
787 insn = 010111uuuuuuuuuu. */
bdfe53e3
AB
788static unsigned long long
789insert_uimm10_6_s (unsigned long long insn ATTRIBUTE_UNUSED,
790 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
791 const char **errmsg ATTRIBUTE_UNUSED)
792{
793
794 insn |= ((value >> 0) & 0x03ff) << 0;
795
796 return insn;
797}
798#endif /* INSERT_UIMM10_6_S */
799
800#ifndef EXTRACT_UIMM10_6_S
801#define EXTRACT_UIMM10_6_S
802/* mask = 0000001111111111. */
bdfe53e3
AB
803static long long int
804extract_uimm10_6_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 805 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
806{
807 unsigned value = 0;
808
809 value |= ((insn >> 0) & 0x03ff) << 0;
810
811 return value;
812}
813#endif /* EXTRACT_UIMM10_6_S */
814
815#ifndef INSERT_UIMM6_11_S
816#define INSERT_UIMM6_11_S
817/* mask = 0000002200011110
818 insn = 110000UU111uuuu0. */
bdfe53e3
AB
819static unsigned long long
820insert_uimm6_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
821 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
822 const char **errmsg ATTRIBUTE_UNUSED)
823{
824
825 insn |= ((value >> 0) & 0x000f) << 1;
826 insn |= ((value >> 4) & 0x0003) << 8;
827
828 return insn;
829}
830#endif /* INSERT_UIMM6_11_S */
831
832#ifndef EXTRACT_UIMM6_11_S
833#define EXTRACT_UIMM6_11_S
834/* mask = 0000002200011110. */
bdfe53e3
AB
835static long long int
836extract_uimm6_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 837 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
838{
839 unsigned value = 0;
840
841 value |= ((insn >> 1) & 0x000f) << 0;
842 value |= ((insn >> 8) & 0x0003) << 4;
843
844 return value;
845}
846#endif /* EXTRACT_UIMM6_11_S */
847
848#ifndef INSERT_SIMM9_8
849#define INSERT_SIMM9_8
850/* mask = 00000000111111112000000000000000
851 insn = 00010bbbssssssssSBBBDaaZZXAAAAAA. */
bdfe53e3
AB
852static unsigned long long
853insert_simm9_8 (unsigned long long insn ATTRIBUTE_UNUSED,
854 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
855 const char **errmsg ATTRIBUTE_UNUSED)
856{
857
858 insn |= ((value >> 0) & 0x00ff) << 16;
859 insn |= ((value >> 8) & 0x0001) << 15;
860
861 return insn;
862}
863#endif /* INSERT_SIMM9_8 */
864
865#ifndef EXTRACT_SIMM9_8
866#define EXTRACT_SIMM9_8
867/* mask = 00000000111111112000000000000000. */
bdfe53e3
AB
868static long long int
869extract_simm9_8 (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 870 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
871{
872 int value = 0;
873
874 value |= ((insn >> 16) & 0x00ff) << 0;
875 value |= ((insn >> 15) & 0x0001) << 8;
876
877 /* Extend the sign. */
878 int signbit = 1 << (9 - 1);
879 value = (value ^ signbit) - signbit;
880
881 return value;
882}
883#endif /* EXTRACT_SIMM9_8 */
884
885#ifndef INSERT_UIMM10_A32_8_S
886#define INSERT_UIMM10_A32_8_S
887/* mask = 0000000011111111
888 insn = 11010bbbuuuuuuuu. */
bdfe53e3
AB
889static unsigned long long
890insert_uimm10_a32_8_s (unsigned long long insn ATTRIBUTE_UNUSED,
891 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
892 const char **errmsg ATTRIBUTE_UNUSED)
893{
894 if (value & 0x03)
895 *errmsg = _("Target address is not 32bit aligned.");
896
897 insn |= ((value >> 2) & 0x00ff) << 0;
898
899 return insn;
900}
901#endif /* INSERT_UIMM10_A32_8_S */
902
903#ifndef EXTRACT_UIMM10_A32_8_S
904#define EXTRACT_UIMM10_A32_8_S
905/* mask = 0000000011111111. */
bdfe53e3
AB
906static long long int
907extract_uimm10_a32_8_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 908 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
909{
910 unsigned value = 0;
911
912 value |= ((insn >> 0) & 0x00ff) << 2;
913
914 return value;
915}
916#endif /* EXTRACT_UIMM10_A32_8_S */
917
918#ifndef INSERT_SIMM9_7_S
919#define INSERT_SIMM9_7_S
920/* mask = 0000000111111111
921 insn = 1100101sssssssss. */
bdfe53e3
AB
922static unsigned long long
923insert_simm9_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
924 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
925 const char **errmsg ATTRIBUTE_UNUSED)
926{
927
928 insn |= ((value >> 0) & 0x01ff) << 0;
929
930 return insn;
931}
932#endif /* INSERT_SIMM9_7_S */
933
934#ifndef EXTRACT_SIMM9_7_S
935#define EXTRACT_SIMM9_7_S
936/* mask = 0000000111111111. */
bdfe53e3
AB
937static long long int
938extract_simm9_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 939 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
940{
941 int value = 0;
942
943 value |= ((insn >> 0) & 0x01ff) << 0;
944
945 /* Extend the sign. */
946 int signbit = 1 << (9 - 1);
947 value = (value ^ signbit) - signbit;
948
949 return value;
950}
951#endif /* EXTRACT_SIMM9_7_S */
952
953#ifndef INSERT_UIMM6_A16_11_S
954#define INSERT_UIMM6_A16_11_S
955/* mask = 0000000000011111
956 insn = 10010bbbcccuuuuu. */
bdfe53e3
AB
957static unsigned long long
958insert_uimm6_a16_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
959 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
960 const char **errmsg ATTRIBUTE_UNUSED)
961{
962 if (value & 0x01)
963 *errmsg = _("Target address is not 16bit aligned.");
964
965 insn |= ((value >> 1) & 0x001f) << 0;
966
967 return insn;
968}
969#endif /* INSERT_UIMM6_A16_11_S */
970
971#ifndef EXTRACT_UIMM6_A16_11_S
972#define EXTRACT_UIMM6_A16_11_S
973/* mask = 0000000000011111. */
bdfe53e3
AB
974static long long int
975extract_uimm6_a16_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 976 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
977{
978 unsigned value = 0;
979
980 value |= ((insn >> 0) & 0x001f) << 1;
981
982 return value;
983}
984#endif /* EXTRACT_UIMM6_A16_11_S */
985
986#ifndef INSERT_UIMM5_A32_11_S
987#define INSERT_UIMM5_A32_11_S
988/* mask = 0000020000011000
989 insn = 01000U00hhhuu1HH. */
bdfe53e3
AB
990static unsigned long long
991insert_uimm5_a32_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
992 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
993 const char **errmsg ATTRIBUTE_UNUSED)
994{
995 if (value & 0x03)
996 *errmsg = _("Target address is not 32bit aligned.");
997
998 insn |= ((value >> 2) & 0x0003) << 3;
999 insn |= ((value >> 4) & 0x0001) << 10;
1000
1001 return insn;
1002}
1003#endif /* INSERT_UIMM5_A32_11_S */
1004
1005#ifndef EXTRACT_UIMM5_A32_11_S
1006#define EXTRACT_UIMM5_A32_11_S
1007/* mask = 0000020000011000. */
bdfe53e3
AB
1008static long long int
1009extract_uimm5_a32_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 1010 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
1011{
1012 unsigned value = 0;
1013
1014 value |= ((insn >> 3) & 0x0003) << 2;
1015 value |= ((insn >> 10) & 0x0001) << 4;
1016
1017 return value;
1018}
1019#endif /* EXTRACT_UIMM5_A32_11_S */
1020
1021#ifndef INSERT_SIMM11_A32_13_S
1022#define INSERT_SIMM11_A32_13_S
1023/* mask = 0000022222200111
1024 insn = 01010SSSSSS00sss. */
bdfe53e3
AB
1025static unsigned long long
1026insert_simm11_a32_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
1027 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
1028 const char **errmsg ATTRIBUTE_UNUSED)
1029{
1030 if (value & 0x03)
1031 *errmsg = _("Target address is not 32bit aligned.");
1032
1033 insn |= ((value >> 2) & 0x0007) << 0;
1034 insn |= ((value >> 5) & 0x003f) << 5;
1035
1036 return insn;
1037}
1038#endif /* INSERT_SIMM11_A32_13_S */
1039
1040#ifndef EXTRACT_SIMM11_A32_13_S
1041#define EXTRACT_SIMM11_A32_13_S
1042/* mask = 0000022222200111. */
bdfe53e3
AB
1043static long long int
1044extract_simm11_a32_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 1045 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
1046{
1047 int value = 0;
1048
1049 value |= ((insn >> 0) & 0x0007) << 2;
1050 value |= ((insn >> 5) & 0x003f) << 5;
1051
1052 /* Extend the sign. */
1053 int signbit = 1 << (11 - 1);
1054 value = (value ^ signbit) - signbit;
1055
1056 return value;
1057}
1058#endif /* EXTRACT_SIMM11_A32_13_S */
1059
1060#ifndef INSERT_UIMM7_13_S
1061#define INSERT_UIMM7_13_S
1062/* mask = 0000000022220111
1063 insn = 01010bbbUUUU1uuu. */
bdfe53e3
AB
1064static unsigned long long
1065insert_uimm7_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
1066 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
1067 const char **errmsg ATTRIBUTE_UNUSED)
1068{
1069
1070 insn |= ((value >> 0) & 0x0007) << 0;
1071 insn |= ((value >> 3) & 0x000f) << 4;
1072
1073 return insn;
1074}
1075#endif /* INSERT_UIMM7_13_S */
1076
1077#ifndef EXTRACT_UIMM7_13_S
1078#define EXTRACT_UIMM7_13_S
1079/* mask = 0000000022220111. */
bdfe53e3
AB
1080static long long int
1081extract_uimm7_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 1082 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
1083{
1084 unsigned value = 0;
1085
1086 value |= ((insn >> 0) & 0x0007) << 0;
1087 value |= ((insn >> 4) & 0x000f) << 3;
1088
1089 return value;
1090}
1091#endif /* EXTRACT_UIMM7_13_S */
1092
1093#ifndef INSERT_UIMM6_A16_21
1094#define INSERT_UIMM6_A16_21
1095/* mask = 00000000000000000000011111000000
1096 insn = 00101bbb01001100RBBBRuuuuuAAAAAA. */
bdfe53e3
AB
1097static unsigned long long
1098insert_uimm6_a16_21 (unsigned long long insn ATTRIBUTE_UNUSED,
1099 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
1100 const char **errmsg ATTRIBUTE_UNUSED)
1101{
1102 if (value & 0x01)
1103 *errmsg = _("Target address is not 16bit aligned.");
1104
1105 insn |= ((value >> 1) & 0x001f) << 6;
1106
1107 return insn;
1108}
1109#endif /* INSERT_UIMM6_A16_21 */
1110
1111#ifndef EXTRACT_UIMM6_A16_21
1112#define EXTRACT_UIMM6_A16_21
1113/* mask = 00000000000000000000011111000000. */
bdfe53e3
AB
1114static long long int
1115extract_uimm6_a16_21 (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 1116 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
1117{
1118 unsigned value = 0;
1119
1120 value |= ((insn >> 6) & 0x001f) << 1;
1121
1122 return value;
1123}
1124#endif /* EXTRACT_UIMM6_A16_21 */
1125
1126#ifndef INSERT_UIMM7_11_S
1127#define INSERT_UIMM7_11_S
1128/* mask = 0000022200011110
1129 insn = 11000UUU110uuuu0. */
bdfe53e3
AB
1130static unsigned long long
1131insert_uimm7_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
1132 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
1133 const char **errmsg ATTRIBUTE_UNUSED)
1134{
1135
1136 insn |= ((value >> 0) & 0x000f) << 1;
1137 insn |= ((value >> 4) & 0x0007) << 8;
1138
1139 return insn;
1140}
1141#endif /* INSERT_UIMM7_11_S */
1142
1143#ifndef EXTRACT_UIMM7_11_S
1144#define EXTRACT_UIMM7_11_S
1145/* mask = 0000022200011110. */
bdfe53e3
AB
1146static long long int
1147extract_uimm7_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 1148 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
1149{
1150 unsigned value = 0;
1151
1152 value |= ((insn >> 1) & 0x000f) << 0;
1153 value |= ((insn >> 8) & 0x0007) << 4;
1154
1155 return value;
1156}
1157#endif /* EXTRACT_UIMM7_11_S */
1158
1159#ifndef INSERT_UIMM7_A16_20
1160#define INSERT_UIMM7_A16_20
1161/* mask = 00000000000000000000111111000000
1162 insn = 00100RRR111010000RRRuuuuuu1QQQQQ. */
bdfe53e3
AB
1163static unsigned long long
1164insert_uimm7_a16_20 (unsigned long long insn ATTRIBUTE_UNUSED,
1165 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
1166 const char **errmsg ATTRIBUTE_UNUSED)
1167{
1168 if (value & 0x01)
1169 *errmsg = _("Target address is not 16bit aligned.");
1170
1171 insn |= ((value >> 1) & 0x003f) << 6;
1172
1173 return insn;
1174}
1175#endif /* INSERT_UIMM7_A16_20 */
1176
1177#ifndef EXTRACT_UIMM7_A16_20
1178#define EXTRACT_UIMM7_A16_20
1179/* mask = 00000000000000000000111111000000. */
bdfe53e3
AB
1180static long long int
1181extract_uimm7_a16_20 (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 1182 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
1183{
1184 unsigned value = 0;
1185
1186 value |= ((insn >> 6) & 0x003f) << 1;
1187
1188 return value;
1189}
1190#endif /* EXTRACT_UIMM7_A16_20 */
1191
1192#ifndef INSERT_SIMM13_A16_20
1193#define INSERT_SIMM13_A16_20
1194/* mask = 00000000000000000000111111222222
1195 insn = 00100RRR101010000RRRssssssSSSSSS. */
bdfe53e3
AB
1196static unsigned long long
1197insert_simm13_a16_20 (unsigned long long insn ATTRIBUTE_UNUSED,
1198 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
1199 const char **errmsg ATTRIBUTE_UNUSED)
1200{
1201 if (value & 0x01)
1202 *errmsg = _("Target address is not 16bit aligned.");
1203
1204 insn |= ((value >> 1) & 0x003f) << 6;
1205 insn |= ((value >> 7) & 0x003f) << 0;
1206
1207 return insn;
1208}
1209#endif /* INSERT_SIMM13_A16_20 */
1210
1211#ifndef EXTRACT_SIMM13_A16_20
1212#define EXTRACT_SIMM13_A16_20
1213/* mask = 00000000000000000000111111222222. */
bdfe53e3
AB
1214static long long int
1215extract_simm13_a16_20 (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 1216 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
1217{
1218 int value = 0;
1219
1220 value |= ((insn >> 6) & 0x003f) << 1;
1221 value |= ((insn >> 0) & 0x003f) << 7;
1222
1223 /* Extend the sign. */
1224 int signbit = 1 << (13 - 1);
1225 value = (value ^ signbit) - signbit;
1226
1227 return value;
1228}
1229#endif /* EXTRACT_SIMM13_A16_20 */
1230
1231#ifndef INSERT_UIMM8_8_S
1232#define INSERT_UIMM8_8_S
1233/* mask = 0000000011111111
1234 insn = 11011bbbuuuuuuuu. */
bdfe53e3
AB
1235static unsigned long long
1236insert_uimm8_8_s (unsigned long long insn ATTRIBUTE_UNUSED,
1237 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
1238 const char **errmsg ATTRIBUTE_UNUSED)
1239{
1240
1241 insn |= ((value >> 0) & 0x00ff) << 0;
1242
1243 return insn;
1244}
1245#endif /* INSERT_UIMM8_8_S */
1246
1247#ifndef EXTRACT_UIMM8_8_S
1248#define EXTRACT_UIMM8_8_S
1249/* mask = 0000000011111111. */
bdfe53e3
AB
1250static long long int
1251extract_uimm8_8_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 1252 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
1253{
1254 unsigned value = 0;
1255
1256 value |= ((insn >> 0) & 0x00ff) << 0;
1257
1258 return value;
1259}
1260#endif /* EXTRACT_UIMM8_8_S */
1261
1262#ifndef INSERT_UIMM6_5_S
1263#define INSERT_UIMM6_5_S
1264/* mask = 0000011111100000
1265 insn = 01111uuuuuu11111. */
bdfe53e3
AB
1266static unsigned long long
1267insert_uimm6_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
1268 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
1269 const char **errmsg ATTRIBUTE_UNUSED)
1270{
1271
1272 insn |= ((value >> 0) & 0x003f) << 5;
1273
1274 return insn;
1275}
1276#endif /* INSERT_UIMM6_5_S */
1277
1278#ifndef EXTRACT_UIMM6_5_S
1279#define EXTRACT_UIMM6_5_S
1280/* mask = 0000011111100000. */
bdfe53e3
AB
1281static long long int
1282extract_uimm6_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 1283 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
1284{
1285 unsigned value = 0;
1286
1287 value |= ((insn >> 5) & 0x003f) << 0;
1288
1289 return value;
1290}
1291#endif /* EXTRACT_UIMM6_5_S */
1292
1293#ifndef INSERT_UIMM6_AXX_
1294#define INSERT_UIMM6_AXX_
1295/* mask = 00000000000000000000000000000000
1296 insn = 00110bbb11100001100001100001QQQQ. */
1297static ATTRIBUTE_UNUSED unsigned
bdfe53e3
AB
1298insert_uimm6_axx_ (unsigned long long insn ATTRIBUTE_UNUSED,
1299 long long int value ATTRIBUTE_UNUSED,
886a2506
NC
1300 const char **errmsg ATTRIBUTE_UNUSED)
1301{
1302 if (value & 0x3f)
1303 *errmsg = _("Target address is not 512bit aligned.");
1304
1305 return insn;
1306}
1307#endif /* INSERT_UIMM6_AXX_ */
1308
1309#ifndef EXTRACT_UIMM6_AXX_
1310#define EXTRACT_UIMM6_AXX_
1311/* mask = 00000000000000000000000000000000. */
1312static ATTRIBUTE_UNUSED int
bdfe53e3 1313extract_uimm6_axx_ (unsigned long long insn ATTRIBUTE_UNUSED,
78933a4a 1314 bool *invalid ATTRIBUTE_UNUSED)
886a2506
NC
1315{
1316 unsigned value = 0;
1317
1318 return value;
1319}
1320#endif /* EXTRACT_UIMM6_AXX_ */
This page took 0.363523 seconds and 4 git commands to generate.