summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/MC/RISCV/rv32c-invalid.s45
-rw-r--r--llvm/test/MC/RISCV/rv32c-only-valid.s8
-rw-r--r--llvm/test/MC/RISCV/rv32c-valid.s61
-rw-r--r--llvm/test/MC/RISCV/rv32dc-invalid.s12
-rw-r--r--llvm/test/MC/RISCV/rv32dc-valid.s18
-rw-r--r--llvm/test/MC/RISCV/rv32fc-invalid.s12
-rw-r--r--llvm/test/MC/RISCV/rv32fc-valid.s18
-rw-r--r--llvm/test/MC/RISCV/rv64c-invalid.s6
-rw-r--r--llvm/test/MC/RISCV/rv64c-valid.s14
9 files changed, 191 insertions, 3 deletions
diff --git a/llvm/test/MC/RISCV/rv32c-invalid.s b/llvm/test/MC/RISCV/rv32c-invalid.s
index 639148bb4ff..83547542825 100644
--- a/llvm/test/MC/RISCV/rv32c-invalid.s
+++ b/llvm/test/MC/RISCV/rv32c-invalid.s
@@ -6,15 +6,52 @@ c.lw ra, 4(sp) # CHECK: :[[@LINE]]:7: error: invalid operand for instruction
c.sw sp, 4(sp) # CHECK: :[[@LINE]]:7: error: invalid operand for instruction
c.beqz t0, .LBB # CHECK: :[[@LINE]]:9: error: invalid operand for instruction
c.bnez s8, .LBB # CHECK: :[[@LINE]]:9: error: invalid operand for instruction
+c.addi4spn s4, sp, 12 # CHECK: :[[@LINE]]:13: error: invalid operand for instruction
+c.srli s7, 12 # CHECK: :[[@LINE]]:9: error: invalid operand for instruction
+c.srai t0, 12 # CHECK: :[[@LINE]]:9: error: invalid operand for instruction
+c.andi t1, 12 # CHECK: :[[@LINE]]:9: error: invalid operand for instruction
+c.and t1, a0 # CHECK: :[[@LINE]]:8: error: invalid operand for instruction
+c.or a0, s8 # CHECK: :[[@LINE]]:12: error: invalid operand for instruction
+c.xor t2, a0 # CHECK: :[[@LINE]]:8: error: invalid operand for instruction
+c.sub a0, s8 # CHECK: :[[@LINE]]:12: error: invalid operand for instruction
## GPRNoX0
c.lwsp x0, 4(sp) # CHECK: :[[@LINE]]:9: error: invalid operand for instruction
c.lwsp zero, 4(sp) # CHECK: :[[@LINE]]:9: error: invalid operand for instruction
c.jr x0 # CHECK: :[[@LINE]]:7: error: invalid operand for instruction
c.jalr zero # CHECK: :[[@LINE]]:9: error: invalid operand for instruction
+c.addi x0, x0, 1 # CHECK: :[[@LINE]]:9: error: invalid operand for instruction
+c.li zero, 2 # CHECK: :[[@LINE]]:7: error: invalid operand for instruction
+c.slli zero, zero, 4 # CHECK: :[[@LINE]]:9: error: invalid operand for instruction
+c.mv zero, s0 # CHECK: :[[@LINE]]:7: error: invalid operand for instruction
+c.mv ra, x0 # CHECK: :[[@LINE]]:11: error: invalid operand for instruction
+c.add ra, ra, x0 # CHECK: :[[@LINE]]:16: error: invalid operand for instruction
+c.add zero, zero, sp # CHECK: :[[@LINE]]:8: error: invalid operand for instruction
+
+## GPRNoX0X2
+c.lui x0, 4 # CHECK: :[[@LINE]]:7: error: invalid operand for instruction
+c.lui x2, 4 # CHECK: :[[@LINE]]:7: error: invalid operand for instruction
+
+## SP
+c.addi4spn a0, a0, 12 # CHECK: :[[@LINE]]:17: error: invalid operand for instruction
+c.addi16sp t0, 16 # CHECK: :[[@LINE]]:13: error: invalid operand for instruction
# Out of range immediates
+## uimm5nonzero
+c.slli t0, 64 # CHECK: :[[@LINE]]:12: error: immediate must be an integer in the range [1, 31]
+c.srli a0, 32 # CHECK: :[[@LINE]]:12: error: immediate must be an integer in the range [1, 31]
+c.srai a0, 0 # CHECK: :[[@LINE]]:12: error: immediate must be an integer in the range [1, 31]
+
+## simm6
+c.li t0, 128 # CHECK: :[[@LINE]]:10: error: immediate must be an integer in the range [-32, 31]
+c.addi t0, 32 # CHECK: :[[@LINE]]:12: error: immediate must be an integer in the range [-32, 31]
+c.andi a0, -33 # CHECK: :[[@LINE]]:12: error: immediate must be an integer in the range [-32, 31]
+
+## uimm6nonzero
+c.lui t0, 64 # CHECK: :[[@LINE]]:11: error: immediate must be an integer in the range [1, 63]
+c.lui t0, 0 # CHECK: :[[@LINE]]:11: error: immediate must be an integer in the range [1, 63]
+
## uimm8_lsb00
c.lwsp ra, 256(sp) # CHECK: :[[@LINE]]:13: error: immediate must be a multiple of 4 bytes in the range [0, 252]
c.swsp ra, -4(sp) # CHECK: :[[@LINE]]:13: error: immediate must be a multiple of 4 bytes in the range [0, 252]
@@ -29,3 +66,11 @@ c.beqz a0, 256 # CHECK: :[[@LINE]]:13: error: immediate must be a multiple of 2
## simm12_lsb0
c.j 2048 # CHECK: :[[@LINE]]:5: error: immediate must be a multiple of 2 bytes in the range [-2048, 2046]
c.jal -2050 # CHECK: :[[@LINE]]:7: error: immediate must be a multiple of 2 bytes in the range [-2048, 2046]
+
+## uimm10_lsb00nonzero
+c.addi4spn a0, sp, 0 # CHECK: :[[@LINE]]:21: error: immediate must be a multiple of 4 bytes in the range [4, 1020]
+c.addi4spn a0, sp, 1024 # CHECK: :[[@LINE]]:21: error: immediate must be a multiple of 4 bytes in the range [4, 1020]
+
+## simm10_lsb0000
+c.addi16sp sp, -528 # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 16 bytes in the range [-512, 496]
+c.addi16sp sp, 512 # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 16 bytes in the range [-512, 496]
diff --git a/llvm/test/MC/RISCV/rv32c-only-valid.s b/llvm/test/MC/RISCV/rv32c-only-valid.s
new file mode 100644
index 00000000000..319ac8f1eb8
--- /dev/null
+++ b/llvm/test/MC/RISCV/rv32c-only-valid.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc -triple=riscv32 -mattr=+c -show-encoding < %s \
+# RUN: | FileCheck -check-prefixes=CHECK,CHECK-INST %s
+# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+c < %s \
+# RUN: | llvm-objdump -mattr=+c -d - | FileCheck -check-prefix=CHECK-INST %s
+
+# CHECK-INST: c.jal 2046
+# CHECK: encoding: [0xfd,0x2f]
+c.jal 2046
diff --git a/llvm/test/MC/RISCV/rv32c-valid.s b/llvm/test/MC/RISCV/rv32c-valid.s
index ce4273d3802..22a2c90b889 100644
--- a/llvm/test/MC/RISCV/rv32c-valid.s
+++ b/llvm/test/MC/RISCV/rv32c-valid.s
@@ -25,9 +25,6 @@ c.sw a5, 124(a3)
# CHECK-INST: c.j -2048
# CHECK: encoding: [0x01,0xb0]
c.j -2048
-# CHECK-INST: c.jal 2046
-# CHECK: encoding: [0xfd,0x2f]
-c.jal 2046
# CHECK-INST: c.jr a7
# CHECK: encoding: [0x82,0x88]
c.jr a7
@@ -40,3 +37,61 @@ c.beqz a3, -256
# CHECK-INST: c.bnez a5, 254
# CHECK: encoding: [0xfd,0xef]
c.bnez a5, 254
+
+# CHECK-INST: c.li a7, 31
+# CHECK: encoding: [0xfd,0x48]
+c.li a7, 31
+# CHECK-INST: c.addi a3, -32
+# CHECK: encoding: [0x81,0x16]
+c.addi a3, -32
+# CHECK-INST: c.addi16sp sp, -512
+# CHECK: encoding: [0x01,0x71]
+c.addi16sp sp, -512
+# CHECK-INST: c.addi16sp sp, 496
+# CHECK: encoding: [0x7d,0x61]
+c.addi16sp sp, 496
+# CHECK-INST: c.addi4spn a3, sp, 1020
+# CHECK: encoding: [0xf4,0x1f]
+c.addi4spn a3, sp, 1020
+# CHECK-INST: c.addi4spn a3, sp, 4
+# CHECK: encoding: [0x54,0x00]
+c.addi4spn a3, sp, 4
+# CHECK-INST: c.slli a1, 1
+# CHECK: encoding: [0x86,0x05]
+c.slli a1, 1
+# CHECK-INST: c.srli a3, 31
+# CHECK: encoding: [0xfd,0x82]
+c.srli a3, 31
+# CHECK-INST: c.srai a4, 2
+# CHECK: encoding: [0x09,0x87]
+c.srai a4, 2
+# CHECK-INST: c.andi a5, 15
+# CHECK: encoding: [0xbd,0x8b]
+c.andi a5, 15
+# CHECK-INST: c.mv a7, s0
+# CHECK: encoding: [0xa2,0x88]
+c.mv a7, s0
+# CHECK-INST: c.and a1, a2
+# CHECK: encoding: [0xf1,0x8d]
+c.and a1, a2
+# CHECK-INST: c.or a2, a3
+# CHECK: encoding: [0x55,0x8e]
+c.or a2, a3
+# CHECK-INST: c.xor a3, a4
+# CHECK: encoding: [0xb9,0x8e]
+c.xor a3, a4
+# CHECK-INST: c.sub a4, a5
+# CHECK: encoding: [0x1d,0x8f]
+c.sub a4, a5
+# CHECK-INST: c.nop
+# CHECK: encoding: [0x01,0x00]
+c.nop
+# CHECK-INST: c.ebreak
+# CHECK: encoding: [0x02,0x90]
+c.ebreak
+# CHECK-INST: c.lui s0, 1
+# CHECK: encoding: [0x05,0x64]
+c.lui s0, 1
+# CHECK-INST: c.lui s0, 63
+# CHECK: encoding: [0x7d,0x74]
+c.lui s0, 63
diff --git a/llvm/test/MC/RISCV/rv32dc-invalid.s b/llvm/test/MC/RISCV/rv32dc-invalid.s
new file mode 100644
index 00000000000..70fb504b1bb
--- /dev/null
+++ b/llvm/test/MC/RISCV/rv32dc-invalid.s
@@ -0,0 +1,12 @@
+# RUN: not llvm-mc -triple=riscv32 -mattr=+c,+d < %s 2>&1 | FileCheck %s
+
+## FPRC
+c.fld ft3, 8(a5) # CHECK: :[[@LINE]]:8: error: invalid operand for instruction
+
+## uimm9_lsb000
+c.fldsp fs1, 512(sp) # CHECK: :[[@LINE]]:15: error: immediate must be a multiple of 8 bytes in the range [0, 504]
+c.fsdsp fs2, -8(sp) # CHECK: :[[@LINE]]:15: error: immediate must be a multiple of 8 bytes in the range [0, 504]
+
+## uimm8_lsb000
+c.fld fs0, -8(sp) # CHECK: :[[@LINE]]:13: error: immediate must be a multiple of 8 bytes in the range [0, 248]
+c.fsd fs1, 256(sp) # CHECK: :[[@LINE]]:13: error: immediate must be a multiple of 8 bytes in the range [0, 248]
diff --git a/llvm/test/MC/RISCV/rv32dc-valid.s b/llvm/test/MC/RISCV/rv32dc-valid.s
new file mode 100644
index 00000000000..b1ae265d6c9
--- /dev/null
+++ b/llvm/test/MC/RISCV/rv32dc-valid.s
@@ -0,0 +1,18 @@
+# RUN: llvm-mc %s -triple=riscv32 -mattr=+c,+d -show-encoding \
+# RUN: | FileCheck -check-prefixes=CHECK,CHECK-INST %s
+# RUN: llvm-mc -filetype=obj -triple=riscv32 -mattr=+c,+d < %s \
+# RUN: | llvm-objdump -mattr=+c,+d -d - | FileCheck -check-prefix=CHECK-INST %s
+
+# CHECK-INST: c.fldsp fs0, 504(sp)
+# CHECK: encoding: [0x7e,0x34]
+c.fldsp fs0, 504(sp)
+# CHECK-INST: c.fsdsp fa7, 504(sp)
+# CHECK: encoding: [0xc6,0xbf]
+c.fsdsp fa7, 504(sp)
+
+# CHECK-INST: c.fld fa3, 248(a5)
+# CHECK: encoding: [0xf4,0x3f]
+c.fld fa3, 248(a5)
+# CHECK-INST: c.fsd fa2, 248(a1)
+# CHECK: encoding: [0xf0,0xbd]
+c.fsd fa2, 248(a1)
diff --git a/llvm/test/MC/RISCV/rv32fc-invalid.s b/llvm/test/MC/RISCV/rv32fc-invalid.s
new file mode 100644
index 00000000000..5af3df17671
--- /dev/null
+++ b/llvm/test/MC/RISCV/rv32fc-invalid.s
@@ -0,0 +1,12 @@
+# RUN: not llvm-mc -triple=riscv32 -mattr=+c,+f < %s 2>&1 | FileCheck %s
+
+## FPRC
+c.flw ft3, 8(a5) # CHECK: :[[@LINE]]:8: error: invalid operand for instruction
+
+## uimm8_lsb00
+c.flwsp fs1, 256(sp) # CHECK: :[[@LINE]]:15: error: immediate must be a multiple of 4 bytes in the range [0, 252]
+c.fswsp fs2, -4(sp) # CHECK: :[[@LINE]]:15: error: immediate must be a multiple of 4 bytes in the range [0, 252]
+
+## uimm7_lsb00
+c.flw fs0, -4(sp) # CHECK: :[[@LINE]]:13: error: immediate must be a multiple of 4 bytes in the range [0, 124]
+c.fsw fs1, 128(sp) # CHECK: :[[@LINE]]:13: error: immediate must be a multiple of 4 bytes in the range [0, 124]
diff --git a/llvm/test/MC/RISCV/rv32fc-valid.s b/llvm/test/MC/RISCV/rv32fc-valid.s
new file mode 100644
index 00000000000..7ab83aa392e
--- /dev/null
+++ b/llvm/test/MC/RISCV/rv32fc-valid.s
@@ -0,0 +1,18 @@
+# RUN: llvm-mc %s -triple=riscv32 -mattr=+c,+f -show-encoding \
+# RUN: | FileCheck -check-prefixes=CHECK,CHECK-INST %s
+# RUN: llvm-mc -filetype=obj -triple=riscv32 -mattr=+c,+f < %s \
+# RUN: | llvm-objdump -mattr=+c,+f -d - | FileCheck -check-prefix=CHECK-INST %s
+
+# CHECK-INST: c.flwsp fs0, 252(sp)
+# CHECK: encoding: [0x7e,0x74]
+c.flwsp fs0, 252(sp)
+# CHECK-INST: c.fswsp fa7, 252(sp)
+# CHECK: encoding: [0xc6,0xff]
+c.fswsp fa7, 252(sp)
+
+# CHECK-INST: c.flw fa3, 124(a5)
+# CHECK: encoding: [0xf4,0x7f]
+c.flw fa3, 124(a5)
+# CHECK-INST: c.fsw fa2, 124(a1)
+# CHECK: encoding: [0xf0,0xfd]
+c.fsw fa2, 124(a1)
diff --git a/llvm/test/MC/RISCV/rv64c-invalid.s b/llvm/test/MC/RISCV/rv64c-invalid.s
index 1dcf5e40a8a..e58c113c69f 100644
--- a/llvm/test/MC/RISCV/rv64c-invalid.s
+++ b/llvm/test/MC/RISCV/rv64c-invalid.s
@@ -3,6 +3,8 @@
## GPRC
c.ld ra, 4(sp) # CHECK: :[[@LINE]]:6: error: invalid operand for instruction
c.sd sp, 4(sp) # CHECK: :[[@LINE]]:6: error: invalid operand for instruction
+c.addw a0, a7 # CHECK: :[[@LINE]]:14: error: invalid operand for instruction
+c.subw a0, a6 # CHECK: :[[@LINE]]:14: error: invalid operand for instruction
## GPRNoX0
c.ldsp x0, 4(sp) # CHECK: :[[@LINE]]:9: error: invalid operand for instruction
@@ -10,6 +12,10 @@ c.ldsp zero, 4(sp) # CHECK: :[[@LINE]]:9: error: invalid operand for instructio
# Out of range immediates
+## simm6
+c.addiw t0, -33 # CHECK: :[[@LINE]]:13: error: immediate must be an integer in the range [-32, 31]
+c.addiw t0, 32 # CHECK: :[[@LINE]]:13: error: immediate must be an integer in the range [-32, 31]
+
## uimm9_lsb000
c.ldsp ra, 512(sp) # CHECK: :[[@LINE]]:13: error: immediate must be a multiple of 8 bytes in the range [0, 504]
c.sdsp ra, -8(sp) # CHECK: :[[@LINE]]:13: error: immediate must be a multiple of 8 bytes in the range [0, 504]
diff --git a/llvm/test/MC/RISCV/rv64c-valid.s b/llvm/test/MC/RISCV/rv64c-valid.s
index 9521f9ebd08..c32ea144cb7 100644
--- a/llvm/test/MC/RISCV/rv64c-valid.s
+++ b/llvm/test/MC/RISCV/rv64c-valid.s
@@ -17,3 +17,17 @@ c.ld a4, 0(a3)
# CHECK-INST: c.sd a5, 248(a3)
# CHECK: encoding: [0xfc,0xfe]
c.sd a5, 248(a3)
+
+# CHECK-INST: c.subw a3, a4
+# CHECK: encoding: [0x99,0x9e]
+c.subw a3, a4
+# CHECK-INST: c.addw a0, a2
+# CHECK: encoding: [0x31,0x9d]
+c.addw a0, a2
+
+# CHECK-INST: c.addiw a3, -32
+# CHECK: encoding: [0x81,0x36]
+c.addiw a3, -32
+# CHECK-INST: c.addiw a3, 31
+# CHECK: encoding: [0xfd,0x26]
+c.addiw a3, 31
OpenPOWER on IntegriCloud