aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-aarch64.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/config/tc-aarch64.c')
-rw-r--r--gas/config/tc-aarch64.c81
1 files changed, 4 insertions, 77 deletions
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 0db2ba0..ba7f543 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -4440,50 +4440,14 @@ parse_sme_za_hv_tiles_operand (char **str,
struct aarch64_indexed_za *opnd,
aarch64_opnd_qualifier_t *qualifier)
{
- int64_t imm_limit;
- const reg_entry *reg;
-
- reg = parse_reg_with_qual (str, REG_TYPE_ZATHV, qualifier);
+ const reg_entry *reg = parse_reg_with_qual (str, REG_TYPE_ZATHV, qualifier);
if (!reg)
return false;
opnd->v = aarch64_check_reg_type (reg, REG_TYPE_ZATV);
opnd->regno = reg->number;
- switch (*qualifier)
- {
- case AARCH64_OPND_QLF_S_B:
- imm_limit = 15;
- break;
- case AARCH64_OPND_QLF_S_H:
- imm_limit = 7;
- break;
- case AARCH64_OPND_QLF_S_S:
- imm_limit = 3;
- break;
- case AARCH64_OPND_QLF_S_D:
- imm_limit = 1;
- break;
- case AARCH64_OPND_QLF_S_Q:
- imm_limit = 0;
- break;
- default:
- set_syntax_error (_("invalid ZA tile element size, allowed b, h, s, d and q"));
- return false;
- }
-
- if (!parse_sme_za_index (str, opnd))
- return false;
-
- /* Check if optional index offset is in the range for instruction
- variant. */
- if (opnd->index.imm < 0 || opnd->index.imm > imm_limit)
- {
- set_syntax_error (_("index offset out of range"));
- return false;
- }
-
- return true;
+ return parse_sme_za_index (str, opnd);
}
/* Like parse_sme_za_hv_tiles_operand, but expect braces around the
@@ -4644,17 +4608,8 @@ parse_sme_za_array (char **str, struct aarch64_indexed_za *opnd)
}
opnd->regno = -1;
- if (! parse_sme_za_index (&q, opnd))
- return false;
-
- if (opnd->index.imm < 0 || opnd->index.imm > 15)
- {
- set_syntax_error (_("offset out of range"));
- return false;
- }
-
*str = q;
- return true;
+ return parse_sme_za_index (str, opnd);
}
/* Parse streaming mode operand for SMSTART and SMSTOP.
@@ -4697,43 +4652,15 @@ static bool
parse_sme_pred_reg_with_index (char **str, struct aarch64_indexed_za *opnd,
aarch64_opnd_qualifier_t *qualifier)
{
- int regno;
- int64_t imm_limit;
const reg_entry *reg = parse_reg_with_qual (str, REG_TYPE_PN, qualifier);
-
if (reg == NULL)
return false;
- regno = reg->number;
- switch (*qualifier)
- {
- case AARCH64_OPND_QLF_S_B:
- imm_limit = 15;
- break;
- case AARCH64_OPND_QLF_S_H:
- imm_limit = 7;
- break;
- case AARCH64_OPND_QLF_S_S:
- imm_limit = 3;
- break;
- case AARCH64_OPND_QLF_S_D:
- imm_limit = 1;
- break;
- default:
- set_syntax_error (_("wrong predicate register element size, allowed b, h, s and d"));
- return false;
- }
- opnd->regno = regno;
+ opnd->regno = reg->number;
if (! parse_sme_za_index (str, opnd))
return false;
- if (opnd->index.imm < 0 || opnd->index.imm > imm_limit)
- {
- set_syntax_error (_("element index out of range for given variant"));
- return false;
- }
-
return true;
}