From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1J4HL8-0000kB-N8 for qemu-devel@nongnu.org; Mon, 17 Dec 2007 09:53:06 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1J4HL5-0000eb-P8 for qemu-devel@nongnu.org; Mon, 17 Dec 2007 09:53:05 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1J4HL5-0000eL-HR for qemu-devel@nongnu.org; Mon, 17 Dec 2007 09:53:03 -0500 Received: from [193.252.23.89] (helo=smtp16.orange.fr) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1J4HL4-0003O3-Sq for qemu-devel@nongnu.org; Mon, 17 Dec 2007 09:53:03 -0500 Received: from me-wanadoo.net (localhost [127.0.0.1]) by mwinf1601.orange.fr (SMTP Server) with ESMTP id AE64270000EE for ; Mon, 17 Dec 2007 15:52:56 +0100 (CET) Received: from wwinf1607 (wwinf1607 [172.22.147.50]) by mwinf1601.orange.fr (SMTP Server) with ESMTP id A45C470000EC for ; Mon, 17 Dec 2007 15:52:56 +0100 (CET) From: claude vittoria Message-ID: <15604398.56931197903176591.JavaMail.www@wwinf1607> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Date: Mon, 17 Dec 2007 15:52:56 +0100 (CET) Subject: [Qemu-devel] [PPC] FPIMM macro and mtfsfi instruction Reply-To: claude vittoria , qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Hi everybody, I think that I get a wrong result with mtfsfi instruction. I think to get a solution, see below. Could you confirm my opinion ? Thanks, Claude translate.c l344:EXTRACT_HELPER(crbD, 21, 5); ... l375:EXTRACT_HELPER(FPIMM, 20, 4); <======FPIMM must be (FPIMM, 12, 4) or crbB >> 1 for mtfsfi; IMM is bits[16-19] of the instruction in PPC programming environnement 32bit (p8-135). IMM is not one bit before crbD. ... l2049 /* mtfsfi */ GEN_HANDLER(mtfsfi, 0x3F, 0x06, 0x04, 0x006f0800, PPC_FLOAT) { int bf, sh; if (unlikely(!ctx->fpu_enabled)) { GEN_EXCP_NO_FP(ctx); return; } bf = crbD(ctx->opcode) >> 2; <======================Ok bits[6-8] sh = 7 - bf; gen_optimize_fprf(); gen_op_set_FT0(FPIMM(ctx->opcode) << (4 * sh)); <===================FPIMM is not correct, does not return the right value but bits [8-11] gen_reset_fpstatus(); gen_op_store_fpscr(1 << sh); if (unlikely(Rc(ctx->opcode) != 0)) { gen_op_load_fpcc(); gen_op_set_Rc0(); } /* We can raise a differed exception */ gen_op_float_check_status(); }