aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2016-04-08 15:18:42 -0700
committerAndrew Waterman <waterman@cs.berkeley.edu>2016-04-08 15:18:42 -0700
commitaf92ce80cff334c7eca3ba6b194dc3371336d7a5 (patch)
tree4e77e20e0f9bbf5330c67b03ce7c65441c9e1258 /binutils
parent3134bf43d81720863c8b8bc8fd4acd1017bca3fc (diff)
downloadriscv-gnu-toolchain-af92ce80cff334c7eca3ba6b194dc3371336d7a5.zip
riscv-gnu-toolchain-af92ce80cff334c7eca3ba6b194dc3371336d7a5.tar.gz
riscv-gnu-toolchain-af92ce80cff334c7eca3ba6b194dc3371336d7a5.tar.bz2
binutils: don't accept 0 as c.addi16sp immediate
Diffstat (limited to 'binutils')
-rw-r--r--binutils/gas/config/tc-riscv.c3
-rw-r--r--binutils/opcodes/riscv-opc.c2
2 files changed, 4 insertions, 1 deletions
diff --git a/binutils/gas/config/tc-riscv.c b/binutils/gas/config/tc-riscv.c
index 6e60c37..c375eb8 100644
--- a/binutils/gas/config/tc-riscv.c
+++ b/binutils/gas/config/tc-riscv.c
@@ -1390,7 +1390,8 @@ rvc_imm_done:
case 'L':
if (my_getSmallExpression (imm_expr, imm_reloc, s, p)
|| imm_expr->X_op != O_constant
- || !VALID_RVC_ADDI16SP_IMM (imm_expr->X_add_number))
+ || !VALID_RVC_ADDI16SP_IMM (imm_expr->X_add_number)
+ || imm_expr->X_add_number == 0)
break;
ip->insn_opcode |=
ENCODE_RVC_ADDI16SP_IMM (imm_expr->X_add_number);
diff --git a/binutils/opcodes/riscv-opc.c b/binutils/opcodes/riscv-opc.c
index 8df27de..ad9c46b 100644
--- a/binutils/opcodes/riscv-opc.c
+++ b/binutils/opcodes/riscv-opc.c
@@ -179,10 +179,12 @@ const struct riscv_opcode riscv_builtin_opcodes[] =
{"bnez", "C", "Cs,Cp", MATCH_C_BNEZ, MASK_C_BNEZ, match_opcode, INSN_ALIAS },
{"bnez", "I", "s,p", MATCH_BNE, MASK_BNE | MASK_RS2, match_opcode, INSN_ALIAS },
{"bne", "I", "s,t,p", MATCH_BNE, MASK_BNE, match_opcode, 0 },
+{"addi", "C", "d,CV,0", MATCH_C_MV, MASK_C_MV, match_c_add, INSN_ALIAS },
{"addi", "C", "Ct,Cc,CK", MATCH_C_ADDI4SPN, MASK_C_ADDI4SPN, match_opcode, INSN_ALIAS },
{"addi", "C", "d,CU,Cj", MATCH_C_ADDI, MASK_C_ADDI, match_rd_nonzero, INSN_ALIAS },
{"addi", "C", "Cc,Cc,CL", MATCH_C_ADDI16SP, MASK_C_ADDI16SP, match_opcode, INSN_ALIAS },
{"addi", "I", "d,s,j", MATCH_ADDI, MASK_ADDI, match_opcode, 0 },
+{"add", "C", "d,CV,0", MATCH_C_MV, MASK_C_MV, match_c_add, INSN_ALIAS },
{"add", "C", "d,CU,CV", MATCH_C_ADD, MASK_C_ADD, match_c_add, INSN_ALIAS },
{"add", "C", "d,CV,CU", MATCH_C_ADD, MASK_C_ADD, match_c_add, INSN_ALIAS },
{"add", "C", "d,CU,Cj", MATCH_C_ADDI, MASK_C_ADDI, match_rd_nonzero, INSN_ALIAS },