From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60602) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bS1Py-00012H-2B for qemu-devel@nongnu.org; Tue, 26 Jul 2016 08:25:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bS1Pw-0004g7-2y for qemu-devel@nongnu.org; Tue, 26 Jul 2016 08:25:00 -0400 Message-ID: <1469535885.5978.76.camel@kernel.crashing.org> From: Benjamin Herrenschmidt Date: Tue, 26 Jul 2016 22:24:45 +1000 In-Reply-To: <1469493760-4205-1-git-send-email-rth@twiddle.net> References: <1469493760-4205-1-git-send-email-rth@twiddle.net> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH] ppc: Fix fault PC reporting for lve*/stve* VMX instructions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: qemu-ppc@nongnu.org, David Gibson , Richard Henderson We forgot to do gen_update_nip() for these like we do with other helpers. Fix this, but in a more efficient way by passing the RA to the accessors instead so the overhead is only taken on faults. Signed-off-by: Benjamin Herrenschmidt --- target-ppc/mem_helper.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/target-ppc/mem_helper.c b/target-ppc/mem_helper.c index e4de86b..e4ed377 100644 --- a/target-ppc/mem_helper.c +++ b/target-ppc/mem_helper.c @@ -232,16 +232,16 @@ target_ulong helper_lscbx(CPUPPCState *env, target_ulong addr, uint32_t reg, \ if (needs_byteswap(env)) { \ r->element[LO_IDX ? index : (adjust - index)] = \ - swap(access(env, addr)); \ + swap(access(env, addr, GETPC())); \ } else { \ r->element[LO_IDX ? index : (adjust - index)] = \ - access(env, addr); \ + access(env, addr, GETPC()); \ } \ } #define I(x) (x) -LVE(lvebx, cpu_ldub_data, I, u8) -LVE(lvehx, cpu_lduw_data, bswap16, u16) -LVE(lvewx, cpu_ldl_data, bswap32, u32) +LVE(lvebx, cpu_ldub_data_ra, I, u8) +LVE(lvehx, cpu_lduw_data_ra, bswap16, u16) +LVE(lvewx, cpu_ldl_data_ra, bswap32, u32) #undef I #undef LVE @@ -259,16 +259,17 @@ LVE(lvewx, cpu_ldl_data, bswap32, u32) \ if (needs_byteswap(env)) { \ access(env, addr, swap(r->element[LO_IDX ? index : \ - (adjust - index)])); \ + (adjust - index)]), \ + GETPC()); \ } else { \ access(env, addr, r->element[LO_IDX ? index : \ - (adjust - index)]); \ + (adjust - index)], GETPC()); \ } \ } #define I(x) (x) -STVE(stvebx, cpu_stb_data, I, u8) -STVE(stvehx, cpu_stw_data, bswap16, u16) -STVE(stvewx, cpu_stl_data, bswap32, u32) +STVE(stvebx, cpu_stb_data_ra, I, u8) +STVE(stvehx, cpu_stw_data_ra, bswap16, u16) +STVE(stvewx, cpu_stl_data_ra, bswap32, u32) #undef I #undef LVE