GNU Binutils with patches for OS216
修訂 | b416fe873ef44b2a613c9266c6462a481926d986 (tree) |
---|---|
時間 | 2017-03-15 23:47:52 |
作者 | Kito Cheng <kito.cheng@gmai...> |
Commiter | Palmer Dabbelt |
RISC-V: Fix assembler for c.li, c.andi and c.addiw
@@ -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 | + | |
1 | 7 | 2017-03-15 Nick Clifton <nickc@redhat.com> |
2 | 8 | |
3 | 9 | * config/tc-riscv.c (riscv_pre_output_hook): Fix compile time |
@@ -506,6 +506,7 @@ validate_riscv_insn (const struct riscv_opcode *opc) | ||
506 | 506 | case 'c': break; /* RS1, constrained to equal sp */ |
507 | 507 | case 'i': used_bits |= ENCODE_RVC_SIMM3(-1U); break; |
508 | 508 | case 'j': used_bits |= ENCODE_RVC_IMM (-1U); break; |
509 | + case 'o': used_bits |= ENCODE_RVC_IMM (-1U); break; | |
509 | 510 | case 'k': used_bits |= ENCODE_RVC_LW_IMM (-1U); break; |
510 | 511 | case 'l': used_bits |= ENCODE_RVC_LD_IMM (-1U); break; |
511 | 512 | case 'm': used_bits |= ENCODE_RVC_LWSP_IMM (-1U); break; |
@@ -1327,6 +1328,13 @@ rvc_imm_done: | ||
1327 | 1328 | ip->insn_opcode |= |
1328 | 1329 | ENCODE_RVC_LDSP_IMM (imm_expr->X_add_number); |
1329 | 1330 | 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; | |
1330 | 1338 | case 'K': |
1331 | 1339 | if (my_getSmallExpression (imm_expr, imm_reloc, s, p) |
1332 | 1340 | || imm_expr->X_op != O_constant |
@@ -1,5 +1,11 @@ | ||
1 | 1 | 2017-03-14 Kito Cheng <kito.cheng@gmail.com> |
2 | 2 | |
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 | + | |
3 | 9 | * riscv-opc.c (riscv_opcodes) <c.addi>: Use match_opcode. |
4 | 10 | |
5 | 11 | 2017-03-13 Andrew Waterman <andrew@sifive.com> |
@@ -622,7 +622,7 @@ const struct riscv_opcode riscv_opcodes[] = | ||
622 | 622 | {"c.nop", "C", "", MATCH_C_ADDI, 0xffff, match_opcode, 0 }, |
623 | 623 | {"c.mv", "C", "d,CV", MATCH_C_MV, MASK_C_MV, match_c_add, 0 }, |
624 | 624 | {"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 }, | |
626 | 626 | {"c.addi4spn","C", "Ct,Cc,CK", MATCH_C_ADDI4SPN, MASK_C_ADDI4SPN, match_opcode, 0 }, |
627 | 627 | {"c.addi16sp","C", "Cc,CL", MATCH_C_ADDI16SP, MASK_C_ADDI16SP, match_opcode, 0 }, |
628 | 628 | {"c.addi", "C", "d,Cj", MATCH_C_ADDI, MASK_C_ADDI, match_opcode, 0 }, |
@@ -634,8 +634,8 @@ const struct riscv_opcode riscv_opcodes[] = | ||
634 | 634 | {"c.slli", "C", "d,C>", MATCH_C_SLLI, MASK_C_SLLI, match_rd_nonzero, 0 }, |
635 | 635 | {"c.srli", "C", "Cs,C>", MATCH_C_SRLI, MASK_C_SRLI, match_opcode, 0 }, |
636 | 636 | {"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 }, | |
639 | 639 | {"c.addw", "64C", "Cs,Ct", MATCH_C_ADDW, MASK_C_ADDW, match_opcode, 0 }, |
640 | 640 | {"c.subw", "64C", "Cs,Ct", MATCH_C_SUBW, MASK_C_SUBW, match_opcode, 0 }, |
641 | 641 | {"c.ldsp", "64C", "d,Cn(Cc)", MATCH_C_LDSP, MASK_C_LDSP, match_rd_nonzero, 0 }, |