1# RUN: not llvm-mc -triple=riscv32 -mattr=+c -mattr=+no-rvc-hints < %s 2>&1 \ 2# RUN: | FileCheck %s 3# RUN: not llvm-mc -triple=riscv32 -mattr=+zca -mattr=+no-rvc-hints < %s 2>&1 \ 4# RUN: | FileCheck %s 5 6## GPRC 7.LBB: 8c.lw ra, 4(sp) # CHECK: :[[@LINE]]:7: error: invalid operand for instruction 9c.sw sp, 4(sp) # CHECK: :[[@LINE]]:7: error: invalid operand for instruction 10c.beqz t0, .LBB # CHECK: :[[@LINE]]:9: error: invalid operand for instruction 11c.bnez s8, .LBB # CHECK: :[[@LINE]]:9: error: invalid operand for instruction 12c.addi4spn s4, sp, 12 # CHECK: :[[@LINE]]:13: error: invalid operand for instruction 13c.srli s7, 12 # CHECK: :[[@LINE]]:9: error: invalid operand for instruction 14c.srai t0, 12 # CHECK: :[[@LINE]]:9: error: invalid operand for instruction 15c.andi t1, 12 # CHECK: :[[@LINE]]:9: error: invalid operand for instruction 16c.and t1, a0 # CHECK: :[[@LINE]]:8: error: invalid operand for instruction 17c.or a0, s8 # CHECK: :[[@LINE]]:12: error: invalid operand for instruction 18c.xor t2, a0 # CHECK: :[[@LINE]]:8: error: invalid operand for instruction 19c.sub a0, s8 # CHECK: :[[@LINE]]:12: error: invalid operand for instruction 20 21## GPRNoX0 22c.lwsp x0, 4(sp) # CHECK: :[[@LINE]]:9: error: invalid operand for instruction 23c.lwsp zero, 4(sp) # CHECK: :[[@LINE]]:9: error: invalid operand for instruction 24c.jr x0 # CHECK: :[[@LINE]]:7: error: invalid operand for instruction 25c.jalr zero # CHECK: :[[@LINE]]:9: error: invalid operand for instruction 26c.addi x0, x0, 1 # CHECK: :[[@LINE]]:13: error: immediate must be zero 27c.li zero, 2 # CHECK: :[[@LINE]]:1: error: instruction requires the following: RVC Hint Instructions{{$}} 28c.slli zero, zero, 4 # CHECK: :[[@LINE]]:15: error: invalid operand for instruction 29c.mv zero, s0 # CHECK: :[[@LINE]]:1: error: instruction requires the following: RVC Hint Instructions{{$}} 30c.mv ra, x0 # CHECK: :[[@LINE]]:11: error: invalid operand for instruction 31c.add ra, ra, x0 # CHECK: :[[@LINE]]:16: error: invalid operand for instruction 32c.add zero, zero, sp # CHECK: :[[@LINE]]:14: error: invalid operand for instruction 33 34## GPRNoX0X2 35c.lui x0, 4 # CHECK: :[[@LINE]]:1: error: instruction requires the following: RVC Hint Instructions{{$}} 36c.lui x2, 4 # CHECK: :[[@LINE]]:7: error: invalid operand for instruction 37 38## SP 39c.addi4spn a0, a0, 12 # CHECK: :[[@LINE]]:17: error: invalid operand for instruction 40c.addi16sp t0, 16 # CHECK: :[[@LINE]]:13: error: invalid operand for instruction 41 42# Out of range immediates 43 44## uimmlog2xlennonzero 45c.slli t0, 64 # CHECK: :[[@LINE]]:12: error: immediate must be an integer in the range [1, 31] 46c.srli a0, 32 # CHECK: :[[@LINE]]:12: error: immediate must be an integer in the range [1, 31] 47c.srai a0, 0 # CHECK: :[[@LINE]]:12: error: immediate must be an integer in the range [1, 31] 48 49## simm6 50c.li t0, 128 # CHECK: :[[@LINE]]:10: error: immediate must be an integer in the range [-32, 31] 51c.li t0, foo # CHECK: :[[@LINE]]:10: error: immediate must be an integer in the range [-32, 31] 52c.li t0, %lo(foo) # CHECK: :[[@LINE]]:10: error: immediate must be an integer in the range [-32, 31] 53c.li t0, %hi(foo) # CHECK: :[[@LINE]]:10: error: immediate must be an integer in the range [-32, 31] 54c.andi a0, -33 # CHECK: :[[@LINE]]:12: error: immediate must be an integer in the range [-32, 31] 55c.andi a0, foo # CHECK: :[[@LINE]]:12: error: immediate must be an integer in the range [-32, 31] 56c.andi a0, %lo(foo) # CHECK: :[[@LINE]]:12: error: immediate must be an integer in the range [-32, 31] 57c.andi a0, %hi(foo) # CHECK: :[[@LINE]]:12: error: immediate must be an integer in the range [-32, 31] 58 59## simm6nonzero 60c.addi t0, 0 # CHECK: :[[@LINE]]:1: error: instruction requires the following: RVC Hint Instructions{{$}} 61c.addi t0, -33 # CHECK: :[[@LINE]]:12: error: immediate must be non-zero in the range [-32, 31] 62c.addi t0, 32 # CHECK: :[[@LINE]]:12: error: immediate must be non-zero in the range [-32, 31] 63c.addi t0, foo # CHECK: :[[@LINE]]:12: error: immediate must be non-zero in the range [-32, 31] 64c.addi t0, %lo(foo) # CHECK: :[[@LINE]]:12: error: immediate must be non-zero in the range [-32, 31] 65c.addi t0, %hi(foo) # CHECK: :[[@LINE]]:12: error: immediate must be non-zero in the range [-32, 31] 66 67## c_lui_imm 68c.lui t0, 0 # CHECK: :[[@LINE]]:11: error: immediate must be in [0xfffe0, 0xfffff] or [1, 31] 69c.lui t0, 32 # CHECK: :[[@LINE]]:11: error: immediate must be in [0xfffe0, 0xfffff] or [1, 31] 70c.lui t0, 0xffffdf # CHECK: :[[@LINE]]:11: error: immediate must be in [0xfffe0, 0xfffff] or [1, 31] 71c.lui t0, 0x1000000 # CHECK: :[[@LINE]]:11: error: immediate must be in [0xfffe0, 0xfffff] or [1, 31] 72 73## uimm8_lsb00 74c.lwsp ra, 256(sp) # CHECK: :[[@LINE]]:13: error: immediate must be a multiple of 4 bytes in the range [0, 252] 75c.swsp ra, -4(sp) # CHECK: :[[@LINE]]:13: error: immediate must be a multiple of 4 bytes in the range [0, 252] 76## uimm7_lsb00 77c.lw s0, -4(sp) # CHECK: :[[@LINE]]:11: error: immediate must be a multiple of 4 bytes in the range [0, 124] 78c.sw s0, 128(sp) # CHECK: :[[@LINE]]:11: error: immediate must be a multiple of 4 bytes in the range [0, 124] 79 80## simm9_lsb0 81c.bnez s1, -258 # CHECK: :[[@LINE]]:13: error: immediate must be a multiple of 2 bytes in the range [-256, 254] 82c.beqz a0, 256 # CHECK: :[[@LINE]]:13: error: immediate must be a multiple of 2 bytes in the range [-256, 254] 83 84## simm12_lsb0 85c.j 2048 # CHECK: :[[@LINE]]:5: error: immediate must be a multiple of 2 bytes in the range [-2048, 2046] 86c.jal -2050 # CHECK: :[[@LINE]]:7: error: immediate must be a multiple of 2 bytes in the range [-2048, 2046] 87 88## uimm10_lsb00nonzero 89c.addi4spn a0, sp, 0 # CHECK: :[[@LINE]]:21: error: immediate must be a multiple of 4 bytes in the range [4, 1020] 90c.addi4spn a0, sp, 1024 # CHECK: :[[@LINE]]:21: error: immediate must be a multiple of 4 bytes in the range [4, 1020] 91 92## simm10_lsb0000nonzero 93c.addi16sp sp, -528 # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 16 bytes and non-zero in the range [-512, 496] 94c.addi16sp sp, 512 # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 16 bytes and non-zero in the range [-512, 496] 95c.addi16sp sp, 0 # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 16 bytes and non-zero in the range [-512, 496] 96