diff options
author | Cooper Qu <cooper.qu@linux.alibaba.com> | 2020-10-12 22:29:09 +0800 |
---|---|---|
committer | Lifang Xia <xlf194833_xia@alibaba-inc.com> | 2020-10-26 16:13:55 +0800 |
commit | 039dac293d5df5d933808aa5d946b80fd0a84794 (patch) | |
tree | 333b7a4b677577707bcb11c8042bf7a4e2945eda /gas/config | |
parent | 069ef164801ff68e2ce5d24a2601b1fb6d3acedb (diff) | |
download | gdb-039dac293d5df5d933808aa5d946b80fd0a84794.zip gdb-039dac293d5df5d933808aa5d946b80fd0a84794.tar.gz gdb-039dac293d5df5d933808aa5d946b80fd0a84794.tar.bz2 |
CSKY: Fix and add some instructions for VDSPV1.
gas/
* config/tc-csky.c (get_operand_value): Add handler for
OPRND_TYPE_IMM5b_VSH and OPRND_TYPE_VREG_WITH_INDEX.
* testsuite/gas/csky/csky_vdsp.d : Fix the disassembling
for vector register.
opcodes/
* csky-dis.c (csky_output_operand): Add handler for
OPRND_TYPE_IMM5b_VSH and OPRND_TYPE_VREG_WITH_INDEX.
* csky-opc.h (OPRND_TYPE_VREG_WITH_INDEX): New enum.
(OPRND_TYPE_IMM5b_VSH): New enum.
(csky_v2_opcodes): Fix and add some instructions for VDSPV1.
Change-Id: Ia5675d7b716fe5c331e6121ad8f83061ef6454bb
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-csky.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/gas/config/tc-csky.c b/gas/config/tc-csky.c index 569fe2b..23481b8 100644 --- a/gas/config/tc-csky.c +++ b/gas/config/tc-csky.c @@ -3673,6 +3673,17 @@ get_operand_value (struct csky_opcode_info *op, } return TRUE; + case OPRND_TYPE_IMM5b_VSH: + /* For vshri.T and vshli.T. */ + if (is_imm_within_range (oper, 0, 31)) + { + int val = csky_insn.val[csky_insn.idx - 1]; + val = (val << 1) | (val >> 4); + val &= 0x1f; + csky_insn.val[csky_insn.idx - 1] = val; + return TRUE; + } + return FALSE; case OPRND_TYPE_IMM8b_BMASKI: /* For csky v2 bmask, which will transfer to 16bits movi. */ if (is_imm_within_range (oper, 1, 8)) @@ -4240,6 +4251,7 @@ get_operand_value (struct csky_opcode_info *op, case OPRND_TYPE_AREG_WITH_LSHIFT_FPU: return is_reg_lshift_illegal (oper, 1); case OPRND_TYPE_FREG_WITH_INDEX: + case OPRND_TYPE_VREG_WITH_INDEX: if (parse_type_freg (oper, 0)) { if (**oper == '[') |