diff --git a/hw/an5206.c b/hw/an5206.c
index 25407c0..355fccb 100644
--- a/hw/an5206.c
+++ b/hw/an5206.c
@@ -58,7 +58,7 @@ static void an5206_init(ram_addr_t ram_size,
     mcf5206_init(address_space_mem, AN5206_MBAR_ADDR, env);

     /* Load kernel.  */
-    if (!kernel_filename) {
+    if (tcg_enabled() && !kernel_filename) {
         fprintf(stderr, "Kernel image must be specified\n");
         exit(1);
     }
@@ -74,7 +74,7 @@ static void an5206_init(ram_addr_t ram_size,
                                           ram_size - KERNEL_LOAD_ADDR);
         entry = KERNEL_LOAD_ADDR;
     }
-    if (kernel_size < 0) {
+    if (tcg_enabled() && kernel_size < 0) {
         fprintf(stderr, "qemu: could not load kernel '%s'\n", kernel_filename);
         exit(1);
     }
diff --git a/hw/axis_dev88.c b/hw/axis_dev88.c
index 2304e35..b888dae 100644
--- a/hw/axis_dev88.c
+++ b/hw/axis_dev88.c
@@ -337,6 +337,10 @@ void axisdev88_init (ram_addr_t ram_size,
                              irq[0x14 + i]);
     }

+    if (!tcg_enabled()) {
+        return;
+    }
+
     if (!kernel_filename) {
         fprintf(stderr, "Kernel image must be specified\n");
         exit(1);
diff --git a/hw/collie.c b/hw/collie.c
index 42f4310..4474d2a 100644
--- a/hw/collie.c
+++ b/hw/collie.c
@@ -49,6 +49,9 @@ static void collie_init(ram_addr_t ram_size,
                     512, 4, 0x00, 0x00, 0x00, 0x00, 0);

     sysbus_create_simple("scoop", 0x40800000, NULL);
+    if (!tcg_enabled()) {
+        return;
+    }

     collie_binfo.kernel_filename = kernel_filename;
     collie_binfo.kernel_cmdline = kernel_cmdline;
diff --git a/hw/exynos4_boards.c b/hw/exynos4_boards.c
index ea32c51..ae8070c 100644
--- a/hw/exynos4_boards.c
+++ b/hw/exynos4_boards.c
@@ -138,7 +138,9 @@ static void nuri_init(ram_addr_t ram_size,
     exynos4_boards_init_common(kernel_filename, kernel_cmdline,
                 initrd_filename, EXYNOS4_BOARD_NURI);

-    arm_load_kernel(first_cpu, &exynos4_board_binfo);
+    if (tcg_enabled()) {
+        arm_load_kernel(first_cpu, &exynos4_board_binfo);
+    }
 }

 static void smdkc210_init(ram_addr_t ram_size,
@@ -151,7 +153,9 @@ static void smdkc210_init(ram_addr_t ram_size,

     lan9215_init(SMDK_LAN9118_BASE_ADDR,
             qemu_irq_invert(s->irq_table[exynos4210_get_irq(37, 1)]));
-    arm_load_kernel(first_cpu, &exynos4_board_binfo);
+    if (tcg_enabled()) {
+        arm_load_kernel(first_cpu, &exynos4_board_binfo);
+    }
 }

 static QEMUMachine exynos4_machines[EXYNOS4_NUM_OF_BOARDS] = {
diff --git a/hw/highbank.c b/hw/highbank.c
index 906eed5..6b44580 100644
--- a/hw/highbank.c
+++ b/hw/highbank.c
@@ -305,6 +305,9 @@ static void highbank_init(ram_addr_t ram_size,
         sysbus_connect_irq(sysbus_from_qdev(dev), 1, pic[81]);
         sysbus_connect_irq(sysbus_from_qdev(dev), 2, pic[82]);
     }
+    if (!tcg_enabled()) {
+        return;
+    }

     highbank_binfo.ram_size = ram_size;
     highbank_binfo.kernel_filename = kernel_filename;
diff --git a/hw/integratorcp.c b/hw/integratorcp.c
index 9bdb9e6..8e84fbe 100644
--- a/hw/integratorcp.c
+++ b/hw/integratorcp.c
@@ -495,6 +495,9 @@ static void integratorcp_init(ram_addr_t ram_size,
         smc91c111_init(&nd_table[0], 0xc8000000, pic[27]);

     sysbus_create_simple("pl110", 0xc0000000, pic[22]);
+    if (!tcg_enabled()) {
+        return;
+    }

     integrator_binfo.ram_size = ram_size;
     integrator_binfo.kernel_filename = kernel_filename;
diff --git a/hw/mainstone.c b/hw/mainstone.c
index 27f5900..87d941d 100644
--- a/hw/mainstone.c
+++ b/hw/mainstone.c
@@ -164,6 +164,9 @@ static void mainstone_common_init(MemoryRegion
*address_space_mem,
     smc91c111_init(&nd_table[0], MST_ETH_PHYS,
                     qdev_get_gpio_in(mst_irq, ETHERNET_IRQ));

+    if (!tcg_enabled()) {
+        return;
+    }
     mainstone_binfo.kernel_filename = kernel_filename;
     mainstone_binfo.kernel_cmdline = kernel_cmdline;
     mainstone_binfo.initrd_filename = initrd_filename;
diff --git a/hw/mcf5208.c b/hw/mcf5208.c
index d3ebe8d..1b8a424 100644
--- a/hw/mcf5208.c
+++ b/hw/mcf5208.c
@@ -262,6 +262,9 @@ static void mcf5208evb_init(ram_addr_t ram_size,
     /*  0xfc0a4000 GPIO.  */
     /* 0xfc0a8000 SDRAM controller.  */

+    if (!tcg_enabled()) {
+        return;
+    }
     /* Load kernel.  */
     if (!kernel_filename) {
         fprintf(stderr, "Kernel image must be specified\n");
diff --git a/hw/mips_fulong2e.c b/hw/mips_fulong2e.c
index 37dc711..36bfb90 100644
--- a/hw/mips_fulong2e.c
+++ b/hw/mips_fulong2e.c
@@ -303,32 +303,33 @@ static void mips_fulong2e_init(ram_addr_t
ram_size, const char *boot_device,
     memory_region_add_subregion(address_space_mem, 0, ram);
     memory_region_add_subregion(address_space_mem, 0x1fc00000LL, bios);

-    /* We do not support flash operation, just loading pmon.bin as raw BIOS.
-     * Please use -L to set the BIOS path and -bios to set bios name. */
-
-    if (kernel_filename) {
-        loaderparams.ram_size = ram_size;
-        loaderparams.kernel_filename = kernel_filename;
-        loaderparams.kernel_cmdline = kernel_cmdline;
-        loaderparams.initrd_filename = initrd_filename;
-        kernel_entry = load_kernel (env);
-        write_bootloader(env, memory_region_get_ram_ptr(bios), kernel_entry);
-    } else {
-        if (bios_name == NULL) {
-                bios_name = FULONG_BIOSNAME;
-        }
-        filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
-        if (filename) {
-            bios_size = load_image_targphys(filename, 0x1fc00000LL,
-                                            BIOS_SIZE);
-            g_free(filename);
+    if (tcg_enabled()) {
+        /* We do not support flash operation, just loading pmon.bin
as raw BIOS.
+         * Please use -L to set the BIOS path and -bios to set bios name. */
+        if (kernel_filename) {
+            loaderparams.ram_size = ram_size;
+            loaderparams.kernel_filename = kernel_filename;
+            loaderparams.kernel_cmdline = kernel_cmdline;
+            loaderparams.initrd_filename = initrd_filename;
+            kernel_entry = load_kernel (env);
+            write_bootloader(env, memory_region_get_ram_ptr(bios),
kernel_entry);
         } else {
-            bios_size = -1;
-        }
+            if (bios_name == NULL) {
+                bios_name = FULONG_BIOSNAME;
+            }
+            filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
+            if (filename) {
+                bios_size = load_image_targphys(filename, 0x1fc00000LL,
+                                                BIOS_SIZE);
+                g_free(filename);
+            } else {
+                bios_size = -1;
+            }

-        if ((bios_size < 0 || bios_size > BIOS_SIZE) && !kernel_filename) {
-            fprintf(stderr, "qemu: Could not load MIPS bios '%s'\n",
bios_name);
-            exit(1);
+            if ((bios_size < 0 || bios_size > BIOS_SIZE) && !kernel_filename) {
+                fprintf(stderr, "qemu: Could not load MIPS bios
'%s'\n", bios_name);
+                exit(1);
+            }
         }
     }

diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index a6bc7ba..b0f42ec 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -161,20 +161,23 @@ static void mips_jazz_init(MemoryRegion *address_space,
     memory_region_add_subregion(address_space, 0xfff00000LL, bios2);

     /* load the BIOS image. */
-    if (bios_name == NULL)
-        bios_name = BIOS_FILENAME;
-    filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
-    if (filename) {
-        bios_size = load_image_targphys(filename, 0xfff00000LL,
-                                        MAGNUM_BIOS_SIZE);
-        g_free(filename);
-    } else {
-        bios_size = -1;
-    }
-    if (bios_size < 0 || bios_size > MAGNUM_BIOS_SIZE) {
-        fprintf(stderr, "qemu: Could not load MIPS bios '%s'\n",
-                bios_name);
-        exit(1);
+    if (tcg_enabled()) {
+        if (bios_name == NULL) {
+            bios_name = BIOS_FILENAME;
+        }
+        filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
+        if (filename) {
+            bios_size = load_image_targphys(filename, 0xfff00000LL,
+                                            MAGNUM_BIOS_SIZE);
+            g_free(filename);
+        } else {
+            bios_size = -1;
+        }
+        if (bios_size < 0 || bios_size > MAGNUM_BIOS_SIZE) {
+            fprintf(stderr, "qemu: Could not load MIPS bios '%s'\n",
+                    bios_name);
+            exit(1);
+        }
     }

     /* Init CPU internal devices */
diff --git a/hw/mips_malta.c b/hw/mips_malta.c
index 4752bb2..ebbe06a 100644
--- a/hw/mips_malta.c
+++ b/hw/mips_malta.c
@@ -872,58 +872,62 @@ void mips_malta_init (ram_addr_t ram_size,
                                4, 0x0000, 0x0000, 0x0000, 0x0000, be);
     bios = pflash_cfi01_get_memory(fl);
     fl_idx++;
-    if (kernel_filename) {
-        /* Write a small bootloader to the flash location. */
-        loaderparams.ram_size = ram_size;
-        loaderparams.kernel_filename = kernel_filename;
-        loaderparams.kernel_cmdline = kernel_cmdline;
-        loaderparams.initrd_filename = initrd_filename;
-        kernel_entry = load_kernel();
-        write_bootloader(env, memory_region_get_ram_ptr(bios), kernel_entry);
-    } else {
-        /* Load firmware from flash. */
-        if (!dinfo) {
-            /* Load a BIOS image. */
-            if (bios_name == NULL) {
-                bios_name = BIOS_FILENAME;
-            }
-            filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
-            if (filename) {
-                bios_size = load_image_targphys(filename, FLASH_ADDRESS,
-                                                BIOS_SIZE);
-                g_free(filename);
-            } else {
-                bios_size = -1;
-            }
-            if ((bios_size < 0 || bios_size > BIOS_SIZE) && !kernel_filename) {
-                fprintf(stderr,
-                        "qemu: Could not load MIPS bios '%s', and no
-kernel argument was specified\n",
-                        bios_name);
-                exit(1);
+    if (tcg_enabled()) {
+        if (kernel_filename) {
+            /* Write a small bootloader to the flash location. */
+            loaderparams.ram_size = ram_size;
+            loaderparams.kernel_filename = kernel_filename;
+            loaderparams.kernel_cmdline = kernel_cmdline;
+            loaderparams.initrd_filename = initrd_filename;
+            kernel_entry = load_kernel();
+            write_bootloader(env, memory_region_get_ram_ptr(bios),
kernel_entry);
+        } else {
+            /* Load firmware from flash. */
+            if (!dinfo) {
+                /* Load a BIOS image. */
+                if (bios_name == NULL) {
+                    bios_name = BIOS_FILENAME;
+                }
+                filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
+                if (filename) {
+                    bios_size = load_image_targphys(filename, FLASH_ADDRESS,
+                                                    BIOS_SIZE);
+                    g_free(filename);
+                } else {
+                    bios_size = -1;
+                }
+                if ((bios_size < 0 || bios_size > BIOS_SIZE) &&
!kernel_filename) {
+                    fprintf(stderr,
+                            "qemu: Could not load MIPS bios '%s', and
no -kernel argument was specified\n",
+                            bios_name);
+                    exit(1);
+                }
             }
-        }
-        /* In little endian mode the 32bit words in the bios are swapped,
-           a neat trick which allows bi-endian firmware. */
+            /* In little endian mode the 32bit words in the bios are swapped,
+               a neat trick which allows bi-endian firmware. */
 #ifndef TARGET_WORDS_BIGENDIAN
-        {
-            uint32_t *addr = memory_region_get_ram_ptr(bios);
-            uint32_t *end = addr + bios_size;
-            while (addr < end) {
-                bswap32s(addr);
-                addr++;
+            {
+                uint32_t *addr = memory_region_get_ram_ptr(bios);
+                uint32_t *end = addr + bios_size;
+                while (addr < end) {
+                    bswap32s(addr);
+                    addr++;
+                }
             }
-        }
 #endif
+        }
     }

     /* Map the BIOS at a 2nd physical location, as on the real board. */
     memory_region_init_alias(bios_alias, "bios.1fc", bios, 0, BIOS_SIZE);
     memory_region_add_subregion(system_memory, RESET_ADDRESS, bios_alias);

-    /* Board ID = 0x420 (Malta Board with CoreLV)
-       XXX: theoretically 0x1e000010 should map to flash and 0x1fc00010 should
-       map to the board ID. */
-    stl_p(memory_region_get_ram_ptr(bios) + 0x10, 0x00000420);
+    if (tcg_enabled()) {
+        /* Board ID = 0x420 (Malta Board with CoreLV)
+           XXX: theoretically 0x1e000010 should map to flash and
0x1fc00010 should
+           map to the board ID. */
+        stl_p(memory_region_get_ram_ptr(bios) + 0x10, 0x00000420);
+    }

     /* Init internal devices */
     cpu_mips_irq_init_cpu(env);
diff --git a/hw/mips_mipssim.c b/hw/mips_mipssim.c
index 1ea7b58..a248619 100644
--- a/hw/mips_mipssim.c
+++ b/hw/mips_mipssim.c
@@ -174,24 +174,27 @@ mips_mipssim_init (ram_addr_t ram_size,
     /* Map the BIOS / boot exception handler. */
     memory_region_add_subregion(address_space_mem, 0x1fc00000LL, bios);
     /* Load a BIOS / boot exception handler image. */
-    if (bios_name == NULL)
-        bios_name = BIOS_FILENAME;
-    filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
-    if (filename) {
-        bios_size = load_image_targphys(filename, 0x1fc00000LL, BIOS_SIZE);
-        g_free(filename);
-    } else {
-        bios_size = -1;
-    }
-    if ((bios_size < 0 || bios_size > BIOS_SIZE) && !kernel_filename) {
-        /* Bail out if we have neither a kernel image nor boot vector code. */
-        fprintf(stderr,
-                "qemu: Could not load MIPS bios '%s', and no -kernel
argument was specified\n",
-                filename);
-        exit(1);
-    } else {
-        /* We have a boot vector start address. */
-        env->active_tc.PC = (target_long)(int32_t)0xbfc00000;
+    if (tcg_enabled()) {
+        if (bios_name == NULL) {
+            bios_name = BIOS_FILENAME;
+        }
+        filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
+        if (filename) {
+            bios_size = load_image_targphys(filename, 0x1fc00000LL, BIOS_SIZE);
+            g_free(filename);
+        } else {
+            bios_size = -1;
+        }
+        if ((bios_size < 0 || bios_size > BIOS_SIZE) && !kernel_filename) {
+            /* Bail out if we have neither a kernel image nor boot
vector code. */
+            fprintf(stderr,
+                    "qemu: Could not load MIPS bios '%s', and no
-kernel argument was specified\n",
+                    filename);
+            exit(1);
+        } else {
+            /* We have a boot vector start address. */
+            env->active_tc.PC = (target_long)(int32_t)0xbfc00000;
+        }
     }

     if (kernel_filename) {
diff --git a/hw/musicpal.c b/hw/musicpal.c
index c9f845a..cdc71b0 100644
--- a/hw/musicpal.c
+++ b/hw/musicpal.c
@@ -1646,6 +1646,9 @@ static void musicpal_init(ram_addr_t ram_size,
     qdev_init_nofail(dev);
     sysbus_mmio_map(s, 0, MP_AUDIO_BASE);
     sysbus_connect_irq(s, 0, pic[MP_AUDIO_IRQ]);
+    if (!tcg_enabled()) {
+        return;
+    }

     musicpal_binfo.ram_size = MP_RAM_DEFAULT_SIZE;
     musicpal_binfo.kernel_filename = kernel_filename;
diff --git a/hw/omap_sx1.c b/hw/omap_sx1.c
index 4e8ec4a..162462a 100644
--- a/hw/omap_sx1.c
+++ b/hw/omap_sx1.c
@@ -192,7 +192,7 @@ static void sx1_init(ram_addr_t ram_size,
                                 OMAP_CS1_BASE, &cs[1]);
     }

-    if (!kernel_filename && !fl_idx) {
+    if (tcg_enabled() && !kernel_filename && !fl_idx) {
         fprintf(stderr, "Kernel or Flash image must be specified\n");
         exit(1);
     }
diff --git a/hw/palm.c b/hw/palm.c
index b1252ab..c293db5 100644
--- a/hw/palm.c
+++ b/hw/palm.c
@@ -255,7 +255,7 @@ static void palmte_init(ram_addr_t ram_size,
         }
     }

-    if (!rom_loaded && !kernel_filename) {
+    if (tcg_enabled() && !rom_loaded && !kernel_filename) {
         fprintf(stderr, "Kernel or ROM image must be specified\n");
         exit(1);
     }
diff --git a/hw/realview.c b/hw/realview.c
index cf55204..40f2b8b 100644
--- a/hw/realview.c
+++ b/hw/realview.c
@@ -395,6 +395,9 @@ static void realview_init(ram_addr_t ram_size,
     memory_region_init_ram(ram_hack, "realview.hack", 0x1000);
     vmstate_register_ram_global(ram_hack);
     memory_region_add_subregion(sysmem, SMP_BOOT_ADDR, ram_hack);
+    if (!tcg_enabled()) {
+        return;
+    }

     realview_binfo.ram_size = ram_size;
     realview_binfo.kernel_filename = kernel_filename;
diff --git a/hw/s390-virtio.c b/hw/s390-virtio.c
index 1ebe70d..7f7b5c8 100644
--- a/hw/s390-virtio.c
+++ b/hw/s390-virtio.c
@@ -223,43 +223,45 @@ static void s390_init(ram_addr_t my_ram_size,
     /* One CPU has to run */
     s390_add_running_cpu(env);

-    if (kernel_filename) {
+    if (tcg_enabled()) {
+        if (kernel_filename) {

-        kernel_size = load_elf(kernel_filename, NULL, NULL, NULL, NULL,
-                               NULL, 1, ELF_MACHINE, 0);
-        if (kernel_size == -1UL) {
-            kernel_size = load_image_targphys(kernel_filename, 0, ram_size);
-        }
-        /*
-         * we can not rely on the ELF entry point, since up to 3.2 this
-         * value was 0x800 (the SALIPL loader) and it wont work. For
-         * all (Linux) cases 0x10000 (KERN_IMAGE_START) should be fine.
-         */
-        env->psw.addr = KERN_IMAGE_START;
-        env->psw.mask = 0x0000000180000000ULL;
-    } else {
-        ram_addr_t bios_size = 0;
-        char *bios_filename;
-
-        /* Load zipl bootloader */
-        if (bios_name == NULL) {
-            bios_name = ZIPL_FILENAME;
-        }
+            kernel_size = load_elf(kernel_filename, NULL, NULL, NULL, NULL,
+                                   NULL, 1, ELF_MACHINE, 0);
+            if (kernel_size == -1UL) {
+                kernel_size = load_image_targphys(kernel_filename, 0,
ram_size);
+            }
+            /*
+             * we can not rely on the ELF entry point, since up to 3.2 this
+             * value was 0x800 (the SALIPL loader) and it wont work. For
+             * all (Linux) cases 0x10000 (KERN_IMAGE_START) should be fine.
+             */
+            env->psw.addr = KERN_IMAGE_START;
+            env->psw.mask = 0x0000000180000000ULL;
+        } else {
+            ram_addr_t bios_size = 0;
+            char *bios_filename;

-        bios_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
-        bios_size = load_image_targphys(bios_filename, ZIPL_LOAD_ADDR, 4096);
-        g_free(bios_filename);
+            /* Load zipl bootloader */
+            if (bios_name == NULL) {
+                bios_name = ZIPL_FILENAME;
+            }

-        if ((long)bios_size < 0) {
-            hw_error("could not load bootloader '%s'\n", bios_name);
-        }
+            bios_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
+            bios_size = load_image_targphys(bios_filename,
ZIPL_LOAD_ADDR, 4096);
+            g_free(bios_filename);

-        if (bios_size > 4096) {
-            hw_error("stage1 bootloader is > 4k\n");
-        }
+            if ((long)bios_size < 0) {
+                hw_error("could not load bootloader '%s'\n", bios_name);
+            }

-        env->psw.addr = ZIPL_START;
-        env->psw.mask = 0x0000000180000000ULL;
+            if (bios_size > 4096) {
+                hw_error("stage1 bootloader is > 4k\n");
+            }
+
+            env->psw.addr = ZIPL_START;
+            env->psw.mask = 0x0000000180000000ULL;
+        }
     }

     if (initrd_filename) {
@@ -274,7 +276,7 @@ static void s390_init(ram_addr_t my_ram_size,
         memcpy(rom_ptr(INITRD_PARM_SIZE), &initrd_size, 8);
     }

-    if (kernel_cmdline) {
+    if (tcg_enabled() && kernel_cmdline) {
         /* we have to overwrite values in the kernel image, which are "rom" */
         memcpy(rom_ptr(KERN_PARM_AREA), kernel_cmdline,
                strlen(kernel_cmdline) + 1);
diff --git a/hw/shix.c b/hw/shix.c
index dd9ce17..3d1ab05 100644
--- a/hw/shix.c
+++ b/hw/shix.c
@@ -70,22 +70,26 @@ static void shix_init(ram_addr_t ram_size,
     vmstate_register_ram_global(&sdram[1]);
     memory_region_add_subregion(sysmem, 0x0c000000, &sdram[1]);

-    /* Load BIOS in 0 (and access it through P2, 0xA0000000) */
-    if (bios_name == NULL)
-        bios_name = BIOS_FILENAME;
-    printf("%s: load BIOS '%s'\n", __func__, bios_name);
-    ret = load_image_targphys(bios_name, 0, 0x4000);
-    if (ret < 0) {		/* Check bios size */
-	fprintf(stderr, "ret=%d\n", ret);
-	fprintf(stderr, "qemu: could not load SHIX bios '%s'\n",
-		bios_name);
-	exit(1);
+    if (tcg_enabled()) {
+        /* Load BIOS in 0 (and access it through P2, 0xA0000000) */
+        if (bios_name == NULL) {
+            bios_name = BIOS_FILENAME;
+        }
+        printf("%s: load BIOS '%s'\n", __func__, bios_name);
+        ret = load_image_targphys(bios_name, 0, 0x4000);
+        if (ret < 0) {              /* Check bios size */
+            fprintf(stderr, "ret=%d\n", ret);
+            fprintf(stderr, "qemu: could not load SHIX bios '%s'\n",
+                    bios_name);
+            exit(1);
+        }
     }
-
     /* Register peripherals */
     s = sh7750_init(env, sysmem);
     /* XXXXX Check success */
-    tc58128_init(s, "shix_linux_nand.bin", NULL);
+    if (tcg_enabled()) {
+        tc58128_init(s, "shix_linux_nand.bin", NULL);
+    }
     fprintf(stderr, "initialization terminated\n");
 }

diff --git a/hw/spitz.c b/hw/spitz.c
index 1d6d2b0..284cf78 100644
--- a/hw/spitz.c
+++ b/hw/spitz.c
@@ -928,6 +928,9 @@ static void spitz_common_init(ram_addr_t ram_size,
         /* A 4.0 GB microdrive is permanently sitting in CF slot 0.  */
         spitz_microdrive_attach(cpu, 0);

+    if (!tcg_enabled()) {
+        return;
+    }
     spitz_binfo.kernel_filename = kernel_filename;
     spitz_binfo.kernel_cmdline = kernel_cmdline;
     spitz_binfo.initrd_filename = initrd_filename;
diff --git a/hw/tosa.c b/hw/tosa.c
index 6baa17d..a66385e 100644
--- a/hw/tosa.c
+++ b/hw/tosa.c
@@ -237,6 +237,9 @@ static void tosa_init(ram_addr_t ram_size,
     tosa_microdrive_attach(cpu);

     tosa_tg_init(cpu);
+    if (!tcg_enabled()) {
+        return;
+    }

     tosa_binfo.kernel_filename = kernel_filename;
     tosa_binfo.kernel_cmdline = kernel_cmdline;
diff --git a/hw/versatilepb.c b/hw/versatilepb.c
index 25afb1e..0f91148 100644
--- a/hw/versatilepb.c
+++ b/hw/versatilepb.c
@@ -311,6 +311,9 @@ static void versatile_init(ram_addr_t ram_size,
     /*  0x101f3000 UART2.  */
     /* 0x101f4000 SSPI.  */

+    if (!tcg_enabled()) {
+        return;
+    }
     versatile_binfo.ram_size = ram_size;
     versatile_binfo.kernel_filename = kernel_filename;
     versatile_binfo.kernel_cmdline = kernel_cmdline;
diff --git a/hw/vexpress.c b/hw/vexpress.c
index 18d87ac..c7cee81 100644
--- a/hw/vexpress.c
+++ b/hw/vexpress.c
@@ -427,7 +427,9 @@ static void vexpress_common_init(const
VEDBoardInfo *daughterboard,
     /* VE_USB: not modelled */

     /* VE_DAPROM: not modelled */
-
+    if (!tcg_enabled()) {
+        return;
+    }
     vexpress_binfo.ram_size = ram_size;
     vexpress_binfo.kernel_filename = kernel_filename;
     vexpress_binfo.kernel_cmdline = kernel_cmdline;
diff --git a/hw/xilinx_zynq.c b/hw/xilinx_zynq.c
index 7290c64..813d0d7 100644
--- a/hw/xilinx_zynq.c
+++ b/hw/xilinx_zynq.c
@@ -130,6 +130,9 @@ static void zynq_init(ram_addr_t ram_size, const
char *boot_device,
         }
     }

+    if (!tcg_enabled()) {
+        return;
+    }
     zynq_binfo.ram_size = ram_size;
     zynq_binfo.kernel_filename = kernel_filename;
     zynq_binfo.kernel_cmdline = kernel_cmdline;
diff --git a/target-alpha/translate.c b/target-alpha/translate.c
index 1f4565d..254c927 100644
--- a/target-alpha/translate.c
+++ b/target-alpha/translate.c
@@ -3530,7 +3530,9 @@ CPUAlphaState * cpu_alpha_init (const char *cpu_model)

     env = g_malloc0(sizeof(CPUAlphaState));
     cpu_exec_init(env);
-    alpha_translate_init();
+    if (tcg_enabled()) {
+        alpha_translate_init();
+    }
     tlb_flush(env, 1);

     /* Default to ev67; no reason not to emulate insns by default.  */
diff --git a/target-cris/translate.c b/target-cris/translate.c
index 7224f46..fd9e563 100644
--- a/target-cris/translate.c
+++ b/target-cris/translate.c
@@ -3516,8 +3516,9 @@ CPUCRISState *cpu_cris_init (const char *cpu_model)
     cpu_state_reset(env);
 	qemu_init_vcpu(env);

-	if (tcg_initialized)
-		return env;
+        if (!tcg_enabled() || tcg_initialized) {
+            return env;
+        }

 	tcg_initialized = 1;

diff --git a/target-m68k/helper.c b/target-m68k/helper.c
index 1feed9b..358499e 100644
--- a/target-m68k/helper.c
+++ b/target-m68k/helper.c
@@ -169,7 +169,7 @@ CPUM68KState *cpu_m68k_init(const char *cpu_model)

     env = g_malloc0(sizeof(CPUM68KState));
     cpu_exec_init(env);
-    if (!inited) {
+    if (tcg_enabled() && !inited) {
         inited = 1;
         m68k_tcg_init();
     }
diff --git a/target-microblaze/translate.c b/target-microblaze/translate.c
index b602820..5346580 100644
--- a/target-microblaze/translate.c
+++ b/target-microblaze/translate.c
@@ -1902,8 +1902,9 @@ CPUMBState *cpu_mb_init (const char *cpu_model)
     qemu_init_vcpu(env);
     set_float_rounding_mode(float_round_nearest_even, &env->fp_status);

-    if (tcg_initialized)
+    if (!tcg_enabled() || tcg_initialized) {
         return env;
+    }

     tcg_initialized = 1;

diff --git a/target-mips/translate.c b/target-mips/translate.c
index a663b74..edffae2 100644
--- a/target-mips/translate.c
+++ b/target-mips/translate.c
@@ -12707,7 +12707,9 @@ CPUMIPSState *cpu_mips_init (const char *cpu_model)
 #endif
     fpu_init(env, def);
     mvp_init(env, def);
-    mips_tcg_init();
+    if (tcg_enabled()) {
+        mips_tcg_init();
+    }
     cpu_state_reset(env);
     qemu_init_vcpu(env);
     return env;
diff --git a/target-sh4/translate.c b/target-sh4/translate.c
index a337beb..4ec32ab 100644
--- a/target-sh4/translate.c
+++ b/target-sh4/translate.c
@@ -277,7 +277,9 @@ CPUSH4State *cpu_sh4_init(const char *cpu_model)
     env->features = def->features;
     cpu_exec_init(env);
     env->movcal_backup_tail = &(env->movcal_backup);
-    sh4_translate_init();
+    if (tcg_enabled()) {
+        sh4_translate_init();
+    }
     env->cpu_model_str = cpu_model;
     cpu_state_reset(env);
     cpu_register(env, def);
diff --git a/target-sparc/cpu.c b/target-sparc/cpu.c
index 24f90f1..7ac6bdb 100644
--- a/target-sparc/cpu.c
+++ b/target-sparc/cpu.c
@@ -119,7 +119,9 @@ CPUSPARCState *cpu_sparc_init(const char *cpu_model)
     cpu = SPARC_CPU(object_new(TYPE_SPARC_CPU));
     env = &cpu->env;

-    gen_intermediate_code_init(env);
+    if (tcg_enabled()) {
+        gen_intermediate_code_init(env);
+    }

     if (cpu_sparc_register(env, cpu_model) < 0) {
         object_delete(OBJECT(cpu));
