target/arm: Move alias setting for wildcards

Move this test from add_cpreg_to_hashtable to
define_one_arm_cp_reg_with_opaque, where we can also
simplify it based on the loop variables.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
[PMM: adjusted placement of comma in a comment]
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Richard Henderson
2025-09-25 15:54:37 +01:00
committed by Peter Maydell
parent dde8637d28
commit afe6ed3cfb
+12 -10
View File
@@ -7448,20 +7448,12 @@ static void add_cpreg_to_hashtable(ARMCPU *cpu, ARMCPRegInfo *r,
}
/*
* By convention, for wildcarded registers only the first
* entry is used for migration; the others are marked as
* ALIAS so we don't try to transfer the register
* multiple times. Special registers (ie NOP/WFI) are
* never migratable and not even raw-accessible.
* Special registers (ie NOP/WFI) are never migratable and
* are not even raw-accessible.
*/
if (r->type & ARM_CP_SPECIAL_MASK) {
r->type |= ARM_CP_NO_RAW;
}
if (((r->crm == CP_ANY) && crm != 0) ||
((r->opc1 == CP_ANY) && opc1 != 0) ||
((r->opc2 == CP_ANY) && opc2 != 0)) {
r->type |= ARM_CP_ALIAS | ARM_CP_NO_GDB;
}
/*
* Update fields to match the instantiation, overwiting wildcards
@@ -7765,6 +7757,16 @@ void define_one_arm_cp_reg(ARMCPU *cpu, const ARMCPRegInfo *r)
ARMCPRegInfo *r2 = alloc_cpreg(r, NULL);
ARMCPRegInfo *r3;
/*
* By convention, for wildcarded registers only the first
* entry is used for migration; the others are marked as
* ALIAS so we don't try to transfer the register
* multiple times.
*/
if (crm != crmmin || opc1 != opc1min || opc2 != opc2min) {
r2->type |= ARM_CP_ALIAS | ARM_CP_NO_GDB;
}
switch (r->state) {
case ARM_CP_STATE_AA32:
add_cpreg_to_hashtable_aa32(cpu, r2, cp, crm, opc1, opc2);