# 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