{
assert (idx == 1 && (aarch64_get_operand_class (opnds[0].type)
== AARCH64_OPND_CLASS_SYSTEM));
- if (opnds[1].present
- && !aarch64_sys_ins_reg_has_xt (opnds[0].sysins_op))
+ if (!(opnds[1].present && aarch64_sys_ins_reg_tlbid_xt (opnds[0].sysins_op)))
{
- set_other_error (mismatch_detail, idx, _("extraneous register"));
- return false;
- }
- if (!opnds[1].present
- && aarch64_sys_ins_reg_has_xt (opnds[0].sysins_op))
- {
- set_other_error (mismatch_detail, idx, _("missing register"));
- return false;
- }
+ if (opnds[1].present
+ && !aarch64_sys_ins_reg_has_xt (opnds[0].sysins_op))
+ {
+ set_other_error (mismatch_detail, idx, _("extraneous register"));
+ return false;
+ }
+ if (!opnds[1].present
+ && aarch64_sys_ins_reg_has_xt (opnds[0].sysins_op))
+ {
+ set_other_error (mismatch_detail, idx, _("missing register"));
+ return false;
+ }
+ }
}
switch (qualifier)
{
{ "paall", CPENS (6, C8, C7, 4), 0, AARCH64_NO_FEATURES },
#define TLBI_XS_OP(OP, CODE, FLAGS) \
- { OP, CODE, FLAGS, AARCH64_NO_FEATURES }, \
- { OP "nxs", CODE | CPENS (0, C9, 0, 0), FLAGS, AARCH64_FEATURE (XS) },
+ { OP, CODE, FLAGS, AARCH64_FEATURE (TLBID)}, \
+ { OP "nxs", CODE | CPENS (0, C9, 0, 0), FLAGS, AARCH64_FEATURES (2, XS, TLBID)},
+
+ TLBI_XS_OP ( "vmalle1is", CPENS (0, C8, C3, 0), F_TLBID_XT)
+ TLBI_XS_OP ( "vmalls12e1is",CPENS(4,C8, C3, 6), F_TLBID_XT)
+ TLBI_XS_OP ( "alle2is", CPENS (4, C8, C3, 0), F_TLBID_XT)
+ TLBI_XS_OP ( "alle1is", CPENS (4, C8, C3, 4), F_TLBID_XT)
+#undef TLBI_XS_OP
+
+#define TLBI_XS_OP(OP, CODE, FLAGS) \
+ { OP, CODE, FLAGS, AARCH64_NO_FEATURES}, \
+ { OP "nxs", CODE | CPENS (0, C9, 0, 0), FLAGS, AARCH64_FEATURE (XS)},
TLBI_XS_OP ( "vmalle1", CPENS (0, C8, C7, 0), 0)
TLBI_XS_OP ( "vae1", CPENS (0, C8, C7, 1), F_HASXT | F_REG_128)
- TLBI_XS_OP ( "aside1", CPENS (0, C8, C7, 2), F_HASXT )
+ TLBI_XS_OP ( "aside1", CPENS (0, C8, C7, 2), F_HASXT)
TLBI_XS_OP ( "vaae1", CPENS (0, C8, C7, 3), F_HASXT | F_REG_128)
- TLBI_XS_OP ( "vmalle1is", CPENS (0, C8, C3, 0), 0)
TLBI_XS_OP ( "vae1is", CPENS (0, C8, C3, 1), F_HASXT | F_REG_128)
- TLBI_XS_OP ( "aside1is", CPENS (0, C8, C3, 2), F_HASXT )
+ TLBI_XS_OP ( "aside1is", CPENS (0, C8, C3, 2), F_HASXT)
TLBI_XS_OP ( "vaae1is", CPENS (0, C8, C3, 3), F_HASXT | F_REG_128)
TLBI_XS_OP ( "ipas2e1is", CPENS (4, C8, C0, 1), F_HASXT | F_REG_128)
TLBI_XS_OP ( "ipas2le1is",CPENS (4, C8, C0, 5), F_HASXT | F_REG_128)
TLBI_XS_OP ( "vae2", CPENS (4, C8, C7, 1), F_HASXT | F_REG_128)
TLBI_XS_OP ( "vae2is", CPENS (4, C8, C3, 1), F_HASXT | F_REG_128)
TLBI_XS_OP ( "vmalls12e1",CPENS (4, C8, C7, 6), 0)
- TLBI_XS_OP ( "vmalls12e1is",CPENS(4,C8, C3, 6), 0)
TLBI_XS_OP ( "vae3", CPENS (6, C8, C7, 1), F_HASXT | F_REG_128)
TLBI_XS_OP ( "vae3is", CPENS (6, C8, C3, 1), F_HASXT | F_REG_128)
TLBI_XS_OP ( "alle2", CPENS (4, C8, C7, 0), 0)
- TLBI_XS_OP ( "alle2is", CPENS (4, C8, C3, 0), 0)
TLBI_XS_OP ( "alle1", CPENS (4, C8, C7, 4), 0)
- TLBI_XS_OP ( "alle1is", CPENS (4, C8, C3, 4), 0)
TLBI_XS_OP ( "alle3", CPENS (6, C8, C7, 0), 0)
TLBI_XS_OP ( "alle3is", CPENS (6, C8, C3, 0), 0)
TLBI_XS_OP ( "vale1is", CPENS (0, C8, C3, 5), F_HASXT | F_REG_128)
TLBI_XS_OP ( "vale2", CPENS (4, C8, C7, 5), F_HASXT | F_REG_128)
TLBI_XS_OP ( "vale3", CPENS (6, C8, C7, 5), F_HASXT | F_REG_128)
TLBI_XS_OP ( "vaale1", CPENS (0, C8, C7, 7), F_HASXT | F_REG_128)
+#undef TLBI_XS_OP
+#define TLBI_XS_OP(OP, CODE, FLAGS) \
+ { OP, CODE, FLAGS, AARCH64_FEATURES (2, V8_4A, TLBID)}, \
+ { OP "nxs", CODE | CPENS (0, C9, 0, 0), FLAGS, AARCH64_FEATURES (2, XS, TLBID)},
+
+ TLBI_XS_OP ( "vmalle1os", CPENS (0, C8, C1, 0), F_TLBID_XT)
+ TLBI_XS_OP ( "vmalls12e1os", CPENS (4, C8, C1, 6), F_TLBID_XT)
+ TLBI_XS_OP ( "alle2os", CPENS (4, C8, C1, 0), F_TLBID_XT)
+ TLBI_XS_OP ( "alle1os", CPENS (4, C8, C1, 4), F_TLBID_XT)
+ TLBI_XS_OP ( "vmallws2e1is", CPENS (4, C8, C2, 2), F_TLBID_XT)
+ TLBI_XS_OP ( "vmallws2e1os", CPENS (4, C8, C5, 2), F_TLBID_XT)
#undef TLBI_XS_OP
+
#define TLBI_XS_OP(OP, CODE, FLAGS) \
- { OP, CODE, FLAGS, AARCH64_FEATURE (V8_4A) }, \
- { OP "nxs", CODE | CPENS (0, C9, 0, 0), FLAGS, AARCH64_FEATURE (XS) },
+ { OP, CODE, FLAGS, AARCH64_FEATURE (V8_4A)}, \
+ { OP "nxs", CODE | CPENS (0, C9, 0, 0), FLAGS, AARCH64_FEATURE (XS)},
- TLBI_XS_OP ( "vmalle1os", CPENS (0, C8, C1, 0), 0 )
TLBI_XS_OP ( "vae1os", CPENS (0, C8, C1, 1), F_HASXT | F_REG_128 )
- TLBI_XS_OP ( "aside1os", CPENS (0, C8, C1, 2), F_HASXT )
+ TLBI_XS_OP ( "aside1os", CPENS (0, C8, C1, 2), F_HASXT)
TLBI_XS_OP ( "vaae1os", CPENS (0, C8, C1, 3), F_HASXT | F_REG_128 )
TLBI_XS_OP ( "vale1os", CPENS (0, C8, C1, 5), F_HASXT | F_REG_128 )
TLBI_XS_OP ( "vaale1os", CPENS (0, C8, C1, 7), F_HASXT | F_REG_128 )
TLBI_XS_OP ( "ipas2le1os", CPENS (4, C8, C4, 4), F_HASXT | F_REG_128 )
TLBI_XS_OP ( "vae2os", CPENS (4, C8, C1, 1), F_HASXT | F_REG_128 )
TLBI_XS_OP ( "vale2os", CPENS (4, C8, C1, 5), F_HASXT | F_REG_128 )
- TLBI_XS_OP ( "vmalls12e1os", CPENS (4, C8, C1, 6), 0 )
TLBI_XS_OP ( "vae3os", CPENS (6, C8, C1, 1), F_HASXT | F_REG_128 )
TLBI_XS_OP ( "vale3os", CPENS (6, C8, C1, 5), F_HASXT | F_REG_128 )
- TLBI_XS_OP ( "alle2os", CPENS (4, C8, C1, 0), 0 )
- TLBI_XS_OP ( "alle1os", CPENS (4, C8, C1, 4), 0 )
- TLBI_XS_OP ( "alle3os", CPENS (6, C8, C1, 0), 0 )
+ TLBI_XS_OP ( "alle3os", CPENS (6, C8, C1, 0), 0)
TLBI_XS_OP ( "rvae1", CPENS (0, C8, C6, 1), F_HASXT | F_REG_128 )
TLBI_XS_OP ( "rvaae1", CPENS (0, C8, C6, 3), F_HASXT | F_REG_128 )
TLBI_XS_OP ( "rvale3is", CPENS (6, C8, C2, 5), F_HASXT | F_REG_128 )
TLBI_XS_OP ( "rvae3os", CPENS (6, C8, C5, 1), F_HASXT | F_REG_128 )
TLBI_XS_OP ( "rvale3os", CPENS (6, C8, C5, 5), F_HASXT | F_REG_128 )
+ TLBI_XS_OP ( "vmallws2e1",CPENS (4, C8, C6, 3), 0)
#undef TLBI_XS_OP
return (sys_ins_reg->flags & F_HASXT) != 0;
}
+bool
+aarch64_sys_ins_reg_tlbid_xt (const aarch64_sys_ins_reg *sys_ins_reg)
+{
+ return (sys_ins_reg->flags & F_TLBID_XT) != 0;
+}
+
extern bool
aarch64_sys_ins_reg_supported_p (const aarch64_feature_set features,
const char *reg_name,