1# RUN: llc %s -mtriple=loongarch64 -start-after=prologepilog -O0 -filetype=obj -o - \
2# RUN:   | extract-section .text \
3# RUN:   | FileCheck %s -check-prefix=CHECK-ENC
4# RUN: llc %s -mtriple=loongarch64 -start-after=prologepilog -O0 -filetype=asm -o - \
5# RUN:   | FileCheck %s -check-prefix=CHECK-ASM
6
7# -------------------------------------------------------------------------------------------------
8#                                           Encoding format: I15
9# -------------------------------------------------------------------------------------------------
10# ---------------------------------------------------+---------------------------------------------
11#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
12# ---------------------------------------------------+---------------------------------------------
13#                    opcode                          |                  imm15
14# ---------------------------------------------------+---------------------------------------------
15
16---
17# CHECK-LABEL: test_DBAR:
18# CHECK-ENC: 0 0 1 1 1 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19# CHECK-ASM: dbar	0
20name: test_DBAR
21body: |
22  bb.0:
23    DBAR 0
24...
25---
26# CHECK-LABEL: test_IBAR:
27# CHECK-ENC: 0 0 1 1 1 0 0 0 0 1 1 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28# CHECK-ASM: ibar	0
29name: test_IBAR
30body: |
31  bb.0:
32    IBAR 0
33...
34---
35# CHECK-LABEL: test_SYSCALL:
36# CHECK-ENC: 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0
37# CHECK-ASM: syscall	100
38name: test_SYSCALL
39body: |
40  bb.0:
41    SYSCALL 100
42...
43---
44# CHECK-LABEL: test_BREAK:
45# CHECK-ENC: 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 1
46# CHECK-ASM: break	199
47name: test_BREAK
48body: |
49  bb.0:
50    BREAK 199
51...
52
53# -------------------------------------------------------------------------------------------------
54#                                           Encoding format: I26
55# -------------------------------------------------------------------------------------------------
56# ------------------+-----------------------------------------------+------------------------------
57#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
58# ------------------+-----------------------------------------------+------------------------------
59#     opcode        |                   imm26{15-0}                 |       imm26{25-16}
60# ------------------+-----------------------------------------------+------------------------------
61
62---
63# CHECK-LABEL: test_B:
64# CHECK-ENC: 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0
65# CHECK-ASM: b	80
66name: test_B
67body: |
68  bb.0:
69    B 80
70...
71---
72# CHECK-LABEL: test_BL:
73# CHECK-ENC: 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
74# CHECK-ASM: bl	136
75name: test_BL
76body: |
77  bb.0:
78    BL 136
79...
80
81# --------------------------------------------------------------------------------------------------------
82#                                           Encoding format: BSTR_W
83# --------------------------------------------------------------------------------------------------------
84# ---------------------------------+--------------+---------+--------------+--------------+---------------
85#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16     15    14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
86# ---------------------------------+--------------+---------+--------------+--------------+---------------
87#            opcode{11-1}          |      msb     |opcode{0}|      lsb     |      rj      |      rd
88# ---------------------------------+--------------+---------+--------------+--------------+---------------
89
90---
91# CHECK-LABEL: test_BSTRINS_W:
92# CHECK-ENC: 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0
93# CHECK-ASM: bstrins.w	$a0, $a1, 7, 2
94name: test_BSTRINS_W
95body: |
96  bb.0:
97    $r4 = BSTRINS_W $r4, $r5, 7, 2
98...
99---
100# CHECK-LABEL: test_BSTRPICK_W:
101# CHECK-ENC: 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 0 1 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0
102# CHECK-ASM: bstrpick.w	$a0, $a1, 10, 4
103name: test_BSTRPICK_W
104body: |
105  bb.0:
106    $r4 = BSTRPICK_W $r5, 10, 4
107...
108
109# -------------------------------------------------------------------------------------------------
110#                                           Encoding format: BSTR_D
111# -------------------------------------------------------------------------------------------------
112# ------------------------------+-----------------+-----------------+--------------+---------------
113#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
114# ------------------------------+-----------------+-----------------+--------------+---------------
115#          opcode               |       msb       |        lsb      |      rj      |      rd
116# ------------------------------+-----------------+-----------------+--------------+---------------
117
118---
119# CHECK-LABEL: test_BSTRINS_D:
120# CHECK-ENC: 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0
121# CHECK-ASM: bstrins.d	$a0, $a1, 7, 2
122name: test_BSTRINS_D
123body: |
124  bb.0:
125    $r4 = BSTRINS_D $r4, $r5, 7, 2
126...
127---
128# CHECK-LABEL: test_BSTRPICK_D:
129# CHECK-ENC: 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 0 0
130# CHECK-ASM: bstrpick.d	$a0, $a1, 39, 22
131name: test_BSTRPICK_D
132body: |
133  bb.0:
134    $r4 = BSTRPICK_D $r5, 39, 22
135...
136
137# -------------------------------------------------------------------------------------------------
138#                                           Encoding format: ASRT
139# -------------------------------------------------------------------------------------------------
140# ---------------------------------------------------+--------------+--------------+---------------
141#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
142# ---------------------------------------------------+--------------+--------------+---------------
143#                 opcode                             |      rk      |      rj      |      0x0
144# ---------------------------------------------------+--------------+--------------+---------------
145
146---
147# CHECK-LABEL: test_ASRTLE_D:
148# CHECK-ENC: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0
149# CHECK-ASM: asrtle.d	$a0, $a1
150name: test_ASRTLE_D
151body: |
152  bb.0:
153    ASRTLE_D $r4, $r5
154...
155---
156# CHECK-LABEL: test_ASRTGT_D:
157# CHECK-ENC: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0
158# CHECK-ASM: asrtgt.d	$a0, $a1
159name: test_ASRTGT_D
160body: |
161  bb.0:
162    ASRTGT_D $r4, $r5
163...
164
165# -------------------------------------------------------------------------------------------------
166#                                           Encoding format: PRELD
167# -------------------------------------------------------------------------------------------------
168# ------------------------------+-----------------------------------+--------------+---------------
169#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
170# ------------------------------+-----------------------------------+--------------+---------------
171#           opcode              |                imm12              |      rj      |      imm5
172# ------------------------------+-----------------------------------+--------------+---------------
173
174---
175# CHECK-LABEL: test_PRELD:
176# CHECK-ENC: 0 0 1 0 1 0 1 0 1 1 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 0 0 1 1 1 1
177# CHECK-ASM: preld	15, $a0, 21
178name: test_PRELD
179body: |
180  bb.0:
181    PRELD 15, $r4, 21
182...
183
184# -------------------------------------------------------------------------------------------------
185#                                           Encoding format: PRELDX
186# -------------------------------------------------------------------------------------------------
187# ---------------------------------------------------+--------------+--------------+---------------
188#  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
189# ---------------------------------------------------+--------------+--------------+---------------
190#                     opcode                         |      rk      |      rj      |      imm5
191# ---------------------------------------------------+--------------+--------------+---------------
192
193---
194# CHECK-LABEL: test_PRELDX:
195# CHECK-ENC: 0 0 1 1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 1 0 0 1 0 0 0 1 0 1 1
196# CHECK-ASM: preldx	11, $a0, $a1
197name: test_PRELDX
198body: |
199  bb.0:
200    PRELDX 11, $r4, $r5
201