diff options
author | Claudiu Zissulescu <claziss@synopsys.com> | 2017-04-25 17:07:00 +0200 |
---|---|---|
committer | claziss <claziss@synopsys.com> | 2017-04-25 17:07:00 +0200 |
commit | 126124cc0f3f0417913bfd84d83e4e525b6facf9 (patch) | |
tree | 3b25064e723e5cc5c9a7d5053333f31413570795 /opcodes/arc-opc.c | |
parent | be6a24d8eabdbeef32a9d79e81307af4491fcf56 (diff) | |
download | fsf-binutils-gdb-126124cc0f3f0417913bfd84d83e4e525b6facf9.zip fsf-binutils-gdb-126124cc0f3f0417913bfd84d83e4e525b6facf9.tar.gz fsf-binutils-gdb-126124cc0f3f0417913bfd84d83e4e525b6facf9.tar.bz2 |
[ARC] Enhance enter/leave mnemonics.
enter/leave mnemonics are enhanced to not only accept register ranges
but also single register (i.e., r13) or even no GPR register at all.
gas/
2017-04-25 Claudiu Zissulescu <claziss@synopsys.com>
* testsuite/gas/arc/leave_enter.d: Update test.
* testsuite/gas/arc/leave_enter.s: Likewise.
opcodes/
2017-04-25 Claudiu Zissulescu <claziss@synopsys.com>
* arc-dis.c (print_insn_arc): Smartly print enter/leave mnemonics.
* arc-opc.c (insert_r13el): New function.
(R13_EL): Define.
* arc-tbl.h: Add new enter/leave variants.
Diffstat (limited to 'opcodes/arc-opc.c')
-rw-r--r-- | opcodes/arc-opc.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/opcodes/arc-opc.c b/opcodes/arc-opc.c index 41cd037..c266f4f 100644 --- a/opcodes/arc-opc.c +++ b/opcodes/arc-opc.c @@ -546,6 +546,21 @@ extract_rrange (unsigned long long insn, } static unsigned long long +insert_r13el (unsigned long long insn, + long long int value, + const char **errmsg) +{ + if (value != 13) + { + *errmsg = _("Invalid register number, should be fp"); + return insn; + } + + insn |= 0x02; + return insn; +} + +static unsigned long long insert_fpel (unsigned long long insn, long long value, const char ** errmsg) @@ -1876,7 +1891,10 @@ const struct arc_operand arc_operands[] = #define RRANGE_EL (ZA + 1) { 4, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK | ARC_OPERAND_TRUNCATE, insert_rrange, extract_rrange}, -#define FP_EL (RRANGE_EL + 1) +#define R13_EL (RRANGE_EL + 1) + { 1, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_IGNORE | ARC_OPERAND_NCHK, + insert_r13el, extract_rrange }, +#define FP_EL (R13_EL + 1) { 1, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_IGNORE | ARC_OPERAND_NCHK, insert_fpel, extract_fpel }, #define BLINK_EL (FP_EL + 1) |