mirror of https://github.com/proxmox/mirror_qemu
added cpu_model parameter to cpu_init()
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3562 c046a42c-6fe2-441c-8c8c-71466251a162master
parent
7d77bf2006
commit
aaed909a49
|
@ -785,6 +785,7 @@ int main(int argc, char **argv)
|
||||||
int optind;
|
int optind;
|
||||||
short use_gdbstub = 0;
|
short use_gdbstub = 0;
|
||||||
const char *r;
|
const char *r;
|
||||||
|
const char *cpu_model;
|
||||||
|
|
||||||
if (argc <= 1)
|
if (argc <= 1)
|
||||||
usage();
|
usage();
|
||||||
|
@ -855,7 +856,15 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
/* NOTE: we need to init the CPU at this stage to get
|
/* NOTE: we need to init the CPU at this stage to get
|
||||||
qemu_host_page_size */
|
qemu_host_page_size */
|
||||||
env = cpu_init();
|
#if defined(TARGET_I386)
|
||||||
|
cpu_model = "qemu32";
|
||||||
|
#elif defined(TARGET_PPC)
|
||||||
|
cpu_model = "750";
|
||||||
|
#else
|
||||||
|
#error unsupported CPU
|
||||||
|
#endif
|
||||||
|
|
||||||
|
env = cpu_init(cpu_model);
|
||||||
|
|
||||||
printf("Starting %s with qemu\n----------------\n", filename);
|
printf("Starting %s with qemu\n----------------\n", filename);
|
||||||
|
|
||||||
|
|
5
exec.c
5
exec.c
|
@ -1314,6 +1314,8 @@ void cpu_abort(CPUState *env, const char *fmt, ...)
|
||||||
|
|
||||||
CPUState *cpu_copy(CPUState *env)
|
CPUState *cpu_copy(CPUState *env)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
|
/* XXX: broken, must be handled by each CPU */
|
||||||
CPUState *new_env = cpu_init();
|
CPUState *new_env = cpu_init();
|
||||||
/* preserve chaining and index */
|
/* preserve chaining and index */
|
||||||
CPUState *next_cpu = new_env->next_cpu;
|
CPUState *next_cpu = new_env->next_cpu;
|
||||||
|
@ -1322,6 +1324,9 @@ CPUState *cpu_copy(CPUState *env)
|
||||||
new_env->next_cpu = next_cpu;
|
new_env->next_cpu = next_cpu;
|
||||||
new_env->cpu_index = cpu_index;
|
new_env->cpu_index = cpu_index;
|
||||||
return new_env;
|
return new_env;
|
||||||
|
#else
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(CONFIG_USER_ONLY)
|
#if !defined(CONFIG_USER_ONLY)
|
||||||
|
|
|
@ -37,10 +37,10 @@ static void an5206_init(int ram_size, int vga_ram_size, const char *boot_device,
|
||||||
uint64_t elf_entry;
|
uint64_t elf_entry;
|
||||||
target_ulong entry;
|
target_ulong entry;
|
||||||
|
|
||||||
env = cpu_init();
|
|
||||||
if (!cpu_model)
|
if (!cpu_model)
|
||||||
cpu_model = "m5206";
|
cpu_model = "m5206";
|
||||||
if (cpu_m68k_set_model(env, cpu_model)) {
|
env = cpu_init(cpu_model);
|
||||||
|
if (!env) {
|
||||||
cpu_abort(env, "Unable to find m68k CPU definition\n");
|
cpu_abort(env, "Unable to find m68k CPU definition\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -121,7 +121,7 @@ void bareetraxfs_init (int ram_size, int vga_ram_size, const char *boot_device,
|
||||||
if (cpu_model == NULL) {
|
if (cpu_model == NULL) {
|
||||||
cpu_model = "crisv32";
|
cpu_model = "crisv32";
|
||||||
}
|
}
|
||||||
env = cpu_init();
|
env = cpu_init(cpu_model);
|
||||||
/* register_savevm("cpu", 0, 3, cpu_save, cpu_load, env); */
|
/* register_savevm("cpu", 0, 3, cpu_save, cpu_load, env); */
|
||||||
qemu_register_reset(main_cpu_reset, env);
|
qemu_register_reset(main_cpu_reset, env);
|
||||||
irqs = qemu_allocate_irqs(dummy_cpu_set_irq, env, 32);
|
irqs = qemu_allocate_irqs(dummy_cpu_set_irq, env, 32);
|
||||||
|
|
|
@ -473,10 +473,13 @@ static void integratorcp_init(int ram_size, int vga_ram_size,
|
||||||
qemu_irq *pic;
|
qemu_irq *pic;
|
||||||
qemu_irq *cpu_pic;
|
qemu_irq *cpu_pic;
|
||||||
|
|
||||||
env = cpu_init();
|
|
||||||
if (!cpu_model)
|
if (!cpu_model)
|
||||||
cpu_model = "arm926";
|
cpu_model = "arm926";
|
||||||
cpu_arm_set_model(env, cpu_model);
|
env = cpu_init(cpu_model);
|
||||||
|
if (!env) {
|
||||||
|
fprintf(stderr, "Unable to find CPU definition\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
bios_offset = ram_size + vga_ram_size;
|
bios_offset = ram_size + vga_ram_size;
|
||||||
/* ??? On a real system the first 1Mb is mapped as SSRAM or boot flash. */
|
/* ??? On a real system the first 1Mb is mapped as SSRAM or boot flash. */
|
||||||
/* ??? RAM shoud repeat to fill physical memory space. */
|
/* ??? RAM shoud repeat to fill physical memory space. */
|
||||||
|
|
|
@ -209,11 +209,12 @@ static void mcf5208evb_init(int ram_size, int vga_ram_size,
|
||||||
target_ulong entry;
|
target_ulong entry;
|
||||||
qemu_irq *pic;
|
qemu_irq *pic;
|
||||||
|
|
||||||
env = cpu_init();
|
|
||||||
if (!cpu_model)
|
if (!cpu_model)
|
||||||
cpu_model = "m5208";
|
cpu_model = "m5208";
|
||||||
if (cpu_m68k_set_model(env, cpu_model)) {
|
env = cpu_init(cpu_model);
|
||||||
cpu_abort(env, "Unable to find m68k CPU definition\n");
|
if (!env) {
|
||||||
|
fprintf(stderr, "Unable to find m68k CPU definition\n");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize CPU registers. */
|
/* Initialize CPU registers. */
|
||||||
|
|
|
@ -735,7 +735,6 @@ static void main_cpu_reset(void *opaque)
|
||||||
{
|
{
|
||||||
CPUState *env = opaque;
|
CPUState *env = opaque;
|
||||||
cpu_reset(env);
|
cpu_reset(env);
|
||||||
cpu_mips_register(env, NULL);
|
|
||||||
|
|
||||||
/* The bootload does not need to be rewritten as it is located in a
|
/* The bootload does not need to be rewritten as it is located in a
|
||||||
read only location. The kernel location and the arguments table
|
read only location. The kernel location and the arguments table
|
||||||
|
@ -761,7 +760,6 @@ void mips_malta_init (int ram_size, int vga_ram_size, const char *boot_device,
|
||||||
/* fdctrl_t *floppy_controller; */
|
/* fdctrl_t *floppy_controller; */
|
||||||
MaltaFPGAState *malta_fpga;
|
MaltaFPGAState *malta_fpga;
|
||||||
int ret;
|
int ret;
|
||||||
mips_def_t *def;
|
|
||||||
qemu_irq *i8259;
|
qemu_irq *i8259;
|
||||||
int piix4_devfn;
|
int piix4_devfn;
|
||||||
uint8_t *eeprom_buf;
|
uint8_t *eeprom_buf;
|
||||||
|
@ -776,10 +774,11 @@ void mips_malta_init (int ram_size, int vga_ram_size, const char *boot_device,
|
||||||
cpu_model = "24Kf";
|
cpu_model = "24Kf";
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (mips_find_by_name(cpu_model, &def) != 0)
|
env = cpu_init(cpu_model);
|
||||||
def = NULL;
|
if (!env) {
|
||||||
env = cpu_init();
|
fprintf(stderr, "Unable to find CPU definition\n");
|
||||||
cpu_mips_register(env, def);
|
exit(1);
|
||||||
|
}
|
||||||
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
|
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
|
||||||
qemu_register_reset(main_cpu_reset, env);
|
qemu_register_reset(main_cpu_reset, env);
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,6 @@ static void main_cpu_reset(void *opaque)
|
||||||
{
|
{
|
||||||
CPUState *env = opaque;
|
CPUState *env = opaque;
|
||||||
cpu_reset(env);
|
cpu_reset(env);
|
||||||
cpu_mips_register(env, NULL);
|
|
||||||
|
|
||||||
if (loaderparams.kernel_filename)
|
if (loaderparams.kernel_filename)
|
||||||
load_kernel (env);
|
load_kernel (env);
|
||||||
|
@ -120,10 +119,11 @@ mips_mipssim_init (int ram_size, int vga_ram_size, const char *boot_device,
|
||||||
cpu_model = "24Kf";
|
cpu_model = "24Kf";
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (mips_find_by_name(cpu_model, &def) != 0)
|
env = cpu_init(cpu_model);
|
||||||
def = NULL;
|
if (!env) {
|
||||||
env = cpu_init();
|
fprintf(stderr, "Unable to find CPU definition\n");
|
||||||
cpu_mips_register(env, def);
|
exit(1);
|
||||||
|
}
|
||||||
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
|
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
|
||||||
qemu_register_reset(main_cpu_reset, env);
|
qemu_register_reset(main_cpu_reset, env);
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,6 @@ static void main_cpu_reset(void *opaque)
|
||||||
{
|
{
|
||||||
CPUState *env = opaque;
|
CPUState *env = opaque;
|
||||||
cpu_reset(env);
|
cpu_reset(env);
|
||||||
cpu_mips_register(env, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
|
@ -78,10 +77,11 @@ void mips_pica61_init (int ram_size, int vga_ram_size, const char *boot_device,
|
||||||
cpu_model = "24Kf";
|
cpu_model = "24Kf";
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (mips_find_by_name(cpu_model, &def) != 0)
|
env = cpu_init(cpu_model);
|
||||||
def = NULL;
|
if (!env) {
|
||||||
env = cpu_init();
|
fprintf(stderr, "Unable to find CPU definition\n");
|
||||||
cpu_mips_register(env, def);
|
exit(1);
|
||||||
|
}
|
||||||
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
|
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
|
||||||
qemu_register_reset(main_cpu_reset, env);
|
qemu_register_reset(main_cpu_reset, env);
|
||||||
|
|
||||||
|
|
|
@ -135,7 +135,6 @@ static void main_cpu_reset(void *opaque)
|
||||||
{
|
{
|
||||||
CPUState *env = opaque;
|
CPUState *env = opaque;
|
||||||
cpu_reset(env);
|
cpu_reset(env);
|
||||||
cpu_mips_register(env, NULL);
|
|
||||||
|
|
||||||
if (loaderparams.kernel_filename)
|
if (loaderparams.kernel_filename)
|
||||||
load_kernel (env);
|
load_kernel (env);
|
||||||
|
@ -164,10 +163,11 @@ void mips_r4k_init (int ram_size, int vga_ram_size, const char *boot_device,
|
||||||
cpu_model = "24Kf";
|
cpu_model = "24Kf";
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (mips_find_by_name(cpu_model, &def) != 0)
|
env = cpu_init(cpu_model);
|
||||||
def = NULL;
|
if (!env) {
|
||||||
env = cpu_init();
|
fprintf(stderr, "Unable to find CPU definition\n");
|
||||||
cpu_mips_register(env, def);
|
exit(1);
|
||||||
|
}
|
||||||
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
|
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
|
||||||
qemu_register_reset(main_cpu_reset, env);
|
qemu_register_reset(main_cpu_reset, env);
|
||||||
|
|
||||||
|
|
11
hw/omap.c
11
hw/omap.c
|
@ -4620,15 +4620,20 @@ struct omap_mpu_state_s *omap310_mpu_init(unsigned long sdram_size,
|
||||||
struct omap_mpu_state_s *s = (struct omap_mpu_state_s *)
|
struct omap_mpu_state_s *s = (struct omap_mpu_state_s *)
|
||||||
qemu_mallocz(sizeof(struct omap_mpu_state_s));
|
qemu_mallocz(sizeof(struct omap_mpu_state_s));
|
||||||
ram_addr_t imif_base, emiff_base;
|
ram_addr_t imif_base, emiff_base;
|
||||||
|
|
||||||
|
if (!core)
|
||||||
|
core = "ti925t";
|
||||||
|
|
||||||
/* Core */
|
/* Core */
|
||||||
s->mpu_model = omap310;
|
s->mpu_model = omap310;
|
||||||
s->env = cpu_init();
|
s->env = cpu_init(core);
|
||||||
|
if (!s->env) {
|
||||||
|
fprintf(stderr, "Unable to find CPU definition\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
s->sdram_size = sdram_size;
|
s->sdram_size = sdram_size;
|
||||||
s->sram_size = OMAP15XX_SRAM_SIZE;
|
s->sram_size = OMAP15XX_SRAM_SIZE;
|
||||||
|
|
||||||
cpu_arm_set_model(s->env, core ?: "ti925t");
|
|
||||||
|
|
||||||
s->wakeup = qemu_allocate_irqs(omap_mpu_wakeup, s, 1)[0];
|
s->wakeup = qemu_allocate_irqs(omap_mpu_wakeup, s, 1)[0];
|
||||||
|
|
||||||
/* Clocks */
|
/* Clocks */
|
||||||
|
|
10
hw/pc.c
10
hw/pc.c
|
@ -700,12 +700,12 @@ static void pc_init1(int ram_size, int vga_ram_size, const char *boot_device,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (x86_find_cpu_by_name(cpu_model)) {
|
|
||||||
fprintf(stderr, "Unable to find x86 CPU definition\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
for(i = 0; i < smp_cpus; i++) {
|
for(i = 0; i < smp_cpus; i++) {
|
||||||
env = cpu_init();
|
env = cpu_init(cpu_model);
|
||||||
|
if (!env) {
|
||||||
|
fprintf(stderr, "Unable to find x86 CPU definition\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
if (i != 0)
|
if (i != 0)
|
||||||
env->hflags |= HF_HALTED_MASK;
|
env->hflags |= HF_HALTED_MASK;
|
||||||
if (smp_cpus > 1) {
|
if (smp_cpus > 1) {
|
||||||
|
|
|
@ -37,17 +37,14 @@ CPUState *ppc4xx_init (const unsigned char *cpu_model,
|
||||||
uint32_t sysclk)
|
uint32_t sysclk)
|
||||||
{
|
{
|
||||||
CPUState *env;
|
CPUState *env;
|
||||||
ppc_def_t *def;
|
|
||||||
|
|
||||||
/* init CPUs */
|
/* init CPUs */
|
||||||
env = cpu_init();
|
env = cpu_init(cpu_model);
|
||||||
ppc_find_by_name(cpu_model, &def);
|
if (!env) {
|
||||||
if (def == NULL) {
|
fprintf(stderr, "Unable to find PowerPC %s CPU definition\n",
|
||||||
cpu_abort(env, "Unable to find PowerPC %s CPU definition\n",
|
cpu_model);
|
||||||
cpu_model);
|
exit(1);
|
||||||
}
|
}
|
||||||
cpu_ppc_register(env, def);
|
|
||||||
cpu_ppc_reset(env);
|
|
||||||
cpu_clk->cb = NULL; /* We don't care about CPU clock frequency changes */
|
cpu_clk->cb = NULL; /* We don't care about CPU clock frequency changes */
|
||||||
cpu_clk->opaque = env;
|
cpu_clk->opaque = env;
|
||||||
/* Set time-base frequency to sysclk */
|
/* Set time-base frequency to sysclk */
|
||||||
|
|
|
@ -56,14 +56,13 @@ static void ppc_core99_init (int ram_size, int vga_ram_size,
|
||||||
const char *initrd_filename,
|
const char *initrd_filename,
|
||||||
const char *cpu_model)
|
const char *cpu_model)
|
||||||
{
|
{
|
||||||
CPUState *env, *envs[MAX_CPUS];
|
CPUState *env = NULL, *envs[MAX_CPUS];
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
qemu_irq *pic, **openpic_irqs;
|
qemu_irq *pic, **openpic_irqs;
|
||||||
int unin_memory;
|
int unin_memory;
|
||||||
int linux_boot, i;
|
int linux_boot, i;
|
||||||
unsigned long bios_offset, vga_bios_offset;
|
unsigned long bios_offset, vga_bios_offset;
|
||||||
uint32_t kernel_base, kernel_size, initrd_base, initrd_size;
|
uint32_t kernel_base, kernel_size, initrd_base, initrd_size;
|
||||||
ppc_def_t *def;
|
|
||||||
PCIBus *pci_bus;
|
PCIBus *pci_bus;
|
||||||
nvram_t nvram;
|
nvram_t nvram;
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -80,16 +79,14 @@ static void ppc_core99_init (int ram_size, int vga_ram_size,
|
||||||
linux_boot = (kernel_filename != NULL);
|
linux_boot = (kernel_filename != NULL);
|
||||||
|
|
||||||
/* init CPUs */
|
/* init CPUs */
|
||||||
env = cpu_init();
|
|
||||||
if (cpu_model == NULL)
|
if (cpu_model == NULL)
|
||||||
cpu_model = "default";
|
cpu_model = "default";
|
||||||
ppc_find_by_name(cpu_model, &def);
|
|
||||||
if (def == NULL) {
|
|
||||||
cpu_abort(env, "Unable to find PowerPC CPU definition\n");
|
|
||||||
}
|
|
||||||
for (i = 0; i < smp_cpus; i++) {
|
for (i = 0; i < smp_cpus; i++) {
|
||||||
cpu_ppc_register(env, def);
|
env = cpu_init(cpu_model);
|
||||||
cpu_ppc_reset(env);
|
if (!env) {
|
||||||
|
fprintf(stderr, "Unable to find PowerPC CPU definition\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
/* Set time-base frequency to 100 Mhz */
|
/* Set time-base frequency to 100 Mhz */
|
||||||
cpu_ppc_tb_init(env, 100UL * 1000UL * 1000UL);
|
cpu_ppc_tb_init(env, 100UL * 1000UL * 1000UL);
|
||||||
#if 0
|
#if 0
|
||||||
|
|
|
@ -100,7 +100,7 @@ static void ppc_heathrow_init (int ram_size, int vga_ram_size,
|
||||||
const char *initrd_filename,
|
const char *initrd_filename,
|
||||||
const char *cpu_model)
|
const char *cpu_model)
|
||||||
{
|
{
|
||||||
CPUState *env, *envs[MAX_CPUS];
|
CPUState *env = NULL, *envs[MAX_CPUS];
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
qemu_irq *pic, **heathrow_irqs;
|
qemu_irq *pic, **heathrow_irqs;
|
||||||
nvram_t nvram;
|
nvram_t nvram;
|
||||||
|
@ -108,7 +108,6 @@ static void ppc_heathrow_init (int ram_size, int vga_ram_size,
|
||||||
int linux_boot, i;
|
int linux_boot, i;
|
||||||
unsigned long bios_offset, vga_bios_offset;
|
unsigned long bios_offset, vga_bios_offset;
|
||||||
uint32_t kernel_base, kernel_size, initrd_base, initrd_size;
|
uint32_t kernel_base, kernel_size, initrd_base, initrd_size;
|
||||||
ppc_def_t *def;
|
|
||||||
PCIBus *pci_bus;
|
PCIBus *pci_bus;
|
||||||
MacIONVRAMState *nvr;
|
MacIONVRAMState *nvr;
|
||||||
int vga_bios_size, bios_size;
|
int vga_bios_size, bios_size;
|
||||||
|
@ -119,16 +118,14 @@ static void ppc_heathrow_init (int ram_size, int vga_ram_size,
|
||||||
linux_boot = (kernel_filename != NULL);
|
linux_boot = (kernel_filename != NULL);
|
||||||
|
|
||||||
/* init CPUs */
|
/* init CPUs */
|
||||||
env = cpu_init();
|
|
||||||
if (cpu_model == NULL)
|
if (cpu_model == NULL)
|
||||||
cpu_model = "default";
|
cpu_model = "default";
|
||||||
ppc_find_by_name(cpu_model, &def);
|
|
||||||
if (def == NULL) {
|
|
||||||
cpu_abort(env, "Unable to find PowerPC CPU definition\n");
|
|
||||||
}
|
|
||||||
for (i = 0; i < smp_cpus; i++) {
|
for (i = 0; i < smp_cpus; i++) {
|
||||||
cpu_ppc_register(env, def);
|
env = cpu_init(cpu_model);
|
||||||
cpu_ppc_reset(env);
|
if (!env) {
|
||||||
|
fprintf(stderr, "Unable to find PowerPC CPU definition\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
/* Set time-base frequency to 100 Mhz */
|
/* Set time-base frequency to 100 Mhz */
|
||||||
cpu_ppc_tb_init(env, 100UL * 1000UL * 1000UL);
|
cpu_ppc_tb_init(env, 100UL * 1000UL * 1000UL);
|
||||||
env->osi_call = vga_osi_call;
|
env->osi_call = vga_osi_call;
|
||||||
|
|
|
@ -536,7 +536,6 @@ static void ppc_prep_init (int ram_size, int vga_ram_size, const char *boot_devi
|
||||||
int linux_boot, i, nb_nics1, bios_size;
|
int linux_boot, i, nb_nics1, bios_size;
|
||||||
unsigned long bios_offset;
|
unsigned long bios_offset;
|
||||||
uint32_t kernel_base, kernel_size, initrd_base, initrd_size;
|
uint32_t kernel_base, kernel_size, initrd_base, initrd_size;
|
||||||
ppc_def_t *def;
|
|
||||||
PCIBus *pci_bus;
|
PCIBus *pci_bus;
|
||||||
qemu_irq *i8259;
|
qemu_irq *i8259;
|
||||||
int ppc_boot_device = boot_device[0];
|
int ppc_boot_device = boot_device[0];
|
||||||
|
@ -548,16 +547,14 @@ static void ppc_prep_init (int ram_size, int vga_ram_size, const char *boot_devi
|
||||||
linux_boot = (kernel_filename != NULL);
|
linux_boot = (kernel_filename != NULL);
|
||||||
|
|
||||||
/* init CPUs */
|
/* init CPUs */
|
||||||
env = cpu_init();
|
|
||||||
if (cpu_model == NULL)
|
if (cpu_model == NULL)
|
||||||
cpu_model = "default";
|
cpu_model = "default";
|
||||||
ppc_find_by_name(cpu_model, &def);
|
|
||||||
if (def == NULL) {
|
|
||||||
cpu_abort(env, "Unable to find PowerPC CPU definition\n");
|
|
||||||
}
|
|
||||||
for (i = 0; i < smp_cpus; i++) {
|
for (i = 0; i < smp_cpus; i++) {
|
||||||
cpu_ppc_register(env, def);
|
env = cpu_init(cpu_model);
|
||||||
cpu_ppc_reset(env);
|
if (!env) {
|
||||||
|
fprintf(stderr, "Unable to find PowerPC CPU definition\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
/* Set time-base frequency to 100 Mhz */
|
/* Set time-base frequency to 100 Mhz */
|
||||||
cpu_ppc_tb_init(env, 100UL * 1000UL * 1000UL);
|
cpu_ppc_tb_init(env, 100UL * 1000UL * 1000UL);
|
||||||
qemu_register_reset(&cpu_ppc_reset, env);
|
qemu_register_reset(&cpu_ppc_reset, env);
|
||||||
|
|
19
hw/pxa2xx.c
19
hw/pxa2xx.c
|
@ -2023,9 +2023,14 @@ struct pxa2xx_state_s *pxa270_init(unsigned int sdram_size,
|
||||||
fprintf(stderr, "Machine requires a PXA27x processor.\n");
|
fprintf(stderr, "Machine requires a PXA27x processor.\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
if (!revision)
|
||||||
s->env = cpu_init();
|
revision = "pxa270";
|
||||||
cpu_arm_set_model(s->env, revision ?: "pxa270");
|
|
||||||
|
s->env = cpu_init(revision);
|
||||||
|
if (!s->env) {
|
||||||
|
fprintf(stderr, "Unable to find CPU definition\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
register_savevm("cpu", 0, 0, cpu_save, cpu_load, s->env);
|
register_savevm("cpu", 0, 0, cpu_save, cpu_load, s->env);
|
||||||
|
|
||||||
/* SDRAM & Internal Memory Storage */
|
/* SDRAM & Internal Memory Storage */
|
||||||
|
@ -2132,10 +2137,14 @@ struct pxa2xx_state_s *pxa255_init(unsigned int sdram_size,
|
||||||
struct pxa2xx_state_s *s;
|
struct pxa2xx_state_s *s;
|
||||||
struct pxa2xx_ssp_s *ssp;
|
struct pxa2xx_ssp_s *ssp;
|
||||||
int iomemtype, i;
|
int iomemtype, i;
|
||||||
|
|
||||||
s = (struct pxa2xx_state_s *) qemu_mallocz(sizeof(struct pxa2xx_state_s));
|
s = (struct pxa2xx_state_s *) qemu_mallocz(sizeof(struct pxa2xx_state_s));
|
||||||
|
|
||||||
s->env = cpu_init();
|
s->env = cpu_init("pxa255");
|
||||||
cpu_arm_set_model(s->env, "pxa255");
|
if (!s->env) {
|
||||||
|
fprintf(stderr, "Unable to find CPU definition\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
register_savevm("cpu", 0, 0, cpu_save, cpu_load, s->env);
|
register_savevm("cpu", 0, 0, cpu_save, cpu_load, s->env);
|
||||||
|
|
||||||
/* SDRAM & Internal Memory Storage */
|
/* SDRAM & Internal Memory Storage */
|
||||||
|
|
9
hw/r2d.c
9
hw/r2d.c
|
@ -35,7 +35,14 @@ static void r2d_init(int ram_size, int vga_ram_size, const char *boot_device,
|
||||||
CPUState *env;
|
CPUState *env;
|
||||||
struct SH7750State *s;
|
struct SH7750State *s;
|
||||||
|
|
||||||
env = cpu_init();
|
if (!cpu_model)
|
||||||
|
cpu_model = "any";
|
||||||
|
|
||||||
|
env = cpu_init(cpu_model);
|
||||||
|
if (!env) {
|
||||||
|
fprintf(stderr, "Unable to find CPU definition\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
/* Allocate memory space */
|
/* Allocate memory space */
|
||||||
cpu_register_physical_memory(SDRAM_BASE, SDRAM_SIZE, 0);
|
cpu_register_physical_memory(SDRAM_BASE, SDRAM_SIZE, 0);
|
||||||
|
|
|
@ -26,10 +26,14 @@ static void realview_init(int ram_size, int vga_ram_size,
|
||||||
int n;
|
int n;
|
||||||
int done_smc = 0;
|
int done_smc = 0;
|
||||||
|
|
||||||
env = cpu_init();
|
|
||||||
if (!cpu_model)
|
if (!cpu_model)
|
||||||
cpu_model = "arm926";
|
cpu_model = "arm926";
|
||||||
cpu_arm_set_model(env, cpu_model);
|
env = cpu_init(cpu_model);
|
||||||
|
if (!env) {
|
||||||
|
fprintf(stderr, "Unable to find CPU definition\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
/* ??? RAM shoud repeat to fill physical memory space. */
|
/* ??? RAM shoud repeat to fill physical memory space. */
|
||||||
/* SDRAM at address zero. */
|
/* SDRAM at address zero. */
|
||||||
cpu_register_physical_memory(0, ram_size, IO_MEM_RAM);
|
cpu_register_physical_memory(0, ram_size, IO_MEM_RAM);
|
||||||
|
|
|
@ -70,9 +70,12 @@ static void shix_init(int ram_size, int vga_ram_size, const char *boot_device,
|
||||||
int ret;
|
int ret;
|
||||||
CPUState *env;
|
CPUState *env;
|
||||||
struct SH7750State *s;
|
struct SH7750State *s;
|
||||||
|
|
||||||
|
if (!cpu_model)
|
||||||
|
cpu_model = "any";
|
||||||
|
|
||||||
printf("Initializing CPU\n");
|
printf("Initializing CPU\n");
|
||||||
env = cpu_init();
|
env = cpu_init(cpu_model);
|
||||||
|
|
||||||
/* Allocate memory space */
|
/* Allocate memory space */
|
||||||
printf("Allocating ROM\n");
|
printf("Allocating ROM\n");
|
||||||
|
|
14
hw/sun4m.c
14
hw/sun4m.c
|
@ -313,21 +313,19 @@ static void *sun4m_hw_init(const struct hwdef *hwdef, int RAM_size,
|
||||||
CPUState *env, *envs[MAX_CPUS];
|
CPUState *env, *envs[MAX_CPUS];
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
void *iommu, *espdma, *ledma, *main_esp, *nvram;
|
void *iommu, *espdma, *ledma, *main_esp, *nvram;
|
||||||
const sparc_def_t *def;
|
|
||||||
qemu_irq *cpu_irqs[MAX_CPUS], *slavio_irq, *slavio_cpu_irq,
|
qemu_irq *cpu_irqs[MAX_CPUS], *slavio_irq, *slavio_cpu_irq,
|
||||||
*espdma_irq, *ledma_irq;
|
*espdma_irq, *ledma_irq;
|
||||||
qemu_irq *esp_reset, *le_reset;
|
qemu_irq *esp_reset, *le_reset;
|
||||||
|
|
||||||
/* init CPUs */
|
/* init CPUs */
|
||||||
sparc_find_by_name(cpu_model, &def);
|
|
||||||
if (def == NULL) {
|
|
||||||
fprintf(stderr, "Unable to find Sparc CPU definition\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i = 0; i < smp_cpus; i++) {
|
for(i = 0; i < smp_cpus; i++) {
|
||||||
env = cpu_init();
|
env = cpu_init(cpu_model);
|
||||||
cpu_sparc_register(env, def, i);
|
if (!env) {
|
||||||
|
fprintf(stderr, "Unable to find Sparc CPU definition\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
cpu_sparc_set_id(env, i);
|
||||||
envs[i] = env;
|
envs[i] = env;
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
qemu_register_reset(main_cpu_reset, env);
|
qemu_register_reset(main_cpu_reset, env);
|
||||||
|
|
|
@ -343,7 +343,6 @@ static void sun4u_init(int ram_size, int vga_ram_size, const char *boot_device,
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
long prom_offset, initrd_size, kernel_size;
|
long prom_offset, initrd_size, kernel_size;
|
||||||
PCIBus *pci_bus;
|
PCIBus *pci_bus;
|
||||||
const sparc_def_t *def;
|
|
||||||
QEMUBH *bh;
|
QEMUBH *bh;
|
||||||
qemu_irq *irq;
|
qemu_irq *irq;
|
||||||
|
|
||||||
|
@ -352,13 +351,11 @@ static void sun4u_init(int ram_size, int vga_ram_size, const char *boot_device,
|
||||||
/* init CPUs */
|
/* init CPUs */
|
||||||
if (cpu_model == NULL)
|
if (cpu_model == NULL)
|
||||||
cpu_model = "TI UltraSparc II";
|
cpu_model = "TI UltraSparc II";
|
||||||
sparc_find_by_name(cpu_model, &def);
|
env = cpu_init(cpu_model);
|
||||||
if (def == NULL) {
|
if (!env) {
|
||||||
fprintf(stderr, "Unable to find Sparc CPU definition\n");
|
fprintf(stderr, "Unable to find Sparc CPU definition\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
env = cpu_init();
|
|
||||||
cpu_sparc_register(env, def, 0);
|
|
||||||
bh = qemu_bh_new(tick_irq, env);
|
bh = qemu_bh_new(tick_irq, env);
|
||||||
env->tick = ptimer_init(bh);
|
env->tick = ptimer_init(bh);
|
||||||
ptimer_set_period(env->tick, 1ULL);
|
ptimer_set_period(env->tick, 1ULL);
|
||||||
|
|
|
@ -167,10 +167,13 @@ static void versatile_init(int ram_size, int vga_ram_size,
|
||||||
int n;
|
int n;
|
||||||
int done_smc = 0;
|
int done_smc = 0;
|
||||||
|
|
||||||
env = cpu_init();
|
|
||||||
if (!cpu_model)
|
if (!cpu_model)
|
||||||
cpu_model = "arm926";
|
cpu_model = "arm926";
|
||||||
cpu_arm_set_model(env, cpu_model);
|
env = cpu_init(cpu_model);
|
||||||
|
if (!env) {
|
||||||
|
fprintf(stderr, "Unable to find CPU definition\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
/* ??? RAM shoud repeat to fill physical memory space. */
|
/* ??? RAM shoud repeat to fill physical memory space. */
|
||||||
/* SDRAM at address zero. */
|
/* SDRAM at address zero. */
|
||||||
cpu_register_physical_memory(0, ram_size, IO_MEM_RAM);
|
cpu_register_physical_memory(0, ram_size, IO_MEM_RAM);
|
||||||
|
|
|
@ -1970,26 +1970,42 @@ int main(int argc, char **argv)
|
||||||
/* Scan interp_prefix dir for replacement files. */
|
/* Scan interp_prefix dir for replacement files. */
|
||||||
init_paths(interp_prefix);
|
init_paths(interp_prefix);
|
||||||
|
|
||||||
#if defined(TARGET_I386)
|
|
||||||
/* must be done before cpu_init() for x86 XXX: suppress this hack
|
|
||||||
by adding a new parameter to cpu_init and by suppressing
|
|
||||||
cpu_xxx_register() */
|
|
||||||
if (cpu_model == NULL) {
|
if (cpu_model == NULL) {
|
||||||
|
#if defined(TARGET_I386)
|
||||||
#ifdef TARGET_X86_64
|
#ifdef TARGET_X86_64
|
||||||
cpu_model = "qemu64";
|
cpu_model = "qemu64";
|
||||||
#else
|
#else
|
||||||
cpu_model = "qemu32";
|
cpu_model = "qemu32";
|
||||||
#endif
|
#endif
|
||||||
}
|
#elif defined(TARGET_ARM)
|
||||||
if (x86_find_cpu_by_name(cpu_model)) {
|
cpu_model = "arm926";
|
||||||
fprintf(stderr, "Unable to find x86 CPU definition\n");
|
#elif defined(TARGET_M68K)
|
||||||
exit(1);
|
cpu_model = "any";
|
||||||
}
|
#elif defined(TARGET_SPARC)
|
||||||
|
#ifdef TARGET_SPARC64
|
||||||
|
cpu_model = "TI UltraSparc II";
|
||||||
|
#else
|
||||||
|
cpu_model = "Fujitsu MB86904";
|
||||||
#endif
|
#endif
|
||||||
|
#elif defined(TARGET_MIPS)
|
||||||
|
#if defined(TARGET_ABI_MIPSN32) || defined(TARGET_ABI_MIPSN64)
|
||||||
|
cpu_model = "20Kc";
|
||||||
|
#else
|
||||||
|
cpu_model = "24Kf";
|
||||||
|
#endif
|
||||||
|
#elif defined(TARGET_PPC)
|
||||||
|
cpu_model = "750";
|
||||||
|
#else
|
||||||
|
cpu_model = "any";
|
||||||
|
#endif
|
||||||
|
}
|
||||||
/* NOTE: we need to init the CPU at this stage to get
|
/* NOTE: we need to init the CPU at this stage to get
|
||||||
qemu_host_page_size */
|
qemu_host_page_size */
|
||||||
env = cpu_init();
|
env = cpu_init(cpu_model);
|
||||||
|
if (!env) {
|
||||||
|
fprintf(stderr, "Unable to find CPU definition\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
global_env = env;
|
global_env = env;
|
||||||
|
|
||||||
if(getenv("QEMU_STRACE") ){
|
if(getenv("QEMU_STRACE") ){
|
||||||
|
@ -2130,9 +2146,6 @@ int main(int argc, char **argv)
|
||||||
#elif defined(TARGET_ARM)
|
#elif defined(TARGET_ARM)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
if (cpu_model == NULL)
|
|
||||||
cpu_model = "arm926";
|
|
||||||
cpu_arm_set_model(env, cpu_model);
|
|
||||||
cpsr_write(env, regs->uregs[16], 0xffffffff);
|
cpsr_write(env, regs->uregs[16], 0xffffffff);
|
||||||
for(i = 0; i < 16; i++) {
|
for(i = 0; i < 16; i++) {
|
||||||
env->regs[i] = regs->uregs[i];
|
env->regs[i] = regs->uregs[i];
|
||||||
|
@ -2141,20 +2154,6 @@ int main(int argc, char **argv)
|
||||||
#elif defined(TARGET_SPARC)
|
#elif defined(TARGET_SPARC)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
const sparc_def_t *def;
|
|
||||||
#ifdef TARGET_SPARC64
|
|
||||||
if (cpu_model == NULL)
|
|
||||||
cpu_model = "TI UltraSparc II";
|
|
||||||
#else
|
|
||||||
if (cpu_model == NULL)
|
|
||||||
cpu_model = "Fujitsu MB86904";
|
|
||||||
#endif
|
|
||||||
sparc_find_by_name(cpu_model, &def);
|
|
||||||
if (def == NULL) {
|
|
||||||
fprintf(stderr, "Unable to find Sparc CPU definition\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
cpu_sparc_register(env, def, 0);
|
|
||||||
env->pc = regs->pc;
|
env->pc = regs->pc;
|
||||||
env->npc = regs->npc;
|
env->npc = regs->npc;
|
||||||
env->y = regs->y;
|
env->y = regs->y;
|
||||||
|
@ -2165,19 +2164,8 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
#elif defined(TARGET_PPC)
|
#elif defined(TARGET_PPC)
|
||||||
{
|
{
|
||||||
ppc_def_t *def;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Choose and initialise CPU */
|
|
||||||
if (cpu_model == NULL)
|
|
||||||
cpu_model = "750";
|
|
||||||
ppc_find_by_name(cpu_model, &def);
|
|
||||||
if (def == NULL) {
|
|
||||||
cpu_abort(env,
|
|
||||||
"Unable to find PowerPC CPU definition\n");
|
|
||||||
}
|
|
||||||
cpu_ppc_register(env, def);
|
|
||||||
cpu_ppc_reset(env);
|
|
||||||
#if defined(TARGET_PPC64)
|
#if defined(TARGET_PPC64)
|
||||||
#if defined(TARGET_ABI32)
|
#if defined(TARGET_ABI32)
|
||||||
env->msr &= ~((target_ulong)1 << MSR_SF);
|
env->msr &= ~((target_ulong)1 << MSR_SF);
|
||||||
|
@ -2192,12 +2180,6 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
#elif defined(TARGET_M68K)
|
#elif defined(TARGET_M68K)
|
||||||
{
|
{
|
||||||
if (cpu_model == NULL)
|
|
||||||
cpu_model = "any";
|
|
||||||
if (cpu_m68k_set_model(env, cpu_model)) {
|
|
||||||
cpu_abort(cpu_single_env,
|
|
||||||
"Unable to find m68k CPU definition\n");
|
|
||||||
}
|
|
||||||
env->pc = regs->pc;
|
env->pc = regs->pc;
|
||||||
env->dregs[0] = regs->d0;
|
env->dregs[0] = regs->d0;
|
||||||
env->dregs[1] = regs->d1;
|
env->dregs[1] = regs->d1;
|
||||||
|
@ -2220,21 +2202,8 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
#elif defined(TARGET_MIPS)
|
#elif defined(TARGET_MIPS)
|
||||||
{
|
{
|
||||||
mips_def_t *def;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Choose and initialise CPU */
|
|
||||||
if (cpu_model == NULL)
|
|
||||||
#if defined(TARGET_ABI_MIPSN32) || defined(TARGET_ABI_MIPSN64)
|
|
||||||
cpu_model = "20Kc";
|
|
||||||
#else
|
|
||||||
cpu_model = "24Kf";
|
|
||||||
#endif
|
|
||||||
mips_find_by_name(cpu_model, &def);
|
|
||||||
if (def == NULL)
|
|
||||||
cpu_abort(env, "Unable to find MIPS CPU definition\n");
|
|
||||||
cpu_mips_register(env, def);
|
|
||||||
|
|
||||||
for(i = 0; i < 32; i++) {
|
for(i = 0; i < 32; i++) {
|
||||||
env->gpr[i][env->current_tc] = regs->regs[i];
|
env->gpr[i][env->current_tc] = regs->regs[i];
|
||||||
}
|
}
|
||||||
|
|
|
@ -396,7 +396,7 @@ enum {
|
||||||
IR_ZERO = 31,
|
IR_ZERO = 31,
|
||||||
};
|
};
|
||||||
|
|
||||||
CPUAlphaState * cpu_alpha_init (void);
|
CPUAlphaState * cpu_alpha_init (const char *cpu_model);
|
||||||
int cpu_alpha_exec(CPUAlphaState *s);
|
int cpu_alpha_exec(CPUAlphaState *s);
|
||||||
/* you can call this signal handler from your SIGBUS and SIGSEGV
|
/* you can call this signal handler from your SIGBUS and SIGSEGV
|
||||||
signal handlers to inform the virtual CPU of exceptions. non zero
|
signal handlers to inform the virtual CPU of exceptions. non zero
|
||||||
|
|
|
@ -2095,7 +2095,7 @@ int gen_intermediate_code_pc (CPUState *env, struct TranslationBlock *tb)
|
||||||
return gen_intermediate_code_internal(env, tb, 1);
|
return gen_intermediate_code_internal(env, tb, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
CPUAlphaState * cpu_alpha_init (void)
|
CPUAlphaState * cpu_alpha_init (const char *cpu_model)
|
||||||
{
|
{
|
||||||
CPUAlphaState *env;
|
CPUAlphaState *env;
|
||||||
uint64_t hwpcb;
|
uint64_t hwpcb;
|
||||||
|
@ -2133,3 +2133,4 @@ CPUAlphaState * cpu_alpha_init (void)
|
||||||
|
|
||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -164,7 +164,7 @@ typedef struct CPUARMState {
|
||||||
target_phys_addr_t loader_start;
|
target_phys_addr_t loader_start;
|
||||||
} CPUARMState;
|
} CPUARMState;
|
||||||
|
|
||||||
CPUARMState *cpu_arm_init(void);
|
CPUARMState *cpu_arm_init(const char *cpu_model);
|
||||||
int cpu_arm_exec(CPUARMState *s);
|
int cpu_arm_exec(CPUARMState *s);
|
||||||
void cpu_arm_close(CPUARMState *s);
|
void cpu_arm_close(CPUARMState *s);
|
||||||
void do_interrupt(CPUARMState *);
|
void do_interrupt(CPUARMState *);
|
||||||
|
@ -263,7 +263,6 @@ static inline int arm_feature(CPUARMState *env, int feature)
|
||||||
}
|
}
|
||||||
|
|
||||||
void arm_cpu_list(FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...));
|
void arm_cpu_list(FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...));
|
||||||
void cpu_arm_set_model(CPUARMState *env, const char *name);
|
|
||||||
|
|
||||||
void cpu_arm_set_cp_io(CPUARMState *env, int cpnum,
|
void cpu_arm_set_cp_io(CPUARMState *env, int cpnum,
|
||||||
ARMReadCPFunc *cp_read, ARMWriteCPFunc *cp_write,
|
ARMReadCPFunc *cp_read, ARMWriteCPFunc *cp_write,
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
#include "exec-all.h"
|
#include "exec-all.h"
|
||||||
|
|
||||||
|
static uint32_t cpu_arm_find_by_name(const char *name);
|
||||||
|
|
||||||
static inline void set_feature(CPUARMState *env, int feature)
|
static inline void set_feature(CPUARMState *env, int feature)
|
||||||
{
|
{
|
||||||
env->features |= 1u << feature;
|
env->features |= 1u << feature;
|
||||||
|
@ -89,14 +91,19 @@ void cpu_reset(CPUARMState *env)
|
||||||
tlb_flush(env, 1);
|
tlb_flush(env, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
CPUARMState *cpu_arm_init(void)
|
CPUARMState *cpu_arm_init(const char *cpu_model)
|
||||||
{
|
{
|
||||||
CPUARMState *env;
|
CPUARMState *env;
|
||||||
|
uint32_t id;
|
||||||
|
|
||||||
|
id = cpu_arm_find_by_name(cpu_model);
|
||||||
|
if (id == 0)
|
||||||
|
return NULL;
|
||||||
env = qemu_mallocz(sizeof(CPUARMState));
|
env = qemu_mallocz(sizeof(CPUARMState));
|
||||||
if (!env)
|
if (!env)
|
||||||
return NULL;
|
return NULL;
|
||||||
cpu_exec_init(env);
|
cpu_exec_init(env);
|
||||||
|
env->cp15.c0_cpuid = id;
|
||||||
cpu_reset(env);
|
cpu_reset(env);
|
||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
|
@ -136,24 +143,20 @@ void arm_cpu_list(FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void cpu_arm_set_model(CPUARMState *env, const char *name)
|
/* return 0 if not found */
|
||||||
|
static uint32_t cpu_arm_find_by_name(const char *name)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
uint32_t id;
|
uint32_t id;
|
||||||
|
|
||||||
id = 0;
|
id = 0;
|
||||||
i = 0;
|
|
||||||
for (i = 0; arm_cpu_names[i].name; i++) {
|
for (i = 0; arm_cpu_names[i].name; i++) {
|
||||||
if (strcmp(name, arm_cpu_names[i].name) == 0) {
|
if (strcmp(name, arm_cpu_names[i].name) == 0) {
|
||||||
id = arm_cpu_names[i].id;
|
id = arm_cpu_names[i].id;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!id) {
|
return id;
|
||||||
cpu_abort(env, "Unknown CPU '%s'", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
cpu_reset_model_id(env, id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void cpu_arm_close(CPUARMState *env)
|
void cpu_arm_close(CPUARMState *env)
|
||||||
|
|
|
@ -147,7 +147,7 @@ typedef struct CPUCRISState {
|
||||||
CPU_COMMON
|
CPU_COMMON
|
||||||
} CPUCRISState;
|
} CPUCRISState;
|
||||||
|
|
||||||
CPUCRISState *cpu_cris_init(void);
|
CPUCRISState *cpu_cris_init(const char *cpu_model);
|
||||||
int cpu_cris_exec(CPUCRISState *s);
|
int cpu_cris_exec(CPUCRISState *s);
|
||||||
void cpu_cris_close(CPUCRISState *s);
|
void cpu_cris_close(CPUCRISState *s);
|
||||||
void do_interrupt(CPUCRISState *env);
|
void do_interrupt(CPUCRISState *env);
|
||||||
|
@ -201,10 +201,6 @@ enum {
|
||||||
#define CRIS_SSP 0
|
#define CRIS_SSP 0
|
||||||
#define CRIS_USP 1
|
#define CRIS_USP 1
|
||||||
|
|
||||||
typedef struct cris_def_t cris_def_t;
|
|
||||||
|
|
||||||
int cpu_cris_set_model(CPUCRISState *env, const char * name);
|
|
||||||
|
|
||||||
void cris_set_irq_level(CPUCRISState *env, int level, uint8_t vector);
|
void cris_set_irq_level(CPUCRISState *env, int level, uint8_t vector);
|
||||||
void cris_set_macsr(CPUCRISState *env, uint32_t val);
|
void cris_set_macsr(CPUCRISState *env, uint32_t val);
|
||||||
void cris_switch_sp(CPUCRISState *env);
|
void cris_switch_sp(CPUCRISState *env);
|
||||||
|
|
|
@ -2488,7 +2488,7 @@ void cpu_dump_state (CPUState *env, FILE *f,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CPUCRISState *cpu_cris_init (void)
|
CPUCRISState *cpu_cris_init (const char *cpu_model)
|
||||||
{
|
{
|
||||||
CPUCRISState *env;
|
CPUCRISState *env;
|
||||||
|
|
||||||
|
|
|
@ -585,10 +585,9 @@ typedef struct CPUX86State {
|
||||||
struct APICState *apic_state;
|
struct APICState *apic_state;
|
||||||
} CPUX86State;
|
} CPUX86State;
|
||||||
|
|
||||||
CPUX86State *cpu_x86_init(void);
|
CPUX86State *cpu_x86_init(const char *cpu_model);
|
||||||
int cpu_x86_exec(CPUX86State *s);
|
int cpu_x86_exec(CPUX86State *s);
|
||||||
void cpu_x86_close(CPUX86State *s);
|
void cpu_x86_close(CPUX86State *s);
|
||||||
int x86_find_cpu_by_name (const unsigned char *name);
|
|
||||||
void x86_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt,
|
void x86_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt,
|
||||||
...));
|
...));
|
||||||
int cpu_get_pic_interrupt(CPUX86State *s);
|
int cpu_get_pic_interrupt(CPUX86State *s);
|
||||||
|
|
|
@ -31,9 +31,7 @@
|
||||||
|
|
||||||
//#define DEBUG_MMU
|
//#define DEBUG_MMU
|
||||||
|
|
||||||
static struct x86_def_t *x86_cpu_def;
|
static int cpu_x86_register (CPUX86State *env, const char *cpu_model);
|
||||||
typedef struct x86_def_t x86_def_t;
|
|
||||||
static int cpu_x86_register (CPUX86State *env, const x86_def_t *def);
|
|
||||||
|
|
||||||
static void add_flagname_to_bitmaps(char *flagname, uint32_t *features,
|
static void add_flagname_to_bitmaps(char *flagname, uint32_t *features,
|
||||||
uint32_t *ext_features,
|
uint32_t *ext_features,
|
||||||
|
@ -92,7 +90,7 @@ static void add_flagname_to_bitmaps(char *flagname, uint32_t *features,
|
||||||
fprintf(stderr, "CPU feature %s not found\n", flagname);
|
fprintf(stderr, "CPU feature %s not found\n", flagname);
|
||||||
}
|
}
|
||||||
|
|
||||||
CPUX86State *cpu_x86_init(void)
|
CPUX86State *cpu_x86_init(const char *cpu_model)
|
||||||
{
|
{
|
||||||
CPUX86State *env;
|
CPUX86State *env;
|
||||||
static int inited;
|
static int inited;
|
||||||
|
@ -107,7 +105,10 @@ CPUX86State *cpu_x86_init(void)
|
||||||
inited = 1;
|
inited = 1;
|
||||||
optimize_flags_init();
|
optimize_flags_init();
|
||||||
}
|
}
|
||||||
cpu_x86_register(env, x86_cpu_def);
|
if (cpu_x86_register(env, cpu_model) < 0) {
|
||||||
|
cpu_x86_close(env);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
cpu_reset(env);
|
cpu_reset(env);
|
||||||
#ifdef USE_KQEMU
|
#ifdef USE_KQEMU
|
||||||
kqemu_init(env);
|
kqemu_init(env);
|
||||||
|
@ -115,7 +116,7 @@ CPUX86State *cpu_x86_init(void)
|
||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct x86_def_t {
|
typedef struct x86_def_t {
|
||||||
const char *name;
|
const char *name;
|
||||||
uint32_t vendor1, vendor2, vendor3;
|
uint32_t vendor1, vendor2, vendor3;
|
||||||
int family;
|
int family;
|
||||||
|
@ -123,7 +124,7 @@ struct x86_def_t {
|
||||||
int stepping;
|
int stepping;
|
||||||
uint32_t features, ext_features, ext2_features, ext3_features;
|
uint32_t features, ext_features, ext2_features, ext3_features;
|
||||||
uint32_t xlevel;
|
uint32_t xlevel;
|
||||||
};
|
} x86_def_t;
|
||||||
|
|
||||||
#define PPRO_FEATURES (CPUID_FP87 | CPUID_DE | CPUID_PSE | CPUID_TSC | \
|
#define PPRO_FEATURES (CPUID_FP87 | CPUID_DE | CPUID_PSE | CPUID_TSC | \
|
||||||
CPUID_MSR | CPUID_MCE | CPUID_CX8 | CPUID_PGE | CPUID_CMOV | \
|
CPUID_MSR | CPUID_MCE | CPUID_CX8 | CPUID_PGE | CPUID_CMOV | \
|
||||||
|
@ -194,10 +195,10 @@ static x86_def_t x86_defs[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
int x86_find_cpu_by_name(const unsigned char *cpu_model)
|
static int cpu_x86_find_by_name(x86_def_t *x86_cpu_def, const char *cpu_model)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
x86_def_t *def;
|
||||||
|
|
||||||
char *s = strdup(cpu_model);
|
char *s = strdup(cpu_model);
|
||||||
char *featurestr, *name = strtok(s, ",");
|
char *featurestr, *name = strtok(s, ",");
|
||||||
|
@ -205,17 +206,16 @@ int x86_find_cpu_by_name(const unsigned char *cpu_model)
|
||||||
uint32_t minus_features = 0, minus_ext_features = 0, minus_ext2_features = 0, minus_ext3_features = 0;
|
uint32_t minus_features = 0, minus_ext_features = 0, minus_ext2_features = 0, minus_ext3_features = 0;
|
||||||
int family = -1, model = -1, stepping = -1;
|
int family = -1, model = -1, stepping = -1;
|
||||||
|
|
||||||
ret = -1;
|
def = NULL;
|
||||||
x86_cpu_def = NULL;
|
|
||||||
for (i = 0; i < sizeof(x86_defs) / sizeof(x86_def_t); i++) {
|
for (i = 0; i < sizeof(x86_defs) / sizeof(x86_def_t); i++) {
|
||||||
if (strcmp(name, x86_defs[i].name) == 0) {
|
if (strcmp(name, x86_defs[i].name) == 0) {
|
||||||
x86_cpu_def = &x86_defs[i];
|
def = &x86_defs[i];
|
||||||
ret = 0;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!x86_cpu_def)
|
if (!def)
|
||||||
goto error;
|
goto error;
|
||||||
|
memcpy(x86_cpu_def, def, sizeof(*def));
|
||||||
|
|
||||||
featurestr = strtok(NULL, ",");
|
featurestr = strtok(NULL, ",");
|
||||||
|
|
||||||
|
@ -274,10 +274,12 @@ int x86_find_cpu_by_name(const unsigned char *cpu_model)
|
||||||
x86_cpu_def->ext_features &= ~minus_ext_features;
|
x86_cpu_def->ext_features &= ~minus_ext_features;
|
||||||
x86_cpu_def->ext2_features &= ~minus_ext2_features;
|
x86_cpu_def->ext2_features &= ~minus_ext2_features;
|
||||||
x86_cpu_def->ext3_features &= ~minus_ext3_features;
|
x86_cpu_def->ext3_features &= ~minus_ext3_features;
|
||||||
|
free(s);
|
||||||
|
return 0;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
free(s);
|
free(s);
|
||||||
return ret;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void x86_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...))
|
void x86_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...))
|
||||||
|
@ -288,8 +290,12 @@ void x86_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...))
|
||||||
(*cpu_fprintf)(f, "x86 %16s\n", x86_defs[i].name);
|
(*cpu_fprintf)(f, "x86 %16s\n", x86_defs[i].name);
|
||||||
}
|
}
|
||||||
|
|
||||||
int cpu_x86_register (CPUX86State *env, const x86_def_t *def)
|
static int cpu_x86_register (CPUX86State *env, const char *cpu_model)
|
||||||
{
|
{
|
||||||
|
x86_def_t def1, *def = &def1;
|
||||||
|
|
||||||
|
if (cpu_x86_find_by_name(def, cpu_model) < 0)
|
||||||
|
return -1;
|
||||||
if (def->vendor1) {
|
if (def->vendor1) {
|
||||||
env->cpuid_vendor1 = def->vendor1;
|
env->cpuid_vendor1 = def->vendor1;
|
||||||
env->cpuid_vendor2 = def->vendor2;
|
env->cpuid_vendor2 = def->vendor2;
|
||||||
|
|
|
@ -100,8 +100,6 @@ typedef struct CPUM68KState {
|
||||||
uint32_t rambar0;
|
uint32_t rambar0;
|
||||||
uint32_t cacr;
|
uint32_t cacr;
|
||||||
|
|
||||||
uint32_t features;
|
|
||||||
|
|
||||||
/* ??? remove this. */
|
/* ??? remove this. */
|
||||||
uint32_t t1;
|
uint32_t t1;
|
||||||
|
|
||||||
|
@ -118,9 +116,11 @@ typedef struct CPUM68KState {
|
||||||
uint32_t qregs[MAX_QREGS];
|
uint32_t qregs[MAX_QREGS];
|
||||||
|
|
||||||
CPU_COMMON
|
CPU_COMMON
|
||||||
|
|
||||||
|
uint32_t features;
|
||||||
} CPUM68KState;
|
} CPUM68KState;
|
||||||
|
|
||||||
CPUM68KState *cpu_m68k_init(void);
|
CPUM68KState *cpu_m68k_init(const char *cpu_model);
|
||||||
int cpu_m68k_exec(CPUM68KState *s);
|
int cpu_m68k_exec(CPUM68KState *s);
|
||||||
void cpu_m68k_close(CPUM68KState *s);
|
void cpu_m68k_close(CPUM68KState *s);
|
||||||
void do_interrupt(int is_hw);
|
void do_interrupt(int is_hw);
|
||||||
|
@ -174,10 +174,6 @@ enum {
|
||||||
#define MACSR_V 0x002
|
#define MACSR_V 0x002
|
||||||
#define MACSR_EV 0x001
|
#define MACSR_EV 0x001
|
||||||
|
|
||||||
typedef struct m68k_def_t m68k_def_t;
|
|
||||||
|
|
||||||
int cpu_m68k_set_model(CPUM68KState *env, const char * name);
|
|
||||||
|
|
||||||
void m68k_set_irq_level(CPUM68KState *env, int level, uint8_t vector);
|
void m68k_set_irq_level(CPUM68KState *env, int level, uint8_t vector);
|
||||||
void m68k_set_macsr(CPUM68KState *env, uint32_t val);
|
void m68k_set_macsr(CPUM68KState *env, uint32_t val);
|
||||||
void m68k_switch_sp(CPUM68KState *env);
|
void m68k_switch_sp(CPUM68KState *env);
|
||||||
|
|
|
@ -33,6 +33,8 @@ enum m68k_cpuid {
|
||||||
M68K_CPUID_ANY,
|
M68K_CPUID_ANY,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct m68k_def_t m68k_def_t;
|
||||||
|
|
||||||
struct m68k_def_t {
|
struct m68k_def_t {
|
||||||
const char * name;
|
const char * name;
|
||||||
enum m68k_cpuid id;
|
enum m68k_cpuid id;
|
||||||
|
@ -51,7 +53,7 @@ static void m68k_set_feature(CPUM68KState *env, int feature)
|
||||||
env->features |= (1u << feature);
|
env->features |= (1u << feature);
|
||||||
}
|
}
|
||||||
|
|
||||||
int cpu_m68k_set_model(CPUM68KState *env, const char * name)
|
static int cpu_m68k_set_model(CPUM68KState *env, const char *name)
|
||||||
{
|
{
|
||||||
m68k_def_t *def;
|
m68k_def_t *def;
|
||||||
|
|
||||||
|
@ -60,7 +62,7 @@ int cpu_m68k_set_model(CPUM68KState *env, const char * name)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!def->name)
|
if (!def->name)
|
||||||
return 1;
|
return -1;
|
||||||
|
|
||||||
switch (def->id) {
|
switch (def->id) {
|
||||||
case M68K_CPUID_M5206:
|
case M68K_CPUID_M5206:
|
||||||
|
@ -98,8 +100,43 @@ int cpu_m68k_set_model(CPUM68KState *env, const char * name)
|
||||||
}
|
}
|
||||||
|
|
||||||
register_m68k_insns(env);
|
register_m68k_insns(env);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
void cpu_reset(CPUM68KState *env)
|
||||||
|
{
|
||||||
|
memset(env, 0, offsetof(CPUM68KState, breakpoints));
|
||||||
|
#if !defined (CONFIG_USER_ONLY)
|
||||||
|
env->sr = 0x2700;
|
||||||
|
#endif
|
||||||
|
m68k_switch_sp(env);
|
||||||
|
/* ??? FP regs should be initialized to NaN. */
|
||||||
|
env->cc_op = CC_OP_FLAGS;
|
||||||
|
/* TODO: We should set PC from the interrupt vector. */
|
||||||
|
env->pc = 0;
|
||||||
|
tlb_flush(env, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
CPUM68KState *cpu_m68k_init(const char *cpu_model)
|
||||||
|
{
|
||||||
|
CPUM68KState *env;
|
||||||
|
|
||||||
|
env = malloc(sizeof(CPUM68KState));
|
||||||
|
if (!env)
|
||||||
|
return NULL;
|
||||||
|
cpu_exec_init(env);
|
||||||
|
|
||||||
|
if (cpu_m68k_set_model(env, cpu_model) < 0) {
|
||||||
|
cpu_m68k_close(env);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
cpu_reset(env);
|
||||||
|
return env;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cpu_m68k_close(CPUM68KState *env)
|
||||||
|
{
|
||||||
|
qemu_free(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cpu_m68k_flush_flags(CPUM68KState *env, int cc_op)
|
void cpu_m68k_flush_flags(CPUM68KState *env, int cc_op)
|
||||||
|
|
|
@ -3279,38 +3279,6 @@ int gen_intermediate_code_pc(CPUState *env, TranslationBlock *tb)
|
||||||
return gen_intermediate_code_internal(env, tb, 1);
|
return gen_intermediate_code_internal(env, tb, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cpu_reset(CPUM68KState *env)
|
|
||||||
{
|
|
||||||
memset(env, 0, offsetof(CPUM68KState, breakpoints));
|
|
||||||
#if !defined (CONFIG_USER_ONLY)
|
|
||||||
env->sr = 0x2700;
|
|
||||||
#endif
|
|
||||||
m68k_switch_sp(env);
|
|
||||||
/* ??? FP regs should be initialized to NaN. */
|
|
||||||
env->cc_op = CC_OP_FLAGS;
|
|
||||||
/* TODO: We should set PC from the interrupt vector. */
|
|
||||||
env->pc = 0;
|
|
||||||
tlb_flush(env, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
CPUM68KState *cpu_m68k_init(void)
|
|
||||||
{
|
|
||||||
CPUM68KState *env;
|
|
||||||
|
|
||||||
env = malloc(sizeof(CPUM68KState));
|
|
||||||
if (!env)
|
|
||||||
return NULL;
|
|
||||||
cpu_exec_init(env);
|
|
||||||
|
|
||||||
cpu_reset(env);
|
|
||||||
return env;
|
|
||||||
}
|
|
||||||
|
|
||||||
void cpu_m68k_close(CPUM68KState *env)
|
|
||||||
{
|
|
||||||
free(env);
|
|
||||||
}
|
|
||||||
|
|
||||||
void cpu_dump_state(CPUState *env, FILE *f,
|
void cpu_dump_state(CPUState *env, FILE *f,
|
||||||
int (*cpu_fprintf)(FILE *f, const char *fmt, ...),
|
int (*cpu_fprintf)(FILE *f, const char *fmt, ...),
|
||||||
int flags)
|
int flags)
|
||||||
|
|
|
@ -456,7 +456,7 @@ struct CPUMIPSState {
|
||||||
|
|
||||||
CPU_COMMON
|
CPU_COMMON
|
||||||
|
|
||||||
mips_def_t *cpu_model;
|
const mips_def_t *cpu_model;
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
void *irq[8];
|
void *irq[8];
|
||||||
#endif
|
#endif
|
||||||
|
@ -474,9 +474,7 @@ void r4k_do_tlbwi (void);
|
||||||
void r4k_do_tlbwr (void);
|
void r4k_do_tlbwr (void);
|
||||||
void r4k_do_tlbp (void);
|
void r4k_do_tlbp (void);
|
||||||
void r4k_do_tlbr (void);
|
void r4k_do_tlbr (void);
|
||||||
int mips_find_by_name (const unsigned char *name, mips_def_t **def);
|
|
||||||
void mips_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...));
|
void mips_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...));
|
||||||
int cpu_mips_register (CPUMIPSState *env, mips_def_t *def);
|
|
||||||
|
|
||||||
void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec,
|
void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec,
|
||||||
int unused);
|
int unused);
|
||||||
|
@ -560,7 +558,7 @@ enum {
|
||||||
};
|
};
|
||||||
|
|
||||||
int cpu_mips_exec(CPUMIPSState *s);
|
int cpu_mips_exec(CPUMIPSState *s);
|
||||||
CPUMIPSState *cpu_mips_init(void);
|
CPUMIPSState *cpu_mips_init(const char *cpu_model);
|
||||||
uint32_t cpu_mips_get_clock (void);
|
uint32_t cpu_mips_get_clock (void);
|
||||||
int cpu_mips_signal_handler(int host_signum, void *pinfo, void *puc);
|
int cpu_mips_signal_handler(int host_signum, void *pinfo, void *puc);
|
||||||
|
|
||||||
|
|
|
@ -6725,13 +6725,21 @@ void cpu_dump_state (CPUState *env, FILE *f,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
CPUMIPSState *cpu_mips_init (void)
|
#include "translate_init.c"
|
||||||
|
|
||||||
|
CPUMIPSState *cpu_mips_init (const char *cpu_model)
|
||||||
{
|
{
|
||||||
CPUMIPSState *env;
|
CPUMIPSState *env;
|
||||||
|
const mips_def_t *def;
|
||||||
|
|
||||||
|
def = cpu_mips_find_by_name(cpu_model);
|
||||||
|
if (!def)
|
||||||
|
return NULL;
|
||||||
env = qemu_mallocz(sizeof(CPUMIPSState));
|
env = qemu_mallocz(sizeof(CPUMIPSState));
|
||||||
if (!env)
|
if (!env)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
env->cpu_model = def;
|
||||||
|
|
||||||
cpu_exec_init(env);
|
cpu_exec_init(env);
|
||||||
cpu_reset(env);
|
cpu_reset(env);
|
||||||
return env;
|
return env;
|
||||||
|
@ -6780,6 +6788,5 @@ void cpu_reset (CPUMIPSState *env)
|
||||||
#else
|
#else
|
||||||
env->hflags = MIPS_HFLAG_CP0;
|
env->hflags = MIPS_HFLAG_CP0;
|
||||||
#endif
|
#endif
|
||||||
|
cpu_mips_register(env, env->cpu_model);
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "translate_init.c"
|
|
||||||
|
|
|
@ -53,7 +53,6 @@
|
||||||
Define a major version 1, minor version 0. */
|
Define a major version 1, minor version 0. */
|
||||||
#define MIPS_FCR0 ((0 << FCR0_S) | (0x1 << FCR0_PRID) | (0x10 << FCR0_REV))
|
#define MIPS_FCR0 ((0 << FCR0_S) | (0x1 << FCR0_PRID) | (0x10 << FCR0_REV))
|
||||||
|
|
||||||
|
|
||||||
struct mips_def_t {
|
struct mips_def_t {
|
||||||
const unsigned char *name;
|
const unsigned char *name;
|
||||||
int32_t CP0_PRid;
|
int32_t CP0_PRid;
|
||||||
|
@ -300,21 +299,16 @@ static mips_def_t mips_defs[] =
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
int mips_find_by_name (const unsigned char *name, mips_def_t **def)
|
static const mips_def_t *cpu_mips_find_by_name (const unsigned char *name)
|
||||||
{
|
{
|
||||||
int i, ret;
|
int i;
|
||||||
|
|
||||||
ret = -1;
|
|
||||||
*def = NULL;
|
|
||||||
for (i = 0; i < sizeof(mips_defs) / sizeof(mips_defs[0]); i++) {
|
for (i = 0; i < sizeof(mips_defs) / sizeof(mips_defs[0]); i++) {
|
||||||
if (strcasecmp(name, mips_defs[i].name) == 0) {
|
if (strcasecmp(name, mips_defs[i].name) == 0) {
|
||||||
*def = &mips_defs[i];
|
return &mips_defs[i];
|
||||||
ret = 0;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return NULL;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mips_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...))
|
void mips_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...))
|
||||||
|
@ -328,19 +322,19 @@ void mips_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...))
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
static void no_mmu_init (CPUMIPSState *env, mips_def_t *def)
|
static void no_mmu_init (CPUMIPSState *env, const mips_def_t *def)
|
||||||
{
|
{
|
||||||
env->tlb->nb_tlb = 1;
|
env->tlb->nb_tlb = 1;
|
||||||
env->tlb->map_address = &no_mmu_map_address;
|
env->tlb->map_address = &no_mmu_map_address;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fixed_mmu_init (CPUMIPSState *env, mips_def_t *def)
|
static void fixed_mmu_init (CPUMIPSState *env, const mips_def_t *def)
|
||||||
{
|
{
|
||||||
env->tlb->nb_tlb = 1;
|
env->tlb->nb_tlb = 1;
|
||||||
env->tlb->map_address = &fixed_mmu_map_address;
|
env->tlb->map_address = &fixed_mmu_map_address;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void r4k_mmu_init (CPUMIPSState *env, mips_def_t *def)
|
static void r4k_mmu_init (CPUMIPSState *env, const mips_def_t *def)
|
||||||
{
|
{
|
||||||
env->tlb->nb_tlb = 1 + ((def->CP0_Config1 >> CP0C1_MMU) & 63);
|
env->tlb->nb_tlb = 1 + ((def->CP0_Config1 >> CP0C1_MMU) & 63);
|
||||||
env->tlb->map_address = &r4k_map_address;
|
env->tlb->map_address = &r4k_map_address;
|
||||||
|
@ -350,7 +344,7 @@ static void r4k_mmu_init (CPUMIPSState *env, mips_def_t *def)
|
||||||
env->tlb->do_tlbr = r4k_do_tlbr;
|
env->tlb->do_tlbr = r4k_do_tlbr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mmu_init (CPUMIPSState *env, mips_def_t *def)
|
static void mmu_init (CPUMIPSState *env, const mips_def_t *def)
|
||||||
{
|
{
|
||||||
env->tlb = qemu_mallocz(sizeof(CPUMIPSTLBContext));
|
env->tlb = qemu_mallocz(sizeof(CPUMIPSTLBContext));
|
||||||
|
|
||||||
|
@ -376,7 +370,7 @@ static void mmu_init (CPUMIPSState *env, mips_def_t *def)
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_USER_ONLY */
|
#endif /* CONFIG_USER_ONLY */
|
||||||
|
|
||||||
static void fpu_init (CPUMIPSState *env, mips_def_t *def)
|
static void fpu_init (CPUMIPSState *env, const mips_def_t *def)
|
||||||
{
|
{
|
||||||
env->fpu = qemu_mallocz(sizeof(CPUMIPSFPUContext));
|
env->fpu = qemu_mallocz(sizeof(CPUMIPSFPUContext));
|
||||||
|
|
||||||
|
@ -389,7 +383,7 @@ static void fpu_init (CPUMIPSState *env, mips_def_t *def)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mvp_init (CPUMIPSState *env, mips_def_t *def)
|
static void mvp_init (CPUMIPSState *env, const mips_def_t *def)
|
||||||
{
|
{
|
||||||
env->mvp = qemu_mallocz(sizeof(CPUMIPSMVPContext));
|
env->mvp = qemu_mallocz(sizeof(CPUMIPSMVPContext));
|
||||||
|
|
||||||
|
@ -415,13 +409,8 @@ static void mvp_init (CPUMIPSState *env, mips_def_t *def)
|
||||||
(0x1 << CP0MVPC1_PCP1);
|
(0x1 << CP0MVPC1_PCP1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int cpu_mips_register (CPUMIPSState *env, mips_def_t *def)
|
static int cpu_mips_register (CPUMIPSState *env, const mips_def_t *def)
|
||||||
{
|
{
|
||||||
if (!def)
|
|
||||||
def = env->cpu_model;
|
|
||||||
if (!def)
|
|
||||||
cpu_abort(env, "Unable to find MIPS CPU definition\n");
|
|
||||||
env->cpu_model = def;
|
|
||||||
env->CP0_PRid = def->CP0_PRid;
|
env->CP0_PRid = def->CP0_PRid;
|
||||||
env->CP0_Config0 = def->CP0_Config0;
|
env->CP0_Config0 = def->CP0_Config0;
|
||||||
#ifdef TARGET_WORDS_BIGENDIAN
|
#ifdef TARGET_WORDS_BIGENDIAN
|
||||||
|
|
|
@ -675,7 +675,7 @@ struct mmu_ctx_t {
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
CPUPPCState *cpu_ppc_init (void);
|
CPUPPCState *cpu_ppc_init (const char *cpu_model);
|
||||||
int cpu_ppc_exec (CPUPPCState *s);
|
int cpu_ppc_exec (CPUPPCState *s);
|
||||||
void cpu_ppc_close (CPUPPCState *s);
|
void cpu_ppc_close (CPUPPCState *s);
|
||||||
/* you can call this signal handler from your SIGBUS and SIGSEGV
|
/* you can call this signal handler from your SIGBUS and SIGSEGV
|
||||||
|
@ -719,13 +719,12 @@ void ppc_store_xer (CPUPPCState *env, target_ulong value);
|
||||||
void ppc_store_msr (CPUPPCState *env, target_ulong value);
|
void ppc_store_msr (CPUPPCState *env, target_ulong value);
|
||||||
|
|
||||||
void cpu_ppc_reset (void *opaque);
|
void cpu_ppc_reset (void *opaque);
|
||||||
CPUPPCState *cpu_ppc_init (void);
|
|
||||||
void cpu_ppc_close(CPUPPCState *env);
|
|
||||||
|
|
||||||
int ppc_find_by_name (const unsigned char *name, ppc_def_t **def);
|
|
||||||
int ppc_find_by_pvr (uint32_t apvr, ppc_def_t **def);
|
|
||||||
void ppc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...));
|
void ppc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...));
|
||||||
int cpu_ppc_register (CPUPPCState *env, ppc_def_t *def);
|
|
||||||
|
const ppc_def_t *cpu_ppc_find_by_name (const unsigned char *name);
|
||||||
|
const ppc_def_t *cpu_ppc_find_by_pvr (uint32_t pvr);
|
||||||
|
int cpu_ppc_register_internal (CPUPPCState *env, const ppc_def_t *def);
|
||||||
|
|
||||||
/* Time-base and decrementer management */
|
/* Time-base and decrementer management */
|
||||||
#ifndef NO_CPU_IO_DEFS
|
#ifndef NO_CPU_IO_DEFS
|
||||||
|
|
|
@ -2970,20 +2970,26 @@ void cpu_ppc_reset (void *opaque)
|
||||||
tlb_flush(env, 1);
|
tlb_flush(env, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
CPUPPCState *cpu_ppc_init (void)
|
CPUPPCState *cpu_ppc_init (const char *cpu_model)
|
||||||
{
|
{
|
||||||
CPUPPCState *env;
|
CPUPPCState *env;
|
||||||
|
const ppc_def_t *def;
|
||||||
|
|
||||||
|
def = cpu_ppc_find_by_name(cpu_model);
|
||||||
|
if (!def)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
env = qemu_mallocz(sizeof(CPUPPCState));
|
env = qemu_mallocz(sizeof(CPUPPCState));
|
||||||
if (!env)
|
if (!env)
|
||||||
return NULL;
|
return NULL;
|
||||||
cpu_exec_init(env);
|
cpu_exec_init(env);
|
||||||
|
cpu_ppc_register_internal(env, def);
|
||||||
|
cpu_ppc_reset(env);
|
||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cpu_ppc_close (CPUPPCState *env)
|
void cpu_ppc_close (CPUPPCState *env)
|
||||||
{
|
{
|
||||||
/* Should also remove all opcode tables... */
|
/* Should also remove all opcode tables... */
|
||||||
free(env);
|
qemu_free(env);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5931,7 +5931,7 @@ static ppc_def_t ppc_defs[] = {
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Generic CPU instanciation routine */
|
/* Generic CPU instanciation routine */
|
||||||
static void init_ppc_proc (CPUPPCState *env, ppc_def_t *def)
|
static void init_ppc_proc (CPUPPCState *env, const ppc_def_t *def)
|
||||||
{
|
{
|
||||||
#if !defined(CONFIG_USER_ONLY)
|
#if !defined(CONFIG_USER_ONLY)
|
||||||
int i;
|
int i;
|
||||||
|
@ -6276,7 +6276,7 @@ static void fix_opcode_tables (opc_handler_t **ppc_opcodes)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
static int create_ppc_opcodes (CPUPPCState *env, ppc_def_t *def)
|
static int create_ppc_opcodes (CPUPPCState *env, const ppc_def_t *def)
|
||||||
{
|
{
|
||||||
opcode_t *opc, *start, *end;
|
opcode_t *opc, *start, *end;
|
||||||
|
|
||||||
|
@ -6351,7 +6351,7 @@ static void dump_ppc_insns (CPUPPCState *env)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int cpu_ppc_register (CPUPPCState *env, ppc_def_t *def)
|
int cpu_ppc_register_internal (CPUPPCState *env, const ppc_def_t *def)
|
||||||
{
|
{
|
||||||
env->msr_mask = def->msr_mask;
|
env->msr_mask = def->msr_mask;
|
||||||
env->mmu_model = def->mmu_model;
|
env->mmu_model = def->mmu_model;
|
||||||
|
@ -6514,41 +6514,31 @@ int cpu_ppc_register (CPUPPCState *env, ppc_def_t *def)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ppc_find_by_name (const unsigned char *name, ppc_def_t **def)
|
const ppc_def_t *cpu_ppc_find_by_name (const unsigned char *name)
|
||||||
{
|
{
|
||||||
int i, max, ret;
|
int i, max;
|
||||||
|
|
||||||
ret = -1;
|
|
||||||
*def = NULL;
|
|
||||||
max = sizeof(ppc_defs) / sizeof(ppc_def_t);
|
max = sizeof(ppc_defs) / sizeof(ppc_def_t);
|
||||||
for (i = 0; i < max; i++) {
|
for (i = 0; i < max; i++) {
|
||||||
if (strcasecmp(name, ppc_defs[i].name) == 0) {
|
if (strcasecmp(name, ppc_defs[i].name) == 0) {
|
||||||
*def = &ppc_defs[i];
|
return &ppc_defs[i];
|
||||||
ret = 0;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return NULL;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int ppc_find_by_pvr (uint32_t pvr, ppc_def_t **def)
|
const ppc_def_t *cpu_ppc_find_by_pvr (uint32_t pvr)
|
||||||
{
|
{
|
||||||
int i, max, ret;
|
int i, max;
|
||||||
|
|
||||||
ret = -1;
|
|
||||||
*def = NULL;
|
|
||||||
max = sizeof(ppc_defs) / sizeof(ppc_def_t);
|
max = sizeof(ppc_defs) / sizeof(ppc_def_t);
|
||||||
for (i = 0; i < max; i++) {
|
for (i = 0; i < max; i++) {
|
||||||
if ((pvr & ppc_defs[i].pvr_mask) ==
|
if ((pvr & ppc_defs[i].pvr_mask) ==
|
||||||
(ppc_defs[i].pvr & ppc_defs[i].pvr_mask)) {
|
(ppc_defs[i].pvr & ppc_defs[i].pvr_mask)) {
|
||||||
*def = &ppc_defs[i];
|
return &ppc_defs[i];
|
||||||
ret = 0;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return NULL;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ppc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...))
|
void ppc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...))
|
||||||
|
|
|
@ -123,7 +123,7 @@ typedef struct CPUSH4State {
|
||||||
tlb_t itlb[ITLB_SIZE]; /* instruction translation table */
|
tlb_t itlb[ITLB_SIZE]; /* instruction translation table */
|
||||||
} CPUSH4State;
|
} CPUSH4State;
|
||||||
|
|
||||||
CPUSH4State *cpu_sh4_init(void);
|
CPUSH4State *cpu_sh4_init(const char *cpu_model);
|
||||||
int cpu_sh4_exec(CPUSH4State * s);
|
int cpu_sh4_exec(CPUSH4State * s);
|
||||||
int cpu_sh4_signal_handler(int host_signum, void *pinfo,
|
int cpu_sh4_signal_handler(int host_signum, void *pinfo,
|
||||||
void *puc);
|
void *puc);
|
||||||
|
|
|
@ -141,7 +141,7 @@ void cpu_sh4_reset(CPUSH4State * env)
|
||||||
env->mmucr = 0;
|
env->mmucr = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
CPUSH4State *cpu_sh4_init(void)
|
CPUSH4State *cpu_sh4_init(const char *cpu_model)
|
||||||
{
|
{
|
||||||
CPUSH4State *env;
|
CPUSH4State *env;
|
||||||
|
|
||||||
|
|
|
@ -165,8 +165,6 @@
|
||||||
/* 2 <= NWINDOWS <= 32. In QEMU it must also be a power of two. */
|
/* 2 <= NWINDOWS <= 32. In QEMU it must also be a power of two. */
|
||||||
#define NWINDOWS 8
|
#define NWINDOWS 8
|
||||||
|
|
||||||
typedef struct sparc_def_t sparc_def_t;
|
|
||||||
|
|
||||||
#if !defined(TARGET_SPARC64)
|
#if !defined(TARGET_SPARC64)
|
||||||
#define NB_MMU_MODES 2
|
#define NB_MMU_MODES 2
|
||||||
#else
|
#else
|
||||||
|
@ -270,14 +268,12 @@ typedef struct CPUSPARCState {
|
||||||
} while (0)
|
} while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CPUSPARCState *cpu_sparc_init(void);
|
CPUSPARCState *cpu_sparc_init(const char *cpu_model);
|
||||||
int cpu_sparc_exec(CPUSPARCState *s);
|
int cpu_sparc_exec(CPUSPARCState *s);
|
||||||
int cpu_sparc_close(CPUSPARCState *s);
|
int cpu_sparc_close(CPUSPARCState *s);
|
||||||
int sparc_find_by_name (const unsigned char *name, const sparc_def_t **def);
|
|
||||||
void sparc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt,
|
void sparc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt,
|
||||||
...));
|
...));
|
||||||
int cpu_sparc_register (CPUSPARCState *env, const sparc_def_t *def,
|
void cpu_sparc_set_id(CPUSPARCState *env, unsigned int cpu);
|
||||||
unsigned int cpu);
|
|
||||||
|
|
||||||
#define GET_PSR(env) (env->version | (env->psr & PSR_ICC) | \
|
#define GET_PSR(env) (env->version | (env->psr & PSR_ICC) | \
|
||||||
(env->psref? PSR_EF : 0) | \
|
(env->psref? PSR_EF : 0) | \
|
||||||
|
|
|
@ -54,6 +54,8 @@ typedef struct DisasContext {
|
||||||
struct TranslationBlock *tb;
|
struct TranslationBlock *tb;
|
||||||
} DisasContext;
|
} DisasContext;
|
||||||
|
|
||||||
|
typedef struct sparc_def_t sparc_def_t;
|
||||||
|
|
||||||
struct sparc_def_t {
|
struct sparc_def_t {
|
||||||
const unsigned char *name;
|
const unsigned char *name;
|
||||||
target_ulong iu_version;
|
target_ulong iu_version;
|
||||||
|
@ -62,6 +64,8 @@ struct sparc_def_t {
|
||||||
uint32_t mmu_bm;
|
uint32_t mmu_bm;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const sparc_def_t *cpu_sparc_find_by_name(const unsigned char *name);
|
||||||
|
|
||||||
static uint16_t *gen_opc_ptr;
|
static uint16_t *gen_opc_ptr;
|
||||||
static uint32_t *gen_opparam_ptr;
|
static uint32_t *gen_opparam_ptr;
|
||||||
extern FILE *logfile;
|
extern FILE *logfile;
|
||||||
|
@ -3489,15 +3493,36 @@ void cpu_reset(CPUSPARCState *env)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
CPUSPARCState *cpu_sparc_init(void)
|
CPUSPARCState *cpu_sparc_init(const char *cpu_model)
|
||||||
{
|
{
|
||||||
CPUSPARCState *env;
|
CPUSPARCState *env;
|
||||||
|
const sparc_def_t *def;
|
||||||
|
|
||||||
|
def = cpu_sparc_find_by_name(cpu_model);
|
||||||
|
if (!def)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
env = qemu_mallocz(sizeof(CPUSPARCState));
|
env = qemu_mallocz(sizeof(CPUSPARCState));
|
||||||
if (!env)
|
if (!env)
|
||||||
return NULL;
|
return NULL;
|
||||||
cpu_exec_init(env);
|
cpu_exec_init(env);
|
||||||
return (env);
|
env->version = def->iu_version;
|
||||||
|
env->fsr = def->fpu_version;
|
||||||
|
#if !defined(TARGET_SPARC64)
|
||||||
|
env->mmu_bm = def->mmu_bm;
|
||||||
|
env->mmuregs[0] |= def->mmu_version;
|
||||||
|
cpu_sparc_set_id(env, 0);
|
||||||
|
#endif
|
||||||
|
cpu_reset(env);
|
||||||
|
|
||||||
|
return env;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cpu_sparc_set_id(CPUSPARCState *env, unsigned int cpu)
|
||||||
|
{
|
||||||
|
#if !defined(TARGET_SPARC64)
|
||||||
|
env->mxccregs[7] = ((cpu + 8) & 0xf) << 24;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static const sparc_def_t sparc_defs[] = {
|
static const sparc_def_t sparc_defs[] = {
|
||||||
|
@ -3744,22 +3769,16 @@ static const sparc_def_t sparc_defs[] = {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
int sparc_find_by_name(const unsigned char *name, const sparc_def_t **def)
|
static const sparc_def_t *cpu_sparc_find_by_name(const unsigned char *name)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
ret = -1;
|
|
||||||
*def = NULL;
|
|
||||||
for (i = 0; i < sizeof(sparc_defs) / sizeof(sparc_def_t); i++) {
|
for (i = 0; i < sizeof(sparc_defs) / sizeof(sparc_def_t); i++) {
|
||||||
if (strcasecmp(name, sparc_defs[i].name) == 0) {
|
if (strcasecmp(name, sparc_defs[i].name) == 0) {
|
||||||
*def = &sparc_defs[i];
|
return &sparc_defs[i];
|
||||||
ret = 0;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return NULL;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void sparc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...))
|
void sparc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...))
|
||||||
|
@ -3775,19 +3794,6 @@ void sparc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int cpu_sparc_register (CPUSPARCState *env, const sparc_def_t *def, unsigned int cpu)
|
|
||||||
{
|
|
||||||
env->version = def->iu_version;
|
|
||||||
env->fsr = def->fpu_version;
|
|
||||||
#if !defined(TARGET_SPARC64)
|
|
||||||
env->mmu_bm = def->mmu_bm;
|
|
||||||
env->mmuregs[0] |= def->mmu_version;
|
|
||||||
env->mxccregs[7] = ((cpu + 8) & 0xf) << 24;
|
|
||||||
#endif
|
|
||||||
cpu_reset(env);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define GET_FLAG(a,b) ((env->psr & a)?b:'-')
|
#define GET_FLAG(a,b) ((env->psr & a)?b:'-')
|
||||||
|
|
||||||
void cpu_dump_state(CPUState *env, FILE *f,
|
void cpu_dump_state(CPUState *env, FILE *f,
|
||||||
|
|
|
@ -197,7 +197,7 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
// cpu_set_log(CPU_LOG_TB_IN_ASM | CPU_LOG_TB_OUT_ASM | CPU_LOG_EXEC);
|
// cpu_set_log(CPU_LOG_TB_IN_ASM | CPU_LOG_TB_OUT_ASM | CPU_LOG_EXEC);
|
||||||
|
|
||||||
env = cpu_init();
|
env = cpu_init("qemu32");
|
||||||
|
|
||||||
/* disable code copy to simplify debugging */
|
/* disable code copy to simplify debugging */
|
||||||
code_copy_enabled = 0;
|
code_copy_enabled = 0;
|
||||||
|
|
Loading…
Reference in New Issue