infer access type
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 4 Jan 2004 23:28:12 +0000 (23:28 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 4 Jan 2004 23:28:12 +0000 (23:28 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@530 c046a42c-6fe2-441c-8c8c-71466251a162

translate-all.c

index b02c87a221237ea7bec1cfd2279f527b3ac30398..c8f345735e92f762df02629a3b2a6dd1e9b4606a 100644 (file)
@@ -25,7 +25,7 @@
 
 #include "config.h"
 
-#define IN_OP_I386
+#define NO_CPU_IO_DEFS
 #include "cpu.h"
 #include "exec-all.h"
 #include "disas.h"
@@ -192,7 +192,41 @@ int cpu_restore_state(TranslationBlock *tb,
 #elif defined(TARGET_SPARC)
     env->pc = gen_opc_pc[j];
 #elif defined(TARGET_PPC)
-    env->nip = gen_opc_pc[j];
+    {
+        int type;
+        /* for PPC, we need to look at the micro operation to get the
+           access type */
+        env->nip = gen_opc_pc[j];
+        switch(c) {
+#if defined(CONFIG_USER_ONLY)
+#define CASE3(op)\
+        case INDEX_op_ ## op ## _raw
+#else
+#define CASE3(op)\
+        case INDEX_op_ ## op ## _raw:\
+        case INDEX_op_ ## op ## _user:\
+        case INDEX_op_ ## op ## _kernel
+#endif
+            
+        CASE3(stfd):
+        CASE3(stfs):
+        CASE3(lfd):
+        CASE3(lfs):
+            type = ACCESS_FLOAT;
+            break;
+        CASE3(stwcx):
+            type = ACCESS_RES;
+            break;
+        CASE3(eciwx):
+        CASE3(ecowx):
+            type = ACCESS_EXT;
+            break;
+        default:
+            type = ACCESS_INT;
+            break;
+        }
+        env->access_type = type;
+    }
 #endif
     return 0;
 }