1# RUN: llvm-mc %s -triple=riscv32 -mattr=+f -M no-aliases -show-encoding \ 2# RUN: | FileCheck -check-prefixes=CHECK-ASM %s 3# RUN: llvm-mc %s -triple riscv64 -mattr=+f -M no-aliases -show-encoding \ 4# RUN: | FileCheck -check-prefixes=CHECK-ASM %s 5# RUN: llvm-mc -filetype=obj -triple=riscv32 -mattr=+f < %s \ 6# RUN: | llvm-objdump --mattr=+f -M no-aliases -d -r - \ 7# RUN: | FileCheck -check-prefixes=CHECK-OBJ %s 8# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+f < %s \ 9# RUN: | llvm-objdump --mattr=+f -M no-aliases -d -r - \ 10# RUN: | FileCheck -check-prefixes=CHECK-OBJ %s 11 12target: 13 14# CHECK-ASM: .insn r 51, 0, 0, a0, a1, a2 15# CHECK-ASM: encoding: [0x33,0x85,0xc5,0x00] 16# CHECK-OBJ: add a0, a1, a2 17.insn r 0x33, 0, 0, a0, a1, a2 18# CHECK-ASM: .insn r 51, 0, 0, a0, a1, a2 19# CHECK-ASM: encoding: [0x33,0x85,0xc5,0x00] 20# CHECK-OBJ: add a0, a1, a2 21.insn r OP, 0, 0, a0, a1, a2 22 23# CHECK-ASM: .insn i 19, 0, a0, a1, 13 24# CHECK-ASM: encoding: [0x13,0x85,0xd5,0x00] 25# CHECK-OBJ: addi a0, a1, 0xd 26.insn i 0x13, 0, a0, a1, 13 27# CHECK-ASM: .insn i 19, 0, a0, a1, 13 28# CHECK-ASM: encoding: [0x13,0x85,0xd5,0x00] 29# CHECK-OBJ: addi a0, a1, 0xd 30.insn i OP_IMM, 0, a0, a1, 13 31 32# CHECK-ASM: .insn i 103, 0, a0, 10(a1) 33# CHECK-ASM: encoding: [0x67,0x85,0xa5,0x00] 34# CHECK-OBJ: jalr a0, 0xa(a1) 35.insn i 0x67, 0, a0, 10(a1) 36# CHECK-ASM: .insn i 103, 0, a0, 10(a1) 37# CHECK-ASM: encoding: [0x67,0x85,0xa5,0x00] 38# CHECK-OBJ: jalr a0, 0xa(a1) 39.insn i JALR, 0, a0, 10(a1) 40 41# CHECK-ASM: .insn i 103, 0, a0, 0(a1) 42# CHECK-ASM: encoding: [0x67,0x85,0x05,0x00] 43# CHECK-OBJ: jalr a0, 0x0(a1) 44.insn i 0x67, 0, a0, (a1) 45# CHECK-ASM: .insn i 103, 0, a0, 0(a1) 46# CHECK-ASM: encoding: [0x67,0x85,0x05,0x00] 47# CHECK-OBJ: jalr a0, 0x0(a1) 48.insn i JALR, 0, a0, (a1) 49 50# CHECK-ASM: .insn i 3, 0, a0, 4(a1) 51# CHECK-ASM: encoding: [0x03,0x85,0x45,0x00] 52# CHECK-OBJ: lb a0, 0x4(a1) 53.insn i 0x3, 0, a0, 4(a1) 54# CHECK-ASM: .insn i 3, 0, a0, 4(a1) 55# CHECK-ASM: encoding: [0x03,0x85,0x45,0x00] 56# CHECK-OBJ: lb a0, 0x4(a1) 57.insn i LOAD, 0, a0, 4(a1) 58 59# CHECK-ASM: .insn i 3, 0, a0, 0(a1) 60# CHECK-ASM: encoding: [0x03,0x85,0x05,0x00] 61# CHECK-OBJ: lb a0, 0x0(a1) 62.insn i 0x3, 0, a0, (a1) 63# CHECK-ASM: .insn i 3, 0, a0, 0(a1) 64# CHECK-ASM: encoding: [0x03,0x85,0x05,0x00] 65# CHECK-OBJ: lb a0, 0x0(a1) 66.insn i LOAD, 0, a0, (a1) 67 68# CHECK-ASM: .insn b 99, 0, a0, a1, target 69# CHECK-ASM: [0x63'A',A,0xb5'A',A] 70# CHECK-OBJ: beq a0, a1, 0x0 <target> 71.insn sb 0x63, 0, a0, a1, target 72# CHECK-ASM: .insn b 99, 0, a0, a1, target 73# CHECK-ASM: [0x63'A',A,0xb5'A',A] 74# CHECK-OBJ: beq a0, a1, 0x0 <target> 75.insn sb BRANCH, 0, a0, a1, target 76 77# CHECK-ASM: .insn b 99, 0, a0, a1, target 78# CHECK-ASM: [0x63'A',A,0xb5'A',A] 79# CHECK-OBJ: beq a0, a1, 0x0 <target> 80.insn b 0x63, 0, a0, a1, target 81# CHECK-ASM: .insn b 99, 0, a0, a1, target 82# CHECK-ASM: [0x63'A',A,0xb5'A',A] 83# CHECK-OBJ: beq a0, a1, 0x0 <target> 84.insn b BRANCH, 0, a0, a1, target 85 86# CHECK-ASM: .insn s 35, 0, a0, 4(a1) 87# CHECK-ASM: encoding: [0x23,0x82,0xa5,0x00] 88# CHECK-OBJ: sb a0, 0x4(a1) 89.insn s 0x23, 0, a0, 4(a1) 90# CHECK-ASM: .insn s 35, 0, a0, 4(a1) 91# CHECK-ASM: encoding: [0x23,0x82,0xa5,0x00] 92# CHECK-OBJ: sb a0, 0x4(a1) 93.insn s STORE, 0, a0, 4(a1) 94 95# CHECK-ASM: .insn s 35, 0, a0, 0(a1) 96# CHECK-ASM: encoding: [0x23,0x80,0xa5,0x00] 97# CHECK-OBJ: sb a0, 0x0(a1) 98.insn s 0x23, 0, a0, (a1) 99# CHECK-ASM: .insn s 35, 0, a0, 0(a1) 100# CHECK-ASM: encoding: [0x23,0x80,0xa5,0x00] 101# CHECK-OBJ: sb a0, 0x0(a1) 102.insn s STORE, 0, a0, (a1) 103 104# CHECK-ASM: .insn u 55, a0, 4095 105# CHECK-ASM: encoding: [0x37,0xf5,0xff,0x00] 106# CHECK-OBJ: lui a0, 0xfff 107.insn u 0x37, a0, 0xfff 108# CHECK-ASM: .insn u 55, a0, 4095 109# CHECK-ASM: encoding: [0x37,0xf5,0xff,0x00] 110# CHECK-OBJ: lui a0, 0xfff 111.insn u LUI, a0, 0xfff 112 113# CHECK-ASM: .insn j 111, a0, target 114# CHECK-ASM: encoding: [0x6f,0bAAAA0101,A,A] 115# CHECK-OBJ: jal a0, 0x0 <target> 116.insn uj 0x6f, a0, target 117# CHECK-ASM: .insn j 111, a0, target 118# CHECK-ASM: encoding: [0x6f,0bAAAA0101,A,A] 119# CHECK-OBJ: jal a0, 0x0 <target> 120.insn uj JAL, a0, target 121 122# CHECK-ASM: .insn j 111, a0, target 123# CHECK-ASM: encoding: [0x6f,0bAAAA0101,A,A] 124# CHECK-OBJ: jal a0, 0x0 <target> 125.insn j 0x6f, a0, target 126# CHECK-ASM: .insn j 111, a0, target 127# CHECK-ASM: encoding: [0x6f,0bAAAA0101,A,A] 128# CHECK-OBJ: jal a0, 0x0 <target> 129.insn j JAL, a0, target 130 131# CHECK-ASM: .insn r4 67, 0, 0, fa0, fa1, fa2, fa3 132# CHECK-ASM: encoding: [0x43,0x85,0xc5,0x68] 133# CHECK-OBJ: fmadd.s fa0, fa1, fa2, fa3, rne 134.insn r 0x43, 0, 0, fa0, fa1, fa2, fa3 135# CHECK-ASM: .insn r4 67, 0, 0, fa0, fa1, fa2, fa3 136# CHECK-ASM: encoding: [0x43,0x85,0xc5,0x68] 137# CHECK-OBJ: fmadd.s fa0, fa1, fa2, fa3, rne 138.insn r MADD, 0, 0, fa0, fa1, fa2, fa3 139 140# CHECK-ASM: .insn r4 67, 0, 0, fa0, fa1, fa2, fa3 141# CHECK-ASM: encoding: [0x43,0x85,0xc5,0x68] 142# CHECK-OBJ: fmadd.s fa0, fa1, fa2, fa3, rne 143.insn r4 0x43, 0, 0, fa0, fa1, fa2, fa3 144# CHECK-ASM: .insn r4 67, 0, 0, fa0, fa1, fa2, fa3 145# CHECK-ASM: encoding: [0x43,0x85,0xc5,0x68] 146# CHECK-OBJ: fmadd.s fa0, fa1, fa2, fa3, rne 147.insn r4 MADD, 0, 0, fa0, fa1, fa2, fa3 148 149# CHECK-ASM: .insn i 3, 5, t1, -2048(t2) 150# CHECK-ASM: encoding: [0x03,0xd3,0x03,0x80] 151# CHECK-OBJ: lhu t1, -0x800(t2) 152.insn i 0x3, 0x5, x6, %lo(2048)(x7) 153# CHECK-ASM: .insn i 3, 5, t1, -2048(t2) 154# CHECK-ASM: encoding: [0x03,0xd3,0x03,0x80] 155# CHECK-OBJ: lhu t1, -0x800(t2) 156.insn i LOAD, 0x5, x6, %lo(2048)(x7) 157 158# CHECK-ASM: .insn 0x4, 19 159# CHECK-ASM: encoding: [0x13,0x00,0x00,0x00] 160# CHECK-OBJ: addi zero, zero, 0x0 161.insn 0x13 162 163# CHECK-ASM: .insn 0x4, 19 164# CHECK-ASM: encoding: [0x13,0x00,0x00,0x00] 165# CHECK-OBJ: addi zero, zero, 0x0 166.insn 0x4, 0x13 167 168# CHECK-ASM: .insn 0x6, 31 169# CHECK-ASM: encoding: [0x1f,0x00,0x00,0x00,0x00,0x00] 170# CHECK-OBJ: <unknown> 171.insn 6, 0x1f 172 173# CHECK-ASM: .insn 0x8, 63 174# CHECK-ASM: encoding: [0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00] 175# CHECK-OBJ: <unknown> 176.insn 8, 0x3f 177 178# CHECK-ASM: .insn 0x6, 281474976710623 179# CHECK-ASM: encoding: [0xdf,0xff,0xff,0xff,0xff,0xff] 180# CHECK-OBJ: <unknown> 181.insn 0x6, 0xffffffffffdf 182 183# CHECK-ASM: .insn 0x8, -65 184# CHECK-ASM: encoding: [0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff] 185# CHECK-OBJ: <unknown> 186.insn 0x8, 0xffffffffffffffbf 187 188# CHECK-ASM: .insn 0x4, 3971 189# CHECK-ASM: encoding: [0x83,0x0f,0x00,0x00] 190# CHECK-OBJ: lb t6, 0x0(zero) 191.insn 0x2 + 0x2, 0x3 | (31 << 7) 192 193# CHECK-ASM: .insn 0x8, -576460752303423297 194# CHECK-ASM: encoding: [0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0xf8] 195# CHECK-OBJ: <unknown> 196.insn 0x4 * 0x2, 0xbf | (31 << 59) 197 198odd_lengths: 199# CHECK-ASM-LABEL: odd_lengths: 200# CHECK-OBJ-LABEL: <odd_lengths>: 201 202## These deliberately disagree with the lengths objdump expects them to have, so 203## keep them at the end so that the disassembled instruction stream is not out 204## of sync with the encoded instruction stream. We don't check for `<unknown>` 205## as we could get any number of those, so instead check for the encoding 206## halfwords. These might be split into odd 16-bit chunks, so each chunk is on 207## one line. 208 209# CHECK-ASM: .insn 0x4, 65503 210# CHECK-ASM: encoding: [0xdf,0xff,0x00,0x00] 211# CHECK-OBJ: ffdf 212# CHECK-OBJ: 0000 213.insn 0xffdf 214 215# CHECK-ASM: .insn 0x4, 65471 216# CHECK-ASM: encoding: [0xbf,0xff,0x00,0x00] 217# CHECK-OBJ: ffbf 218# CHECK-OBJ: 0000 219.insn 0xffbf 220