Coverage Report

Created: 2025-06-24 06:45

/src/binutils-gdb/opcodes/arc-fxi.h
Line
Count
Source (jump to first uncovered line)
1
/* Insert/extract functions for the ARC opcodes.
2
   Copyright (C) 2015-2025 Free Software Foundation, Inc.
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.  */
26
static unsigned long long
27
insert_limm (unsigned long long insn ATTRIBUTE_UNUSED,
28
       long long int value ATTRIBUTE_UNUSED,
29
       const char **errmsg ATTRIBUTE_UNUSED)
30
0
{
31
32
0
  return insn;
33
0
}
34
#endif /* INSERT_LIMM */
35
36
#ifndef EXTRACT_LIMM
37
#define EXTRACT_LIMM
38
/* mask = 00000000000000000000000000000000.  */
39
static ATTRIBUTE_UNUSED int
40
extract_limm (unsigned long long insn ATTRIBUTE_UNUSED,
41
        bool *invalid ATTRIBUTE_UNUSED)
42
0
{
43
0
  unsigned value = 0;
44
0
45
0
  return value;
46
0
}
47
#endif /* EXTRACT_LIMM */
48
49
#ifndef INSERT_UIMM6_20
50
#define INSERT_UIMM6_20
51
/* mask = 00000000000000000000111111000000
52
   insn = 00100bbb01101111FBBBuuuuuu001001.  */
53
static unsigned long long
54
insert_uimm6_20 (unsigned long long insn ATTRIBUTE_UNUSED,
55
     long long int value ATTRIBUTE_UNUSED,
56
     const char **errmsg ATTRIBUTE_UNUSED)
57
0
{
58
59
0
  insn |= ((value >> 0) & 0x003f) << 6;
60
61
0
  return insn;
62
0
}
63
#endif /* INSERT_UIMM6_20 */
64
65
#ifndef EXTRACT_UIMM6_20
66
#define EXTRACT_UIMM6_20
67
/* mask = 00000000000000000000111111000000.  */
68
static long long int
69
extract_uimm6_20 (unsigned long long insn ATTRIBUTE_UNUSED,
70
      bool *invalid ATTRIBUTE_UNUSED)
71
19.6k
{
72
19.6k
  unsigned value = 0;
73
74
19.6k
  value |= ((insn >> 6) & 0x003f) << 0;
75
76
19.6k
  return value;
77
19.6k
}
78
#endif /* EXTRACT_UIMM6_20 */
79
80
#ifndef INSERT_SIMM12_20
81
#define INSERT_SIMM12_20
82
/* mask = 00000000000000000000111111222222
83
   insn = 00110bbb10101000FBBBssssssSSSSSS.  */
84
static unsigned long long
85
insert_simm12_20 (unsigned long long insn ATTRIBUTE_UNUSED,
86
      long long int value ATTRIBUTE_UNUSED,
87
      const char **errmsg ATTRIBUTE_UNUSED)
88
0
{
89
90
0
  insn |= ((value >> 0) & 0x003f) << 6;
91
0
  insn |= ((value >> 6) & 0x003f) << 0;
92
93
0
  return insn;
94
0
}
95
#endif /* INSERT_SIMM12_20 */
96
97
#ifndef EXTRACT_SIMM12_20
98
#define EXTRACT_SIMM12_20
99
/* mask = 00000000000000000000111111222222.  */
100
static long long int
101
extract_simm12_20 (unsigned long long insn ATTRIBUTE_UNUSED,
102
       bool *invalid ATTRIBUTE_UNUSED)
103
11.0k
{
104
11.0k
  int value = 0;
105
106
11.0k
  value |= ((insn >> 6) & 0x003f) << 0;
107
11.0k
  value |= ((insn >> 0) & 0x003f) << 6;
108
109
  /* Extend the sign.  */
110
11.0k
  int signbit = 1 << (12 - 1);
111
11.0k
  value = (value ^ signbit) - signbit;
112
113
11.0k
  return value;
114
11.0k
}
115
#endif /* EXTRACT_SIMM12_20 */
116
117
#ifndef INSERT_SIMM3_5_S
118
#define INSERT_SIMM3_5_S
119
/* mask = 0000011100000000
120
   insn = 01110ssshhh001HH.  */
121
static ATTRIBUTE_UNUSED unsigned
122
insert_simm3_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
123
      long long int value ATTRIBUTE_UNUSED,
124
      const char **errmsg ATTRIBUTE_UNUSED)
125
0
{
126
0
127
0
  insn |= ((value >> 0) & 0x0007) << 8;
128
0
129
0
  return insn;
130
0
}
131
#endif /* INSERT_SIMM3_5_S */
132
133
#ifndef EXTRACT_SIMM3_5_S
134
#define EXTRACT_SIMM3_5_S
135
/* mask = 0000011100000000.  */
136
static ATTRIBUTE_UNUSED int
137
extract_simm3_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
138
       bool *invalid ATTRIBUTE_UNUSED)
139
0
{
140
0
  int value = 0;
141
0
142
0
  value |= ((insn >> 8) & 0x0007) << 0;
143
0
144
0
  /* Extend the sign.  */
145
0
  int signbit = 1 << (3 - 1);
146
0
  value = (value ^ signbit) - signbit;
147
0
148
0
  return value;
149
0
}
150
#endif /* EXTRACT_SIMM3_5_S */
151
152
#ifndef INSERT_LIMM_S
153
#define INSERT_LIMM_S
154
/* mask = 0000000000000000
155
   insn = 01110sss11000111.  */
156
static ATTRIBUTE_UNUSED unsigned
157
insert_limm_s (unsigned long long insn ATTRIBUTE_UNUSED,
158
         long long int value ATTRIBUTE_UNUSED,
159
         const char **errmsg ATTRIBUTE_UNUSED)
160
0
{
161
0
162
0
  return insn;
163
0
}
164
#endif /* INSERT_LIMM_S */
165
166
#ifndef EXTRACT_LIMM_S
167
#define EXTRACT_LIMM_S
168
/* mask = 0000000000000000.  */
169
static ATTRIBUTE_UNUSED int
170
extract_limm_s (unsigned long long insn ATTRIBUTE_UNUSED,
171
    bool *invalid ATTRIBUTE_UNUSED)
172
0
{
173
0
  unsigned value = 0;
174
0
175
0
  return value;
176
0
}
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.  */
183
static unsigned long long
184
insert_uimm7_a32_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
185
           long long int value ATTRIBUTE_UNUSED,
186
           const char **errmsg ATTRIBUTE_UNUSED)
187
0
{
188
0
  if (value & 0x03)
189
0
    *errmsg = _("Target address is not 32bit aligned.");
190
191
0
  insn |= ((value >> 2) & 0x001f) << 0;
192
193
0
  return insn;
194
0
}
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.  */
200
static long long int
201
extract_uimm7_a32_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
202
      bool *invalid ATTRIBUTE_UNUSED)
203
69.5k
{
204
69.5k
  unsigned value = 0;
205
206
69.5k
  value |= ((insn >> 0) & 0x001f) << 2;
207
208
69.5k
  return value;
209
69.5k
}
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.  */
216
static unsigned long long
217
insert_uimm7_9_s (unsigned long long insn ATTRIBUTE_UNUSED,
218
      long long int value ATTRIBUTE_UNUSED,
219
      const char **errmsg ATTRIBUTE_UNUSED)
220
0
{
221
222
0
  insn |= ((value >> 0) & 0x007f) << 0;
223
224
0
  return insn;
225
0
}
226
#endif /* INSERT_UIMM7_9_S */
227
228
#ifndef EXTRACT_UIMM7_9_S
229
#define EXTRACT_UIMM7_9_S
230
/* mask = 0000000001111111.  */
231
static long long int
232
extract_uimm7_9_s (unsigned long long insn ATTRIBUTE_UNUSED,
233
       bool *invalid ATTRIBUTE_UNUSED)
234
23.0k
{
235
23.0k
  unsigned value = 0;
236
237
23.0k
  value |= ((insn >> 0) & 0x007f) << 0;
238
239
23.0k
  return value;
240
23.0k
}
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.  */
247
static unsigned long long
248
insert_uimm3_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
249
       long long int value ATTRIBUTE_UNUSED,
250
       const char **errmsg ATTRIBUTE_UNUSED)
251
0
{
252
253
0
  insn |= ((value >> 0) & 0x0007) << 0;
254
255
0
  return insn;
256
0
}
257
#endif /* INSERT_UIMM3_13_S */
258
259
#ifndef EXTRACT_UIMM3_13_S
260
#define EXTRACT_UIMM3_13_S
261
/* mask = 0000000000000111.  */
262
static long long int
263
extract_uimm3_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
264
        bool *invalid ATTRIBUTE_UNUSED)
265
30.6k
{
266
30.6k
  unsigned value = 0;
267
268
30.6k
  value |= ((insn >> 0) & 0x0007) << 0;
269
270
30.6k
  return value;
271
30.6k
}
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.  */
278
static unsigned long long
279
insert_simm11_a32_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
280
           long long int value ATTRIBUTE_UNUSED,
281
           const char **errmsg ATTRIBUTE_UNUSED)
282
0
{
283
0
  if (value & 0x03)
284
0
    *errmsg = _("Target address is not 32bit aligned.");
285
286
0
  insn |= ((value >> 2) & 0x01ff) << 0;
287
288
0
  return insn;
289
0
}
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.  */
295
static long long int
296
extract_simm11_a32_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
297
      bool *invalid ATTRIBUTE_UNUSED)
298
12.9k
{
299
12.9k
  int value = 0;
300
301
12.9k
  value |= ((insn >> 0) & 0x01ff) << 2;
302
303
  /* Extend the sign.  */
304
12.9k
  int signbit = 1 << (11 - 1);
305
12.9k
  value = (value ^ signbit) - signbit;
306
307
12.9k
  return value;
308
12.9k
}
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.  */
315
static unsigned long long
316
insert_uimm6_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
317
       long long int value ATTRIBUTE_UNUSED,
318
       const char **errmsg ATTRIBUTE_UNUSED)
319
0
{
320
321
0
  insn |= ((value >> 0) & 0x0007) << 0;
322
0
  insn |= ((value >> 3) & 0x0007) << 4;
323
324
0
  return insn;
325
0
}
326
#endif /* INSERT_UIMM6_13_S */
327
328
#ifndef EXTRACT_UIMM6_13_S
329
#define EXTRACT_UIMM6_13_S
330
/* mask = 0000000002220111.  */
331
static long long int
332
extract_uimm6_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
333
        bool *invalid ATTRIBUTE_UNUSED)
334
9.30k
{
335
9.30k
  unsigned value = 0;
336
337
9.30k
  value |= ((insn >> 0) & 0x0007) << 0;
338
9.30k
  value |= ((insn >> 4) & 0x0007) << 3;
339
340
9.30k
  return value;
341
9.30k
}
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.  */
348
static unsigned long long
349
insert_uimm5_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
350
       long long int value ATTRIBUTE_UNUSED,
351
       const char **errmsg ATTRIBUTE_UNUSED)
352
0
{
353
354
0
  insn |= ((value >> 0) & 0x001f) << 0;
355
356
0
  return insn;
357
0
}
358
#endif /* INSERT_UIMM5_11_S */
359
360
#ifndef EXTRACT_UIMM5_11_S
361
#define EXTRACT_UIMM5_11_S
362
/* mask = 0000000000011111.  */
363
static long long int
364
extract_uimm5_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
365
        bool *invalid ATTRIBUTE_UNUSED)
366
60.2k
{
367
60.2k
  unsigned value = 0;
368
369
60.2k
  value |= ((insn >> 0) & 0x001f) << 0;
370
371
60.2k
  return value;
372
60.2k
}
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.  */
379
static unsigned long long
380
insert_simm9_a16_8 (unsigned long long insn ATTRIBUTE_UNUSED,
381
        long long int value ATTRIBUTE_UNUSED,
382
        const char **errmsg ATTRIBUTE_UNUSED)
383
0
{
384
0
  if (value & 0x01)
385
0
    *errmsg = _("Target address is not 16bit aligned.");
386
387
0
  insn |= ((value >> 1) & 0x007f) << 17;
388
0
  insn |= ((value >> 8) & 0x0001) << 15;
389
390
0
  return insn;
391
0
}
392
#endif /* INSERT_SIMM9_A16_8 */
393
394
#ifndef EXTRACT_SIMM9_A16_8
395
#define EXTRACT_SIMM9_A16_8
396
/* mask = 00000000111111102000000000000000.  */
397
static long long int
398
extract_simm9_a16_8 (unsigned long long insn ATTRIBUTE_UNUSED,
399
         bool *invalid ATTRIBUTE_UNUSED)
400
13.2k
{
401
13.2k
  int value = 0;
402
403
13.2k
  value |= ((insn >> 17) & 0x007f) << 1;
404
13.2k
  value |= ((insn >> 15) & 0x0001) << 8;
405
406
  /* Extend the sign.  */
407
13.2k
  int signbit = 1 << (9 - 1);
408
13.2k
  value = (value ^ signbit) - signbit;
409
410
13.2k
  return value;
411
13.2k
}
412
#endif /* EXTRACT_SIMM9_A16_8 */
413
414
#ifndef INSERT_UIMM6_8
415
#define INSERT_UIMM6_8
416
/* mask = 00000000000000000000111111000000
417
   insn = 00001bbbsssssss1SBBBuuuuuuN11110.  */
418
static unsigned long long
419
insert_uimm6_8 (unsigned long long insn ATTRIBUTE_UNUSED,
420
    long long int value ATTRIBUTE_UNUSED,
421
    const char **errmsg ATTRIBUTE_UNUSED)
422
0
{
423
424
0
  insn |= ((value >> 0) & 0x003f) << 6;
425
426
0
  return insn;
427
0
}
428
#endif /* INSERT_UIMM6_8 */
429
430
#ifndef EXTRACT_UIMM6_8
431
#define EXTRACT_UIMM6_8
432
/* mask = 00000000000000000000111111000000.  */
433
static long long int
434
extract_uimm6_8 (unsigned long long insn ATTRIBUTE_UNUSED,
435
     bool *invalid ATTRIBUTE_UNUSED)
436
4.52k
{
437
4.52k
  unsigned value = 0;
438
439
4.52k
  value |= ((insn >> 6) & 0x003f) << 0;
440
441
4.52k
  return value;
442
4.52k
}
443
#endif /* EXTRACT_UIMM6_8 */
444
445
#ifndef INSERT_SIMM21_A16_5
446
#define INSERT_SIMM21_A16_5
447
/* mask = 00000111111111102222222222000000
448
   insn = 00000ssssssssss0SSSSSSSSSSNQQQQQ.  */
449
static unsigned long long
450
insert_simm21_a16_5 (unsigned long long insn ATTRIBUTE_UNUSED,
451
         long long int value ATTRIBUTE_UNUSED,
452
         const char **errmsg ATTRIBUTE_UNUSED)
453
0
{
454
0
  if (value & 0x01)
455
0
    *errmsg = _("Target address is not 16bit aligned.");
456
457
0
  insn |= ((value >> 1) & 0x03ff) << 17;
458
0
  insn |= ((value >> 11) & 0x03ff) << 6;
459
460
0
  return insn;
461
0
}
462
#endif /* INSERT_SIMM21_A16_5 */
463
464
#ifndef EXTRACT_SIMM21_A16_5
465
#define EXTRACT_SIMM21_A16_5
466
/* mask = 00000111111111102222222222000000.  */
467
static long long int
468
extract_simm21_a16_5 (unsigned long long insn ATTRIBUTE_UNUSED,
469
          bool *invalid ATTRIBUTE_UNUSED)
470
119k
{
471
119k
  int value = 0;
472
473
119k
  value |= ((insn >> 17) & 0x03ff) << 1;
474
119k
  value |= ((insn >> 6) & 0x03ff) << 11;
475
476
  /* Extend the sign.  */
477
119k
  int signbit = 1 << (21 - 1);
478
119k
  value = (value ^ signbit) - signbit;
479
480
119k
  return value;
481
119k
}
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.  */
488
static unsigned long long
489
insert_simm25_a16_5 (unsigned long long insn ATTRIBUTE_UNUSED,
490
         long long int value ATTRIBUTE_UNUSED,
491
         const char **errmsg ATTRIBUTE_UNUSED)
492
0
{
493
0
  if (value & 0x01)
494
0
    *errmsg = _("Target address is not 16bit aligned.");
495
496
0
  insn |= ((value >> 1) & 0x03ff) << 17;
497
0
  insn |= ((value >> 11) & 0x03ff) << 6;
498
0
  insn |= ((value >> 21) & 0x000f) << 0;
499
500
0
  return insn;
501
0
}
502
#endif /* INSERT_SIMM25_A16_5 */
503
504
#ifndef EXTRACT_SIMM25_A16_5
505
#define EXTRACT_SIMM25_A16_5
506
/* mask = 00000111111111102222222222003333.  */
507
static long long int
508
extract_simm25_a16_5 (unsigned long long insn ATTRIBUTE_UNUSED,
509
          bool *invalid ATTRIBUTE_UNUSED)
510
50.8k
{
511
50.8k
  int value = 0;
512
513
50.8k
  value |= ((insn >> 17) & 0x03ff) << 1;
514
50.8k
  value |= ((insn >> 6) & 0x03ff) << 11;
515
50.8k
  value |= ((insn >> 0) & 0x000f) << 21;
516
517
  /* Extend the sign.  */
518
50.8k
  int signbit = 1 << (25 - 1);
519
50.8k
  value = (value ^ signbit) - signbit;
520
521
50.8k
  return value;
522
50.8k
}
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.  */
529
static unsigned long long
530
insert_simm10_a16_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
531
           long long int value ATTRIBUTE_UNUSED,
532
           const char **errmsg ATTRIBUTE_UNUSED)
533
0
{
534
0
  if (value & 0x01)
535
0
    *errmsg = _("Target address is not 16bit aligned.");
536
537
0
  insn |= ((value >> 1) & 0x01ff) << 0;
538
539
0
  return insn;
540
0
}
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.  */
546
static long long int
547
extract_simm10_a16_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
548
      bool *invalid ATTRIBUTE_UNUSED)
549
28.3k
{
550
28.3k
  int value = 0;
551
552
28.3k
  value |= ((insn >> 0) & 0x01ff) << 1;
553
554
  /* Extend the sign.  */
555
28.3k
  int signbit = 1 << (10 - 1);
556
28.3k
  value = (value ^ signbit) - signbit;
557
558
28.3k
  return value;
559
28.3k
}
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.  */
566
static unsigned long long
567
insert_simm7_a16_10_s (unsigned long long insn ATTRIBUTE_UNUSED,
568
           long long int value ATTRIBUTE_UNUSED,
569
           const char **errmsg ATTRIBUTE_UNUSED)
570
0
{
571
0
  if (value & 0x01)
572
0
    *errmsg = _("Target address is not 16bit aligned.");
573
574
0
  insn |= ((value >> 1) & 0x003f) << 0;
575
576
0
  return insn;
577
0
}
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.  */
583
static long long int
584
extract_simm7_a16_10_s (unsigned long long insn ATTRIBUTE_UNUSED,
585
      bool *invalid ATTRIBUTE_UNUSED)
586
5.95k
{
587
5.95k
  int value = 0;
588
589
5.95k
  value |= ((insn >> 0) & 0x003f) << 1;
590
591
  /* Extend the sign.  */
592
5.95k
  int signbit = 1 << (7 - 1);
593
5.95k
  value = (value ^ signbit) - signbit;
594
595
5.95k
  return value;
596
5.95k
}
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.  */
603
static unsigned long long
604
insert_simm21_a32_5 (unsigned long long insn ATTRIBUTE_UNUSED,
605
         long long int value ATTRIBUTE_UNUSED,
606
         const char **errmsg ATTRIBUTE_UNUSED)
607
0
{
608
0
  if (value & 0x03)
609
0
    *errmsg = _("Target address is not 32bit aligned.");
610
611
0
  insn |= ((value >> 2) & 0x01ff) << 18;
612
0
  insn |= ((value >> 11) & 0x03ff) << 6;
613
614
0
  return insn;
615
0
}
616
#endif /* INSERT_SIMM21_A32_5 */
617
618
#ifndef EXTRACT_SIMM21_A32_5
619
#define EXTRACT_SIMM21_A32_5
620
/* mask = 00000111111111002222222222000000.  */
621
static long long int
622
extract_simm21_a32_5 (unsigned long long insn ATTRIBUTE_UNUSED,
623
          bool *invalid ATTRIBUTE_UNUSED)
624
9.39k
{
625
9.39k
  int value = 0;
626
627
9.39k
  value |= ((insn >> 18) & 0x01ff) << 2;
628
9.39k
  value |= ((insn >> 6) & 0x03ff) << 11;
629
630
  /* Extend the sign.  */
631
9.39k
  int signbit = 1 << (21 - 1);
632
9.39k
  value = (value ^ signbit) - signbit;
633
634
9.39k
  return value;
635
9.39k
}
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.  */
642
static unsigned long long
643
insert_simm25_a32_5 (unsigned long long insn ATTRIBUTE_UNUSED,
644
         long long int value ATTRIBUTE_UNUSED,
645
         const char **errmsg ATTRIBUTE_UNUSED)
646
0
{
647
0
  if (value & 0x03)
648
0
    *errmsg = _("Target address is not 32bit aligned.");
649
650
0
  insn |= ((value >> 2) & 0x01ff) << 18;
651
0
  insn |= ((value >> 11) & 0x03ff) << 6;
652
0
  insn |= ((value >> 21) & 0x000f) << 0;
653
654
0
  return insn;
655
0
}
656
#endif /* INSERT_SIMM25_A32_5 */
657
658
#ifndef EXTRACT_SIMM25_A32_5
659
#define EXTRACT_SIMM25_A32_5
660
/* mask = 00000111111111002222222222003333.  */
661
static long long int
662
extract_simm25_a32_5 (unsigned long long insn ATTRIBUTE_UNUSED,
663
          bool *invalid ATTRIBUTE_UNUSED)
664
5.41k
{
665
5.41k
  int value = 0;
666
667
5.41k
  value |= ((insn >> 18) & 0x01ff) << 2;
668
5.41k
  value |= ((insn >> 6) & 0x03ff) << 11;
669
5.41k
  value |= ((insn >> 0) & 0x000f) << 21;
670
671
  /* Extend the sign.  */
672
5.41k
  int signbit = 1 << (25 - 1);
673
5.41k
  value = (value ^ signbit) - signbit;
674
675
5.41k
  return value;
676
5.41k
}
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.  */
683
static unsigned long long
684
insert_simm13_a32_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
685
           long long int value ATTRIBUTE_UNUSED,
686
           const char **errmsg ATTRIBUTE_UNUSED)
687
0
{
688
0
  if (value & 0x03)
689
0
    *errmsg = _("Target address is not 32bit aligned.");
690
691
0
  insn |= ((value >> 2) & 0x07ff) << 0;
692
693
0
  return insn;
694
0
}
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.  */
700
static long long int
701
extract_simm13_a32_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
702
      bool *invalid ATTRIBUTE_UNUSED)
703
121k
{
704
121k
  int value = 0;
705
706
121k
  value |= ((insn >> 0) & 0x07ff) << 2;
707
708
  /* Extend the sign.  */
709
121k
  int signbit = 1 << (13 - 1);
710
121k
  value = (value ^ signbit) - signbit;
711
712
121k
  return value;
713
121k
}
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.  */
720
static unsigned long long
721
insert_simm8_a16_9_s (unsigned long long insn ATTRIBUTE_UNUSED,
722
          long long int value ATTRIBUTE_UNUSED,
723
          const char **errmsg ATTRIBUTE_UNUSED)
724
0
{
725
0
  if (value & 0x01)
726
0
    *errmsg = _("Target address is not 16bit aligned.");
727
728
0
  insn |= ((value >> 1) & 0x007f) << 0;
729
730
0
  return insn;
731
0
}
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.  */
737
static long long int
738
extract_simm8_a16_9_s (unsigned long long insn ATTRIBUTE_UNUSED,
739
           bool *invalid ATTRIBUTE_UNUSED)
740
34.0k
{
741
34.0k
  int value = 0;
742
743
34.0k
  value |= ((insn >> 0) & 0x007f) << 1;
744
745
  /* Extend the sign.  */
746
34.0k
  int signbit = 1 << (8 - 1);
747
34.0k
  value = (value ^ signbit) - signbit;
748
749
34.0k
  return value;
750
34.0k
}
751
#endif /* EXTRACT_SIMM8_A16_9_S */
752
753
#ifndef INSERT_UIMM3_23
754
#define INSERT_UIMM3_23
755
/* mask = 00000000000000000000000111000000
756
   insn = 00100011011011110001RRRuuu111111.  */
757
static unsigned long long
758
insert_uimm3_23 (unsigned long long insn ATTRIBUTE_UNUSED,
759
     long long int value ATTRIBUTE_UNUSED,
760
     const char **errmsg ATTRIBUTE_UNUSED)
761
0
{
762
763
0
  insn |= ((value >> 0) & 0x0007) << 6;
764
765
0
  return insn;
766
0
}
767
#endif /* INSERT_UIMM3_23 */
768
769
#ifndef EXTRACT_UIMM3_23
770
#define EXTRACT_UIMM3_23
771
/* mask = 00000000000000000000000111000000.  */
772
static long long int
773
extract_uimm3_23 (unsigned long long insn ATTRIBUTE_UNUSED,
774
      bool *invalid ATTRIBUTE_UNUSED)
775
2.52k
{
776
2.52k
  unsigned value = 0;
777
778
2.52k
  value |= ((insn >> 6) & 0x0007) << 0;
779
780
2.52k
  return value;
781
2.52k
}
782
#endif /* EXTRACT_UIMM3_23 */
783
784
#ifndef INSERT_UIMM10_6_S
785
#define INSERT_UIMM10_6_S
786
/* mask = 0000001111111111
787
   insn = 010111uuuuuuuuuu.  */
788
static unsigned long long
789
insert_uimm10_6_s (unsigned long long insn ATTRIBUTE_UNUSED,
790
       long long int value ATTRIBUTE_UNUSED,
791
       const char **errmsg ATTRIBUTE_UNUSED)
792
0
{
793
794
0
  insn |= ((value >> 0) & 0x03ff) << 0;
795
796
0
  return insn;
797
0
}
798
#endif /* INSERT_UIMM10_6_S */
799
800
#ifndef EXTRACT_UIMM10_6_S
801
#define EXTRACT_UIMM10_6_S
802
/* mask = 0000001111111111.  */
803
static long long int
804
extract_uimm10_6_s (unsigned long long insn ATTRIBUTE_UNUSED,
805
        bool *invalid ATTRIBUTE_UNUSED)
806
20.6k
{
807
20.6k
  unsigned value = 0;
808
809
20.6k
  value |= ((insn >> 0) & 0x03ff) << 0;
810
811
20.6k
  return value;
812
20.6k
}
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.  */
819
static unsigned long long
820
insert_uimm6_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
821
       long long int value ATTRIBUTE_UNUSED,
822
       const char **errmsg ATTRIBUTE_UNUSED)
823
0
{
824
825
0
  insn |= ((value >> 0) & 0x000f) << 1;
826
0
  insn |= ((value >> 4) & 0x0003) << 8;
827
828
0
  return insn;
829
0
}
830
#endif /* INSERT_UIMM6_11_S */
831
832
#ifndef EXTRACT_UIMM6_11_S
833
#define EXTRACT_UIMM6_11_S
834
/* mask = 0000002200011110.  */
835
static long long int
836
extract_uimm6_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
837
        bool *invalid ATTRIBUTE_UNUSED)
838
0
{
839
0
  unsigned value = 0;
840
841
0
  value |= ((insn >> 1) & 0x000f) << 0;
842
0
  value |= ((insn >> 8) & 0x0003) << 4;
843
844
0
  return value;
845
0
}
846
#endif /* EXTRACT_UIMM6_11_S */
847
848
#ifndef INSERT_SIMM9_8
849
#define INSERT_SIMM9_8
850
/* mask = 00000000111111112000000000000000
851
   insn = 00010bbbssssssssSBBBDaaZZXAAAAAA.  */
852
static unsigned long long
853
insert_simm9_8 (unsigned long long insn ATTRIBUTE_UNUSED,
854
    long long int value ATTRIBUTE_UNUSED,
855
    const char **errmsg ATTRIBUTE_UNUSED)
856
0
{
857
858
0
  insn |= ((value >> 0) & 0x00ff) << 16;
859
0
  insn |= ((value >> 8) & 0x0001) << 15;
860
861
0
  return insn;
862
0
}
863
#endif /* INSERT_SIMM9_8 */
864
865
#ifndef EXTRACT_SIMM9_8
866
#define EXTRACT_SIMM9_8
867
/* mask = 00000000111111112000000000000000.  */
868
static long long int
869
extract_simm9_8 (unsigned long long insn ATTRIBUTE_UNUSED,
870
     bool *invalid ATTRIBUTE_UNUSED)
871
51.0k
{
872
51.0k
  int value = 0;
873
874
51.0k
  value |= ((insn >> 16) & 0x00ff) << 0;
875
51.0k
  value |= ((insn >> 15) & 0x0001) << 8;
876
877
  /* Extend the sign.  */
878
51.0k
  int signbit = 1 << (9 - 1);
879
51.0k
  value = (value ^ signbit) - signbit;
880
881
51.0k
  return value;
882
51.0k
}
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.  */
889
static unsigned long long
890
insert_uimm10_a32_8_s (unsigned long long insn ATTRIBUTE_UNUSED,
891
           long long int value ATTRIBUTE_UNUSED,
892
           const char **errmsg ATTRIBUTE_UNUSED)
893
0
{
894
0
  if (value & 0x03)
895
0
    *errmsg = _("Target address is not 32bit aligned.");
896
897
0
  insn |= ((value >> 2) & 0x00ff) << 0;
898
899
0
  return insn;
900
0
}
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.  */
906
static long long int
907
extract_uimm10_a32_8_s (unsigned long long insn ATTRIBUTE_UNUSED,
908
      bool *invalid ATTRIBUTE_UNUSED)
909
29.2k
{
910
29.2k
  unsigned value = 0;
911
912
29.2k
  value |= ((insn >> 0) & 0x00ff) << 2;
913
914
29.2k
  return value;
915
29.2k
}
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.  */
922
static unsigned long long
923
insert_simm9_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
924
      long long int value ATTRIBUTE_UNUSED,
925
      const char **errmsg ATTRIBUTE_UNUSED)
926
0
{
927
928
0
  insn |= ((value >> 0) & 0x01ff) << 0;
929
930
0
  return insn;
931
0
}
932
#endif /* INSERT_SIMM9_7_S */
933
934
#ifndef EXTRACT_SIMM9_7_S
935
#define EXTRACT_SIMM9_7_S
936
/* mask = 0000000111111111.  */
937
static long long int
938
extract_simm9_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
939
       bool *invalid ATTRIBUTE_UNUSED)
940
4.58k
{
941
4.58k
  int value = 0;
942
943
4.58k
  value |= ((insn >> 0) & 0x01ff) << 0;
944
945
  /* Extend the sign.  */
946
4.58k
  int signbit = 1 << (9 - 1);
947
4.58k
  value = (value ^ signbit) - signbit;
948
949
4.58k
  return value;
950
4.58k
}
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.  */
957
static unsigned long long
958
insert_uimm6_a16_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
959
           long long int value ATTRIBUTE_UNUSED,
960
           const char **errmsg ATTRIBUTE_UNUSED)
961
0
{
962
0
  if (value & 0x01)
963
0
    *errmsg = _("Target address is not 16bit aligned.");
964
965
0
  insn |= ((value >> 1) & 0x001f) << 0;
966
967
0
  return insn;
968
0
}
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.  */
974
static long long int
975
extract_uimm6_a16_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
976
      bool *invalid ATTRIBUTE_UNUSED)
977
67.4k
{
978
67.4k
  unsigned value = 0;
979
980
67.4k
  value |= ((insn >> 0) & 0x001f) << 1;
981
982
67.4k
  return value;
983
67.4k
}
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.  */
990
static unsigned long long
991
insert_uimm5_a32_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
992
           long long int value ATTRIBUTE_UNUSED,
993
           const char **errmsg ATTRIBUTE_UNUSED)
994
0
{
995
0
  if (value & 0x03)
996
0
    *errmsg = _("Target address is not 32bit aligned.");
997
998
0
  insn |= ((value >> 2) & 0x0003) << 3;
999
0
  insn |= ((value >> 4) & 0x0001) << 10;
1000
1001
0
  return insn;
1002
0
}
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.  */
1008
static long long int
1009
extract_uimm5_a32_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
1010
      bool *invalid ATTRIBUTE_UNUSED)
1011
9.56k
{
1012
9.56k
  unsigned value = 0;
1013
1014
9.56k
  value |= ((insn >> 3) & 0x0003) << 2;
1015
9.56k
  value |= ((insn >> 10) & 0x0001) << 4;
1016
1017
9.56k
  return value;
1018
9.56k
}
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.  */
1025
static unsigned long long
1026
insert_simm11_a32_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
1027
      long long int value ATTRIBUTE_UNUSED,
1028
      const char **errmsg ATTRIBUTE_UNUSED)
1029
0
{
1030
0
  if (value & 0x03)
1031
0
    *errmsg = _("Target address is not 32bit aligned.");
1032
1033
0
  insn |= ((value >> 2) & 0x0007) << 0;
1034
0
  insn |= ((value >> 5) & 0x003f) << 5;
1035
1036
0
  return insn;
1037
0
}
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.  */
1043
static long long int
1044
extract_simm11_a32_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
1045
       bool *invalid ATTRIBUTE_UNUSED)
1046
8.09k
{
1047
8.09k
  int value = 0;
1048
1049
8.09k
  value |= ((insn >> 0) & 0x0007) << 2;
1050
8.09k
  value |= ((insn >> 5) & 0x003f) << 5;
1051
1052
  /* Extend the sign.  */
1053
8.09k
  int signbit = 1 << (11 - 1);
1054
8.09k
  value = (value ^ signbit) - signbit;
1055
1056
8.09k
  return value;
1057
8.09k
}
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.  */
1064
static unsigned long long
1065
insert_uimm7_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
1066
       long long int value ATTRIBUTE_UNUSED,
1067
       const char **errmsg ATTRIBUTE_UNUSED)
1068
0
{
1069
1070
0
  insn |= ((value >> 0) & 0x0007) << 0;
1071
0
  insn |= ((value >> 3) & 0x000f) << 4;
1072
1073
0
  return insn;
1074
0
}
1075
#endif /* INSERT_UIMM7_13_S */
1076
1077
#ifndef EXTRACT_UIMM7_13_S
1078
#define EXTRACT_UIMM7_13_S
1079
/* mask = 0000000022220111.  */
1080
static long long int
1081
extract_uimm7_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
1082
        bool *invalid ATTRIBUTE_UNUSED)
1083
3.97k
{
1084
3.97k
  unsigned value = 0;
1085
1086
3.97k
  value |= ((insn >> 0) & 0x0007) << 0;
1087
3.97k
  value |= ((insn >> 4) & 0x000f) << 3;
1088
1089
3.97k
  return value;
1090
3.97k
}
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.  */
1097
static unsigned long long
1098
insert_uimm6_a16_21 (unsigned long long insn ATTRIBUTE_UNUSED,
1099
         long long int value ATTRIBUTE_UNUSED,
1100
         const char **errmsg ATTRIBUTE_UNUSED)
1101
0
{
1102
0
  if (value & 0x01)
1103
0
    *errmsg = _("Target address is not 16bit aligned.");
1104
1105
0
  insn |= ((value >> 1) & 0x001f) << 6;
1106
1107
0
  return insn;
1108
0
}
1109
#endif /* INSERT_UIMM6_A16_21 */
1110
1111
#ifndef EXTRACT_UIMM6_A16_21
1112
#define EXTRACT_UIMM6_A16_21
1113
/* mask = 00000000000000000000011111000000.  */
1114
static long long int
1115
extract_uimm6_a16_21 (unsigned long long insn ATTRIBUTE_UNUSED,
1116
          bool *invalid ATTRIBUTE_UNUSED)
1117
0
{
1118
0
  unsigned value = 0;
1119
1120
0
  value |= ((insn >> 6) & 0x001f) << 1;
1121
1122
0
  return value;
1123
0
}
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.  */
1130
static unsigned long long
1131
insert_uimm7_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
1132
       long long int value ATTRIBUTE_UNUSED,
1133
       const char **errmsg ATTRIBUTE_UNUSED)
1134
0
{
1135
1136
0
  insn |= ((value >> 0) & 0x000f) << 1;
1137
0
  insn |= ((value >> 4) & 0x0007) << 8;
1138
1139
0
  return insn;
1140
0
}
1141
#endif /* INSERT_UIMM7_11_S */
1142
1143
#ifndef EXTRACT_UIMM7_11_S
1144
#define EXTRACT_UIMM7_11_S
1145
/* mask = 0000022200011110.  */
1146
static long long int
1147
extract_uimm7_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
1148
        bool *invalid ATTRIBUTE_UNUSED)
1149
0
{
1150
0
  unsigned value = 0;
1151
1152
0
  value |= ((insn >> 1) & 0x000f) << 0;
1153
0
  value |= ((insn >> 8) & 0x0007) << 4;
1154
1155
0
  return value;
1156
0
}
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.  */
1163
static unsigned long long
1164
insert_uimm7_a16_20 (unsigned long long insn ATTRIBUTE_UNUSED,
1165
         long long int value ATTRIBUTE_UNUSED,
1166
         const char **errmsg ATTRIBUTE_UNUSED)
1167
0
{
1168
0
  if (value & 0x01)
1169
0
    *errmsg = _("Target address is not 16bit aligned.");
1170
1171
0
  insn |= ((value >> 1) & 0x003f) << 6;
1172
1173
0
  return insn;
1174
0
}
1175
#endif /* INSERT_UIMM7_A16_20 */
1176
1177
#ifndef EXTRACT_UIMM7_A16_20
1178
#define EXTRACT_UIMM7_A16_20
1179
/* mask = 00000000000000000000111111000000.  */
1180
static long long int
1181
extract_uimm7_a16_20 (unsigned long long insn ATTRIBUTE_UNUSED,
1182
          bool *invalid ATTRIBUTE_UNUSED)
1183
606
{
1184
606
  unsigned value = 0;
1185
1186
606
  value |= ((insn >> 6) & 0x003f) << 1;
1187
1188
606
  return value;
1189
606
}
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.  */
1196
static unsigned long long
1197
insert_simm13_a16_20 (unsigned long long insn ATTRIBUTE_UNUSED,
1198
          long long int value ATTRIBUTE_UNUSED,
1199
          const char **errmsg ATTRIBUTE_UNUSED)
1200
0
{
1201
0
  if (value & 0x01)
1202
0
    *errmsg = _("Target address is not 16bit aligned.");
1203
1204
0
  insn |= ((value >> 1) & 0x003f) << 6;
1205
0
  insn |= ((value >> 7) & 0x003f) << 0;
1206
1207
0
  return insn;
1208
0
}
1209
#endif /* INSERT_SIMM13_A16_20 */
1210
1211
#ifndef EXTRACT_SIMM13_A16_20
1212
#define EXTRACT_SIMM13_A16_20
1213
/* mask = 00000000000000000000111111222222.  */
1214
static long long int
1215
extract_simm13_a16_20 (unsigned long long insn ATTRIBUTE_UNUSED,
1216
           bool *invalid ATTRIBUTE_UNUSED)
1217
1.45k
{
1218
1.45k
  int value = 0;
1219
1220
1.45k
  value |= ((insn >> 6) & 0x003f) << 1;
1221
1.45k
  value |= ((insn >> 0) & 0x003f) << 7;
1222
1223
  /* Extend the sign.  */
1224
1.45k
  int signbit = 1 << (13 - 1);
1225
1.45k
  value = (value ^ signbit) - signbit;
1226
1227
1.45k
  return value;
1228
1.45k
}
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.  */
1235
static unsigned long long
1236
insert_uimm8_8_s (unsigned long long insn ATTRIBUTE_UNUSED,
1237
      long long int value ATTRIBUTE_UNUSED,
1238
      const char **errmsg ATTRIBUTE_UNUSED)
1239
0
{
1240
1241
0
  insn |= ((value >> 0) & 0x00ff) << 0;
1242
1243
0
  return insn;
1244
0
}
1245
#endif /* INSERT_UIMM8_8_S */
1246
1247
#ifndef EXTRACT_UIMM8_8_S
1248
#define EXTRACT_UIMM8_8_S
1249
/* mask = 0000000011111111.  */
1250
static long long int
1251
extract_uimm8_8_s (unsigned long long insn ATTRIBUTE_UNUSED,
1252
       bool *invalid ATTRIBUTE_UNUSED)
1253
17.5k
{
1254
17.5k
  unsigned value = 0;
1255
1256
17.5k
  value |= ((insn >> 0) & 0x00ff) << 0;
1257
1258
17.5k
  return value;
1259
17.5k
}
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.  */
1266
static unsigned long long
1267
insert_uimm6_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
1268
      long long int value ATTRIBUTE_UNUSED,
1269
      const char **errmsg ATTRIBUTE_UNUSED)
1270
0
{
1271
1272
0
  insn |= ((value >> 0) & 0x003f) << 5;
1273
1274
0
  return insn;
1275
0
}
1276
#endif /* INSERT_UIMM6_5_S */
1277
1278
#ifndef EXTRACT_UIMM6_5_S
1279
#define EXTRACT_UIMM6_5_S
1280
/* mask = 0000011111100000.  */
1281
static long long int
1282
extract_uimm6_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
1283
       bool *invalid ATTRIBUTE_UNUSED)
1284
2.26k
{
1285
2.26k
  unsigned value = 0;
1286
1287
2.26k
  value |= ((insn >> 5) & 0x003f) << 0;
1288
1289
2.26k
  return value;
1290
2.26k
}
1291
#endif /* EXTRACT_UIMM6_5_S */
1292
1293
#ifndef INSERT_UIMM6_AXX_
1294
#define INSERT_UIMM6_AXX_
1295
/* mask = 00000000000000000000000000000000
1296
   insn = 00110bbb11100001100001100001QQQQ.  */
1297
static ATTRIBUTE_UNUSED unsigned
1298
insert_uimm6_axx_ (unsigned long long insn ATTRIBUTE_UNUSED,
1299
       long long int value ATTRIBUTE_UNUSED,
1300
       const char **errmsg ATTRIBUTE_UNUSED)
1301
0
{
1302
0
  if (value & 0x3f)
1303
0
    *errmsg = _("Target address is not 512bit aligned.");
1304
0
1305
0
  return insn;
1306
0
}
1307
#endif /* INSERT_UIMM6_AXX_ */
1308
1309
#ifndef EXTRACT_UIMM6_AXX_
1310
#define EXTRACT_UIMM6_AXX_
1311
/* mask = 00000000000000000000000000000000.  */
1312
static ATTRIBUTE_UNUSED int
1313
extract_uimm6_axx_ (unsigned long long insn ATTRIBUTE_UNUSED,
1314
        bool *invalid ATTRIBUTE_UNUSED)
1315
0
{
1316
0
  unsigned value = 0;
1317
0
1318
0
  return value;
1319
0
}
1320
#endif /* EXTRACT_UIMM6_AXX_ */