307 lines · plain
1# RUN: llvm-mc %s -triple=riscv32 -M no-aliases \2# RUN: | FileCheck -check-prefixes=CHECK-S-NOALIAS,CHECK-S-OBJ-NOALIAS %s3# RUN: llvm-mc %s -triple=riscv32 \4# RUN: | FileCheck -check-prefixes=CHECK-S,CHECK-S-OBJ %s5# RUN: llvm-mc %s -triple=riscv64 -M no-aliases \6# RUN: | FileCheck -check-prefixes=CHECK-S-NOALIAS,CHECK-S-OBJ-NOALIAS %s7# RUN: llvm-mc %s -triple=riscv64 \8# RUN: | FileCheck -check-prefixes=CHECK-S,CHECK-S-OBJ %s9# RUN: llvm-mc -filetype=obj -triple riscv32 < %s \10# RUN: | llvm-objdump --no-print-imm-hex -d -r -M no-aliases - \11# RUN: | FileCheck -check-prefixes=CHECK-OBJ-NOALIAS,CHECK-S-OBJ-NOALIAS %s12# RUN: llvm-mc -filetype=obj -triple riscv32 < %s \13# RUN: | llvm-objdump --no-print-imm-hex -d -r - \14# RUN: | FileCheck -check-prefixes=CHECK-OBJ,CHECK-S-OBJ %s15# RUN: llvm-mc -filetype=obj -triple riscv64 < %s \16# RUN: | llvm-objdump --no-print-imm-hex -d -r -M no-aliases - \17# RUN: | FileCheck -check-prefixes=CHECK-OBJ-NOALIAS,CHECK-S-OBJ-NOALIAS %s18# RUN: llvm-mc -filetype=obj -triple riscv64 < %s \19# RUN: | llvm-objdump --no-print-imm-hex -d -r - \20# RUN: | FileCheck -check-prefixes=CHECK-OBJ,CHECK-S-OBJ %s21 22# The following check prefixes are used in this test:23# CHECK-S Match the .s output with aliases enabled24# CHECK-S-NOALIAS Match the .s output with aliases disabled25# CHECK-OBJ Match the objdumped object output with aliases enabled26# CHECK-OBJ-NOALIAS Match the objdumped object output with aliases enabled27# CHECK-S-OBJ Match both the .s and objdumped object output with28# aliases enabled29# CHECK-S-OBJ-NOALIAS Match both the .s and objdumped object output with30# aliases disabled31 32# TODO la33# TODO lb lh lw34# TODO sb sh sw35 36# CHECK-S-OBJ-NOALIAS: addi zero, zero, 037# CHECK-S-OBJ: nop38nop39 40# CHECK-S-OBJ-NOALIAS: addi t6, zero, 041# CHECK-S-OBJ: li t6, 042mv x31, zero43# CHECK-S-OBJ-NOALIAS: addi a2, a3, 044# CHECK-S-OBJ: mv a2, a345move a2,a346# CHECK-S-OBJ-NOALIAS: xori t6, ra, -147# CHECK-S-OBJ: not t6, ra48not x31, x149# CHECK-S-OBJ-NOALIAS: sub t6, zero, ra50# CHECK-S-OBJ: neg t6, ra51neg x31, x152# CHECK-S-OBJ-NOALIAS: sltiu t6, ra, 153# CHECK-S-OBJ: seqz t6, ra54seqz x31, x155# CHECK-S-OBJ-NOALIAS: sltu t6, zero, ra56# CHECK-S-OBJ: snez t6, ra57snez x31, x158# CHECK-S-OBJ-NOALIAS: slt t6, ra, zero59# CHECK-S-OBJ: sltz t6, ra60sltz x31, x161# CHECK-S-OBJ-NOALIAS: slt t6, zero, ra62# CHECK-S-OBJ: sgtz t6, ra63sgtz x31, x164 65# CHECK-S-OBJ-NOALIAS: slt ra, gp, sp66# CHECK-S-OBJ: slt ra, gp, sp67sgt x1, x2, x368# CHECK-S-OBJ-NOALIAS: sltu tp, t1, t069# CHECK-S-OBJ: sltu tp, t1, t070sgtu x4, x5, x671 72# CHECK-S-NOALIAS: beq a0, zero, 51273# CHECK-S: beqz a0, 51274# CHECK-OBJ-NOALIAS: beq a0, zero, 0x22c75# CHECK-OBJ: beqz a0, 0x22c76beqz x10, 51277# CHECK-S-NOALIAS: bne a1, zero, 102478# CHECK-S: bnez a1, 102479# CHECK-OBJ-NOALIAS: bne a1, zero, 0x43080# CHECK-OBJ: bnez a1, 0x43081bnez x11, 102482# CHECK-S-NOALIAS: bge zero, a2, 483# CHECK-S: blez a2, 484# CHECK-OBJ-NOALIAS: bge zero, a2, 0x3885# CHECK-OBJ: blez a2, 0x3886blez x12, 487# CHECK-S-NOALIAS: bge a3, zero, 888# CHECK-S: bgez a3, 889# CHECK-OBJ-NOALIAS: bge a3, zero, 0x4090# CHECK-OBJ: bgez a3, 0x4091bgez x13, 892# CHECK-S-NOALIAS: blt a4, zero, 1293# CHECK-S: bltz a4, 1294# CHECK-OBJ-NOALIAS: blt a4, zero, 0x4895# CHECK-OBJ: bltz a4, 0x4896bltz x14, 1297# CHECK-S-NOALIAS: blt zero, a5, 1698# CHECK-S: bgtz a5, 1699# CHECK-OBJ-NOALIAS: blt zero, a5, 0x50100# CHECK-OBJ: bgtz a5, 0x50101bgtz x15, 16102 103# Always output the canonical mnemonic for the pseudo branch instructions.104# CHECK-S-NOALIAS: blt a6, a5, 20105# CHECK-S: blt a6, a5, 20106# CHECK-OBJ-NOALIAS: blt a6, a5, 0x58107# CHECK-OBJ: blt a6, a5, 0x58108bgt x15, x16, 20109# CHECK-S-NOALIAS: bge a7, a6, 24110# CHECK-S: bge a7, a6, 24111# CHECK-OBJ-NOALIAS: bge a7, a6, 0x60112# CHECK-OBJ: bge a7, a6, 0x60113ble x16, x17, 24114# CHECK-S-NOALIAS: bltu s2, a7, 28115# CHECK-S: bltu s2, a7, 28116# CHECK-OBJ-NOALIAS: bltu s2, a7, 0x68117# CHECK-OBJ: bltu s2, a7, 0x68118bgtu x17, x18, 28119# CHECK-S-NOALIAS: bgeu s3, s2, 32120# CHECK-S: bgeu s3, s2, 32121# CHECK-OBJ-NOALIAS: bgeu s3, s2, 0x70122# CHECK-OBJ: bgeu s3, s2, 0x70123bleu x18, x19, 32124 125# CHECK-S-NOALIAS: jal zero, 2044126# CHECK-S: j 2044127# CHECK-OBJ-NOALIAS: jal zero, 0x850128# CHECK-OBJ: j 0x850129j 2044130# CHECK-S-NOALIAS: jal zero, foo131# CHECK-S: j foo132# CHECK-OBJ-NOALIAS: jal zero, 0133# CHECK-OBJ: j 0134# CHECK-OBJ: R_RISCV_JAL foo135j foo136# CHECK-S-NOALIAS: jal zero, a0137# CHECK-S: j a0138# CHECK-OBJ-NOALIAS: jal zero, 0139# CHECK-OBJ: j 0140# CHECK-OBJ: R_RISCV_JAL a0141j a0142# 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, 0147# CHECK-OBJ: j 0148j .149# CHECK-S-NOALIAS: jal ra, 2040150# CHECK-S: jal 2040151# CHECK-OBJ-NOALIAS: jal ra, 0x85c152# CHECK-OBJ: jal 0x85c153jal 2040154# CHECK-S-NOALIAS: jal ra, foo155# CHECK-S: jal foo156# CHECK-OBJ-NOALIAS: jal ra, 0157# CHECK-OBJ: jal 0158# CHECK-OBJ: R_RISCV_JAL foo159jal foo160# CHECK-S-NOALIAS: jal ra, a0161# CHECK-S: jal a0162# CHECK-OBJ-NOALIAS: jal ra, 0163# CHECK-OBJ: jal 0164# CHECK-OBJ: R_RISCV_JAL a0165jal a0166# CHECK-S-OBJ-NOALIAS: jalr zero, 0(s4)167# CHECK-S-OBJ: jr s4168jr x20169# 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, 7175# CHECK-S-OBJ-NOALIAS: jalr ra, 0(s4)176# CHECK-S-OBJ: jalr s4177jalr x20178# 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, s7183jalr x22, x23184# CHECK-S-OBJ-NOALIAS: jalr ra, 9(s8)185# CHECK-S-OBJ: jalr 9(s8)186jalr x24, 9187# CHECK-S-OBJ-NOALIAS: jalr s9, 11(s10)188# CHECK-S-OBJ: jalr s9, 11(s10)189jalr x25, x26, 11190# CHECK-S-OBJ-NOALIAS: jalr zero, 0(ra)191# CHECK-S-OBJ: ret192ret193# CHECK-S-OBJ-NOALIAS: jalr zero, 0(s11)194# CHECK-S-OBJ: jr s11195jr (x27)196# CHECK-S-OBJ-NOALIAS: jalr ra, 0(t3)197# CHECK-S-OBJ: jalr t3198jalr (x28)199# CHECK-S-OBJ-NOALIAS: jalr t4, 0(t5)200# CHECK-S-OBJ: jalr t4, t5201jalr x29, (x30)202 203# TODO call204# TODO tail205 206# CHECK-S-OBJ-NOALIAS: fence iorw, iorw207# CHECK-S-OBJ: fence208fence209 210# CHECK-S-OBJ-NOALIAS: csrrs s10, instret, zero211# CHECK-S-OBJ: rdinstret s10212rdinstret x26213# CHECK-S-OBJ-NOALIAS: csrrs s8, cycle, zero214# CHECK-S-OBJ: rdcycle s8215rdcycle x24216# CHECK-S-OBJ-NOALIAS: csrrs s9, time, zero217# CHECK-S-OBJ: rdtime s9218rdtime x25219 220# CHECK-S-OBJ-NOALIAS: csrrs s0, siselect, zero221# CHECK-S-OBJ: csrr s0, siselect222csrr x8, 0x150223# CHECK-S-OBJ-NOALIAS: csrrw zero, sscratch, s1224# CHECK-S-OBJ: csrw sscratch, s1225csrw 0x140, x9226# CHECK-S-OBJ-NOALIAS: csrrs zero, 4095, s6227# CHECK-S-OBJ: csrs 4095, s6228csrs 0xfff, x22229# CHECK-S-OBJ-NOALIAS: csrrc zero, 4095, s7230# CHECK-S-OBJ: csrc 4095, s7231csrc 0xfff, x23232 233# CHECK-S-OBJ-NOALIAS: csrrwi zero, siselect, 15234# CHECK-S-OBJ: csrwi siselect, 15235csrwi 0x150, 0xf236# CHECK-S-OBJ-NOALIAS: csrrsi zero, 4095, 16237# CHECK-S-OBJ: csrsi 4095, 16238csrsi 0xfff, 0x10239# CHECK-S-OBJ-NOALIAS: csrrci zero, sscratch, 17240# CHECK-S-OBJ: csrci sscratch, 17241csrci 0x140, 0x11242 243# CHECK-S-OBJ-NOALIAS: csrrwi zero, siselect, 7244# CHECK-S-OBJ: csrwi siselect, 7245csrw 0x150, 7246# CHECK-S-OBJ-NOALIAS: csrrsi zero, siselect, 7247# CHECK-S-OBJ: csrsi siselect, 7248csrs 0x150, 7249# CHECK-S-OBJ-NOALIAS: csrrci zero, siselect, 7250# CHECK-S-OBJ: csrci siselect, 7251csrc 0x150, 7252 253# CHECK-S-OBJ-NOALIAS: csrrwi t0, siselect, 15254# CHECK-S-OBJ: csrrwi t0, siselect, 15255csrrw t0, 0x150, 0xf256# CHECK-S-OBJ-NOALIAS: csrrsi t0, 4095, 16257# CHECK-S-OBJ: csrrsi t0, 4095, 16258csrrs t0, 0xfff, 0x10259# CHECK-S-OBJ-NOALIAS: csrrci t0, sscratch, 17260# CHECK-S-OBJ: csrrci t0, sscratch, 17261csrrc t0, 0x140, 0x11262 263# CHECK-S-OBJ-NOALIAS: sfence.vma zero, zero264# CHECK-S-OBJ: sfence.vma{{$}}265sfence.vma266# CHECK-S-OBJ-NOALIAS: sfence.vma a0, zero267# CHECK-S-OBJ: sfence.vma a0{{$}}268sfence.vma a0269 270# The following aliases are accepted as input but the canonical form271# of the instruction will always be printed.272# CHECK-S-OBJ-NOALIAS: addi a2, a3, 4273# CHECK-S-OBJ: addi a2, a3, 4274add a2, a3, 4275# CHECK-S-OBJ-NOALIAS: andi a2, a3, 4276# CHECK-S-OBJ: andi a2, a3, 4277and a2, a3, 4278# CHECK-S-OBJ-NOALIAS: xori a2, a3, 4279# CHECK-S-OBJ: xori a2, a3, 4280xor a2, a3, 4281# CHECK-S-OBJ-NOALIAS: ori a2, a3, 4282# CHECK-S-OBJ: ori a2, a3, 4283or a2, a3, 4284# CHECK-S-OBJ-NOALIAS: slli a2, a3, 4285# CHECK-S-OBJ: slli a2, a3, 4286sll a2, a3, 4287# CHECK-S-OBJ-NOALIAS: srli a2, a3, 4288# CHECK-S-OBJ: srli a2, a3, 4289srl a2, a3, 4290# CHECK-S-OBJ-NOALIAS: srai a2, a3, 4291# CHECK-S-OBJ: srai a2, a3, 4292sra a2, a3, 4293# CHECK-S-OBJ-NOALIAS: slti a2, a3, 4294# CHECK-S-OBJ: slti a2, a3, 4295slt a2, a3, 4296# CHECK-S-OBJ-NOALIAS: sltiu a2, a3, 4297# CHECK-S-OBJ: sltiu a2, a3, 4298sltu a2, a3, 4299 300# CHECK-S-OBJ-NOALIAS: ebreak301# CHECK-S-OBJ: ebreak302sbreak303 304# CHECK-S-OBJ-NOALIAS: ecall305# CHECK-S-OBJ: ecall306scall307