@@ -5,7 +5,7 @@ struct TCGI386ModuleOps {
void (*update_fp_status)(CPUX86State *env);
void (*update_mxcsr_status)(CPUX86State *env);
void (*update_mxcsr_from_sse_status)(CPUX86State *env);
-
+ void (*x86_register_ferr_irq)(qemu_irq irq);
};
extern struct TCGI386ModuleOps tcg_i386;
@@ -1835,7 +1835,6 @@ int cpu_x86_support_mca_broadcast(CPUX86State *env);
int cpu_get_pic_interrupt(CPUX86State *s);
/* MSDOS compatibility mode FPU exception support */
-void x86_register_ferr_irq(qemu_irq irq);
void fpu_check_raise_ferr_irq(CPUX86State *s);
void cpu_set_ignne(void);
void cpu_clear_ignne(void);
@@ -5,8 +5,13 @@ static void i386_update_cpu_stub(CPUX86State *cpu)
{
}
+static void x86_register_ferr_irq_stub(qemu_irq irq)
+{
+}
+
struct TCGI386ModuleOps tcg_i386 = {
.update_fp_status = i386_update_cpu_stub,
.update_mxcsr_status = i386_update_cpu_stub,
.update_mxcsr_from_sse_status = i386_update_cpu_stub,
+ .x86_register_ferr_irq = x86_register_ferr_irq_stub,
};
@@ -224,7 +224,7 @@ static void pc_init1(MachineState *machine,
}
if (tcg_enabled()) {
- x86_register_ferr_irq(x86ms->gsi[13]);
+ tcg_i386.x86_register_ferr_irq(x86ms->gsi[13]);
}
pc_vga_init(isa_bus, pcmc->pci_enabled ? pci_bus : NULL);
@@ -266,7 +266,7 @@ static void pc_q35_init(MachineState *machine)
}
if (tcg_enabled()) {
- x86_register_ferr_irq(x86ms->gsi[13]);
+ tcg_i386.x86_register_ferr_irq(x86ms->gsi[13]);
}
assert(pcms->vmport != ON_OFF_AUTO__MAX);
@@ -23,7 +23,7 @@
static qemu_irq ferr_irq;
-void x86_register_ferr_irq(qemu_irq irq)
+static void x86_register_ferr_irq(qemu_irq irq)
{
ferr_irq = irq;
}
@@ -55,3 +55,10 @@ void cpu_set_ignne(void)
*/
qemu_irq_lower(ferr_irq);
}
+
+static void tcgi386_module_ops_fpu_sys(void)
+{
+ tcg_i386.x86_register_ferr_irq = x86_register_ferr_irq;
+}
+
+type_init(tcgi386_module_ops_fpu_sys);
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- include/tcg/tcg-module-i386.h | 2 +- target/i386/cpu.h | 1 - accel/tcg/tcg-module-i386.c | 5 +++++ hw/i386/pc_piix.c | 2 +- hw/i386/pc_q35.c | 2 +- target/i386/tcg/sysemu/fpu_helper.c | 9 ++++++++- 6 files changed, 16 insertions(+), 5 deletions(-)