[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/32] move kqemu_cpu_exec to kqemu.c
From: |
Glauber Costa |
Subject: |
[Qemu-devel] [PATCH 04/32] move kqemu_cpu_exec to kqemu.c |
Date: |
Thu, 23 Oct 2008 12:18:48 -0200 |
Only pieces of code that are frame-safe can be moved.
compute_all() is an example of a non-frame-safe calling.
So it has to be done prior to calling kqemu_cpu_exec().
Signed-off-by: Glauber Costa <address@hidden>
---
cpu-exec.c | 33 +++++++++++++--------------------
kqemu.c | 18 +++++++++++++++++-
2 files changed, 30 insertions(+), 21 deletions(-)
diff --git a/cpu-exec.c b/cpu-exec.c
index 6d4dcdd..f06df26 100644
--- a/cpu-exec.c
+++ b/cpu-exec.c
@@ -336,27 +336,20 @@ int cpu_exec(CPUState *env1)
env->exception_index = -1;
}
#ifdef USE_KQEMU
- if (kqemu_is_ok(env) && env->interrupt_request == 0) {
- int ret;
- env->eflags = env->eflags | cc_table[CC_OP].compute_all() |
(DF & DF_MASK);
- ret = kqemu_cpu_exec(env);
- /* put eflags in CPU temporary format */
- CC_SRC = env->eflags & (CC_O | CC_S | CC_Z | CC_A | CC_P |
CC_C);
- DF = 1 - (2 * ((env->eflags >> 10) & 1));
- CC_OP = CC_OP_EFLAGS;
- env->eflags &= ~(DF_MASK | CC_O | CC_S | CC_Z | CC_A | CC_P |
CC_C);
- if (ret == 1) {
- /* exception */
- longjmp(env->jmp_env, 1);
- } else if (ret == 2) {
- /* softmmu execution needed */
+ env->eflags = env->eflags | cc_table[CC_OP].compute_all() | (DF &
DF_MASK);
+ ret = kqemu_cpu_exec(env);
+ env->eflags &= ~(DF_MASK | CC_O | CC_S | CC_Z | CC_A | CC_P |
CC_C);
+ if (ret == 1) {
+ /* exception */
+ longjmp(env->jmp_env, 1);
+ } else if (ret == 2) {
+ /* softmmu execution needed */
+ } else {
+ if (env->interrupt_request != 0) {
+ /* hardware interrupt will be executed just after */
} else {
- if (env->interrupt_request != 0) {
- /* hardware interrupt will be executed just after */
- } else {
- /* otherwise, we restart */
- longjmp(env->jmp_env, 1);
- }
+ /* otherwise, we restart */
+ longjmp(env->jmp_env, 1);
}
}
#endif
diff --git a/kqemu.c b/kqemu.c
index 4783aa2..39938e0 100644
--- a/kqemu.c
+++ b/kqemu.c
@@ -30,6 +30,7 @@
#ifdef HOST_SOLARIS
#include <sys/ioccom.h>
#endif
+#include "exec.h"
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
@@ -689,7 +690,7 @@ static inline void kqemu_save_seg(SegmentCache *sc,
sc->base = ksc->base;
}
-int kqemu_cpu_exec(CPUState *env)
+int kqemu_do_cpu_exec(CPUState *env)
{
struct kqemu_cpu_state kcpu_state, *kenv = &kcpu_state;
int ret, cpl, i;
@@ -939,6 +940,21 @@ int kqemu_cpu_exec(CPUState *env)
return 0;
}
+int kqemu_cpu_exec(CPUState *env)
+{
+
+ int ret = 2;
+ if (kqemu_is_ok(env) && env->interrupt_request == 0) {
+ ret = kqemu_do_cpu_exec(env);
+ /* put eflags in CPU temporary format */
+ CC_SRC = env->eflags & (CC_O | CC_S | CC_Z | CC_A | CC_P | CC_C);
+ DF = 1 - (2 * ((env->eflags >> 10) & 1));
+ CC_OP = CC_OP_EFLAGS;
+ }
+ return ret;
+}
+
+
void kqemu_cpu_interrupt(CPUState *env)
{
#if defined(_WIN32)
--
1.5.5.1
[Qemu-devel] [PATCH 02/32] protect exec-all.h frm multiple inclusion, Glauber Costa, 2008/10/23
[Qemu-devel] [PATCH 03/32] change definition of FILE for linux, Glauber Costa, 2008/10/23
[Qemu-devel] [PATCH 04/32] move kqemu_cpu_exec to kqemu.c,
Glauber Costa <=
[Qemu-devel] [PATCH 05/32] use more meaningful values for kqemu_cpu_exec, Glauber Costa, 2008/10/23
[Qemu-devel] [PATCH 07/32] introduce QEMUAccel and fill it with interrupt specific driver, Glauber Costa, 2008/10/23
[Qemu-devel] [PATCH 06/32] split kqemu_init into two, Glauber Costa, 2008/10/23