Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NSyxk-0004Vp-MB for qemu-devel@nongnu.org; Thu, 07 Jan 2010 15:28:08 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NSyxj-0004U4-JI for qemu-devel@nongnu.org; Thu, 07 Jan 2010 15:28:07 -0500 Received: from [199.232.76.173] (port=38266 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NSyxj-0004TG-6T for qemu-devel@nongnu.org; Thu, 07 Jan 2010 15:28:07 -0500 Received: from fg-out-1718.google.com ([72.14.220.157]:7266) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NSyxg-0000xy-8S for qemu-devel@nongnu.org; Thu, 07 Jan 2010 15:28:04 -0500 Received: by fg-out-1718.google.com with SMTP id 19so2654678fgg.10 for ; Thu, 07 Jan 2010 12:28:02 -0800 (PST) Received: from localhost ([127.0.0.1] helo=[192.168.1.2]) by skyserv with esmtp (Exim 4.71) (envelope-from ) id 1NSyxc-0004PU-FD for qemu-devel@nongnu.org; Thu, 07 Jan 2010 23:28:00 +0300 From: "Igor V. Kovalenko" Date: Thu, 07 Jan 2010 23:28:00 +0300 Message-ID: <20100107202759.16653.8943.stgit@skyserv> In-Reply-To: <20100107201810.16653.85771.stgit@skyserv> References: <20100107201810.16653.85771.stgit@skyserv> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH 2/9] sparc64: trace pstate and global register set changes List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org From: Igor V. Kovalenko Signed-off-by: Igor V. Kovalenko --- 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; }