summaryrefslogtreecommitdiffstats
path: root/llvm/test/MC
diff options
context:
space:
mode:
authorShiva Chen <shiva0217@gmail.com>2018-02-22 15:02:28 +0000
committerShiva Chen <shiva0217@gmail.com>2018-02-22 15:02:28 +0000
commit7c17242b9215d6ac1eacf4a7ed397c672a2b07e9 (patch)
tree3255323376aff1207390cb6326948a230def435d /llvm/test/MC
parent6c1e6bbe0c609489ef49f9d64f1370a43e05c19c (diff)
downloadbcm5719-llvm-7c17242b9215d6ac1eacf4a7ed397c672a2b07e9.tar.gz
bcm5719-llvm-7c17242b9215d6ac1eacf4a7ed397c672a2b07e9.zip
[RISCV] Implement c.lui immediate operand constraint
Implement c.lui immediate constraint to [1, 31] and [0xfffe0, 0xfffff]. The RISC-V ISA describes the constraint as [1, 63], with that value being loaded in to bits 17-12 of the destination register and sign extended from bit 17. Therefore, this 6-bit immediate can represent values in the ranges [1, 31] and [0xfffe0, 0xfffff]. Differential Revision: https://reviews.llvm.org/D42834 llvm-svn: 325792
Diffstat (limited to 'llvm/test/MC')
-rw-r--r--llvm/test/MC/RISCV/rv32c-invalid.s8
-rw-r--r--llvm/test/MC/RISCV/rv32c-valid.s10
2 files changed, 13 insertions, 5 deletions
diff --git a/llvm/test/MC/RISCV/rv32c-invalid.s b/llvm/test/MC/RISCV/rv32c-invalid.s
index 7c4380708df..8ee7c961237 100644
--- a/llvm/test/MC/RISCV/rv32c-invalid.s
+++ b/llvm/test/MC/RISCV/rv32c-invalid.s
@@ -52,9 +52,11 @@ c.addi t0, 0 # CHECK: :[[@LINE]]:12: error: immediate must be non-zero in the ra
c.addi t0, -33 # CHECK: :[[@LINE]]:12: error: immediate must be non-zero in the range [-32, 31]
c.addi t0, 32 # CHECK: :[[@LINE]]:12: error: immediate must be non-zero 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]
+## c_lui_imm
+c.lui t0, 0 # CHECK: :[[@LINE]]:11: error: immediate must be in [0xfffe0, 0xfffff] or [1, 31]
+c.lui t0, 32 # CHECK: :[[@LINE]]:11: error: immediate must be in [0xfffe0, 0xfffff] or [1, 31]
+c.lui t0, 0xffffdf # CHECK: :[[@LINE]]:11: error: immediate must be in [0xfffe0, 0xfffff] or [1, 31]
+c.lui t0, 0x1000000 # CHECK: :[[@LINE]]:11: error: immediate must be in [0xfffe0, 0xfffff] or [1, 31]
## uimm8_lsb00
c.lwsp ra, 256(sp) # CHECK: :[[@LINE]]:13: error: immediate must be a multiple of 4 bytes in the range [0, 252]
diff --git a/llvm/test/MC/RISCV/rv32c-valid.s b/llvm/test/MC/RISCV/rv32c-valid.s
index 029dbdeaaae..449e3be51a7 100644
--- a/llvm/test/MC/RISCV/rv32c-valid.s
+++ b/llvm/test/MC/RISCV/rv32c-valid.s
@@ -94,6 +94,12 @@ c.ebreak
# CHECK-INST: c.lui s0, 1
# CHECK: encoding: [0x05,0x64]
c.lui s0, 1
-# CHECK-INST: c.lui s0, 63
+# CHECK-INST: c.lui s0, 31
+# CHECK: encoding: [0x7d,0x64]
+c.lui s0, 31
+# CHECK-INST: c.lui s0, 1048544
+# CHECK: encoding: [0x01,0x74]
+c.lui s0, 0xfffe0
+# CHECK-INST: c.lui s0, 1048575
# CHECK: encoding: [0x7d,0x74]
-c.lui s0, 63
+c.lui s0, 0xfffff
OpenPOWER on IntegriCloud