]> git.proxmox.com Git - qemu.git/commitdiff
target-sh4: Split the LDST macro into 2 sub-macros
authorAlexandre Courbot <gnurou@gmail.com>
Mon, 12 Jul 2010 05:05:31 +0000 (14:05 +0900)
committerAurelien Jarno <aurelien@aurel32.net>
Mon, 12 Jul 2010 08:20:29 +0000 (10:20 +0200)
The LDST macro is used to generate ldc and stc instructions that work with a
specific register. However, the SGR register only supports stc up to SH4A,
which supports both stc and ldc. This patch creates two sub-macros named LD
and ST that handle generating ldc and stc instructions separately, and
redeclares LDST to use these sub-macro.

Signed-off-by: Alexandre Courbot <gnurou@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
target-sh4/translate.c

index d0d6c00297bfa95f151c32a1a838498cefb86529..3abafd014700f8b230d47bb105f62ff84ea9f81f 100644 (file)
@@ -1511,7 +1511,7 @@ static void _decode_opc(DisasContext * ctx)
            tcg_temp_free(addr);
        }
        return;
-#define LDST(reg,ldnum,ldpnum,stnum,stpnum,prechk)             \
+#define LD(reg,ldnum,ldpnum,prechk)            \
   case ldnum:                                                  \
     prechk                                                     \
     tcg_gen_mov_i32 (cpu_##reg, REG(B11_8));                   \
@@ -1520,7 +1520,8 @@ static void _decode_opc(DisasContext * ctx)
     prechk                                                     \
     tcg_gen_qemu_ld32s (cpu_##reg, REG(B11_8), ctx->memidx);   \
     tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4);               \
-    return;                                                    \
+    return;
+#define ST(reg,stnum,stpnum,prechk)            \
   case stnum:                                                  \
     prechk                                                     \
     tcg_gen_mov_i32 (REG(B11_8), cpu_##reg);                   \
@@ -1535,6 +1536,9 @@ static void _decode_opc(DisasContext * ctx)
        tcg_temp_free(addr);                                    \
     }                                                          \
     return;
+#define LDST(reg,ldnum,ldpnum,stnum,stpnum,prechk)             \
+       LD(reg,ldnum,ldpnum,prechk)                             \
+       ST(reg,stnum,stpnum,prechk)
        LDST(gbr,  0x401e, 0x4017, 0x0012, 0x4013, {})
        LDST(vbr,  0x402e, 0x4027, 0x0022, 0x4023, CHECK_PRIVILEGED)
        LDST(ssr,  0x403e, 0x4037, 0x0032, 0x4033, CHECK_PRIVILEGED)