OSDN Git Service

hw/mips/bootloader: Implement nanoMIPS NOP opcode generator
authorPhilippe Mathieu-Daudé <philmd@linaro.org>
Wed, 2 Nov 2022 15:25:46 +0000 (16:25 +0100)
committerPhilippe Mathieu-Daudé <philmd@linaro.org>
Fri, 13 Jan 2023 08:32:32 +0000 (09:32 +0100)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20221211204533.85359-3-philmd@linaro.org>

hw/mips/bootloader.c

index 21ffd4d..0035f37 100644 (file)
@@ -54,16 +54,32 @@ static bool bootcpu_supports_isa(uint64_t isa_mask)
     return cpu_supports_isa(&MIPS_CPU(first_cpu)->env, isa_mask);
 }
 
-/* Base types */
-static void bl_gen_nop(void **ptr)
+static void st_nm32_p(void **ptr, uint32_t insn)
 {
-    uint32_t *p = *ptr;
+    uint16_t *p = *ptr;
 
-    stl_p(p, 0);
+    stw_p(p, insn >> 16);
+    p++;
+    stw_p(p, insn >> 0);
     p++;
+
     *ptr = p;
 }
 
+/* Base types */
+static void bl_gen_nop(void **ptr)
+{
+    if (bootcpu_supports_isa(ISA_NANOMIPS32)) {
+        st_nm32_p(ptr, 0x8000c000);
+    } else {
+        uint32_t *p = *ptr;
+
+        stl_p(p, 0);
+        p++;
+        *ptr = p;
+    }
+}
+
 static void bl_gen_r_type(void **ptr, uint8_t opcode,
                           bl_reg rs, bl_reg rt, bl_reg rd,
                           uint8_t shift, uint8_t funct)