• R/O
  • HTTP
  • SSH
  • HTTPS

提交

標籤
無標籤

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

GNU Binutils with patches for OS216


Commit MetaInfo

修訂b416fe873ef44b2a613c9266c6462a481926d986 (tree)
時間2017-03-15 23:47:52
作者Kito Cheng <kito.cheng@gmai...>
CommiterPalmer Dabbelt

Log Message

RISC-V: Fix assembler for c.li, c.andi and c.addiw

- They can accept 0 in imm field
2017-03-14 Kito Cheng <kito.cheng@gmail.com>
        • riscv-opc.c (riscv_opcodes> <c.li>: Use the 'o' immediate encoding.
          <c.andi>: Likewise.
          <c.addiw> Likewise.

Change Summary

差異

--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
1+2017-03-14 Kito Cheng <kito.cheng@gmail.com>
2+
3+ * config/tc-riscv.c (validate_riscv_insn): Add 'o' RVC immediate
4+ encoding format, which can accept 0-valued immediates.
5+ (riscv_ip): Likewise.
6+
17 2017-03-15 Nick Clifton <nickc@redhat.com>
28
39 * config/tc-riscv.c (riscv_pre_output_hook): Fix compile time
--- a/gas/config/tc-riscv.c
+++ b/gas/config/tc-riscv.c
@@ -506,6 +506,7 @@ validate_riscv_insn (const struct riscv_opcode *opc)
506506 case 'c': break; /* RS1, constrained to equal sp */
507507 case 'i': used_bits |= ENCODE_RVC_SIMM3(-1U); break;
508508 case 'j': used_bits |= ENCODE_RVC_IMM (-1U); break;
509+ case 'o': used_bits |= ENCODE_RVC_IMM (-1U); break;
509510 case 'k': used_bits |= ENCODE_RVC_LW_IMM (-1U); break;
510511 case 'l': used_bits |= ENCODE_RVC_LD_IMM (-1U); break;
511512 case 'm': used_bits |= ENCODE_RVC_LWSP_IMM (-1U); break;
@@ -1327,6 +1328,13 @@ rvc_imm_done:
13271328 ip->insn_opcode |=
13281329 ENCODE_RVC_LDSP_IMM (imm_expr->X_add_number);
13291330 goto rvc_imm_done;
1331+ case 'o':
1332+ if (my_getSmallExpression (imm_expr, imm_reloc, s, p)
1333+ || imm_expr->X_op != O_constant
1334+ || !VALID_RVC_IMM (imm_expr->X_add_number))
1335+ break;
1336+ ip->insn_opcode |= ENCODE_RVC_IMM (imm_expr->X_add_number);
1337+ goto rvc_imm_done;
13301338 case 'K':
13311339 if (my_getSmallExpression (imm_expr, imm_reloc, s, p)
13321340 || imm_expr->X_op != O_constant
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,11 @@
11 2017-03-14 Kito Cheng <kito.cheng@gmail.com>
22
3+ * riscv-opc.c (riscv_opcodes> <c.li>: Use the 'o' immediate encoding.
4+ <c.andi>: Likewise.
5+ <c.addiw> Likewise.
6+
7+2017-03-14 Kito Cheng <kito.cheng@gmail.com>
8+
39 * riscv-opc.c (riscv_opcodes) <c.addi>: Use match_opcode.
410
511 2017-03-13 Andrew Waterman <andrew@sifive.com>
--- a/opcodes/riscv-opc.c
+++ b/opcodes/riscv-opc.c
@@ -622,7 +622,7 @@ const struct riscv_opcode riscv_opcodes[] =
622622 {"c.nop", "C", "", MATCH_C_ADDI, 0xffff, match_opcode, 0 },
623623 {"c.mv", "C", "d,CV", MATCH_C_MV, MASK_C_MV, match_c_add, 0 },
624624 {"c.lui", "C", "d,Cu", MATCH_C_LUI, MASK_C_LUI, match_c_lui, 0 },
625-{"c.li", "C", "d,Cj", MATCH_C_LI, MASK_C_LI, match_rd_nonzero, 0 },
625+{"c.li", "C", "d,Co", MATCH_C_LI, MASK_C_LI, match_rd_nonzero, 0 },
626626 {"c.addi4spn","C", "Ct,Cc,CK", MATCH_C_ADDI4SPN, MASK_C_ADDI4SPN, match_opcode, 0 },
627627 {"c.addi16sp","C", "Cc,CL", MATCH_C_ADDI16SP, MASK_C_ADDI16SP, match_opcode, 0 },
628628 {"c.addi", "C", "d,Cj", MATCH_C_ADDI, MASK_C_ADDI, match_opcode, 0 },
@@ -634,8 +634,8 @@ const struct riscv_opcode riscv_opcodes[] =
634634 {"c.slli", "C", "d,C>", MATCH_C_SLLI, MASK_C_SLLI, match_rd_nonzero, 0 },
635635 {"c.srli", "C", "Cs,C>", MATCH_C_SRLI, MASK_C_SRLI, match_opcode, 0 },
636636 {"c.srai", "C", "Cs,C>", MATCH_C_SRAI, MASK_C_SRAI, match_opcode, 0 },
637-{"c.andi", "C", "Cs,Cj", MATCH_C_ANDI, MASK_C_ANDI, match_opcode, 0 },
638-{"c.addiw", "64C", "d,Cj", MATCH_C_ADDIW, MASK_C_ADDIW, match_rd_nonzero, 0 },
637+{"c.andi", "C", "Cs,Co", MATCH_C_ANDI, MASK_C_ANDI, match_opcode, 0 },
638+{"c.addiw", "64C", "d,Co", MATCH_C_ADDIW, MASK_C_ADDIW, match_rd_nonzero, 0 },
639639 {"c.addw", "64C", "Cs,Ct", MATCH_C_ADDW, MASK_C_ADDW, match_opcode, 0 },
640640 {"c.subw", "64C", "Cs,Ct", MATCH_C_SUBW, MASK_C_SUBW, match_opcode, 0 },
641641 {"c.ldsp", "64C", "d,Cn(Cc)", MATCH_C_LDSP, MASK_C_LDSP, match_rd_nonzero, 0 },