1# RUN: llvm-mc %s -triple=riscv32 -riscv-no-aliases \ 2# RUN: | FileCheck -check-prefixes=CHECK-S-NOALIAS,CHECK-S-OBJ-NOALIAS %s 3# RUN: llvm-mc %s -triple=riscv32 \ 4# RUN: | FileCheck -check-prefixes=CHECK-S,CHECK-S-OBJ %s 5# RUN: llvm-mc %s -triple=riscv64 -riscv-no-aliases\ 6# RUN: | FileCheck -check-prefixes=CHECK-S-NOALIAS,CHECK-S-OBJ-NOALIAS %s 7# RUN: llvm-mc %s -triple=riscv64 \ 8# RUN: | FileCheck -check-prefixes=CHECK-S,CHECK-S-OBJ %s 9# RUN: llvm-mc -filetype=obj -triple riscv32 < %s \ 10# RUN: | llvm-objdump -d -r -M no-aliases - \ 11# RUN: | FileCheck -check-prefixes=CHECK-OBJ-NOALIAS,CHECK-S-OBJ-NOALIAS %s 12# RUN: llvm-mc -filetype=obj -triple riscv32 < %s \ 13# RUN: | llvm-objdump -d -r - \ 14# RUN: | FileCheck -check-prefixes=CHECK-OBJ,CHECK-S-OBJ %s 15# RUN: llvm-mc -filetype=obj -triple riscv64 < %s \ 16# RUN: | llvm-objdump -d -r -M no-aliases - \ 17# RUN: | FileCheck -check-prefixes=CHECK-OBJ-NOALIAS,CHECK-S-OBJ-NOALIAS %s 18# RUN: llvm-mc -filetype=obj -triple riscv64 < %s \ 19# RUN: | llvm-objdump -d -r - \ 20# RUN: | FileCheck -check-prefixes=CHECK-OBJ,CHECK-S-OBJ %s 21 22# The following check prefixes are used in this test: 23# CHECK-S Match the .s output with aliases enabled 24# CHECK-S-NOALIAS Match the .s output with aliases disabled 25# CHECK-OBJ Match the objdumped object output with aliases enabled 26# CHECK-OBJ-NOALIAS Match the objdumped object output with aliases enabled 27# CHECK-S-OBJ Match both the .s and objdumped object output with 28# aliases enabled 29# CHECK-S-OBJ-NOALIAS Match both the .s and objdumped object output with 30# aliases disabled 31 32# TODO la 33# TODO lb lh lw 34# TODO sb sh sw 35 36# CHECK-S-OBJ-NOALIAS: addi zero, zero, 0 37# CHECK-S-OBJ: nop 38nop 39 40# CHECK-S-OBJ-NOALIAS: addi t6, zero, 0 41# CHECK-S-OBJ: mv t6, zero 42mv x31, zero 43# CHECK-S-OBJ-NOALIAS: addi a2, a3, 0 44# CHECK-S-OBJ: mv a2, a3 45move a2,a3 46# CHECK-S-OBJ-NOALIAS: xori t6, ra, -1 47# CHECK-S-OBJ: not t6, ra 48not x31, x1 49# CHECK-S-OBJ-NOALIAS: sub t6, zero, ra 50# CHECK-S-OBJ: neg t6, ra 51neg x31, x1 52# CHECK-S-OBJ-NOALIAS: sltiu t6, ra, 1 53# CHECK-S-OBJ: seqz t6, ra 54seqz x31, x1 55# CHECK-S-OBJ-NOALIAS: sltu t6, zero, ra 56# CHECK-S-OBJ: snez t6, ra 57snez x31, x1 58# CHECK-S-OBJ-NOALIAS: slt t6, ra, zero 59# CHECK-S-OBJ: sltz t6, ra 60sltz x31, x1 61# CHECK-S-OBJ-NOALIAS: slt t6, zero, ra 62# CHECK-S-OBJ: sgtz t6, ra 63sgtz x31, x1 64 65# CHECK-S-OBJ-NOALIAS: slt ra, gp, sp 66# CHECK-S-OBJ: slt ra, gp, sp 67sgt x1, x2, x3 68# CHECK-S-OBJ-NOALIAS: sltu tp, t1, t0 69# CHECK-S-OBJ: sltu tp, t1, t0 70sgtu x4, x5, x6 71 72# CHECK-S-NOALIAS: beq a0, zero, 512 73# CHECK-S: beqz a0, 512 74# CHECK-OBJ-NOALIAS: beq a0, zero, 0x22c 75# CHECK-OBJ: beqz a0, 0x22c 76beqz x10, 512 77# CHECK-S-NOALIAS: bne a1, zero, 1024 78# CHECK-S: bnez a1, 1024 79# CHECK-OBJ-NOALIAS: bne a1, zero, 0x430 80# CHECK-OBJ: bnez a1, 0x430 81bnez x11, 1024 82# CHECK-S-NOALIAS: bge zero, a2, 4 83# CHECK-S: blez a2, 4 84# CHECK-OBJ-NOALIAS: bge zero, a2, 0x38 85# CHECK-OBJ: blez a2, 0x38 86blez x12, 4 87# CHECK-S-NOALIAS: bge a3, zero, 8 88# CHECK-S: bgez a3, 8 89# CHECK-OBJ-NOALIAS: bge a3, zero, 0x40 90# CHECK-OBJ: bgez a3, 0x40 91bgez x13, 8 92# CHECK-S-NOALIAS: blt a4, zero, 12 93# CHECK-S: bltz a4, 12 94# CHECK-OBJ-NOALIAS: blt a4, zero, 0x48 95# CHECK-OBJ: bltz a4, 0x48 96bltz x14, 12 97# CHECK-S-NOALIAS: blt zero, a5, 16 98# CHECK-S: bgtz a5, 16 99# CHECK-OBJ-NOALIAS: blt zero, a5, 0x50 100# CHECK-OBJ: bgtz a5, 0x50 101bgtz x15, 16 102 103# Always output the canonical mnemonic for the pseudo branch instructions. 104# CHECK-S-NOALIAS: blt a6, a5, 20 105# CHECK-S: blt a6, a5, 20 106# CHECK-OBJ-NOALIAS: blt a6, a5, 0x58 107# CHECK-OBJ: blt a6, a5, 0x58 108bgt x15, x16, 20 109# CHECK-S-NOALIAS: bge a7, a6, 24 110# CHECK-S: bge a7, a6, 24 111# CHECK-OBJ-NOALIAS: bge a7, a6, 0x60 112# CHECK-OBJ: bge a7, a6, 0x60 113ble x16, x17, 24 114# CHECK-S-NOALIAS: bltu s2, a7, 28 115# CHECK-S: bltu s2, a7, 28 116# CHECK-OBJ-NOALIAS: bltu s2, a7, 0x68 117# CHECK-OBJ: bltu s2, a7, 0x68 118bgtu x17, x18, 28 119# CHECK-S-NOALIAS: bgeu s3, s2, 32 120# CHECK-S: bgeu s3, s2, 32 121# CHECK-OBJ-NOALIAS: bgeu s3, s2, 0x70 122# CHECK-OBJ: bgeu s3, s2, 0x70 123bleu x18, x19, 32 124 125# CHECK-S-NOALIAS: jal zero, 2044 126# CHECK-S: j 2044 127# CHECK-OBJ-NOALIAS: jal zero, 0x850 128# CHECK-OBJ: j 0x850 129j 2044 130# CHECK-S-NOALIAS: jal zero, foo 131# CHECK-S: j foo 132# CHECK-OBJ-NOALIAS: jal zero, 0 133# CHECK-OBJ: j 0 134# CHECK-OBJ: R_RISCV_JAL foo 135j foo 136# CHECK-S-NOALIAS: jal zero, a0 137# CHECK-S: j a0 138# CHECK-OBJ-NOALIAS: jal zero, 0 139# CHECK-OBJ: j 0 140# CHECK-OBJ: R_RISCV_JAL a0 141j a0 142# CHECK-S-NOALIAS: [[LABEL:.L[[:alnum:]_]+]]: 143# CHECK-S-NOALIAS-NEXT: jal zero, [[LABEL]] 144# CHECK-S: [[LABEL:.L[[:alnum:]_]+]]: 145# CHECK-S-NEXT: j [[LABEL]] 146# CHECK-OBJ-NOALIAS: jal zero, 0 147# CHECK-OBJ: j 0 148j . 149# CHECK-S-NOALIAS: jal ra, 2040 150# CHECK-S: jal 2040 151# CHECK-OBJ-NOALIAS: jal ra, 0x85c 152# CHECK-OBJ: jal 0x85c 153jal 2040 154# CHECK-S-NOALIAS: jal ra, foo 155# CHECK-S: jal foo 156# CHECK-OBJ-NOALIAS: jal ra, 0 157# CHECK-OBJ: jal 0 158# CHECK-OBJ: R_RISCV_JAL foo 159jal foo 160# CHECK-S-NOALIAS: jal ra, a0 161# CHECK-S: jal a0 162# CHECK-OBJ-NOALIAS: jal ra, 0 163# CHECK-OBJ: jal 0 164# CHECK-OBJ: R_RISCV_JAL a0 165jal a0 166# CHECK-S-OBJ-NOALIAS: jalr zero, 0(s4) 167# CHECK-S-OBJ: jr s4 168jr x20 169# CHECK-S-OBJ-NOALIAS: jalr zero, 6(s5) 170# CHECK-S-OBJ: jr 6(s5) 171jr 6(x21) 172# CHECK-S-OBJ-NOALIAS: jalr zero, 7(s6) 173# CHECK-S-OBJ: jr 7(s6) 174jr x22, 7 175# CHECK-S-OBJ-NOALIAS: jalr ra, 0(s4) 176# CHECK-S-OBJ: jalr s4 177jalr x20 178# CHECK-S-OBJ-NOALIAS: jalr ra, 8(s5) 179# CHECK-S-OBJ: jalr 8(s5) 180jalr 8(x21) 181# CHECK-S-OBJ-NOALIAS: jalr s6, 0(s7) 182# CHECK-S-OBJ: jalr s6, s7 183jalr x22, x23 184# CHECK-S-OBJ-NOALIAS: jalr ra, 9(s8) 185# CHECK-S-OBJ: jalr 9(s8) 186jalr x24, 9 187# CHECK-S-OBJ-NOALIAS: jalr s9, 11(s10) 188# CHECK-S-OBJ: jalr s9, 11(s10) 189jalr x25, x26, 11 190# CHECK-S-OBJ-NOALIAS: jalr zero, 0(ra) 191# CHECK-S-OBJ: ret 192ret 193# TODO call 194# TODO tail 195 196# CHECK-S-OBJ-NOALIAS: fence iorw, iorw 197# CHECK-S-OBJ: fence 198fence 199 200# CHECK-S-OBJ-NOALIAS: csrrs s10, instret, zero 201# CHECK-S-OBJ: rdinstret s10 202rdinstret x26 203# CHECK-S-OBJ-NOALIAS: csrrs s8, cycle, zero 204# CHECK-S-OBJ: rdcycle s8 205rdcycle x24 206# CHECK-S-OBJ-NOALIAS: csrrs s9, time, zero 207# CHECK-S-OBJ: rdtime s9 208rdtime x25 209 210# CHECK-S-OBJ-NOALIAS: csrrs s0, 336, zero 211# CHECK-S-OBJ: csrr s0, 336 212csrr x8, 0x150 213# CHECK-S-OBJ-NOALIAS: csrrw zero, sscratch, s1 214# CHECK-S-OBJ: csrw sscratch, s1 215csrw 0x140, x9 216# CHECK-S-OBJ-NOALIAS: csrrs zero, 4095, s6 217# CHECK-S-OBJ: csrs 4095, s6 218csrs 0xfff, x22 219# CHECK-S-OBJ-NOALIAS: csrrc zero, 4095, s7 220# CHECK-S-OBJ: csrc 4095, s7 221csrc 0xfff, x23 222 223# CHECK-S-OBJ-NOALIAS: csrrwi zero, 336, 15 224# CHECK-S-OBJ: csrwi 336, 15 225csrwi 0x150, 0xf 226# CHECK-S-OBJ-NOALIAS: csrrsi zero, 4095, 16 227# CHECK-S-OBJ: csrsi 4095, 16 228csrsi 0xfff, 0x10 229# CHECK-S-OBJ-NOALIAS: csrrci zero, sscratch, 17 230# CHECK-S-OBJ: csrci sscratch, 17 231csrci 0x140, 0x11 232 233# CHECK-S-OBJ-NOALIAS: csrrwi zero, 336, 7 234# CHECK-S-OBJ: csrwi 336, 7 235csrw 0x150, 7 236# CHECK-S-OBJ-NOALIAS: csrrsi zero, 336, 7 237# CHECK-S-OBJ: csrsi 336, 7 238csrs 0x150, 7 239# CHECK-S-OBJ-NOALIAS: csrrci zero, 336, 7 240# CHECK-S-OBJ: csrci 336, 7 241csrc 0x150, 7 242 243# CHECK-S-OBJ-NOALIAS: csrrwi t0, 336, 15 244# CHECK-S-OBJ: csrrwi t0, 336, 15 245csrrw t0, 0x150, 0xf 246# CHECK-S-OBJ-NOALIAS: csrrsi t0, 4095, 16 247# CHECK-S-OBJ: csrrsi t0, 4095, 16 248csrrs t0, 0xfff, 0x10 249# CHECK-S-OBJ-NOALIAS: csrrci t0, sscratch, 17 250# CHECK-S-OBJ: csrrci t0, sscratch, 17 251csrrc t0, 0x140, 0x11 252 253# CHECK-S-OBJ-NOALIAS: sfence.vma zero, zero 254# CHECK-S-OBJ: sfence.vma 255sfence.vma 256# CHECK-S-OBJ-NOALIAS: sfence.vma a0, zero 257# CHECK-S-OBJ: sfence.vma a0 258sfence.vma a0 259 260# The following aliases are accepted as input but the canonical form 261# of the instruction will always be printed. 262# CHECK-S-OBJ-NOALIAS: addi a2, a3, 4 263# CHECK-S-OBJ: addi a2, a3, 4 264add a2, a3, 4 265# CHECK-S-OBJ-NOALIAS: andi a2, a3, 4 266# CHECK-S-OBJ: andi a2, a3, 4 267and a2, a3, 4 268# CHECK-S-OBJ-NOALIAS: xori a2, a3, 4 269# CHECK-S-OBJ: xori a2, a3, 4 270xor a2, a3, 4 271# CHECK-S-OBJ-NOALIAS: ori a2, a3, 4 272# CHECK-S-OBJ: ori a2, a3, 4 273or a2, a3, 4 274# CHECK-S-OBJ-NOALIAS: slli a2, a3, 4 275# CHECK-S-OBJ: slli a2, a3, 4 276sll a2, a3, 4 277# CHECK-S-OBJ-NOALIAS: srli a2, a3, 4 278# CHECK-S-OBJ: srli a2, a3, 4 279srl a2, a3, 4 280# CHECK-S-OBJ-NOALIAS: srai a2, a3, 4 281# CHECK-S-OBJ: srai a2, a3, 4 282sra a2, a3, 4 283# CHECK-S-OBJ-NOALIAS: slti a2, a3, 4 284# CHECK-S-OBJ: slti a2, a3, 4 285slt a2, a3, 4 286# CHECK-S-OBJ-NOALIAS: sltiu a2, a3, 4 287# CHECK-S-OBJ: sltiu a2, a3, 4 288sltu a2, a3, 4 289 290# CHECK-S-OBJ-NOALIAS: ebreak 291# CHECK-S-OBJ: ebreak 292sbreak 293 294# CHECK-S-OBJ-NOALIAS: ecall 295# CHECK-S-OBJ: ecall 296scall 297