This is an automated email from Gerrit.

"Walter J. <walter...@oss.cipunited.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/7914

-- gerrit

commit b46a298439401d298dc96ef7061a10e282256e07
Author: Walter Ji <walter...@oss.cipunited.com>
Date:   Wed Sep 27 17:29:47 2023 +0800

    target/mips32: pracc write cp0 status register first
    
    When user requested a change on cp0 status register,
    it may contain changes on EXL/ERL bits, and changes on
    these bits could lead to differnt behaviours on writing
    to other cp0 registers.
    
    Change-Id: Ic83039988c29c06ee134226b52de943c46d19da2
    Signed-off-by: Walter Ji <walter...@oss.cipunited.com>

diff --git a/src/target/mips32_pracc.c b/src/target/mips32_pracc.c
index c85374ff47..6b02821a5b 100644
--- a/src/target/mips32_pracc.c
+++ b/src/target/mips32_pracc.c
@@ -873,12 +873,12 @@ int mips32_pracc_write_regs(struct mips32_common *mips32)
        };
 
        uint32_t cp0_write_data[] = {
+               /* status */
+               c0rs[0],
                /* lo */
                gprs[32],
                /* hi */
                gprs[33],
-               /* status */
-               c0rs[0],
                /* badvaddr */
                c0rs[1],
                /* cause */
@@ -887,6 +887,9 @@ int mips32_pracc_write_regs(struct mips32_common *mips32)
                c0rs[3],
        };
 
+       /* Write CP0 Status Register first, changes on EXL or ERL bits
+        * may lead to different behaviour on writing to other CP0 registers.
+        */
        for (size_t i = 0; i < ARRAY_SIZE(cp0_write_code); i++) {
                /* load CP0 value in $1 */
                pracc_add_li32(&ctx, 1, cp0_write_data[i], 0);

-- 

Reply via email to