diff options
| author | Alex Bradbury <asb@lowrisc.org> | 2017-12-07 12:50:32 +0000 |
|---|---|---|
| committer | Alex Bradbury <asb@lowrisc.org> | 2017-12-07 12:50:32 +0000 |
| commit | 9f6aec4b7aab9a0c0d33bff634af0e148ed580ef (patch) | |
| tree | 3c927837c770161d62d555607491b2ba10679f83 /llvm/test | |
| parent | 87a54d611042449aff1c8f6ceee417af85dee193 (diff) | |
| download | bcm5719-llvm-9f6aec4b7aab9a0c0d33bff634af0e148ed580ef.tar.gz bcm5719-llvm-9f6aec4b7aab9a0c0d33bff634af0e148ed580ef.zip | |
[RISCV] MC layer support for load/store instructions of the C (compressed) extension
Differential Revision: https://reviews.llvm.org/D40001
Patch by Shiva Chen.
llvm-svn: 320037
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/MC/RISCV/rv32c-invalid.s | 18 | ||||
| -rw-r--r-- | llvm/test/MC/RISCV/rv32c-valid.s | 23 | ||||
| -rw-r--r-- | llvm/test/MC/RISCV/rv64c-invalid.s | 18 | ||||
| -rw-r--r-- | llvm/test/MC/RISCV/rv64c-valid.s | 19 |
4 files changed, 78 insertions, 0 deletions
diff --git a/llvm/test/MC/RISCV/rv32c-invalid.s b/llvm/test/MC/RISCV/rv32c-invalid.s new file mode 100644 index 00000000000..c3403aa632b --- /dev/null +++ b/llvm/test/MC/RISCV/rv32c-invalid.s @@ -0,0 +1,18 @@ +# RUN: not llvm-mc -triple=riscv32 -mattr=+c < %s 2>&1 | FileCheck %s + +## GPRC +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 + +## 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 + +# Out of range immediates + +## 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] +## uimm7_lsb00 +c.lw s0, -4(sp) # CHECK: :[[@LINE]]:11: error: immediate must be a multiple of 4 bytes in the range [0, 124] +c.sw s0, 128(sp) # CHECK: :[[@LINE]]:11: error: immediate must be a multiple of 4 bytes in the range [0, 124] diff --git a/llvm/test/MC/RISCV/rv32c-valid.s b/llvm/test/MC/RISCV/rv32c-valid.s new file mode 100644 index 00000000000..86c2dff5698 --- /dev/null +++ b/llvm/test/MC/RISCV/rv32c-valid.s @@ -0,0 +1,23 @@ +# RUN: llvm-mc -triple=riscv32 -mattr=+c -show-encoding < %s \ +# RUN: | FileCheck -check-prefixes=CHECK,CHECK-INST %s +# RUN: llvm-mc -triple=riscv64 -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 +# RUN: llvm-mc -filetype=obj -triple riscv64 -mattr=+c < %s \ +# RUN: | llvm-objdump -mattr=+c -d - | FileCheck -check-prefix=CHECK-INST %s + +# TODO: more exhaustive testing of immediate encoding. + +# CHECK-INST: c.lwsp ra, 0(sp) +# CHECK: encoding: [0x82,0x40] +c.lwsp ra, 0(sp) +# CHECK-INST: c.swsp ra, 252(sp) +# CHECK: encoding: [0x86,0xdf] +c.swsp ra, 252(sp) +# CHECK-INST: c.lw a2, 0(a0) +# CHECK: encoding: [0x10,0x41] +c.lw a2, 0(a0) +# CHECK-INST: c.sw a5, 124(a3) +# CHECK: encoding: [0xfc,0xde] +c.sw a5, 124(a3) diff --git a/llvm/test/MC/RISCV/rv64c-invalid.s b/llvm/test/MC/RISCV/rv64c-invalid.s new file mode 100644 index 00000000000..1dcf5e40a8a --- /dev/null +++ b/llvm/test/MC/RISCV/rv64c-invalid.s @@ -0,0 +1,18 @@ +# RUN: not llvm-mc -triple=riscv64 -mattr=+c < %s 2>&1 | FileCheck %s + +## 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 + +## GPRNoX0 +c.ldsp x0, 4(sp) # CHECK: :[[@LINE]]:9: error: invalid operand for instruction +c.ldsp zero, 4(sp) # CHECK: :[[@LINE]]:9: error: invalid operand for instruction + +# Out of range immediates + +## 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] +## uimm8_lsb000 +c.ld s0, -8(sp) # CHECK: :[[@LINE]]:11: error: immediate must be a multiple of 8 bytes in the range [0, 248] +c.sd s0, 256(sp) # CHECK: :[[@LINE]]:11: error: immediate must be a multiple of 8 bytes in the range [0, 248] diff --git a/llvm/test/MC/RISCV/rv64c-valid.s b/llvm/test/MC/RISCV/rv64c-valid.s new file mode 100644 index 00000000000..9521f9ebd08 --- /dev/null +++ b/llvm/test/MC/RISCV/rv64c-valid.s @@ -0,0 +1,19 @@ +# RUN: llvm-mc -triple=riscv64 -mattr=+c -show-encoding < %s \ +# RUN: | FileCheck -check-prefixes=CHECK,CHECK-INST %s +# RUN: llvm-mc -filetype=obj -triple riscv64 -mattr=+c < %s \ +# RUN: | llvm-objdump -mattr=+c -d - | FileCheck -check-prefix=CHECK-INST %s + +# TODO: more exhaustive testing of immediate encoding. + +# CHECK-INST: c.ldsp ra, 0(sp) +# CHECK: encoding: [0x82,0x60] +c.ldsp ra, 0(sp) +# CHECK-INST: c.sdsp ra, 504(sp) +# CHECK: encoding: [0x86,0xff] +c.sdsp ra, 504(sp) +# CHECK-INST: c.ld a4, 0(a3) +# CHECK: encoding: [0x98,0x62] +c.ld a4, 0(a3) +# CHECK-INST: c.sd a5, 248(a3) +# CHECK: encoding: [0xfc,0xfe] +c.sd a5, 248(a3) |

