diff --git a/target-cris/helper.c b/target-cris/helper.c
index de04143..31bf358 100644
--- a/target-cris/helper.c
+++ b/target-cris/helper.c
@@ -23,16 +23,17 @@
 #include "qemu/host-utils.h"
 
 
-//#define CRIS_HELPER_DEBUG
+#define CRIS_HELPER_DEBUG 0
 
+#define D_LOG(...) G_STMT_START \
+    if (CRIS_HELPER_DEBUG) { \
+        qemu_log(__VA_ARGS__); \
+    } G_STMT_END
 
-#ifdef CRIS_HELPER_DEBUG
-#define D(x) x
-#define D_LOG(...) qemu_log(__VA_ARGS__)
-#else
-#define D(x)
-#define D_LOG(...) do { } while (0)
-#endif
+#define DPRINTF(...) G_STMT_START \
+    if (CRIS_HELPER_DEBUG) { \
+        fprintf(stderr, ## __VA_ARGS__); \
+    } G_STMT_END
 
 #if defined(CONFIG_USER_ONLY)
 
@@ -71,7 +72,7 @@ int cpu_cris_handle_mmu_fault(CPUCRISState *env, target_ulong address, int rw,
     int r = -1;
     target_ulong phy;
 
-    D(printf("%s addr=%x pc=%x rw=%x\n", __func__, address, env->pc, rw));
+    DPRINTF("%s addr=%x pc=%x rw=%x\n", __func__, address, env->pc, rw);
     miss = cris_mmu_translate(&res, env, address & TARGET_PAGE_MASK,
                               rw, mmu_idx, 0);
     if (miss) {
@@ -259,7 +260,7 @@ hwaddr cpu_get_phys_page_debug(CPUCRISState * env, target_ulong addr)
     if (!miss) {
         phy = res.phy;
     }
-    D(fprintf(stderr, "%s %x -> %x\n", __func__, addr, phy));
+    DPRINTF("%s %x -> %x\n", __func__, addr, phy);
     return phy;
 }
 #endif
diff --git a/target-cris/mmu.c b/target-cris/mmu.c
index ee31e2a..f930230 100644
--- a/target-cris/mmu.c
+++ b/target-cris/mmu.c
@@ -24,13 +24,23 @@
 #include "mmu.h"
 
 #ifdef DEBUG
-#define D(x) x
-#define D_LOG(...) qemu_log(__VA_ARGS__)
+#define CRIS_ENABLE_DEBUG 1
 #else
-#define D(x) do { } while (0)
-#define D_LOG(...) do { } while (0)
+#define CRIS_ENABLE_DEBUG 0
 #endif
 
+#define DPRINTF(...) G_STMT_START \
+    if (CRIS_ENABLE_DEBUG) { \
+        printf(__VA_ARGS__); \
+    } \
+    G_STMT_END
+
+#define D_LOG(...) G_STMT_START \
+    if (CRIS_ENABLE_DEBUG) { \
+        qemu_log(__VA_ARGS__); \
+    } \
+    G_STMT_END
+
 void cris_mmu_init(CPUCRISState *env)
 {
 	env->mmu_rand_lfsr = 0xcccc;
@@ -105,7 +115,6 @@ static inline void set_field(uint32_t *dst, unsigned int val,
 	*dst |= val;
 }
 
-#ifdef DEBUG
 static void dump_tlb(CPUCRISState *env, int mmu)
 {
 	int set;
@@ -124,7 +133,6 @@ static void dump_tlb(CPUCRISState *env, int mmu)
 		}
 	}
 }
-#endif
 
 /* rw 0 = read, 1 = write, 2 = exec.  */
 static int cris_mmu_translate_page(struct cris_mmu_result *res,
@@ -225,23 +233,23 @@ static int cris_mmu_translate_page(struct cris_mmu_result *res,
         set_exception_vector(0x0b, d_mmu_write);
         */
         if (cfg_k && tlb_k && usermode) {
-            D(printf("tlb: kernel protected %x lo=%x pc=%x\n",
-                     vaddr, lo, env->pc));
+            DPRINTF("tlb: kernel protected %x lo=%x pc=%x\n",
+                    vaddr, lo, env->pc);
             match = 0;
             res->bf_vec = vect_base + 2;
         } else if (rw == 1 && cfg_w && !tlb_w) {
-            D(printf("tlb: write protected %x lo=%x pc=%x\n",
-                     vaddr, lo, env->pc));
+            DPRINTF("tlb: write protected %x lo=%x pc=%x\n",
+                    vaddr, lo, env->pc);
             match = 0;
             /* write accesses never go through the I mmu.  */
             res->bf_vec = vect_base + 3;
         } else if (rw == 2 && cfg_x && !tlb_x) {
-            D(printf("tlb: exec protected %x lo=%x pc=%x\n",
-                     vaddr, lo, env->pc));
+            DPRINTF("tlb: exec protected %x lo=%x pc=%x\n",
+                    vaddr, lo, env->pc);
             match = 0;
             res->bf_vec = vect_base + 3;
         } else if (cfg_v && !tlb_v) {
-            D(printf("tlb: invalid %x\n", vaddr));
+            DPRINTF("tlb: invalid %x\n", vaddr);
             match = 0;
             res->bf_vec = vect_base + 1;
         }
@@ -256,7 +264,9 @@ static int cris_mmu_translate_page(struct cris_mmu_result *res,
                 res->prot |= PAGE_EXEC;
             }
         } else {
-            D(dump_tlb(env, mmu));
+            if (CRIS_ENABLE_DEBUG) {
+                dump_tlb(env, mmu);
+            }
         }
     } else {
         /* If refill, provide a randomized set.  */
@@ -279,18 +289,18 @@ static int cris_mmu_translate_page(struct cris_mmu_result *res,
         set_field(&r_cause, vpage, 13, 19);
         set_field(&r_cause, pid, 0, 8);
         env->sregs[SFR_R_MM_CAUSE] = r_cause;
-        D(printf("refill vaddr=%x pc=%x\n", vaddr, env->pc));
+        DPRINTF("refill vaddr=%x pc=%x\n", vaddr, env->pc);
     }
 
-    D(printf("%s rw=%d mtch=%d pc=%x va=%x vpn=%x tlbvpn=%x pfn=%x pid=%x"
-             " %x cause=%x sel=%x sp=%x %x %x\n",
-             __func__, rw, match, env->pc,
-             vaddr, vpage,
-             tlb_vpn, tlb_pfn, tlb_pid,
-             pid,
-             r_cause,
-             env->sregs[SFR_RW_MM_TLB_SEL],
-             env->regs[R_SP], env->pregs[PR_USP], env->ksp));
+    DPRINTF("%s rw=%d mtch=%d pc=%x va=%x vpn=%x tlbvpn=%x pfn=%x pid=%x"
+            " %x cause=%x sel=%x sp=%x %x %x\n",
+            __func__, rw, match, env->pc,
+            vaddr, vpage,
+            tlb_vpn, tlb_pfn, tlb_pid,
+            pid,
+            r_cause,
+            env->sregs[SFR_RW_MM_TLB_SEL],
+            env->regs[R_SP], env->pregs[PR_USP], env->ksp);
 
     res->phy = tlb_pfn << TARGET_PAGE_BITS;
     return !match;
diff --git a/target-cris/op_helper.c b/target-cris/op_helper.c
index b580513..da37f40 100644
--- a/target-cris/op_helper.c
+++ b/target-cris/op_helper.c
@@ -23,16 +23,13 @@
 #include "helper.h"
 #include "qemu/host-utils.h"
 
-//#define CRIS_OP_HELPER_DEBUG
+#define CRIS_OP_HELPER_DEBUG 0
 
-
-#ifdef CRIS_OP_HELPER_DEBUG
-#define D(x) x
-#define D_LOG(...) qemu_log(__VA_ARGS__)
-#else
-#define D(x)
-#define D_LOG(...) do { } while (0)
-#endif
+#define D_LOG(...) G_STMT_START \
+    if (CRIS_OP_HELPER_DEBUG) { \
+        qemu_log(__VA_ARGS__); \
+    } \
+    G_STMT_END
 
 #if !defined(CONFIG_USER_ONLY)
 #include "exec/softmmu_exec.h"
diff --git a/target-cris/translate.c b/target-cris/translate.c
index 09e6011..88ad038 100644
--- a/target-cris/translate.c
+++ b/target-cris/translate.c
@@ -34,11 +34,11 @@
 #include "helper.h"
 
 #define DISAS_CRIS 0
-#if DISAS_CRIS
-#  define LOG_DIS(...) qemu_log_mask(CPU_LOG_TB_IN_ASM, ## __VA_ARGS__)
-#else
-#  define LOG_DIS(...) do { } while (0)
-#endif
+#define LOG_DIS(...) G_STMT_START \
+    if (DISAS_CRIS) { \
+        qemu_log_mask(CPU_LOG_TB_IN_ASM, ## __VA_ARGS__); \
+    } \
+    G_STMT_END
 
 #define D(x)
 #define BUG() (gen_BUG(dc, __FILE__, __LINE__))
@@ -1263,7 +1263,6 @@ static inline void t_gen_zext(TCGv d, TCGv s, int size)
     }
 }
 
-#if DISAS_CRIS
 static char memsize_char(int size)
 {
     switch (size) {
@@ -1275,7 +1274,6 @@ static char memsize_char(int size)
         break;
     }
 }
-#endif
 
 static inline unsigned int memsize_z(DisasContext *dc)
 {
@@ -1370,7 +1368,6 @@ static int dec_prep_alu_m(CPUCRISState *env, DisasContext *dc,
     return insn_len;
 }
 
-#if DISAS_CRIS
 static const char *cc_name(int cc)
 {
     static const char *cc_names[16] = {
@@ -1380,7 +1377,6 @@ static const char *cc_name(int cc)
     assert(cc < 16);
     return cc_names[cc];
 }
-#endif
 
 /* Start of insn decoders.  */
 
@@ -1842,7 +1838,6 @@ static int dec_mcp_r(CPUCRISState *env, DisasContext *dc)
     return 2;
 }
 
-#if DISAS_CRIS
 static char * swapmode_name(int mode, char *modename) {
     int i = 0;
     if (mode & 8) {
@@ -1860,14 +1855,11 @@ static char * swapmode_name(int mode, char *modename) {
     modename[i++] = 0;
     return modename;
 }
-#endif
 
 static int dec_swap_r(CPUCRISState *env, DisasContext *dc)
 {
     TCGv t0;
-#if DISAS_CRIS
     char modename[4];
-#endif
     LOG_DIS("swap%s $r%u\n",
              swapmode_name(dc->op2, modename), dc->op1);
 
