summaryrefslogtreecommitdiff
path: root/gas/config/tc-csky.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/config/tc-csky.c')
-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 569fe2bc852..23481b838b1 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 == '[')