Compiler projects using llvm
# RUN: llc %s -mtriple=loongarch64 -start-after=prologepilog -O0 -filetype=obj -o - \
# RUN:   | extract-section .text \
# RUN:   | FileCheck %s -check-prefix=CHECK-ENC
# RUN: llc %s -mtriple=loongarch64 -start-after=prologepilog -O0 -filetype=asm -o - \
# RUN:   | FileCheck %s -check-prefix=CHECK-ASM

# -------------------------------------------------------------------------------------------------
#                                           Encoding format: I15
# -------------------------------------------------------------------------------------------------
# ---------------------------------------------------+---------------------------------------------
#  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
# ---------------------------------------------------+---------------------------------------------
#                    opcode                          |                  imm15
# ---------------------------------------------------+---------------------------------------------

---
# CHECK-LABEL: test_DBAR:
# 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
# CHECK-ASM: dbar	0
name: test_DBAR
body: |
  bb.0:
    DBAR 0
...
---
# CHECK-LABEL: test_IBAR:
# 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
# CHECK-ASM: ibar	0
name: test_IBAR
body: |
  bb.0:
    IBAR 0
...
---
# CHECK-LABEL: test_SYSCALL:
# 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
# CHECK-ASM: syscall	100
name: test_SYSCALL
body: |
  bb.0:
    SYSCALL 100
...
---
# CHECK-LABEL: test_BREAK:
# 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
# CHECK-ASM: break	199
name: test_BREAK
body: |
  bb.0:
    BREAK 199
...

# -------------------------------------------------------------------------------------------------
#                                           Encoding format: I26
# -------------------------------------------------------------------------------------------------
# ------------------+-----------------------------------------------+------------------------------
#  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
# ------------------+-----------------------------------------------+------------------------------
#     opcode        |                   imm26{15-0}                 |       imm26{25-16}
# ------------------+-----------------------------------------------+------------------------------

---
# CHECK-LABEL: test_B:
# 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
# CHECK-ASM: b	80
name: test_B
body: |
  bb.0:
    B 80
...
---
# CHECK-LABEL: test_BL:
# 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
# CHECK-ASM: bl	136
name: test_BL
body: |
  bb.0:
    BL 136
...

# --------------------------------------------------------------------------------------------------------
#                                           Encoding format: BSTR_W
# --------------------------------------------------------------------------------------------------------
# ---------------------------------+--------------+---------+--------------+--------------+---------------
#  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
# ---------------------------------+--------------+---------+--------------+--------------+---------------
#            opcode{11-1}          |      msb     |opcode{0}|      lsb     |      rj      |      rd
# ---------------------------------+--------------+---------+--------------+--------------+---------------

---
# CHECK-LABEL: test_BSTRINS_W:
# 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
# CHECK-ASM: bstrins.w	$a0, $a1, 7, 2
name: test_BSTRINS_W
body: |
  bb.0:
    $r4 = BSTRINS_W $r4, $r5, 7, 2
...
---
# CHECK-LABEL: test_BSTRPICK_W:
# 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
# CHECK-ASM: bstrpick.w	$a0, $a1, 10, 4
name: test_BSTRPICK_W
body: |
  bb.0:
    $r4 = BSTRPICK_W $r5, 10, 4
...

# -------------------------------------------------------------------------------------------------
#                                           Encoding format: BSTR_D
# -------------------------------------------------------------------------------------------------
# ------------------------------+-----------------+-----------------+--------------+---------------
#  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
# ------------------------------+-----------------+-----------------+--------------+---------------
#          opcode               |       msb       |        lsb      |      rj      |      rd
# ------------------------------+-----------------+-----------------+--------------+---------------

---
# CHECK-LABEL: test_BSTRINS_D:
# 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
# CHECK-ASM: bstrins.d	$a0, $a1, 7, 2
name: test_BSTRINS_D
body: |
  bb.0:
    $r4 = BSTRINS_D $r4, $r5, 7, 2
...
---
# CHECK-LABEL: test_BSTRPICK_D:
# 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
# CHECK-ASM: bstrpick.d	$a0, $a1, 39, 22
name: test_BSTRPICK_D
body: |
  bb.0:
    $r4 = BSTRPICK_D $r5, 39, 22
...

# -------------------------------------------------------------------------------------------------
#                                           Encoding format: ASRT
# -------------------------------------------------------------------------------------------------
# ---------------------------------------------------+--------------+--------------+---------------
#  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
# ---------------------------------------------------+--------------+--------------+---------------
#                 opcode                             |      rk      |      rj      |      0x0
# ---------------------------------------------------+--------------+--------------+---------------

---
# CHECK-LABEL: test_ASRTLE_D:
# 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
# CHECK-ASM: asrtle.d	$a0, $a1
name: test_ASRTLE_D
body: |
  bb.0:
    ASRTLE_D $r4, $r5
...
---
# CHECK-LABEL: test_ASRTGT_D:
# 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
# CHECK-ASM: asrtgt.d	$a0, $a1
name: test_ASRTGT_D
body: |
  bb.0:
    ASRTGT_D $r4, $r5
...

# -------------------------------------------------------------------------------------------------
#                                           Encoding format: PRELD
# -------------------------------------------------------------------------------------------------
# ------------------------------+-----------------------------------+--------------+---------------
#  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
# ------------------------------+-----------------------------------+--------------+---------------
#           opcode              |                imm12              |      rj      |      imm5
# ------------------------------+-----------------------------------+--------------+---------------

---
# CHECK-LABEL: test_PRELD:
# 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
# CHECK-ASM: preld	15, $a0, 21
name: test_PRELD
body: |
  bb.0:
    PRELD 15, $r4, 21
...

# -------------------------------------------------------------------------------------------------
#                                           Encoding format: PRELDX
# -------------------------------------------------------------------------------------------------
# ---------------------------------------------------+--------------+--------------+---------------
#  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
# ---------------------------------------------------+--------------+--------------+---------------
#                     opcode                         |      rk      |      rj      |      imm5
# ---------------------------------------------------+--------------+--------------+---------------

---
# CHECK-LABEL: test_PRELDX:
# 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
# CHECK-ASM: preldx	11, $a0, $a1
name: test_PRELDX
body: |
  bb.0:
    PRELDX 11, $r4, $r5