aboutsummaryrefslogtreecommitdiff
path: root/target/sparc/insns.decode
blob: 5d1c55aa78f38a069a78c1fa1bdfe208a75ef3f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
# SPDX-License-Identifier: LGPL-2.0+
#
# Sparc instruction decode definitions.
# Copyright (c) 2023 Richard Henderson <rth@twiddle.net>

##
## Major Opcodes 00 and 01 -- branches, call, and sethi.
##

&bcc    i a cond cc
BPcc    00 a:1 cond:4   001 cc:1 0 - i:s19                 &bcc
Bicc    00 a:1 cond:4   010          i:s22                 &bcc cc=0
FBPfcc  00 a:1 cond:4   101 cc:2   - i:s19                 &bcc
FBfcc   00 a:1 cond:4   110          i:s22                 &bcc cc=0

%d16    20:s2 0:14
BPr     00 a:1 0 cond:3 011 ..     - rs1:5 ..............  i=%d16

NCP     00 -   ----     111 ----------------------         # CBcc

SETHI   00 rd:5         100 i:22

CALL    01 i:s30

##
## Major Opcode 10 -- integer, floating-point, vis, and system insns.
##

%dfp_rd     25:5 !function=extract_dfpreg
%dfp_rs1    14:5 !function=extract_dfpreg
%dfp_rs2     0:5 !function=extract_dfpreg
%dfp_rs3     9:5 !function=extract_dfpreg

%qfp_rd     25:5 !function=extract_qfpreg
%qfp_rs1    14:5 !function=extract_qfpreg
%qfp_rs2     0:5 !function=extract_qfpreg

&r_r_ri     rd rs1 rs2_or_imm imm:bool
@n_r_ri     .. ..... ...... rs1:5 imm:1 rs2_or_imm:s13     &r_r_ri rd=0
@r_r_ri     .. rd:5  ...... rs1:5 imm:1 rs2_or_imm:s13     &r_r_ri

&r_r_ri_cc  rd rs1 rs2_or_imm imm:bool cc:bool
@r_r_ri_cc  .. rd:5  . cc:1 .... rs1:5 imm:1 rs2_or_imm:s13    &r_r_ri_cc
@r_r_ri_cc0 .. rd:5  ...... rs1:5 imm:1 rs2_or_imm:s13         &r_r_ri_cc cc=0
@r_r_ri_cc1 .. rd:5  ...... rs1:5 imm:1 rs2_or_imm:s13         &r_r_ri_cc cc=1

&r_r_r      rd rs1 rs2
@r_r_r      .. rd:5  ...... rs1:5 . ........ rs2:5         &r_r_r
@d_r_r      .. ..... ...... rs1:5 . ........ rs2:5         \
            &r_r_r rd=%dfp_rd
@r_d_d      .. rd:5  ...... ..... . ........ .....         \
            &r_r_r rs1=%dfp_rs1 rs2=%dfp_rs2
@d_r_d      .. ..... ...... rs1:5 . ........ .....         \
            &r_r_r rd=%dfp_rd rs2=%dfp_rs2
@d_d_d      .. ..... ...... ..... . ........ .....         \
            &r_r_r rd=%dfp_rd rs1=%dfp_rs1 rs2=%dfp_rs2
@q_q_q      .. ..... ...... ..... . ........ .....         \
            &r_r_r rd=%qfp_rd rs1=%qfp_rs1 rs2=%qfp_rs2
@q_d_d      .. ..... ...... ..... . ........ .....         \
            &r_r_r rd=%qfp_rd rs1=%dfp_rs1 rs2=%dfp_rs2

@r_r_r_swap .. rd:5  ...... rs2:5 . ........ rs1:5         &r_r_r
@d_d_d_swap .. ..... ...... ..... . ........ .....         \
            &r_r_r rd=%dfp_rd rs1=%dfp_rs2 rs2=%dfp_rs1

&r_r        rd rs
@r_r1       .. rd:5  ...... rs:5  . ........ .....         &r_r
@r_r2       .. rd:5  ...... ..... . ........ rs:5          &r_r
@r_d2       .. rd:5  ...... ..... . ........ .....         &r_r rs=%dfp_rs2
@r_q2       .. rd:5  ...... ..... . ........ .....         &r_r rs=%qfp_rs2
@d_r2       .. ..... ...... ..... . ........ rs:5          &r_r rd=%dfp_rd
@q_r2       .. ..... ...... ..... . ........ rs:5          &r_r rd=%qfp_rd
@d_d1       .. ..... ...... ..... . ........ .....         \
            &r_r rd=%dfp_rd rs=%dfp_rs1
@d_d2       .. ..... ...... ..... . ........ .....         \
            &r_r rd=%dfp_rd rs=%dfp_rs2
@d_q2       .. ..... ...... ..... . ........ .....         \
            &r_r rd=%dfp_rd rs=%qfp_rs2
@q_q2       .. ..... ...... ..... . ........ .....         \
            &r_r rd=%qfp_rd rs=%qfp_rs2
@q_d2       .. ..... ...... ..... . ........ .....         \
            &r_r rd=%qfp_rd rs=%dfp_rs2

&r_r_r_r    rd rs1 rs2 rs3
@r_r_r_r    .. rd:5  ...... rs1:5 rs3:5 .... rs2:5         &r_r_r_r
@d_d_d_d    .. ..... ...... ..... ..... .... .....         \
            &r_r_r_r rd=%dfp_rd rs1=%dfp_rs1 rs2=%dfp_rs2 rs3=%dfp_rs3

{
  [
    STBAR           10 00000 101000 01111 0 0000000000000
    MEMBAR          10 00000 101000 01111 1 000000 cmask:3 mmask:4

    RDCCR           10 rd:5  101000 00010 0 0000000000000
    RDASI           10 rd:5  101000 00011 0 0000000000000
    RDTICK          10 rd:5  101000 00100 0 0000000000000
    RDPC            10 rd:5  101000 00101 0 0000000000000
    RDFPRS          10 rd:5  101000 00110 0 0000000000000
    RDASR17         10 rd:5  101000 10001 0 0000000000000
    RDGSR           10 rd:5  101000 10011 0 0000000000000
    RDSOFTINT       10 rd:5  101000 10110 0 0000000000000
    RDTICK_CMPR     10 rd:5  101000 10111 0 0000000000000
    RDSTICK         10 rd:5  101000 11000 0 0000000000000
    RDSTICK_CMPR    10 rd:5  101000 11001 0 0000000000000
    RDSTRAND_STATUS 10 rd:5  101000 11010 0 0000000000000
  ]
  # Before v8, all rs1 accepted; otherwise rs1==0.
  RDY               10 rd:5  101000 rs1:5 0 0000000000000
}

{
  [
    WRY             10 00000 110000 ..... . .............  @n_r_ri
    WRCCR           10 00010 110000 ..... . .............  @n_r_ri
    WRASI           10 00011 110000 ..... . .............  @n_r_ri
    WRFPRS          10 00110 110000 ..... . .............  @n_r_ri
    {
      WRGSR         10 10011 110000 ..... . .............  @n_r_ri
      WRPOWERDOWN   10 10011 110000 ..... . .............  @n_r_ri
    }
    WRSOFTINT_SET   10 10100 110000 ..... . .............  @n_r_ri
    WRSOFTINT_CLR   10 10101 110000 ..... . .............  @n_r_ri
    WRSOFTINT       10 10110 110000 ..... . .............  @n_r_ri
    WRTICK_CMPR     10 10111 110000 ..... . .............  @n_r_ri
    WRSTICK         10 11000 110000 ..... . .............  @n_r_ri
    WRSTICK_CMPR    10 11001 110000 ..... . .............  @n_r_ri
  ]
  # Before v8, rs1==0 was WRY, and the rest executed as nop.
  [
    NOP_v7          10 ----- 110000 ----- 0 00000000 -----
    NOP_v7          10 ----- 110000 ----- 1 -------- -----
  ]
}

{
  RDPSR             10 rd:5  101001 00000 0 0000000000000
  RDHPR_hpstate     10 rd:5  101001 00000 0 0000000000000
}
RDHPR_htstate       10 rd:5  101001 00001 0 0000000000000
RDHPR_hintp         10 rd:5  101001 00011 0 0000000000000
RDHPR_htba          10 rd:5  101001 00101 0 0000000000000
RDHPR_hver          10 rd:5  101001 00110 0 0000000000000
RDHPR_hstick_cmpr   10 rd:5  101001 11111 0 0000000000000

{
  WRPSR             10 00000 110001 ..... . .............  @n_r_ri
  SAVED             10 00000 110001 00000 0 0000000000000
}
RESTORED            10 00001 110001 00000 0 0000000000000
# UA2005 ALLCLEAN
# UA2005 OTHERW
# UA2005 NORMALW
# UA2005 INVALW

{
  RDWIM             10 rd:5  101010 00000 0 0000000000000
  RDPR_tpc          10 rd:5  101010 00000 0 0000000000000
}
RDPR_tnpc           10 rd:5  101010 00001 0 0000000000000
RDPR_tstate         10 rd:5  101010 00010 0 0000000000000
RDPR_tt             10 rd:5  101010 00011 0 0000000000000
RDPR_tick           10 rd:5  101010 00100 0 0000000000000
RDPR_tba            10 rd:5  101010 00101 0 0000000000000
RDPR_pstate         10 rd:5  101010 00110 0 0000000000000
RDPR_tl             10 rd:5  101010 00111 0 0000000000000
RDPR_pil            10 rd:5  101010 01000 0 0000000000000
RDPR_cwp            10 rd:5  101010 01001 0 0000000000000
RDPR_cansave        10 rd:5  101010 01010 0 0000000000000
RDPR_canrestore     10 rd:5  101010 01011 0 0000000000000
RDPR_cleanwin       10 rd:5  101010 01100 0 0000000000000
RDPR_otherwin       10 rd:5  101010 01101 0 0000000000000
RDPR_wstate         10 rd:5  101010 01110 0 0000000000000
RDPR_gl             10 rd:5  101010 10000 0 0000000000000
RDPR_strand_status  10 rd:5  101010 11010 0 0000000000000
RDPR_ver            10 rd:5  101010 11111 0 0000000000000

{
  WRWIM             10 00000 110010 ..... . .............  @n_r_ri
  WRPR_tpc          10 00000 110010 ..... . .............  @n_r_ri
}
WRPR_tnpc           10 00001 110010 ..... . .............  @n_r_ri
WRPR_tstate         10 00010 110010 ..... . .............  @n_r_ri
WRPR_tt             10 00011 110010 ..... . .............  @n_r_ri
WRPR_tick           10 00100 110010 ..... . .............  @n_r_ri
WRPR_tba            10 00101 110010 ..... . .............  @n_r_ri
WRPR_pstate         10 00110 110010 ..... . .............  @n_r_ri
WRPR_tl             10 00111 110010 ..... . .............  @n_r_ri
WRPR_pil            10 01000 110010 ..... . .............  @n_r_ri
WRPR_cwp            10 01001 110010 ..... . .............  @n_r_ri
WRPR_cansave        10 01010 110010 ..... . .............  @n_r_ri
WRPR_canrestore     10 01011 110010 ..... . .............  @n_r_ri
WRPR_cleanwin       10 01100 110010 ..... . .............  @n_r_ri
WRPR_otherwin       10 01101 110010 ..... . .............  @n_r_ri
WRPR_wstate         10 01110 110010 ..... . .............  @n_r_ri
WRPR_gl             10 10000 110010 ..... . .............  @n_r_ri
WRPR_strand_status  10 11010 110010 ..... . .............  @n_r_ri

{
  FLUSHW    10 00000 101011 00000 0 0000000000000
  RDTBR     10 rd:5  101011 00000 0 0000000000000
}

{
  WRTBR             10 00000 110011 ..... . .............  @n_r_ri
  WRHPR_hpstate     10 00000 110011 ..... . .............  @n_r_ri
}
WRHPR_htstate       10 00001 110011 ..... . .............  @n_r_ri
WRHPR_hintp         10 00011 110011 ..... . .............  @n_r_ri
WRHPR_htba          10 00101 110011 ..... . .............  @n_r_ri
WRHPR_hstick_cmpr   10 11111 110011 ..... . .............  @n_r_ri

ADD         10 ..... 0.0000 ..... . .............          @r_r_ri_cc
AND         10 ..... 0.0001 ..... . .............          @r_r_ri_cc
OR          10 ..... 0.0010 ..... . .............          @r_r_ri_cc
XOR         10 ..... 0.0011 ..... . .............          @r_r_ri_cc
SUB         10 ..... 0.0100 ..... . .............          @r_r_ri_cc
ANDN        10 ..... 0.0101 ..... . .............          @r_r_ri_cc
ORN         10 ..... 0.0110 ..... . .............          @r_r_ri_cc
XORN        10 ..... 0.0111 ..... . .............          @r_r_ri_cc
ADDC        10 ..... 0.1000 ..... . .............          @r_r_ri_cc
SUBC        10 ..... 0.1100 ..... . .............          @r_r_ri_cc

MULX        10 ..... 001001 ..... . .............          @r_r_ri_cc0
UMUL        10 ..... 0.1010 ..... . .............          @r_r_ri_cc
SMUL        10 ..... 0.1011 ..... . .............          @r_r_ri_cc
MULScc      10 ..... 100100 ..... . .............          @r_r_ri_cc1

UDIVX       10 ..... 001101 ..... . .............          @r_r_ri
SDIVX       10 ..... 101101 ..... . .............          @r_r_ri
UDIV        10 ..... 001110 ..... . .............          @r_r_ri
UDIVcc      10 ..... 011110 ..... . .............          @r_r_ri_cc1
SDIV        10 ..... 0.1111 ..... . .............          @r_r_ri_cc

TADDcc      10 ..... 100000 ..... . .............          @r_r_ri_cc1
TSUBcc      10 ..... 100001 ..... . .............          @r_r_ri_cc1
TADDccTV    10 ..... 100010 ..... . .............          @r_r_ri_cc1
TSUBccTV    10 ..... 100011 ..... . .............          @r_r_ri_cc1

POPC        10 rd:5  101110 00000 imm:1 rs2_or_imm:s13     \
            &r_r_ri_cc rs1=0 cc=0

&shiftr     rd rs1 rs2 x:bool
@shiftr     .. rd:5  ...... rs1:5 . x:1 ....... rs2:5      &shiftr

SLL_r       10 ..... 100101 ..... 0 .   0000000 .....      @shiftr
SRL_r       10 ..... 100110 ..... 0 .   0000000 .....      @shiftr
SRA_r       10 ..... 100111 ..... 0 .   0000000 .....      @shiftr

&shifti     rd rs1 i x:bool
@shifti     .. rd:5  ...... rs1:5 . x:1 ...... i:6         &shifti

SLL_i       10 ..... 100101 ..... 1 .   000000 ......      @shifti
SRL_i       10 ..... 100110 ..... 1 .   000000 ......      @shifti
SRA_i       10 ..... 100111 ..... 1 .   000000 ......      @shifti

Tcc_r       10 0 cond:4 111010 rs1:5 0 cc:1 0000000 rs2:5
{
  # For v7, the entire simm13 field is present, but masked to 7 bits.
  # For v8, [12:7] are reserved.  However, a compatibility note for
  # the Tcc insn in the v9 manual suggests that the v8 reserved field
  # was ignored and did not produce traps.
  Tcc_i_v7  10 0 cond:4 111010 rs1:5 1 ------ i:7

  # For v9, bits [12:11] are cc1 and cc0 (and cc0 must be 0).
  # Bits [10:8] are reserved and the OSA2011 manual says they must be 0.
  Tcc_i_v9  10 0 cond:4 111010 rs1:5 1 cc:1 0 000 i:8
}

MOVcc       10 rd:5  101100 1 cond:4 imm:1 cc:1 0 rs2_or_imm:s11
MOVfcc      10 rd:5  101100 0 cond:4 imm:1 cc:2   rs2_or_imm:s11
MOVR        10 rd:5  101111 rs1:5    imm:1 cond:3 rs2_or_imm:s10

JMPL        10 ..... 111000 ..... . .............          @r_r_ri
{
  RETT      10 00000 111001 ..... . .............          @n_r_ri
  RETURN    10 00000 111001 ..... . .............          @n_r_ri
}
NOP         10 00000 111011 ----- 0 00000000-----          # FLUSH reg+reg
NOP         10 00000 111011 ----- 1 -------------          # FLUSH reg+imm
SAVE        10 ..... 111100 ..... . .............          @r_r_ri
RESTORE     10 ..... 111101 ..... . .............          @r_r_ri

DONE        10 00000 111110 00000 0 0000000000000
RETRY       10 00001 111110 00000 0 0000000000000

FMOVs       10 ..... 110100 00000 0 0000 0001 .....        @r_r2
FMOVd       10 ..... 110100 00000 0 0000 0010 .....        @d_d2
FMOVq       10 ..... 110100 00000 0 0000 0011 .....        @q_q2
FNEGs       10 ..... 110100 00000 0 0000 0101 .....        @r_r2
FNEGd       10 ..... 110100 00000 0 0000 0110 .....        @d_d2
FNEGq       10 ..... 110100 00000 0 0000 0111 .....        @q_q2
FABSs       10 ..... 110100 00000 0 0000 1001 .....        @r_r2
FABSd       10 ..... 110100 00000 0 0000 1010 .....        @d_d2
FABSq       10 ..... 110100 00000 0 0000 1011 .....        @q_q2
FSQRTs      10 ..... 110100 00000 0 0010 1001 .....        @r_r2
FSQRTd      10 ..... 110100 00000 0 0010 1010 .....        @d_d2
FSQRTq      10 ..... 110100 00000 0 0010 1011 .....        @q_q2
FADDs       10 ..... 110100 ..... 0 0100 0001 .....        @r_r_r
FADDd       10 ..... 110100 ..... 0 0100 0010 .....        @d_d_d
FADDq       10 ..... 110100 ..... 0 0100 0011 .....        @q_q_q
FSUBs       10 ..... 110100 ..... 0 0100 0101 .....        @r_r_r
FSUBd       10 ..... 110100 ..... 0 0100 0110 .....        @d_d_d
FSUBq       10 ..... 110100 ..... 0 0100 0111 .....        @q_q_q
FMULs       10 ..... 110100 ..... 0 0100 1001 .....        @r_r_r
FMULd       10 ..... 110100 ..... 0 0100 1010 .....        @d_d_d
FMULq       10 ..... 110100 ..... 0 0100 1011 .....        @q_q_q
FDIVs       10 ..... 110100 ..... 0 0100 1101 .....        @r_r_r
FDIVd       10 ..... 110100 ..... 0 0100 1110 .....        @d_d_d
FDIVq       10 ..... 110100 ..... 0 0100 1111 .....        @q_q_q
FsMULd      10 ..... 110100 ..... 0 0110 1001 .....        @d_r_r
FdMULq      10 ..... 110100 ..... 0 0110 1110 .....        @q_d_d
FsTOx       10 ..... 110100 00000 0 1000 0001 .....        @r_r2
FdTOx       10 ..... 110100 00000 0 1000 0010 .....        @r_d2
FqTOx       10 ..... 110100 00000 0 1000 0011 .....        @r_q2
FxTOs       10 ..... 110100 00000 0 1000 0100 .....        @r_r2
FxTOd       10 ..... 110100 00000 0 1000 1000 .....        @d_r2
FxTOq       10 ..... 110100 00000 0 1000 1100 .....        @q_r2
FiTOs       10 ..... 110100 00000 0 1100 0100 .....        @r_r2
FdTOs       10 ..... 110100 00000 0 1100 0110 .....        @r_d2
FqTOs       10 ..... 110100 00000 0 1100 0111 .....        @r_q2
FiTOd       10 ..... 110100 00000 0 1100 1000 .....        @d_r2
FsTOd       10 ..... 110100 00000 0 1100 1001 .....        @d_r2
FqTOd       10 ..... 110100 00000 0 1100 1011 .....        @d_q2
FiTOq       10 ..... 110100 00000 0 1100 1100 .....        @q_r2
FsTOq       10 ..... 110100 00000 0 1100 1101 .....        @q_r2
FdTOq       10 ..... 110100 00000 0 1100 1110 .....        @q_d2
FsTOi       10 ..... 110100 00000 0 1101 0001 .....        @r_r2
FdTOi       10 ..... 110100 00000 0 1101 0010 .....        @r_d2
FqTOi       10 ..... 110100 00000 0 1101 0011 .....        @r_q2

FMOVscc     10 rd:5  110101 0 cond:4 1 cc:1 0 000001 rs2:5
FMOVdcc     10 ..... 110101 0 cond:4 1 cc:1 0 000010 ..... \
            rd=%dfp_rd rs2=%dfp_rs2
FMOVqcc     10 ..... 110101 0 cond:4 1 cc:1 0 000011 ..... \
            rd=%qfp_rd rs2=%qfp_rs2

FMOVsfcc    10 rd:5  110101 0 cond:4 0 cc:2   000001 rs2:5
FMOVdfcc    10 ..... 110101 0 cond:4 0 cc:2   000010 ..... \
            rd=%dfp_rd rs2=%dfp_rs2
FMOVqfcc    10 ..... 110101 0 cond:4 0 cc:2   000011 ..... \
            rd=%qfp_rd rs2=%qfp_rs2

FMOVRs      10 rd:5  110101 rs1:5    0 cond:3  00101 rs2:5
FMOVRd      10 ..... 110101 rs1:5    0 cond:3  00110 ..... \
            rd=%dfp_rd rs2=%dfp_rs2
FMOVRq      10 ..... 110101 rs1:5    0 cond:3  00111 ..... \
            rd=%qfp_rd rs2=%qfp_rs2

FCMPs       10 000 cc:2 110101 rs1:5  0 0101 0001 rs2:5
FCMPd       10 000 cc:2 110101 .....  0 0101 0010 .....    \
            rs1=%dfp_rs1 rs2=%dfp_rs2
FCMPq       10 000 cc:2 110101 .....  0 0101 0011 .....    \
            rs1=%qfp_rs1 rs2=%qfp_rs2
FCMPEs      10 000 cc:2 110101 rs1:5  0 0101 0101 rs2:5
FCMPEd      10 000 cc:2 110101 .....  0 0101 0110 .....    \
            rs1=%dfp_rs1 rs2=%dfp_rs2
FCMPEq      10 000 cc:2 110101 .....  0 0101 0111 .....    \
            rs1=%qfp_rs1 rs2=%qfp_rs2

{
  [
    EDGE8cc     10 ..... 110110 ..... 0 0000 0000 .....    @r_r_r
    EDGE8N      10 ..... 110110 ..... 0 0000 0001 .....    @r_r_r
    EDGE8Lcc    10 ..... 110110 ..... 0 0000 0010 .....    @r_r_r
    EDGE8LN     10 ..... 110110 ..... 0 0000 0011 .....    @r_r_r
    EDGE16cc    10 ..... 110110 ..... 0 0000 0100 .....    @r_r_r
    EDGE16N     10 ..... 110110 ..... 0 0000 0101 .....    @r_r_r
    EDGE16Lcc   10 ..... 110110 ..... 0 0000 0110 .....    @r_r_r
    EDGE16LN    10 ..... 110110 ..... 0 0000 0111 .....    @r_r_r
    EDGE32cc    10 ..... 110110 ..... 0 0000 1000 .....    @r_r_r
    EDGE32N     10 ..... 110110 ..... 0 0000 1001 .....    @r_r_r
    EDGE32Lcc   10 ..... 110110 ..... 0 0000 1010 .....    @r_r_r
    EDGE32LN    10 ..... 110110 ..... 0 0000 1011 .....    @r_r_r

    ARRAY8      10 ..... 110110 ..... 0 0001 0000 .....    @r_r_r
    ARRAY16     10 ..... 110110 ..... 0 0001 0010 .....    @r_r_r
    ARRAY32     10 ..... 110110 ..... 0 0001 0100 .....    @r_r_r

    ADDXC       10 ..... 110110 ..... 0 0001 0001 .....    @r_r_r
    ADDXCcc     10 ..... 110110 ..... 0 0001 0011 .....    @r_r_r

    ALIGNADDR   10 ..... 110110 ..... 0 0001 1000 .....    @r_r_r
    ALIGNADDRL  10 ..... 110110 ..... 0 0001 1010 .....    @r_r_r

    BMASK       10 ..... 110110 ..... 0 0001 1001 .....    @r_r_r

    FPCMPLE16   10 ..... 110110 ..... 0 0010 0000 .....    @r_d_d
    FPCMPNE16   10 ..... 110110 ..... 0 0010 0010 .....    @r_d_d
    FPCMPGT16   10 ..... 110110 ..... 0 0010 1000 .....    @r_d_d
    FPCMPEQ16   10 ..... 110110 ..... 0 0010 1010 .....    @r_d_d
    FPCMPLE32   10 ..... 110110 ..... 0 0010 0100 .....    @r_d_d
    FPCMPNE32   10 ..... 110110 ..... 0 0010 0110 .....    @r_d_d
    FPCMPGT32   10 ..... 110110 ..... 0 0010 1100 .....    @r_d_d
    FPCMPEQ32   10 ..... 110110 ..... 0 0010 1110 .....    @r_d_d

    FMUL8x16    10 ..... 110110 ..... 0 0011 0001 .....    @d_r_d
    FMUL8x16AU  10 ..... 110110 ..... 0 0011 0011 .....    @d_r_r
    FMUL8x16AL  10 ..... 110110 ..... 0 0011 0101 .....    @d_r_r
    FMUL8SUx16  10 ..... 110110 ..... 0 0011 0110 .....    @d_d_d
    FMUL8ULx16  10 ..... 110110 ..... 0 0011 0111 .....    @d_d_d
    FMULD8SUx16 10 ..... 110110 ..... 0 0011 1000 .....    @d_r_r
    FMULD8ULx16 10 ..... 110110 ..... 0 0011 1001 .....    @d_r_r
    FPACK32     10 ..... 110110 ..... 0 0011 1010 .....    @d_d_d
    FPACK16     10 ..... 110110 00000 0 0011 1011 .....    @r_d2
    FPACKFIX    10 ..... 110110 00000 0 0011 1101 .....    @r_d2
    PDIST       10 ..... 110110 ..... 0 0011 1110 .....    \
                &r_r_r_r rd=%dfp_rd rs1=%dfp_rd rs2=%dfp_rs1 rs3=%dfp_rs2

    FALIGNDATAg 10 ..... 110110 ..... 0 0100 1000 .....    @d_d_d
    FPMERGE     10 ..... 110110 ..... 0 0100 1011 .....    @d_r_r
    BSHUFFLE    10 ..... 110110 ..... 0 0100 1100 .....    @d_d_d
    FEXPAND     10 ..... 110110 00000 0 0100 1101 .....    @d_r2

    FSRCd       10 ..... 110110 ..... 0 0111 0100 00000    @d_d1  # FSRC1d
    FSRCs       10 ..... 110110 ..... 0 0111 0101 00000    @r_r1  # FSRC1s
    FSRCd       10 ..... 110110 00000 0 0111 1000 .....    @d_d2  # FSRC2d
    FSRCs       10 ..... 110110 00000 0 0111 1001 .....    @r_r2  # FSRC2s
    FNOTd       10 ..... 110110 ..... 0 0110 1010 00000    @d_d1  # FNOT1d
    FNOTs       10 ..... 110110 ..... 0 0110 1011 00000    @r_r1  # FNOT1s
    FNOTd       10 ..... 110110 00000 0 0110 0110 .....    @d_d2  # FNOT2d
    FNOTs       10 ..... 110110 00000 0 0110 0111 .....    @r_r2  # FNOT2s

    FPADD16     10 ..... 110110 ..... 0 0101 0000 .....    @d_d_d
    FPADD16s    10 ..... 110110 ..... 0 0101 0001 .....    @r_r_r
    FPADD32     10 ..... 110110 ..... 0 0101 0010 .....    @d_d_d
    FPADD32s    10 ..... 110110 ..... 0 0101 0011 .....    @r_r_r
    FPSUB16     10 ..... 110110 ..... 0 0101 0100 .....    @d_d_d
    FPSUB16s    10 ..... 110110 ..... 0 0101 0101 .....    @r_r_r
    FPSUB32     10 ..... 110110 ..... 0 0101 0110 .....    @d_d_d
    FPSUB32s    10 ..... 110110 ..... 0 0101 0111 .....    @r_r_r

    FNORd       10 ..... 110110 ..... 0 0110 0010 .....    @d_d_d
    FNORs       10 ..... 110110 ..... 0 0110 0011 .....    @r_r_r
    FANDNOTd    10 ..... 110110 ..... 0 0110 0100 .....    @d_d_d   # FANDNOT2d
    FANDNOTs    10 ..... 110110 ..... 0 0110 0101 .....    @r_r_r   # FANDNOT2s
    FANDNOTd    10 ..... 110110 ..... 0 0110 1000 .....    @d_d_d_swap # ... 1d
    FANDNOTs    10 ..... 110110 ..... 0 0110 1001 .....    @r_r_r_swap # ... 1s
    FXORd       10 ..... 110110 ..... 0 0110 1100 .....    @d_d_d
    FXORs       10 ..... 110110 ..... 0 0110 1101 .....    @r_r_r
    FNANDd      10 ..... 110110 ..... 0 0110 1110 .....    @d_d_d
    FNANDs      10 ..... 110110 ..... 0 0110 1111 .....    @r_r_r
    FANDd       10 ..... 110110 ..... 0 0111 0000 .....    @d_d_d
    FANDs       10 ..... 110110 ..... 0 0111 0001 .....    @r_r_r
    FXNORd      10 ..... 110110 ..... 0 0111 0010 .....    @d_d_d
    FXNORs      10 ..... 110110 ..... 0 0111 0011 .....    @r_r_r
    FORNOTd     10 ..... 110110 ..... 0 0111 0110 .....    @d_d_d    # FORNOT2d
    FORNOTs     10 ..... 110110 ..... 0 0111 0111 .....    @r_r_r    # FORNOT2s
    FORNOTd     10 ..... 110110 ..... 0 0111 1010 .....    @d_d_d_swap # ... 1d
    FORNOTs     10 ..... 110110 ..... 0 0111 1011 .....    @r_r_r_swap # ... 1s
    FORd        10 ..... 110110 ..... 0 0111 1100 .....    @d_d_d
    FORs        10 ..... 110110 ..... 0 0111 1101 .....    @r_r_r

    FZEROd      10 ..... 110110 00000 0 0110 0000 00000    rd=%dfp_rd
    FZEROs      10 rd:5  110110 00000 0 0110 0001 00000
    FONEd       10 ..... 110110 00000 0 0111 1110 00000    rd=%dfp_rd
    FONEs       10 rd:5  110110 00000 0 0111 1111 00000
  ]
  NCP           10 ----- 110110 ----- --------- -----      # v8 CPop1
}

{
  [
    FMADDs      10 ..... 110111 ..... ..... 0001 .....     @r_r_r_r
    FMADDd      10 ..... 110111 ..... ..... 0010 .....     @d_d_d_d
    FMSUBs      10 ..... 110111 ..... ..... 0101 .....     @r_r_r_r
    FMSUBd      10 ..... 110111 ..... ..... 0110 .....     @d_d_d_d
    FNMSUBs     10 ..... 110111 ..... ..... 1001 .....     @r_r_r_r
    FNMSUBd     10 ..... 110111 ..... ..... 1010 .....     @d_d_d_d
    FNMADDs     10 ..... 110111 ..... ..... 1101 .....     @r_r_r_r
    FNMADDd     10 ..... 110111 ..... ..... 1110 .....     @d_d_d_d
  ]
  NCP           10 ----- 110111 ----- --------- -----      # v8 CPop2
}

##
## Major Opcode 11 -- load and store instructions
##

&r_r_ri_asi rd rs1 rs2_or_imm asi imm:bool
@r_r_ri_na  .. rd:5  ...... rs1:5 imm:1 rs2_or_imm:s13     &r_r_ri_asi asi=-1
@d_r_ri_na  .. ..... ...... rs1:5 imm:1 rs2_or_imm:s13     \
            &r_r_ri_asi rd=%dfp_rd asi=-1
@q_r_ri_na  .. ..... ...... rs1:5 imm:1 rs2_or_imm:s13     \
            &r_r_ri_asi rd=%qfp_rd asi=-1

@r_r_r_asi  .. rd:5  ...... rs1:5 0     asi:8 rs2_or_imm:5 &r_r_ri_asi imm=0
@r_r_i_asi  .. rd:5  ...... rs1:5 1     rs2_or_imm:s13     \
            &r_r_ri_asi imm=1 asi=-2
@d_r_r_asi  .. ..... ...... rs1:5 0     asi:8 rs2_or_imm:5 \
            &r_r_ri_asi rd=%dfp_rd imm=0
@d_r_i_asi  .. ..... ...... rs1:5 1     rs2_or_imm:s13     \
            &r_r_ri_asi rd=%dfp_rd imm=1 asi=-2
@q_r_r_asi  .. ..... ...... rs1:5 0     asi:8 rs2_or_imm:5 \
            &r_r_ri_asi rd=%qfp_rd imm=0
@q_r_i_asi  .. ..... ...... rs1:5 1     rs2_or_imm:s13     \
            &r_r_ri_asi rd=%qfp_rd imm=1 asi=-2
@casa_imm   .. rd:5  ...... rs1:5 1 00000000 rs2_or_imm:5  \
            &r_r_ri_asi imm=1 asi=-2

LDUW        11 ..... 000000 ..... . .............          @r_r_ri_na
LDUB        11 ..... 000001 ..... . .............          @r_r_ri_na
LDUH        11 ..... 000010 ..... . .............          @r_r_ri_na
LDD         11 ..... 000011 ..... . .............          @r_r_ri_na
LDSW        11 ..... 001000 ..... . .............          @r_r_ri_na
LDSB        11 ..... 001001 ..... . .............          @r_r_ri_na
LDSH        11 ..... 001010 ..... . .............          @r_r_ri_na
LDX         11 ..... 001011 ..... . .............          @r_r_ri_na

STW         11 ..... 000100 ..... . .............          @r_r_ri_na
STB         11 ..... 000101 ..... . .............          @r_r_ri_na
STH         11 ..... 000110 ..... . .............          @r_r_ri_na
STD         11 ..... 000111 ..... . .............          @r_r_ri_na
STX         11 ..... 001110 ..... . .............          @r_r_ri_na

LDUW        11 ..... 010000 ..... . .............          @r_r_r_asi # LDUWA
LDUW        11 ..... 010000 ..... . .............          @r_r_i_asi # LDUWA
LDUB        11 ..... 010001 ..... . .............          @r_r_r_asi # LDUBA
LDUB        11 ..... 010001 ..... . .............          @r_r_i_asi # LDUBA
LDUH        11 ..... 010010 ..... . .............          @r_r_r_asi # LDUHA
LDUH        11 ..... 010010 ..... . .............          @r_r_i_asi # LDUHA
LDD         11 ..... 010011 ..... . .............          @r_r_r_asi # LDDA
LDD         11 ..... 010011 ..... . .............          @r_r_i_asi # LDDA
LDX         11 ..... 011011 ..... . .............          @r_r_r_asi # LDXA
LDX         11 ..... 011011 ..... . .............          @r_r_i_asi # LDXA
LDSB        11 ..... 011001 ..... . .............          @r_r_r_asi # LDSBA
LDSB        11 ..... 011001 ..... . .............          @r_r_i_asi # LDSBA
LDSH        11 ..... 011010 ..... . .............          @r_r_r_asi # LDSHA
LDSH        11 ..... 011010 ..... . .............          @r_r_i_asi # LDSHA
LDSW        11 ..... 011000 ..... . .............          @r_r_r_asi # LDSWA
LDSW        11 ..... 011000 ..... . .............          @r_r_i_asi # LDSWA

STW         11 ..... 010100 ..... . .............          @r_r_r_asi # STWA
STW         11 ..... 010100 ..... . .............          @r_r_i_asi # STWA
STB         11 ..... 010101 ..... . .............          @r_r_r_asi # STBA
STB         11 ..... 010101 ..... . .............          @r_r_i_asi # STBA
STH         11 ..... 010110 ..... . .............          @r_r_r_asi # STHA
STH         11 ..... 010110 ..... . .............          @r_r_i_asi # STHA
STD         11 ..... 010111 ..... . .............          @r_r_r_asi # STDA
STD         11 ..... 010111 ..... . .............          @r_r_i_asi # STDA
STX         11 ..... 011110 ..... . .............          @r_r_r_asi # STXA
STX         11 ..... 011110 ..... . .............          @r_r_i_asi # STXA

LDF         11 ..... 100000 ..... . .............          @r_r_ri_na
LDFSR       11 00000 100001 ..... . .............          @n_r_ri
LDXFSR      11 00001 100001 ..... . .............          @n_r_ri
LDQF        11 ..... 100010 ..... . .............          @q_r_ri_na
LDDF        11 ..... 100011 ..... . .............          @d_r_ri_na

STF         11 ..... 100100 ..... . .............          @r_r_ri_na
STFSR       11 00000 100101 ..... . .............          @n_r_ri
STXFSR      11 00001 100101 ..... . .............          @n_r_ri
{
  STQF      11 ..... 100110 ..... . .............          @q_r_ri_na
  STDFQ     11 ----- 100110 ----- - -------------
}
STDF        11 ..... 100111 ..... . .............          @d_r_ri_na

LDSTUB      11 ..... 001101 ..... . .............          @r_r_ri_na
LDSTUB      11 ..... 011101 ..... . .............          @r_r_r_asi # LDSTUBA
LDSTUB      11 ..... 011101 ..... . .............          @r_r_i_asi # LDSTUBA

SWAP        11 ..... 001111 ..... . .............          @r_r_ri_na
SWAP        11 ..... 011111 ..... . .............          @r_r_r_asi # SWAPA
SWAP        11 ..... 011111 ..... . .............          @r_r_i_asi # SWAPA

CASA        11 ..... 111100 ..... . .............          @r_r_r_asi
CASA        11 ..... 111100 ..... . .............          @casa_imm
CASXA       11 ..... 111110 ..... . .............          @r_r_r_asi
CASXA       11 ..... 111110 ..... . .............          @casa_imm

NOP_v9      11 ----- 101101 ----- 0 00000000 -----         # PREFETCH
NOP_v9      11 ----- 101101 ----- 1 -------------          # PREFETCH
NOP_v9      11 ----- 111101 ----- - -------------          # PREFETCHA

{
  [
    LDFA    11 ..... 110000 ..... . .............          @r_r_r_asi
    LDFA    11 ..... 110000 ..... . .............          @r_r_i_asi
  ]
  NCP       11 ----- 110000 ----- --------- -----          # v8 LDC
}
NCP         11 ----- 110001 ----- --------- -----          # v8 LDCSR
LDQFA       11 ..... 110010 ..... . .............          @q_r_r_asi
LDQFA       11 ..... 110010 ..... . .............          @q_r_i_asi
{
  [
    LDDFA   11 ..... 110011 ..... . .............          @d_r_r_asi
    LDDFA   11 ..... 110011 ..... . .............          @d_r_i_asi
  ]
  NCP       11 ----- 110011 ----- --------- -----          # v8 LDDC
}

{
  [
    STFA    11 ..... 110100 ..... . .............          @r_r_r_asi
    STFA    11 ..... 110100 ..... . .............          @r_r_i_asi
  ]
  NCP       11 ----- 110100 ----- --------- -----          # v8 STC
}
NCP         11 ----- 110101 ----- --------- -----          # v8 STCSR
{
  [
    STQFA   11 ..... 110110 ..... . .............          @q_r_r_asi
    STQFA   11 ..... 110110 ..... . .............          @q_r_i_asi
  ]
  NCP       11 ----- 110110 ----- --------- -----          # v8 STDCQ
}
{
  [
    STDFA   11 ..... 110111 ..... . .............          @d_r_r_asi
    STDFA   11 ..... 110111 ..... . .............          @d_r_i_asi
  ]
  NCP       11 ----- 110111 ----- --------- -----          # v8 STDC
}