From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55983) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WTRyY-0008WU-7L for qemu-devel@nongnu.org; Fri, 28 Mar 2014 04:17:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WTRyL-0005YV-PO for qemu-devel@nongnu.org; Fri, 28 Mar 2014 04:17:18 -0400 Received: from e06smtp17.uk.ibm.com ([195.75.94.113]:56932) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WTRyL-0005Y8-E2 for qemu-devel@nongnu.org; Fri, 28 Mar 2014 04:17:05 -0400 Received: from /spool/local by e06smtp17.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 28 Mar 2014 08:17:03 -0000 Date: Fri, 28 Mar 2014 09:16:59 +0100 From: Thomas Huth Message-ID: <20140328091659.399643e7@oc7435384737.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] target-ppc: Problem with mtmsr emulation List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-ppc@nongnu.org Cc: Alexander Graf , qemu-devel@nongnu.org Hi all! There seems to be a problem with the emulation of the mtmsr instruction: According to the PowerISA spec, chapter Book III-S, the mtmsr opcode has a so-called "L" field at bit position 15. Looking at the function gen_mtmsr() in target-ppc/translate.c, the bit is taken into account since the function checks for ctx->opcode & 0x00010000. However, when looking at the GEN_HANDLER definition later in that file: GEN_HANDLER(mtmsr, 0x1F, 0x12, 0x04, 0x001FF801, PPC_MISC) you can see that the bit is marked as invalid bit in the 0x001FF801 mask, thus if the bit is set, a program exception is generated instead of executing the gen_mtmsr() function. An easy way to fix this for Book III-S is to change the mask to 0x001EF801 (just like the mask for mtmsrd), but I am afraid that this would break the Book III-E variant of mtmsr, since the embedded version does not have this bit defined. Any suggestions how to fix this problem in a proper way? Thomas