diff options
author | Igor V. Kovalenko <igor.v.kovalenko@gmail.com> | 2010-01-07 23:28:00 +0300 |
---|---|---|
committer | Blue Swirl <blauwirbel@gmail.com> | 2010-01-08 17:12:46 +0000 |
commit | 7e8695eda3e317923883794c9c1f26d398c0eccc (patch) | |
tree | 64019d5cd9697667797c567c029828c560cf7d05 | |
parent | d780a466db5d6d82c0f0eba7adf0e4de601324b0 (diff) | |
download | qemu-7e8695eda3e317923883794c9c1f26d398c0eccc.zip qemu-7e8695eda3e317923883794c9c1f26d398c0eccc.tar.gz qemu-7e8695eda3e317923883794c9c1f26d398c0eccc.tar.bz2 |
sparc64: trace pstate and global register set changes
Signed-off-by: Igor V. Kovalenko <igor.v.kovalenko@gmail.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
-rw-r--r-- | target-sparc/op_helper.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c index fd3286d..1d3adef 100644 --- a/target-sparc/op_helper.c +++ b/target-sparc/op_helper.c @@ -11,6 +11,7 @@ //#define DEBUG_UNASSIGNED //#define DEBUG_ASI //#define DEBUG_PCALL +//#define DEBUG_PSTATE #ifdef DEBUG_MMU #define DPRINTF_MMU(fmt, ...) \ @@ -31,6 +32,13 @@ do { printf("ASI: " fmt , ## __VA_ARGS__); } while (0) #endif +#ifdef DEBUG_PSTATE +#define DPRINTF_PSTATE(fmt, ...) \ + do { printf("PSTATE: " fmt , ## __VA_ARGS__); } while (0) +#else +#define DPRINTF_PSTATE(fmt, ...) do {} while (0) +#endif + #ifdef TARGET_SPARC64 #ifndef TARGET_ABI32 #define AM_CHECK(env1) ((env1)->pstate & PS_AM) @@ -3244,6 +3252,12 @@ static inline uint64_t *get_gregset(uint32_t pstate) { switch (pstate) { default: + DPRINTF_PSTATE("ERROR in get_gregset: active pstate bits=%x%s%s%s\n", + pstate, + (pstate & PS_IG) ? " IG" : "", + (pstate & PS_MG) ? " MG" : "", + (pstate & PS_AG) ? " AG" : ""); + /* pass through to normal set of global registers */ case 0: return env->bgregs; case PS_AG: @@ -3269,12 +3283,18 @@ static inline void change_pstate(uint32_t new_pstate) new_pstate_regs = new_pstate & 0xc01; if (new_pstate_regs != pstate_regs) { + DPRINTF_PSTATE("change_pstate: switching regs old=%x new=%x\n", + pstate_regs, new_pstate_regs); // Switch global register bank src = get_gregset(new_pstate_regs); dst = get_gregset(pstate_regs); memcpy32(dst, env->gregs); memcpy32(env->gregs, src); } + else { + DPRINTF_PSTATE("change_pstate: regs new=%x (unchanged)\n", + new_pstate_regs); + } env->pstate = new_pstate; } |