On 20 December 2013 22:16, Peter Maydell <peter.maydell@xxxxxxxxxx> wrote: > More generally I think the way that AArch64 uses op1 to group > the registers by exception-level-access-rights is going to make it > a bit tricky to do the mapping; we either need to > (1) have .opc1 be the AA32 opc1 and infer AA64 op1 from > the permission flags > (2) have .opc1 be the AA64 op1 and insist that the AA32 opc1 > is always zero (or always same as AA64 op1?), and require > split reginfo structs if this isn't so > (3) have both op1 and opc1 fields in the reginfo struct Having waded through the docs a bit more I think the correct answer here is "opc1 is AA64 op1 and AA32 opc1". The definitions line up in almost all cases. The few exceptions are where the AA64 definition has been brought into line with the "opc1 indicates exception level access rights" pattern but the old AA32 definition had a zero opc1 despite not being an EL1 register (typically because it was accessible by EL0; the EL2 registers do match up with the AArch32 encodings). There aren't very many of these, but since the only registers this patchset really cares about are the EL0-accessible registers almost all the ones we're going to add here fall into the "can't share reginfo" category. TPIDR_EL1 (AArch32 TPIDRPRW) is shareable but none of the others are. So I'm going for the "all of opc1/opc2/crn/crm have to match on AA32 and AA64 for a shared reginfo", but it's going to look a little pointless until we get the system emulation done next year :-) thanks -- PMM _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm