aboutsummaryrefslogtreecommitdiff
path: root/gas/config
diff options
context:
space:
mode:
authorCooper Qu <cooper.qu@linux.alibaba.com>2020-10-12 22:29:09 +0800
committerLifang Xia <xlf194833_xia@alibaba-inc.com>2020-10-26 16:13:55 +0800
commit039dac293d5df5d933808aa5d946b80fd0a84794 (patch)
tree333b7a4b677577707bcb11c8042bf7a4e2945eda /gas/config
parent069ef164801ff68e2ce5d24a2601b1fb6d3acedb (diff)
downloadgdb-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.c12
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 == '[')