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: 2RI5
# -------------------------------------------------------------------------------------------------
# ---------------------------------------------------+--------------+--------------+---------------
#  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                           |    imm5      |      rj      |      rd
# ---------------------------------------------------+--------------+--------------+---------------

---
# CHECK-LABEL: test_SLLI_W:
# CHECK-ENC: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: slli.w	$a0, $a1, 0
name: test_SLLI_W
body: |
  bb.0:
    $r4 = SLLI_W $r5, 0
...
---
# CHECK-LABEL: test_SRLI_W:
# CHECK-ENC: 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 1 1 1 1 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: srli.w	$a0, $a1, 30
name: test_SRLI_W
body: |
  bb.0:
    $r4 = SRLI_W $r5, 30
...
---
# CHECK-LABEL: test_SRAI_W:
# CHECK-ENC: 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 0 0 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: srai.w	$a0, $a1, 24
name: test_SRAI_W
body: |
  bb.0:
    $r4 = SRAI_W $r5, 24
...
---
# CHECK-LABEL: test_ROTRI_W:
# CHECK-ENC: 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 1 0 1 1 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: rotri.w	$a0, $a1, 23
name: test_ROTRI_W
body: |
  bb.0:
    $r4 = ROTRI_W $r5, 23
...

# -------------------------------------------------------------------------------------------------
#                                           Encoding format: 2RI6
# -------------------------------------------------------------------------------------------------
# ------------------------------------------------+-----------------+--------------+---------------
#  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                      |      imm6       |      rj      |      rd
# ------------------------------------------------+-----------------+--------------+---------------

---
# CHECK-LABEL: test_SLLI_D:
# CHECK-ENC: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 1 1 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: slli.d	$a0, $a1, 39
name: test_SLLI_D
body: |
  bb.0:
    $r4 = SLLI_D $r5, 39
...
---
# CHECK-LABEL: test_SRLI_D:
# CHECK-ENC: 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 1 0 0 1 1 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: srli.d	$a0, $a1, 38
name: test_SRLI_D
body: |
  bb.0:
    $r4 = SRLI_D $r5, 38
...
---
# CHECK-LABEL: test_SRAI_D:
# CHECK-ENC: 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 1 1 0 1 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: srai.d	$a0, $a1, 27
name: test_SRAI_D
body: |
  bb.0:
    $r4 = SRAI_D $r5, 27
...
---
# CHECK-LABEL: test_ROTRI_D:
# CHECK-ENC: 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 1 1 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: rotri.d	$a0, $a1, 7
name: test_ROTRI_D
body: |
  bb.0:
    $r4 = ROTRI_D $r5, 7
...

# -------------------------------------------------------------------------------------------------
#                                           Encoding format: 2RI12
# -------------------------------------------------------------------------------------------------
# ------------------------------+-----------------------------------+--------------+---------------
#  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      |      rd
# ------------------------------+-----------------------------------+--------------+---------------

---
# CHECK-LABEL: test_SLTI:
# CHECK-ENC: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: slti	$a0, $a1, 235
name: test_SLTI
body: |
  bb.0:
    $r4 = SLTI $r5, 235
...
---
# CHECK-LABEL: test_SLTUI:
# CHECK-ENC: 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: sltui	$a0, $a1, 162
name: test_SLTUI
body: |
  bb.0:
    $r4 = SLTUI $r5, 162
...
---
# CHECK-LABEL: test_ADDI_W:
# CHECK-ENC: 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 1 1 0 1 1 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: addi.w	$a0, $a1, 246
name: test_ADDI_W
body: |
  bb.0:
    $r4 = ADDI_W $r5, 246
...
---
# CHECK-LABEL: test_ADDI_D:
# CHECK-ENC: 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: addi.d	$a0, $a1, 75
name: test_ADDI_D
body: |
  bb.0:
    $r4 = ADDI_D $r5, 75
...
---
# CHECK-LABEL: test_LU52I_D:
# CHECK-ENC: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: lu52i.d	$a0, $a1, 195
name: test_LU52I_D
body: |
  bb.0:
    $r4 = LU52I_D $r5, 195
...
---
# CHECK-LABEL: test_ANDI:
# CHECK-ENC: 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: andi	$a0, $a1, 106
name: test_ANDI
body: |
  bb.0:
    $r4 = ANDI $r5, 106
...
---
# CHECK-LABEL: test_ORI:
# CHECK-ENC: 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: ori	$a0, $a1, 47
name: test_ORI
body: |
  bb.0:
    $r4 = ORI $r5, 47
...
---
# CHECK-LABEL: test_XORI:
# CHECK-ENC: 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 0 0 0 1 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: xori	$a0, $a1, 99
name: test_XORI
body: |
  bb.0:
    $r4 = XORI $r5, 99
...
---
# CHECK-LABEL: test_LD_B:
# CHECK-ENC: 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: ld.b	$a0, $a1, 21
name: test_LD_B
body: |
  bb.0:
    $r4 = LD_B $r5, 21
...
---
# CHECK-LABEL: test_LD_H:
# CHECK-ENC: 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: ld.h	$a0, $a1, 80
name: test_LD_H
body: |
  bb.0:
    $r4 = LD_H $r5, 80
...
---
# CHECK-LABEL: test_LD_W:
# CHECK-ENC: 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: ld.w	$a0, $a1, 92
name: test_LD_W
body: |
  bb.0:
    $r4 = LD_W $r5, 92
...
---
# CHECK-LABEL: test_LD_BU:
# CHECK-ENC: 0 0 1 0 1 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: ld.bu	$a0, $a1, 150
name: test_LD_BU
body: |
  bb.0:
    $r4 = LD_BU $r5, 150
...
---
# CHECK-LABEL: test_LD_HU:
# CHECK-ENC: 0 0 1 0 1 0 1 0 0 1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: ld.hu	$a0, $a1, 198
name: test_LD_HU
body: |
  bb.0:
    $r4 = LD_HU $r5, 198
...
---
# CHECK-LABEL: test_LD_WU:
# CHECK-ENC: 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: ld.wu	$a0, $a1, 31
name: test_LD_WU
body: |
  bb.0:
    $r4 = LD_WU $r5, 31
...
---
# CHECK-LABEL: test_ST_B:
# CHECK-ENC: 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: st.b	$a0, $a1, 95
name: test_ST_B
body: |
  bb.0:
    ST_B $r4, $r5, 95
...
---
# CHECK-LABEL: test_ST_H:
# CHECK-ENC: 0 0 1 0 1 0 0 1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: st.h	$a0, $a1, 122
name: test_ST_H
body: |
  bb.0:
    ST_H $r4, $r5, 122
...
---
# CHECK-LABEL: test_ST_W:
# CHECK-ENC: 0 0 1 0 1 0 0 1 1 0 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: st.w	$a0, $a1, 175
name: test_ST_W
body: |
  bb.0:
    ST_W $r4, $r5, 175
...
---
# CHECK-LABEL: test_ST_D:
# CHECK-ENC: 0 0 1 0 1 0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: st.d	$a0, $a1, 60
name: test_ST_D
body: |
  bb.0:
    ST_D $r4, $r5, 60
...

# -------------------------------------------------------------------------------------------------
#                                           Encoding format: 2RI14
# -------------------------------------------------------------------------------------------------
# ------------------------+-----------------------------------------+--------------+---------------
#  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          |              imm14                      |      rj      |      rd
# ------------------------+-----------------------------------------+--------------+---------------

---
# CHECK-LABEL: test_LDPTR_W:
# CHECK-ENC: 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: ldptr.w	$a0, $a1, 264
name: test_LDPTR_W
body: |
  bb.0:
    $r4 = LDPTR_W $r5, 264
...
---
# CHECK-LABEL: test_LDPTR_D:
# CHECK-ENC: 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: ldptr.d	$a0, $a1, 224
name: test_LDPTR_D
body: |
  bb.0:
    $r4 = LDPTR_D $r5, 224
...
---
# CHECK-LABEL: test_STPTR_W:
# CHECK-ENC: 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: stptr.w	$a0, $a1, 348
name: test_STPTR_W
body: |
  bb.0:
    STPTR_W $r4, $r5, 348
...
---
# CHECK-LABEL: test_STPTR_D:
# CHECK-ENC: 0 0 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: stptr.d	$a0, $a1, 580
name: test_STPTR_D
body: |
  bb.0:
    STPTR_D $r4, $r5, 580
...
---
# CHECK-LABEL: test_LL_W:
# CHECK-ENC: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: ll.w	$a0, $a1, 972
name: test_LL_W
body: |
  bb.0:
    $r4 = LL_W $r5, 972
...
---
# CHECK-LABEL: test_LL_D:
# CHECK-ENC: 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: ll.d	$a0, $a1, 296
name: test_LL_D
body: |
  bb.0:
    $r4 = LL_D $r5, 296
...
---
# CHECK-LABEL: test_SC_W:
# CHECK-ENC: 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: sc.w	$a0, $a1, 384
name: test_SC_W
body: |
  bb.0:
    $r4 = SC_W $r4, $r5, 384
...
---
# CHECK-LABEL: test_SC_D:
# CHECK-ENC: 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: sc.d	$a0, $a1, 420
name: test_SC_D
body: |
  bb.0:
    $r4 = SC_D $r4, $r5, 420
...

# -------------------------------------------------------------------------------------------------
#                                           Encoding format: 2RI16
# -------------------------------------------------------------------------------------------------
# ------------------+-----------------------------------------------+--------------+---------------
#  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        |                imm16                          |      rj      |      rd
# ------------------+-----------------------------------------------+--------------+---------------

---
# CHECK-LABEL: test_ADDU16I_D:
# CHECK-ENC: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: addu16i.d	$a0, $a1, 23
name: test_ADDU16I_D
body: |
  bb.0:
    $r4 = ADDU16I_D $r5, 23
...
---
# CHECK-LABEL: test_JIRL:
# CHECK-ENC: 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 1 0 0 1 0 0
# CHECK-ASM: jirl	$a0, $a1, 196
name: test_JIRL
body: |
  bb.0:
    $r4 = JIRL $r5, 196
...
---
# CHECK-LABEL: test_BEQ:
# CHECK-ENC: 0 1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 1
# CHECK-ASM: beq	$a0, $a1, 784
name: test_BEQ
body: |
  bb.0:
    BEQ $r4, $r5, 784
...
---
# CHECK-LABEL: test_BNE:
# CHECK-ENC: 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0 1 0 1
# CHECK-ASM: bne	$a0, $a1, 76
name: test_BNE
body: |
  bb.0:
    BNE $r4, $r5, 76
...
---
# CHECK-LABEL: test_BLT:
# CHECK-ENC: 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 0 0 0 0 1 0 1
# CHECK-ASM: blt	$a0, $a1, 492
name: test_BLT
body: |
  bb.0:
    BLT $r4, $r5, 492
...
---
# CHECK-LABEL: test_BGE:
# CHECK-ENC: 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 1
# CHECK-ASM: bge	$a0, $a1, 48
name: test_BGE
body: |
  bb.0:
    BGE $r4, $r5, 48
...
---
# CHECK-LABEL: test_BLTU:
# CHECK-ENC: 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1
# CHECK-ASM: bltu	$a0, $a1, 68
name: test_BLTU
body: |
  bb.0:
    BLTU $r4, $r5, 68
...
---
# CHECK-LABEL: test_BGEU:
# CHECK-ENC: 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 1 0 1
# CHECK-ASM: bgeu	$a0, $a1, 352
name: test_BGEU
body: |
  bb.0:
    BGEU $r4, $r5, 352