Commit af5ad10728f8265846f64274edd69c01e6da77e5
1 parent
ac9eb073
infer access type
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@530 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
36 additions
and
2 deletions
translate-all.c
| @@ -25,7 +25,7 @@ | @@ -25,7 +25,7 @@ | ||
| 25 | 25 | ||
| 26 | #include "config.h" | 26 | #include "config.h" |
| 27 | 27 | ||
| 28 | -#define IN_OP_I386 | 28 | +#define NO_CPU_IO_DEFS |
| 29 | #include "cpu.h" | 29 | #include "cpu.h" |
| 30 | #include "exec-all.h" | 30 | #include "exec-all.h" |
| 31 | #include "disas.h" | 31 | #include "disas.h" |
| @@ -192,7 +192,41 @@ int cpu_restore_state(TranslationBlock *tb, | @@ -192,7 +192,41 @@ int cpu_restore_state(TranslationBlock *tb, | ||
| 192 | #elif defined(TARGET_SPARC) | 192 | #elif defined(TARGET_SPARC) |
| 193 | env->pc = gen_opc_pc[j]; | 193 | env->pc = gen_opc_pc[j]; |
| 194 | #elif defined(TARGET_PPC) | 194 | #elif defined(TARGET_PPC) |
| 195 | - env->nip = gen_opc_pc[j]; | 195 | + { |
| 196 | + int type; | ||
| 197 | + /* for PPC, we need to look at the micro operation to get the | ||
| 198 | + access type */ | ||
| 199 | + env->nip = gen_opc_pc[j]; | ||
| 200 | + switch(c) { | ||
| 201 | +#if defined(CONFIG_USER_ONLY) | ||
| 202 | +#define CASE3(op)\ | ||
| 203 | + case INDEX_op_ ## op ## _raw | ||
| 204 | +#else | ||
| 205 | +#define CASE3(op)\ | ||
| 206 | + case INDEX_op_ ## op ## _raw:\ | ||
| 207 | + case INDEX_op_ ## op ## _user:\ | ||
| 208 | + case INDEX_op_ ## op ## _kernel | ||
| 209 | +#endif | ||
| 210 | + | ||
| 211 | + CASE3(stfd): | ||
| 212 | + CASE3(stfs): | ||
| 213 | + CASE3(lfd): | ||
| 214 | + CASE3(lfs): | ||
| 215 | + type = ACCESS_FLOAT; | ||
| 216 | + break; | ||
| 217 | + CASE3(stwcx): | ||
| 218 | + type = ACCESS_RES; | ||
| 219 | + break; | ||
| 220 | + CASE3(eciwx): | ||
| 221 | + CASE3(ecowx): | ||
| 222 | + type = ACCESS_EXT; | ||
| 223 | + break; | ||
| 224 | + default: | ||
| 225 | + type = ACCESS_INT; | ||
| 226 | + break; | ||
| 227 | + } | ||
| 228 | + env->access_type = type; | ||
| 229 | + } | ||
| 196 | #endif | 230 | #endif |
| 197 | return 0; | 231 | return 0; |
| 198 | } | 232 | } |