• P
    arm: Fix APSR writes via M profile MSR · b28b3377
    Peter Maydell 提交于
    Our implementation of writes to the APSR for M-profile via the MSR
    instruction was badly broken.
    
    First and worst, we had the sense wrong on the test of bit 2 of the
    SYSm field -- this is supposed to request an APSR write if bit 2 is 0
    but we were doing it if bit 2 was 1.  This bug was introduced in
    commit 58117c9b, so hasn't been in a QEMU release.
    
    Secondly, the choice of exactly which parts of APSR should be written
    is defined by bits in the 'mask' field.  We were not passing these
    through from instruction decode, making it impossible to check them
    in the helper.
    
    Pass the mask bits through from the instruction decode to the helper
    function and process them appropriately; fix the wrong sense of the
    SYSm bit 2 check.
    
    Invalid mask values and invalid combinations of mask and register
    number are UNPREDICTABLE; we choose to treat them as if the mask
    values were valid.
    Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
    Message-id: 1487616072-9226-5-git-send-email-peter.maydell@linaro.org
    Reviewed-by: NAlex Bennée <alex.bennee@linaro.org>
    b28b3377
helper.c 351.8 KB