From patchwork Fri Oct 25 06:36:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 177667 Delivered-To: patch@linaro.org Received: by 2002:a92:409a:0:0:0:0:0 with SMTP id d26csp3281135ill; Fri, 25 Oct 2019 00:29:05 -0700 (PDT) X-Google-Smtp-Source: APXvYqzsXjP9YCURdJPM9kP01uS2uGqnhIfYp1jGqqRs9o0zkEAuLD583PHpXSHcEFGNv182m+1d X-Received: by 2002:a05:6402:13d5:: with SMTP id a21mr2374161edx.242.1571988545541; Fri, 25 Oct 2019 00:29:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571988545; cv=none; d=google.com; s=arc-20160816; b=HfGNyNXKYGN+q7XHmXJYN60XQ2XbTumyMJ88idg0io6LmGXKuGRLCrmOLKKcWabDBK VkO8ofwdqzTr6xNjj3Mj13E+H/uonsnqIHrAPd08nx3QKJS1s5TQQ64HQ5EzdjEfbmLs Fv0x71A7v4Oq0YKm4Uncs3vgtCoIhtnreaqWiQMSc1/wMPtsKMVCZ6R+syFX2dwgKd6M CK6iZKJjgchwbKE282FcDnX5bQhLzSdVAjDd9xnjukzAQXpHiDU/Iy4FExgnEtvaeNGi jyucwc3njYEsev1s2NBOAaHL0r8CPSPdV3vU/jJfdr98enhv4g+2mCAZzbBKE7XX2J2Q SbTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=X9uOunAsx7Jvs5CSUNvC6FsYnZMcFnpqu3r55fNjaWc=; b=0vREJ4DB/6ShSJoRyFE34Sxhl5R9b5BT+DhWzWzW/fSzLN9g91GGGFC3eErHx1CRp3 FtziGizgLpXmWXhfcMGAt55sXfelD8hHh/knskmfk4d9qBzP3mvbvyW7khWCTr5mUit+ pUOC85eGWr+BrCkmfG1evH0Ep3Beu3xzsZKa29KjFi5LLoJJvh5WXxeBl+J7lYY3DuUG uqIX7tZnn19WeIzdqoYA45+/ZiR2d9e2whA5lEhOz2N6PfGqeCdqigUmUyJ+YMSLZeha qhoEbja3gkhO9QjWRCmAwqSVlQ2pyP7ZQFRRLeI6Legqn/X/LLZPyYBHUSSsXWcE/nbQ gHFg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=EcXAeJIb; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 9si660469ejw.272.2019.10.25.00.29.05 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 25 Oct 2019 00:29:05 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=EcXAeJIb; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:56794 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iNu1v-0002OT-VC for patch@linaro.org; Fri, 25 Oct 2019 03:29:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40438) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iNtpz-0004fv-84 for qemu-devel@nongnu.org; Fri, 25 Oct 2019 03:16:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iNtpw-0007DG-Qm for qemu-devel@nongnu.org; Fri, 25 Oct 2019 03:16:43 -0400 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]:38958) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iNtpw-0007Cg-KU for qemu-devel@nongnu.org; Fri, 25 Oct 2019 03:16:40 -0400 Received: by mail-wm1-x332.google.com with SMTP id r141so854609wme.4 for ; Fri, 25 Oct 2019 00:16:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=X9uOunAsx7Jvs5CSUNvC6FsYnZMcFnpqu3r55fNjaWc=; b=EcXAeJIbBofHsAmXdo9HkxWK4GDPA6Inthin6Vro718hYwG0R8S6P+i77th3z4vA/Q nwgL0BCRwlMWT7Y7Xhd6Z1D5wLhFfL69mtRvmwTBKs3DZsJhN/c6ik8KfV7do8owDaZN Uc7qwyVbckPWiW/xC707QV8I1pDXoyr5Og2MRacf7qYrbdHqnxVC82k8Z/xT6fJsF8YB lcPGAXc6YP4Ks7g/pCUsHFPz834I01/JLWDMKm6FTuwUpWKYHPAPJ9J3RhAIQTo7Pfk5 x9+fZ79yQSBMmFJQrAfUjYGF/SNU9rPXjmbM8FnokvvnPnYKGam4XNWH4Yc5uvD/1LDn 8/1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=X9uOunAsx7Jvs5CSUNvC6FsYnZMcFnpqu3r55fNjaWc=; b=Og/fIwtmldWvgSGs7o4od1RUiUa5X6v0snhQj793me5CZQZ+JkzvxaXUWHMsWkAQVz 4061cKIDckqCz5URJOLsupszN4NCA6IIc0r+f+zpvQj86fSancMszO5tH/uSjUJ4Bio/ 23VZx5y2o1JePeWzaQfob4ezikOZAbxPZpATTpgBpmguETQ7TMGnHgxourodKE/tExPK LU0bbd6G3qCFTT6ZVWaB9Impkl4ISeO8TY1hUFaFqhoB5KxeyxDxQueeeAL7zk/27rvD wyYoKTHKqIKHmEPQhffgByZpRVXfWVW+kONxN5A/OU6D6Y4dksKHgDLMfuXQ9kukxXkX IpHg== X-Gm-Message-State: APjAAAVlRNBoP0sa0EpN6K7nqexu6aG6FI6vON0i2yrm1v4Q8YXmy28w gP76vzgf5cNEMuLhC71hjXSHUQ== X-Received: by 2002:a05:600c:219:: with SMTP id 25mr1910518wmi.174.1571987799347; Fri, 25 Oct 2019 00:16:39 -0700 (PDT) Received: from zen.linaroharston ([51.148.130.216]) by smtp.gmail.com with ESMTPSA id r3sm1519258wre.29.2019.10.25.00.16.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Oct 2019 00:16:36 -0700 (PDT) Received: from zen.lan (localhost [127.0.0.1]) by zen.linaroharston (Postfix) with ESMTP id 7E5561FFBF; Fri, 25 Oct 2019 07:37:17 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: peter.maydell@linaro.org Subject: [PULL v2 39/73] translator: add translator_ld{ub,sw,uw,l,q} Date: Fri, 25 Oct 2019 07:36:39 +0100 Message-Id: <20191025063713.23374-40-alex.bennee@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191025063713.23374-1-alex.bennee@linaro.org> References: <20191025063713.23374-1-alex.bennee@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::332 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson , qemu-devel@nongnu.org, "Emilio G. Cota" , Paolo Bonzini , =?utf-8?q?Alex_Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" We don't bother with replicating the fast path (tlb_hit) of the old cpu_ldst helpers as it has no measurable effect on performance. This probably indicates we should consider flattening the whole set of helpers but that is out of scope for this change. Suggested-by: Richard Henderson Signed-off-by: Emilio G. Cota [AJB: directly plumb into softmmu/user helpers] Signed-off-by: Alex Bennée Reviewed-by: Richard Henderson -- 2.20.1 diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h index 9151fdb042c..fd499f7e2ff 100644 --- a/include/exec/cpu_ldst.h +++ b/include/exec/cpu_ldst.h @@ -129,6 +129,11 @@ static inline void clear_helper_retaddr(void) #include "exec/cpu_ldst_useronly_template.h" #undef MEMSUFFIX +/* + * Code access is deprecated in favour of translator_ld* functions + * (see translator.h). However there are still users that need to + * converted so for now these stay. + */ #define MEMSUFFIX _code #define CODE_ACCESS #define DATA_SIZE 1 @@ -427,6 +432,12 @@ static inline CPUTLBEntry *tlb_entry(CPUArchState *env, uintptr_t mmu_idx, #undef CPU_MMU_INDEX #undef MEMSUFFIX +/* + * Code access is deprecated in favour of translator_ld* functions + * (see translator.h). However there are still users that need to + * converted so for now these stay. + */ + #define CPU_MMU_INDEX (cpu_mmu_index(env, true)) #define MEMSUFFIX _code #define SOFTMMU_CODE_ACCESS diff --git a/include/exec/translator.h b/include/exec/translator.h index 180c51d5092..459dd72aabc 100644 --- a/include/exec/translator.h +++ b/include/exec/translator.h @@ -19,7 +19,10 @@ */ +#include "qemu/bswap.h" #include "exec/exec-all.h" +#include "exec/cpu_ldst.h" +#include "exec/plugin-gen.h" #include "tcg/tcg.h" @@ -142,4 +145,61 @@ void translator_loop(const TranslatorOps *ops, DisasContextBase *db, void translator_loop_temp_check(DisasContextBase *db); -#endif /* EXEC__TRANSLATOR_H */ +/* + * Translator Load Functions + * + * These are intended to replace the old cpu_ld*_code functions and + * are mandatory for front-ends that have been migrated to the common + * translator_loop. These functions are only intended to be called + * from the translation stage and should not be called from helper + * functions. Those functions should be converted to encode the + * relevant information at translation time. + */ + +#ifdef CONFIG_USER_ONLY + +#define DO_LOAD(type, name, shift) \ + do { \ + set_helper_retaddr(1); \ + ret = name ## _p(g2h(pc)); \ + clear_helper_retaddr(); \ + } while (0) + +#else + +#define DO_LOAD(type, name, shift) \ + do { \ + int mmu_idx = cpu_mmu_index(env, true); \ + TCGMemOpIdx oi = make_memop_idx(shift, mmu_idx); \ + ret = helper_ret_ ## name ## _cmmu(env, pc, oi, 0); \ + } while (0) + +#endif + +#define GEN_TRANSLATOR_LD(fullname, name, type, shift, swap_fn) \ + static inline type \ + fullname ## _swap(CPUArchState *env, abi_ptr pc, bool do_swap) \ + { \ + type ret; \ + DO_LOAD(type, name, shift); \ + \ + if (do_swap) { \ + ret = swap_fn(ret); \ + } \ + plugin_insn_append(&ret, sizeof(ret)); \ + return ret; \ + } \ + \ + static inline type fullname(CPUArchState *env, abi_ptr pc) \ + { \ + return fullname ## _swap(env, pc, false); \ + } + +GEN_TRANSLATOR_LD(translator_ldub, ldub, uint8_t, 0, /* no swap */ ) +GEN_TRANSLATOR_LD(translator_ldsw, ldsw, int16_t, 1, bswap16) +GEN_TRANSLATOR_LD(translator_lduw, lduw, uint16_t, 1, bswap16) +GEN_TRANSLATOR_LD(translator_ldl, ldl, uint32_t, 2, bswap32) +GEN_TRANSLATOR_LD(translator_ldq, ldq, uint64_t, 3, bswap64) +#undef GEN_TRANSLATOR_LD + +#endif /* EXEC__TRANSLATOR_H */