Skip to content
  • Peter Maydell's avatar
    532a3af5
    target/arm: Fix has_vfp/has_neon ID reg squashing for M-profile · 532a3af5
    Peter Maydell authored
    
    
    In arm_cpu_realizefn(), if the CPU has VFP or Neon disabled then we
    squash the ID register fields so that we don't advertise it to the
    guest.  This code was written for A-profile and needs some tweaks to
    work correctly on M-profile:
    
     * A-profile only fields should not be zeroed on M-profile:
       - MVFR0.FPSHVEC,FPTRAP
       - MVFR1.SIMDLS,SIMDINT,SIMDSP,SIMDHP
       - MVFR2.SIMDMISC
     * M-profile only fields should be zeroed on M-profile:
       - MVFR1.FP16
    
    In particular, because MVFR1.SIMDHP on A-profile is the same field as
    MVFR1.FP16 on M-profile this code was incorrectly disabling FP16
    support on an M-profile CPU (where has_neon is always false).  This
    isn't a visible bug yet because we don't have any M-profile CPUs with
    FP16 support, but the change is necessary before we introduce any.
    
    Reviewed-by: default avatarRichard Henderson <richard.henderson@linaro.org>
    Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    Message-id: 20201019151301.2046-9-peter.maydell@linaro.org
    532a3af5
    target/arm: Fix has_vfp/has_neon ID reg squashing for M-profile
    Peter Maydell authored
    
    
    In arm_cpu_realizefn(), if the CPU has VFP or Neon disabled then we
    squash the ID register fields so that we don't advertise it to the
    guest.  This code was written for A-profile and needs some tweaks to
    work correctly on M-profile:
    
     * A-profile only fields should not be zeroed on M-profile:
       - MVFR0.FPSHVEC,FPTRAP
       - MVFR1.SIMDLS,SIMDINT,SIMDSP,SIMDHP
       - MVFR2.SIMDMISC
     * M-profile only fields should be zeroed on M-profile:
       - MVFR1.FP16
    
    In particular, because MVFR1.SIMDHP on A-profile is the same field as
    MVFR1.FP16 on M-profile this code was incorrectly disabling FP16
    support on an M-profile CPU (where has_neon is always false).  This
    isn't a visible bug yet because we don't have any M-profile CPUs with
    FP16 support, but the change is necessary before we introduce any.
    
    Reviewed-by: default avatarRichard Henderson <richard.henderson@linaro.org>
    Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    Message-id: 20201019151301.2046-9-peter.maydell@linaro.org
Loading