From patchwork Sat Jan 8 06:33:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 530684 Delivered-To: patch@linaro.org Received: by 2002:ad5:544f:0:0:0:0:0 with SMTP id a15csp963322imp; Fri, 7 Jan 2022 22:34:59 -0800 (PST) X-Google-Smtp-Source: ABdhPJxK5Ilm+bsGEeb1nSaVustrLf6PNGUgTW9+kWh6G/OleXEnezAFpLdH99Ob4e0/NvPplj3+ X-Received: by 2002:a25:b315:: with SMTP id l21mr66730396ybj.207.1641623698923; Fri, 07 Jan 2022 22:34:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641623698; cv=none; d=google.com; s=arc-20160816; b=YRhDSmH8ZTnIDLtQCYyLbsFhTpO8waN0g+2m7rMuYaFDaYsqtCdPkCpx69P4szdlJp 2oZZTCUoey0jiQV4HW7PGoojgGlb6FT674QjqhITHnPfCT1/pCVvuabq2TItKOnR2Rmy dwkajjysOJfrQjo3o+ytS7yXmSp9bFiXaBFARNt+wSUNsu6YYstyvOZBv2dbnubIrB4o XGeA93+EouIZXIxBm52kYXFP+mCp5b2eXUwrBLwJzZGPRzJoV2H4nOoEFj0iyYoFOBvI zgBwl30H+jjlAthgFQnvsGGmfCX99ocZBDuFLfEdeKiyeRRL9B3zXzFVLADOP6d87Qlx Ybwg== 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=z+1Bpm5gmuPz16kiapG0JjFHPuZTPa8QQ9sXQBalCt4=; b=Qptp4zpibIT68ULRHgMtADB1ShBnaBwLDhibxBblYkIgo32Ac3CvNyIl5fi4jrv3h7 SdTUHK6AOcDrjCblFTY+E0T5voTmlerccTM52zvtmk9CBqEc0AvNrpCSn4CoQAxWHD9J Y0TDQkKZWYTJbOA1UwordzoPDfte42xGIZe40fPtZYvK3PtjlIkboakNZcCJUODoYlUQ NtmQfLgswqnAmqYeg/SrTIfSI73HpoUnY6V5yUznvB5g1Z8QqulC8d1/qEubKMrlwF56 NTPYalLv6Mv1zxiNfHeMGZ1I5hRMp4FNHhnB26Y+h5ou8dqm2lyjxN5l/iPOcpDGX/JJ M1tg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=taCLNPZq; 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=pass (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 e10si653399ybp.123.2022.01.07.22.34.58 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 07 Jan 2022 22:34:58 -0800 (PST) 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=pass header.i=@linaro.org header.s=google header.b=taCLNPZq; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:55512 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n65Ja-0001Pg-Cq for patch@linaro.org; Sat, 08 Jan 2022 01:34:58 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57672) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n65I3-0001Lr-Ie for qemu-devel@nongnu.org; Sat, 08 Jan 2022 01:33:30 -0500 Received: from [2607:f8b0:4864:20::534] (port=43629 helo=mail-pg1-x534.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1n65Hy-0003bu-NN for qemu-devel@nongnu.org; Sat, 08 Jan 2022 01:33:19 -0500 Received: by mail-pg1-x534.google.com with SMTP id 8so7653523pgc.10 for ; Fri, 07 Jan 2022 22:33:18 -0800 (PST) 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=z+1Bpm5gmuPz16kiapG0JjFHPuZTPa8QQ9sXQBalCt4=; b=taCLNPZqfDZPzzGQ/xcgCYXhgB+pxau+4e5jumxUni3F2Rb4BbGyeIf3UhgNKtmMc4 cz88TyX5OQdJdDQ7tZdbu7HQL5Br1ceF38OwkQSakoTVJHJ0V5fgKbeYGsblD0Eo9ho2 KHykZspD4GlgkrKGNRLlP/KHGq+2F9oB1Fv0tbPJ3tazU5+QXV6FnLvmxB2+zyzhBOkO NKHEi4TmbrAq1tacu1qOyd7oztaZkQmT6IErIxpdDbGROPi8CAgByUQAh5na0E8gWuZU pHaV8OcsCpFXU5mRfxEFXWjvb8y7FHwMzDTFuvLRtkdLfiDabjRxIaFhAd8UwpHbRnx0 XNUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=z+1Bpm5gmuPz16kiapG0JjFHPuZTPa8QQ9sXQBalCt4=; b=C/Sw7YgFfzZG5DkU7grArIHP81Xj3bjLQbWWPthwnSluHzTJSSPJ/zoKMqrfbrU2Ed z+JJOPlNE8AGNIbSDmTqFnRLX/4MWn0tdLOEszelwQLF3LWOnHcMpkQeTNskTeHBJQFh 3fz0y87a63mBCNUgzjbGKrhM/g4N4UxbirQFJe7r3PBNcV0u3yg968sJ2Y9aSxL8WOml GQD1mS6j9HO3hmguyYAbMlqIgl2FN1nDZTgVobiOQTJKPve9foWrBGh/JNRuiRzIH8rI 9wSE9qGZ4yyyVICBITNACXdmkiILHAUDQM5D4xzuYlPpbuygjL36O9kCM2mfGCDKeU4n 7LgA== X-Gm-Message-State: AOAM530yfEkobVMy3i4gFt6tjEAEE8eSVZZLWZ0hsBbaOtMkIdkRb8hS OtAnQE0nZcOnHv9+3wHacPgDTjYTQpwNuA== X-Received: by 2002:a63:905:: with SMTP id 5mr59709924pgj.485.1641623597268; Fri, 07 Jan 2022 22:33:17 -0800 (PST) Received: from localhost.localdomain (174-21-75-75.tukw.qwest.net. [174.21.75.75]) by smtp.gmail.com with ESMTPSA id s7sm834760pfu.133.2022.01.07.22.33.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Jan 2022 22:33:16 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 1/7] tcg/arm: Drop support for armv4 and armv5 hosts Date: Fri, 7 Jan 2022 22:33:07 -0800 Message-Id: <20220108063313.477784-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220108063313.477784-1-richard.henderson@linaro.org> References: <20220108063313.477784-1-richard.henderson@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2607:f8b0:4864:20::534 (failed) Received-SPF: pass client-ip=2607:f8b0:4864:20::534; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x534.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Support for unaligned accesses is difficult for pre-v6 hosts. While debian still builds for armv4, we cannot use a compile time test, so test the architecture at runtime and error out. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- tcg/arm/tcg-target.c.inc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tcg/arm/tcg-target.c.inc b/tcg/arm/tcg-target.c.inc index 9d322cdba6..72b384cc28 100644 --- a/tcg/arm/tcg-target.c.inc +++ b/tcg/arm/tcg-target.c.inc @@ -2474,6 +2474,11 @@ static void tcg_target_init(TCGContext *s) if (pl != NULL && pl[0] == 'v' && pl[1] >= '4' && pl[1] <= '9') { arm_arch = pl[1] - '0'; } + + if (arm_arch < 6) { + error_report("TCG: ARMv%d is unsupported; exiting", arm_arch); + exit(EXIT_FAILURE); + } } tcg_target_available_regs[TCG_TYPE_I32] = ALL_GENERAL_REGS; From patchwork Sat Jan 8 06:33:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 530697 Delivered-To: patch@linaro.org Received: by 2002:ad5:544f:0:0:0:0:0 with SMTP id a15csp990486imp; Fri, 7 Jan 2022 23:42:31 -0800 (PST) X-Google-Smtp-Source: ABdhPJzAT6wDMIg1/vcI8zvbalVgamor1e0EGEa1gBNFR+zWGg/ig+/eFeuVkaJb7+k1096d8oa9 X-Received: by 2002:a25:5044:: with SMTP id e65mr73841742ybb.42.1641627751143; Fri, 07 Jan 2022 23:42:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641627751; cv=none; d=google.com; s=arc-20160816; b=Y6n20bb+bmNFxWimcYYLVz/+PTmKYdbUmoWwsFt22PoPW5HR55LmUDaVaXmzVy6fJw 0LHdTg1alky2HLqAJYT9cnWbCg0oabAP35SzV7zPd7xMz/8Ov+SsgIL6xvpuiextmY7r KaY7z1GhUj0p1KFKZX3tRAxcE1ua5OwKgGn1x3nhDncLTfu/ctdvX2Th+FexRQ1hVdH2 fdTfyhgLoDQex6ma34Nf7izMSBkNQI4x4wx+zr1lGfHmpuB6qPBD2Misitod5MakghiN 0qUcCmt9vjv4XRwUOBa5HHKDwxYsfQWyKu35tNwRc7Fa1+UyM05CNjn7I/gI//L3FxAH 7Blg== 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=/wvvWwr9jsUcspAJECVR8Zmg/KsBGBPI4le3BDg1sNA=; b=m9hMgRRiJJf+tUuIgDJsDITbUZykW2PSIqrDDvzxCH54QfgisVV7LomYL1MYZxw9BD wBuATdEr7JncoiDhYjimmtoKPVlwYdHVwyX2x1NQWowLKxs18BsPUexQ/cbm/9K+yEnZ 4CrpWj/PAwabOR7jZG1MrK+6noONhEe0Egy6IIn+SbEqcWuGo+EsO9lVp+0mknIOAAOv 0cOCoRKM1uuiZ7qO6xGuUzuO8iHLPyAp5pI2jpfClv44+YTIxl6hfP3sMmZHXzR7ObmN Q3gjVJJ8ovpY5aH78GeadjjVceEDOEzjMKGApz+iDvMDYUZirXo/pC8Uec7JWYZZksxn Mc8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=BrWyzOcv; 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=pass (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 h16si607486ybj.437.2022.01.07.23.42.31 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 07 Jan 2022 23:42:31 -0800 (PST) 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=pass header.i=@linaro.org header.s=google header.b=BrWyzOcv; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:59684 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n66Mw-0007gt-KO for patch@linaro.org; Sat, 08 Jan 2022 02:42:30 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57674) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n65I3-0001Ls-Hy for qemu-devel@nongnu.org; Sat, 08 Jan 2022 01:33:30 -0500 Received: from [2607:f8b0:4864:20::630] (port=36353 helo=mail-pl1-x630.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1n65Hz-0003c6-PT for qemu-devel@nongnu.org; Sat, 08 Jan 2022 01:33:21 -0500 Received: by mail-pl1-x630.google.com with SMTP id p14so6707009plf.3 for ; Fri, 07 Jan 2022 22:33:19 -0800 (PST) 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=/wvvWwr9jsUcspAJECVR8Zmg/KsBGBPI4le3BDg1sNA=; b=BrWyzOcvw5+O6m5MmxTTNdvX8RQ2+PpNQOu52DPu2cYE6wejTy97EWwmPxbYDV1gbE YyTXiru5KF/9Ih1vrKO6X176Op4i4IPHU23bVHPx4+pRExju8zLlafpRzzXx7NAh/xPX cpAatqlfRGvKxuEueJLBV+Z7rB6TGZ75h5bfFHSsloHZrXVVu+oIY6gGh9m7yYkloOQQ 7eRBf0CB/JltSPM0mgpbi0fLoLjZRXl+Dt20tmwYTrQMwEwEciI3SVsbtC1WaYg80aAu 0MZ74QjeO6ZMTAn585pNsT1nvCBlfsdRynZLk6Cw/Xz23+KZWK7JUrjdXc3ooR0c/Uqa u9Jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/wvvWwr9jsUcspAJECVR8Zmg/KsBGBPI4le3BDg1sNA=; b=PfClUnFLwpYQRLQI1U+dBXQtYaJjz1AifcFLSCYYWRFOymKJXNN+XzQQdWZqsxAxzD oL87Z28wXtY5s0k0BSI+jBHtNDI9+HxNzKaxjUEr4i7kliPhab6WtSR8pB/H+2L0sYkI DSz5tcMxb7AmrkyFCtt5QsMo4Q22NjMe7aE4tSl3iQlmdK3OFVLu7G2prArN73rqF9UJ G6JQKQf2qmb6E3Svdaho/0jdLjnOCDR/5I9JHWuMaMFlPr9+ojF1hDEd5lwMzNNR5qW9 ujVgpF5nYANgjs6Bb92SXUqA+a5spPDMdRG6PdfD5p7s2WNJvzuu6Zp33Ilf34NRZq37 Czpw== X-Gm-Message-State: AOAM530JXkf7Z8206FCf8eLMZDcm8HNPhEb9mYL9LHl5k8Yi0CyZEUyE GrNc2nQ4wvdbmhjBYf6BYbXvQ4V7INIeUg== X-Received: by 2002:a17:902:76c3:b0:149:ac0a:1662 with SMTP id j3-20020a17090276c300b00149ac0a1662mr35086311plt.92.1641623598467; Fri, 07 Jan 2022 22:33:18 -0800 (PST) Received: from localhost.localdomain (174-21-75-75.tukw.qwest.net. [174.21.75.75]) by smtp.gmail.com with ESMTPSA id s7sm834760pfu.133.2022.01.07.22.33.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Jan 2022 22:33:17 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 2/7] tcg/arm: Remove use_armv5t_instructions Date: Fri, 7 Jan 2022 22:33:08 -0800 Message-Id: <20220108063313.477784-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220108063313.477784-1-richard.henderson@linaro.org> References: <20220108063313.477784-1-richard.henderson@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2607:f8b0:4864:20::630 (failed) Received-SPF: pass client-ip=2607:f8b0:4864:20::630; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x630.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" This is now always true, since we require armv6. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- tcg/arm/tcg-target.h | 3 +-- tcg/arm/tcg-target.c.inc | 35 ++++++----------------------------- 2 files changed, 7 insertions(+), 31 deletions(-) diff --git a/tcg/arm/tcg-target.h b/tcg/arm/tcg-target.h index f41b809554..5c9ba5feea 100644 --- a/tcg/arm/tcg-target.h +++ b/tcg/arm/tcg-target.h @@ -28,7 +28,6 @@ extern int arm_arch; -#define use_armv5t_instructions (__ARM_ARCH >= 5 || arm_arch >= 5) #define use_armv6_instructions (__ARM_ARCH >= 6 || arm_arch >= 6) #define use_armv7_instructions (__ARM_ARCH >= 7 || arm_arch >= 7) @@ -109,7 +108,7 @@ extern bool use_neon_instructions; #define TCG_TARGET_HAS_eqv_i32 0 #define TCG_TARGET_HAS_nand_i32 0 #define TCG_TARGET_HAS_nor_i32 0 -#define TCG_TARGET_HAS_clz_i32 use_armv5t_instructions +#define TCG_TARGET_HAS_clz_i32 1 #define TCG_TARGET_HAS_ctz_i32 use_armv7_instructions #define TCG_TARGET_HAS_ctpop_i32 0 #define TCG_TARGET_HAS_deposit_i32 use_armv7_instructions diff --git a/tcg/arm/tcg-target.c.inc b/tcg/arm/tcg-target.c.inc index 72b384cc28..fd30e6e99e 100644 --- a/tcg/arm/tcg-target.c.inc +++ b/tcg/arm/tcg-target.c.inc @@ -596,11 +596,7 @@ static void tcg_out_b_reg(TCGContext *s, ARMCond cond, TCGReg rn) * Unless the C portion of QEMU is compiled as thumb, we don't need * true BX semantics; merely a branch to an address held in a register. */ - if (use_armv5t_instructions) { - tcg_out_bx_reg(s, cond, rn); - } else { - tcg_out_mov_reg(s, cond, TCG_REG_PC, rn); - } + tcg_out_bx_reg(s, cond, rn); } static void tcg_out_dat_imm(TCGContext *s, ARMCond cond, ARMInsn opc, @@ -1247,14 +1243,7 @@ static void tcg_out_goto(TCGContext *s, ARMCond cond, const tcg_insn_unit *addr) } /* LDR is interworking from v5t. */ - if (arm_mode || use_armv5t_instructions) { - tcg_out_movi_pool(s, cond, TCG_REG_PC, addri); - return; - } - - /* else v4t */ - tcg_out_movi32(s, COND_AL, TCG_REG_TMP, addri); - tcg_out_bx_reg(s, COND_AL, TCG_REG_TMP); + tcg_out_movi_pool(s, cond, TCG_REG_PC, addri); } /* @@ -1270,26 +1259,14 @@ static void tcg_out_call(TCGContext *s, const tcg_insn_unit *addr) if (disp - 8 < 0x02000000 && disp - 8 >= -0x02000000) { if (arm_mode) { tcg_out_bl_imm(s, COND_AL, disp); - return; - } - if (use_armv5t_instructions) { + } else { tcg_out_blx_imm(s, disp); - return; } + return; } - if (use_armv5t_instructions) { - tcg_out_movi32(s, COND_AL, TCG_REG_TMP, addri); - tcg_out_blx_reg(s, COND_AL, TCG_REG_TMP); - } else if (arm_mode) { - /* ??? Know that movi_pool emits exactly 1 insn. */ - tcg_out_mov_reg(s, COND_AL, TCG_REG_R14, TCG_REG_PC); - tcg_out_movi_pool(s, COND_AL, TCG_REG_PC, addri); - } else { - tcg_out_movi32(s, COND_AL, TCG_REG_TMP, addri); - tcg_out_mov_reg(s, COND_AL, TCG_REG_R14, TCG_REG_PC); - tcg_out_bx_reg(s, COND_AL, TCG_REG_TMP); - } + tcg_out_movi32(s, COND_AL, TCG_REG_TMP, addri); + tcg_out_blx_reg(s, COND_AL, TCG_REG_TMP); } static void tcg_out_goto_label(TCGContext *s, ARMCond cond, TCGLabel *l) From patchwork Sat Jan 8 06:33:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 530691 Delivered-To: patch@linaro.org Received: by 2002:ad5:544f:0:0:0:0:0 with SMTP id a15csp980058imp; Fri, 7 Jan 2022 23:16:52 -0800 (PST) X-Google-Smtp-Source: ABdhPJw4MrTanqQP/dqsz7Acqjx8DNLakvr6tA3BI00nniVVoF7dSjB81j1/N7Gwwb7Ya/O4rhIE X-Received: by 2002:a25:f04:: with SMTP id 4mr67660904ybp.50.1641626212524; Fri, 07 Jan 2022 23:16:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641626212; cv=none; d=google.com; s=arc-20160816; b=L6iXAxfnYqiJlAx7J3zXYXOxdgTrU1qYz7hbv06PwQM0InXCWNYLFIwbIw5/03fG5E 5l+f2aCStsJzs8wCuWkUwYg2tsHS9GAwYTMQbqhOeprGFgXzKL4gBgCtAY4lDwRKOZ66 kLU8GpfGW0C6AiI2yOlK+LHG74/Bw7G/xGtllzsAh8LAmOLYCRhoihpNbmVjykrMmJ/f oahsLGfmgKWDu8mDWSpAfbGuCB8wcwPLQj9eRfapVc2mbPjZIf+JETOztG+LjnhqDSTD hHQAkYRinKVeBbPBFtaEzLsS8FTap4M/q75DXIHjria/msWN7UTdZX37WQOOPxY+ppAb sz7A== 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=qiheRZfPkN/WV7mHuxWK1QcAkexQvnGwQPuHTMHYn+4=; b=rHYzYDFO0b74sBAiJIkPYEf1so/HHAmZMNiE1rfryHssc/gPe4tlb/dGDPnqnW4eGk MuLv4PXhdiXEBsaGQ1r7LA8O+y29u8VY1byxT7561TUEn0dwvoC2jxZ7wkXplcRb/6J+ 29cOWKcsvWNw5dQXoWGSKPUiJAd6P1d6kTUrSXGLFGv3yC1IfelMuNxD6bIjHkgaUANB FtgH2SNywUZ1IvmqjCJDIvhV1xgYmf9emce78me4BMN+TqtgZc8XD/FsppJ2ifFtvTE4 ePZcIprPFBwEczciVRUxzv+tJDFDPwx6Pt8LzgWyusNI/CHg4trmq0A3Sdx2ys0gZj7t gcpg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NH15t+vY; 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=pass (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 q6si633934ybm.108.2022.01.07.23.16.52 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 07 Jan 2022 23:16:52 -0800 (PST) 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=pass header.i=@linaro.org header.s=google header.b=NH15t+vY; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:35362 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n65y7-0004KG-TD for patch@linaro.org; Sat, 08 Jan 2022 02:16:51 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57696) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n65I3-0001Lt-Jo for qemu-devel@nongnu.org; Sat, 08 Jan 2022 01:33:30 -0500 Received: from [2607:f8b0:4864:20::102f] (port=53010 helo=mail-pj1-x102f.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1n65I1-0003cH-KD for qemu-devel@nongnu.org; Sat, 08 Jan 2022 01:33:23 -0500 Received: by mail-pj1-x102f.google.com with SMTP id pj2so5878023pjb.2 for ; Fri, 07 Jan 2022 22:33:21 -0800 (PST) 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=qiheRZfPkN/WV7mHuxWK1QcAkexQvnGwQPuHTMHYn+4=; b=NH15t+vY1L+ytv+reMmyoaTPmm03JpeJiBcz/qBYOD199UK9+h6TaYiGsuCBO46E1i 3bK4NJzsS1K0GU1WUTy5RxIwBRSZBjejG27esweGYvwhrUGCeTXN1LiBGnMsNgSkJ0g8 Y7sH44syptNf4TsQdLYbSCRNdLG/i9jI4CGrr9+0xweqGcvx70PbeOfa1cX/qwny3fNj sVP1Cxf9Nw6Z2h/fa55xNizm6J2+NUsO30xBjbr3hDIWb9rOiNN7kEA+N+GctVUNqK9h BATGLn76tNdO61ERZ9SRI5CxGRGObKwRthlj3ML1OHYTJnaXczZ9OKL3Y0MdBBRCKdDX FI3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qiheRZfPkN/WV7mHuxWK1QcAkexQvnGwQPuHTMHYn+4=; b=rdxl37VfB5wphorPWuMHbFZuUvs0VlkAZwgDy5kPFnnaADwkNYWBGBYi0pr5nZqT1p COcIzbCcmxuBq1xJxlrCZOfG5ARvkjs3Kh8LHK4YfWPLO73k1D5WgAukarPHI2F+cfz3 NytKWAIf1g4fXYuuSEuuEACJ9/o9AgbzXh5bRCZcZpjVvpwy/+1Y3JYSJOYf38ADio0N 3HYJjWJ5CBzpR7TLXdZyY66KzzEUDwf/N9i9QiF6d4b6DE6Do7SvKOvpz8bM6oWZcR60 UWPIq/sQFgCOZjeGAXdUROR+UgVSJxCTviHB1N7eP2bIhZmh/w2uYLdYBWsExKqDe6jA pUzw== X-Gm-Message-State: AOAM53163TWjZcvSFGHcJP3iT1fCXgQ5cz1NjMdJ5E3JZQsoTyNiu1DR Aq8M5CZ7xYMwGacYIRIvbTAXtQKkqEcKzg== X-Received: by 2002:a17:903:32c3:b0:14a:1597:99ff with SMTP id i3-20020a17090332c300b0014a159799ffmr2594309plr.13.1641623600254; Fri, 07 Jan 2022 22:33:20 -0800 (PST) Received: from localhost.localdomain (174-21-75-75.tukw.qwest.net. [174.21.75.75]) by smtp.gmail.com with ESMTPSA id s7sm834760pfu.133.2022.01.07.22.33.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Jan 2022 22:33:19 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 3/7] tcg/arm: Remove use_armv6_instructions Date: Fri, 7 Jan 2022 22:33:09 -0800 Message-Id: <20220108063313.477784-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220108063313.477784-1-richard.henderson@linaro.org> References: <20220108063313.477784-1-richard.henderson@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2607:f8b0:4864:20::102f (failed) Received-SPF: pass client-ip=2607:f8b0:4864:20::102f; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102f.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" This is now always true, since we require armv6. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- tcg/arm/tcg-target.h | 1 - tcg/arm/tcg-target.c.inc | 192 ++++++--------------------------------- 2 files changed, 27 insertions(+), 166 deletions(-) diff --git a/tcg/arm/tcg-target.h b/tcg/arm/tcg-target.h index 5c9ba5feea..1dd4cd5377 100644 --- a/tcg/arm/tcg-target.h +++ b/tcg/arm/tcg-target.h @@ -28,7 +28,6 @@ extern int arm_arch; -#define use_armv6_instructions (__ARM_ARCH >= 6 || arm_arch >= 6) #define use_armv7_instructions (__ARM_ARCH >= 7 || arm_arch >= 7) #undef TCG_TARGET_STACK_GROWSUP diff --git a/tcg/arm/tcg-target.c.inc b/tcg/arm/tcg-target.c.inc index fd30e6e99e..ea8b90e6e2 100644 --- a/tcg/arm/tcg-target.c.inc +++ b/tcg/arm/tcg-target.c.inc @@ -923,17 +923,6 @@ static void tcg_out_dat_rIN(TCGContext *s, ARMCond cond, ARMInsn opc, static void tcg_out_mul32(TCGContext *s, ARMCond cond, TCGReg rd, TCGReg rn, TCGReg rm) { - /* if ArchVersion() < 6 && d == n then UNPREDICTABLE; */ - if (!use_armv6_instructions && rd == rn) { - if (rd == rm) { - /* rd == rn == rm; copy an input to tmp first. */ - tcg_out_mov_reg(s, cond, TCG_REG_TMP, rn); - rm = rn = TCG_REG_TMP; - } else { - rn = rm; - rm = rd; - } - } /* mul */ tcg_out32(s, (cond << 28) | 0x90 | (rd << 16) | (rm << 8) | rn); } @@ -941,17 +930,6 @@ static void tcg_out_mul32(TCGContext *s, ARMCond cond, TCGReg rd, static void tcg_out_umull32(TCGContext *s, ARMCond cond, TCGReg rd0, TCGReg rd1, TCGReg rn, TCGReg rm) { - /* if ArchVersion() < 6 && (dHi == n || dLo == n) then UNPREDICTABLE; */ - if (!use_armv6_instructions && (rd0 == rn || rd1 == rn)) { - if (rd0 == rm || rd1 == rm) { - tcg_out_mov_reg(s, cond, TCG_REG_TMP, rn); - rn = TCG_REG_TMP; - } else { - TCGReg t = rn; - rn = rm; - rm = t; - } - } /* umull */ tcg_out32(s, (cond << 28) | 0x00800090 | (rd1 << 16) | (rd0 << 12) | (rm << 8) | rn); @@ -960,17 +938,6 @@ static void tcg_out_umull32(TCGContext *s, ARMCond cond, TCGReg rd0, static void tcg_out_smull32(TCGContext *s, ARMCond cond, TCGReg rd0, TCGReg rd1, TCGReg rn, TCGReg rm) { - /* if ArchVersion() < 6 && (dHi == n || dLo == n) then UNPREDICTABLE; */ - if (!use_armv6_instructions && (rd0 == rn || rd1 == rn)) { - if (rd0 == rm || rd1 == rm) { - tcg_out_mov_reg(s, cond, TCG_REG_TMP, rn); - rn = TCG_REG_TMP; - } else { - TCGReg t = rn; - rn = rm; - rm = t; - } - } /* smull */ tcg_out32(s, (cond << 28) | 0x00c00090 | (rd1 << 16) | (rd0 << 12) | (rm << 8) | rn); @@ -990,15 +957,8 @@ static void tcg_out_udiv(TCGContext *s, ARMCond cond, static void tcg_out_ext8s(TCGContext *s, ARMCond cond, TCGReg rd, TCGReg rn) { - if (use_armv6_instructions) { - /* sxtb */ - tcg_out32(s, 0x06af0070 | (cond << 28) | (rd << 12) | rn); - } else { - tcg_out_dat_reg(s, cond, ARITH_MOV, - rd, 0, rn, SHIFT_IMM_LSL(24)); - tcg_out_dat_reg(s, cond, ARITH_MOV, - rd, 0, rd, SHIFT_IMM_ASR(24)); - } + /* sxtb */ + tcg_out32(s, 0x06af0070 | (cond << 28) | (rd << 12) | rn); } static void __attribute__((unused)) @@ -1009,113 +969,37 @@ tcg_out_ext8u(TCGContext *s, ARMCond cond, TCGReg rd, TCGReg rn) static void tcg_out_ext16s(TCGContext *s, ARMCond cond, TCGReg rd, TCGReg rn) { - if (use_armv6_instructions) { - /* sxth */ - tcg_out32(s, 0x06bf0070 | (cond << 28) | (rd << 12) | rn); - } else { - tcg_out_dat_reg(s, cond, ARITH_MOV, - rd, 0, rn, SHIFT_IMM_LSL(16)); - tcg_out_dat_reg(s, cond, ARITH_MOV, - rd, 0, rd, SHIFT_IMM_ASR(16)); - } + /* sxth */ + tcg_out32(s, 0x06bf0070 | (cond << 28) | (rd << 12) | rn); } static void tcg_out_ext16u(TCGContext *s, ARMCond cond, TCGReg rd, TCGReg rn) { - if (use_armv6_instructions) { - /* uxth */ - tcg_out32(s, 0x06ff0070 | (cond << 28) | (rd << 12) | rn); - } else { - tcg_out_dat_reg(s, cond, ARITH_MOV, - rd, 0, rn, SHIFT_IMM_LSL(16)); - tcg_out_dat_reg(s, cond, ARITH_MOV, - rd, 0, rd, SHIFT_IMM_LSR(16)); - } + /* uxth */ + tcg_out32(s, 0x06ff0070 | (cond << 28) | (rd << 12) | rn); } static void tcg_out_bswap16(TCGContext *s, ARMCond cond, TCGReg rd, TCGReg rn, int flags) { - if (use_armv6_instructions) { - if (flags & TCG_BSWAP_OS) { - /* revsh */ - tcg_out32(s, 0x06ff0fb0 | (cond << 28) | (rd << 12) | rn); - return; - } - - /* rev16 */ - tcg_out32(s, 0x06bf0fb0 | (cond << 28) | (rd << 12) | rn); - if ((flags & (TCG_BSWAP_IZ | TCG_BSWAP_OZ)) == TCG_BSWAP_OZ) { - /* uxth */ - tcg_out32(s, 0x06ff0070 | (cond << 28) | (rd << 12) | rd); - } + if (flags & TCG_BSWAP_OS) { + /* revsh */ + tcg_out32(s, 0x06ff0fb0 | (cond << 28) | (rd << 12) | rn); return; } - if (flags == 0) { - /* - * For stores, no input or output extension: - * rn = xxAB - * lsr tmp, rn, #8 tmp = 0xxA - * and tmp, tmp, #0xff tmp = 000A - * orr rd, tmp, rn, lsl #8 rd = xABA - */ - tcg_out_dat_reg(s, cond, ARITH_MOV, - TCG_REG_TMP, 0, rn, SHIFT_IMM_LSR(8)); - tcg_out_dat_imm(s, cond, ARITH_AND, TCG_REG_TMP, TCG_REG_TMP, 0xff); - tcg_out_dat_reg(s, cond, ARITH_ORR, - rd, TCG_REG_TMP, rn, SHIFT_IMM_LSL(8)); - return; + /* rev16 */ + tcg_out32(s, 0x06bf0fb0 | (cond << 28) | (rd << 12) | rn); + if ((flags & (TCG_BSWAP_IZ | TCG_BSWAP_OZ)) == TCG_BSWAP_OZ) { + /* uxth */ + tcg_out32(s, 0x06ff0070 | (cond << 28) | (rd << 12) | rd); } - - /* - * Byte swap, leaving the result at the top of the register. - * We will then shift down, zero or sign-extending. - */ - if (flags & TCG_BSWAP_IZ) { - /* - * rn = 00AB - * ror tmp, rn, #8 tmp = B00A - * orr tmp, tmp, tmp, lsl #16 tmp = BA00 - */ - tcg_out_dat_reg(s, cond, ARITH_MOV, - TCG_REG_TMP, 0, rn, SHIFT_IMM_ROR(8)); - tcg_out_dat_reg(s, cond, ARITH_ORR, - TCG_REG_TMP, TCG_REG_TMP, TCG_REG_TMP, - SHIFT_IMM_LSL(16)); - } else { - /* - * rn = xxAB - * and tmp, rn, #0xff00 tmp = 00A0 - * lsl tmp, tmp, #8 tmp = 0A00 - * orr tmp, tmp, rn, lsl #24 tmp = BA00 - */ - tcg_out_dat_rI(s, cond, ARITH_AND, TCG_REG_TMP, rn, 0xff00, 1); - tcg_out_dat_reg(s, cond, ARITH_MOV, - TCG_REG_TMP, 0, TCG_REG_TMP, SHIFT_IMM_LSL(8)); - tcg_out_dat_reg(s, cond, ARITH_ORR, - TCG_REG_TMP, TCG_REG_TMP, rn, SHIFT_IMM_LSL(24)); - } - tcg_out_dat_reg(s, cond, ARITH_MOV, rd, 0, TCG_REG_TMP, - (flags & TCG_BSWAP_OS - ? SHIFT_IMM_ASR(8) : SHIFT_IMM_LSR(8))); } static void tcg_out_bswap32(TCGContext *s, ARMCond cond, TCGReg rd, TCGReg rn) { - if (use_armv6_instructions) { - /* rev */ - tcg_out32(s, 0x06bf0f30 | (cond << 28) | (rd << 12) | rn); - } else { - tcg_out_dat_reg(s, cond, ARITH_EOR, - TCG_REG_TMP, rn, rn, SHIFT_IMM_ROR(16)); - tcg_out_dat_imm(s, cond, ARITH_BIC, - TCG_REG_TMP, TCG_REG_TMP, 0xff | 0x800); - tcg_out_dat_reg(s, cond, ARITH_MOV, - rd, 0, rn, SHIFT_IMM_ROR(8)); - tcg_out_dat_reg(s, cond, ARITH_EOR, - rd, rd, TCG_REG_TMP, SHIFT_IMM_LSR(8)); - } + /* rev */ + tcg_out32(s, 0x06bf0f30 | (cond << 28) | (rd << 12) | rn); } static void tcg_out_deposit(TCGContext *s, ARMCond cond, TCGReg rd, @@ -1283,7 +1167,7 @@ static void tcg_out_mb(TCGContext *s, TCGArg a0) { if (use_armv7_instructions) { tcg_out32(s, INSN_DMB_ISH); - } else if (use_armv6_instructions) { + } else { tcg_out32(s, INSN_DMB_MCR); } } @@ -1489,8 +1373,7 @@ static TCGReg tcg_out_arg_reg64(TCGContext *s, TCGReg argreg, if (argreg & 1) { argreg++; } - if (use_armv6_instructions && argreg >= 4 - && (arglo & 1) == 0 && arghi == arglo + 1) { + if (argreg >= 4 && (arglo & 1) == 0 && arghi == arglo + 1) { tcg_out_strd_8(s, COND_AL, arglo, TCG_REG_CALL_STACK, (argreg - 4) * 4); return argreg + 2; @@ -1520,8 +1403,6 @@ static TCGReg tcg_out_tlb_read(TCGContext *s, TCGReg addrlo, TCGReg addrhi, int cmp_off = (is_load ? offsetof(CPUTLBEntry, addr_read) : offsetof(CPUTLBEntry, addr_write)); int fast_off = TLB_MASK_TABLE_OFS(mem_index); - int mask_off = fast_off + offsetof(CPUTLBDescFast, mask); - int table_off = fast_off + offsetof(CPUTLBDescFast, table); unsigned s_bits = opc & MO_SIZE; unsigned a_bits = get_alignment_bits(opc); @@ -1534,12 +1415,7 @@ static TCGReg tcg_out_tlb_read(TCGContext *s, TCGReg addrlo, TCGReg addrhi, } /* Load env_tlb(env)->f[mmu_idx].{mask,table} into {r0,r1}. */ - if (use_armv6_instructions) { - tcg_out_ldrd_8(s, COND_AL, TCG_REG_R0, TCG_AREG0, fast_off); - } else { - tcg_out_ld(s, TCG_TYPE_I32, TCG_REG_R0, TCG_AREG0, mask_off); - tcg_out_ld(s, TCG_TYPE_I32, TCG_REG_R1, TCG_AREG0, table_off); - } + tcg_out_ldrd_8(s, COND_AL, TCG_REG_R0, TCG_AREG0, fast_off); /* Extract the tlb index from the address into R0. */ tcg_out_dat_reg(s, COND_AL, ARITH_AND, TCG_REG_R0, TCG_REG_R0, addrlo, @@ -1550,7 +1426,7 @@ static TCGReg tcg_out_tlb_read(TCGContext *s, TCGReg addrlo, TCGReg addrhi, * Load the tlb comparator into R2/R3 and the fast path addend into R1. */ if (cmp_off == 0) { - if (use_armv6_instructions && TARGET_LONG_BITS == 64) { + if (TARGET_LONG_BITS == 64) { tcg_out_ldrd_rwb(s, COND_AL, TCG_REG_R2, TCG_REG_R1, TCG_REG_R0); } else { tcg_out_ld32_rwb(s, COND_AL, TCG_REG_R2, TCG_REG_R1, TCG_REG_R0); @@ -1558,15 +1434,12 @@ static TCGReg tcg_out_tlb_read(TCGContext *s, TCGReg addrlo, TCGReg addrhi, } else { tcg_out_dat_reg(s, COND_AL, ARITH_ADD, TCG_REG_R1, TCG_REG_R1, TCG_REG_R0, 0); - if (use_armv6_instructions && TARGET_LONG_BITS == 64) { + if (TARGET_LONG_BITS == 64) { tcg_out_ldrd_8(s, COND_AL, TCG_REG_R2, TCG_REG_R1, cmp_off); } else { tcg_out_ld32_12(s, COND_AL, TCG_REG_R2, TCG_REG_R1, cmp_off); } } - if (!use_armv6_instructions && TARGET_LONG_BITS == 64) { - tcg_out_ld32_12(s, COND_AL, TCG_REG_R3, TCG_REG_R1, cmp_off + 4); - } /* Load the tlb addend. */ tcg_out_ld32_12(s, COND_AL, TCG_REG_R1, TCG_REG_R1, @@ -1631,7 +1504,6 @@ static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *lb) TCGReg argreg, datalo, datahi; MemOpIdx oi = lb->oi; MemOp opc = get_memop(oi); - void *func; if (!reloc_pc24(lb->label_ptr[0], tcg_splitwx_to_rx(s->code_ptr))) { return false; @@ -1646,18 +1518,8 @@ static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *lb) argreg = tcg_out_arg_imm32(s, argreg, oi); argreg = tcg_out_arg_reg32(s, argreg, TCG_REG_R14); - /* For armv6 we can use the canonical unsigned helpers and minimize - icache usage. For pre-armv6, use the signed helpers since we do - not have a single insn sign-extend. */ - if (use_armv6_instructions) { - func = qemu_ld_helpers[opc & MO_SIZE]; - } else { - func = qemu_ld_helpers[opc & MO_SSIZE]; - if (opc & MO_SIGN) { - opc = MO_UL; - } - } - tcg_out_call(s, func); + /* Use the canonical unsigned helpers and minimize icache usage. */ + tcg_out_call(s, qemu_ld_helpers[opc & MO_SIZE]); datalo = lb->datalo_reg; datahi = lb->datahi_reg; @@ -1760,7 +1622,7 @@ static void tcg_out_qemu_ld_index(TCGContext *s, MemOp opc, break; case MO_Q: /* Avoid ldrd for user-only emulation, to handle unaligned. */ - if (USING_SOFTMMU && use_armv6_instructions + if (USING_SOFTMMU && (datalo & 1) == 0 && datahi == datalo + 1) { tcg_out_ldrd_r(s, COND_AL, datalo, addrlo, addend); } else if (datalo != addend) { @@ -1803,7 +1665,7 @@ static void tcg_out_qemu_ld_direct(TCGContext *s, MemOp opc, TCGReg datalo, break; case MO_Q: /* Avoid ldrd for user-only emulation, to handle unaligned. */ - if (USING_SOFTMMU && use_armv6_instructions + if (USING_SOFTMMU && (datalo & 1) == 0 && datahi == datalo + 1) { tcg_out_ldrd_8(s, COND_AL, datalo, addrlo, 0); } else if (datalo == addrlo) { @@ -1880,7 +1742,7 @@ static void tcg_out_qemu_st_index(TCGContext *s, ARMCond cond, MemOp opc, break; case MO_64: /* Avoid strd for user-only emulation, to handle unaligned. */ - if (USING_SOFTMMU && use_armv6_instructions + if (USING_SOFTMMU && (datalo & 1) == 0 && datahi == datalo + 1) { tcg_out_strd_r(s, cond, datalo, addrlo, addend); } else { @@ -1912,7 +1774,7 @@ static void tcg_out_qemu_st_direct(TCGContext *s, MemOp opc, TCGReg datalo, break; case MO_64: /* Avoid strd for user-only emulation, to handle unaligned. */ - if (USING_SOFTMMU && use_armv6_instructions + if (USING_SOFTMMU && (datalo & 1) == 0 && datahi == datalo + 1) { tcg_out_strd_8(s, COND_AL, datalo, addrlo, 0); } else { From patchwork Sat Jan 8 06:33:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 530695 Delivered-To: patch@linaro.org Received: by 2002:ad5:544f:0:0:0:0:0 with SMTP id a15csp987692imp; Fri, 7 Jan 2022 23:35:22 -0800 (PST) X-Google-Smtp-Source: ABdhPJwRNPh2D1t8+GTp3voqQCpUBbETqQp16y2e+BNqghe5h+HzHhVZ3VrAgBjSbpCtq9B1F5H3 X-Received: by 2002:a25:b09e:: with SMTP id f30mr1610146ybj.368.1641627322001; Fri, 07 Jan 2022 23:35:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641627321; cv=none; d=google.com; s=arc-20160816; b=QsNA5gLMdcEtUpAMsqX8l1EGO3Way9uTuxqTlRZTIDOQz2IGoNKedF0JX6aF/UopyC BMAgmn57igXgUZH/ytAybKMbC13yEL2ZkbATeTOevz1UasYD3VThGTtGs6dyesq8oL3G Rqx3rRzedpb5xbpFZpR5uHjKYImJ948gx1Dwkr8OZ19R2ohdnHz0yRse0dljdJkGraJe I6ccCJFln/FKOPj716c1z/ZbHahM6AXZlvODik0iNIR8dxg/G2cM0iOSQSBn2wRuDlyq CvfIORturVNP7CCGxJm+blVfX93zllelxM0IurcYaSdmK0eRdu+GYZBz0rbbm7wz4xS3 k7dg== 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=/AYwq3dHnlsFGe0HxehxjaeDvoLxdWXzGgDqUZldkDo=; b=CbpdGGvq80hiv9a8Nzysgnd5QvX7ukCC/1p54pb9slHSiDAldk9OpNXPOYwVfH0fjo e+3WqBS+T3lqzVbi/w2VoJYNLr3tl1aB/AVmy3nvDqU1RfsezYVKs982urJN9UioWI8s 8N/lDMm4cvUsCaShAdKJc+560EJ1SDrj3OiE/ed2ZaoFsMu0+DTZ97IniXG3x5FaRD5s QN5Bj2AcqneZgljkDBz+UK0UXkHpA2Jig+VK9MKvgFEMkjDwTb9zXUkHhSw+UF2zX6SE TDEDacdQwIZFuRyjBFjqJA9LvJizu+hrqXNor4vSIVwJ6IlvRLW/97PFrSBcDpDT7Gl9 Up6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=TBmM4wK2; 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=pass (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 c18si612675ybs.725.2022.01.07.23.35.21 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 07 Jan 2022 23:35:21 -0800 (PST) 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=pass header.i=@linaro.org header.s=google header.b=TBmM4wK2; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:52232 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n66G0-0001zR-D7 for patch@linaro.org; Sat, 08 Jan 2022 02:35:20 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57706) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n65I4-0001Lu-KN for qemu-devel@nongnu.org; Sat, 08 Jan 2022 01:33:30 -0500 Received: from [2607:f8b0:4864:20::62a] (port=36860 helo=mail-pl1-x62a.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1n65I3-0003cY-5Q for qemu-devel@nongnu.org; Sat, 08 Jan 2022 01:33:24 -0500 Received: by mail-pl1-x62a.google.com with SMTP id p14so6707086plf.3 for ; Fri, 07 Jan 2022 22:33:22 -0800 (PST) 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=/AYwq3dHnlsFGe0HxehxjaeDvoLxdWXzGgDqUZldkDo=; b=TBmM4wK2YA18yUt9+NsWvwgYuCjxSZ5BWVk7I1bBOY1bsZCnuEbgeZk5gQHAEZfxXM rf/wN4BTE+5/ygM7NP3YyyMkfymTQu8P9kIocaRXqi/CrMyifCoD6C/d0iLBoHDuR0mo kabh3z6GyL68Q+uyjMfE5+lel0VgNMUsXuBeu28ZRQU3IXGcpOHHX1NfLop1zamTy+Oy /RZQshH9+KUgtpFCGCkSWp9yS2RHBzQzvzpMTx2yC5OjEzz/VFW3e81XGl0iC2/z+3nG nl8EYwTQXr8YWf5Ugh/VNaXxZq8Jo5DrkHjLCFqjEeHbqZYBfuV8uBLQxPaE6flo+MSJ 1Q7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/AYwq3dHnlsFGe0HxehxjaeDvoLxdWXzGgDqUZldkDo=; b=z3VCNlHI2w6sl1NeAf4G+f/BWnsz5g/Aa0wO5qYtR/mHb+CrhqsSPKk/G/kiDU7kda g89D5qnLMmUlckBBgXywfy7gXNND2nudtlfRUDtwOcXdb36iNvq90338aw0oyyf9wuhY DparLlUMTgeMaR30sbsBhdqCpS/q6gbZJLkHLjn7iOL9hbECofB8PSR6eLy9AbJ1tZeR aHwCtK8GdAtQGGvgkubhTjqaMZDXMuN34Gm5zlYLCURo0UYVNKAeTPhwryC3o8hgCIbv YL4EvVWtg0YncbP3FIyKy20Amj4MKbnbNmmqmKKC9FET5F1yNXGGVjm58W4Muvy36ySs BTwQ== X-Gm-Message-State: AOAM530g8xp/VODls92Ed6YmIaK+sWJzpGFk8E91g3ZLLP/3AvdRhb/L wY93MQCT63PrGePv0pzylIoL1Z2LZExwnA== X-Received: by 2002:a17:902:d4c8:b0:149:c99e:dd83 with SMTP id o8-20020a170902d4c800b00149c99edd83mr16295027plg.146.1641623601943; Fri, 07 Jan 2022 22:33:21 -0800 (PST) Received: from localhost.localdomain (174-21-75-75.tukw.qwest.net. [174.21.75.75]) by smtp.gmail.com with ESMTPSA id s7sm834760pfu.133.2022.01.07.22.33.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Jan 2022 22:33:21 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 4/7] tcg/arm: Check alignment for ldrd and strd Date: Fri, 7 Jan 2022 22:33:10 -0800 Message-Id: <20220108063313.477784-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220108063313.477784-1-richard.henderson@linaro.org> References: <20220108063313.477784-1-richard.henderson@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2607:f8b0:4864:20::62a (failed) Received-SPF: pass client-ip=2607:f8b0:4864:20::62a; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62a.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" We will shortly allow the use of unaligned memory accesses, and these require proper alignment. Use get_alignment_bits to verify and remove USING_SOFTMMU. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- tcg/arm/tcg-target.c.inc | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/tcg/arm/tcg-target.c.inc b/tcg/arm/tcg-target.c.inc index ea8b90e6e2..8a20224dd1 100644 --- a/tcg/arm/tcg-target.c.inc +++ b/tcg/arm/tcg-target.c.inc @@ -35,12 +35,6 @@ bool use_neon_instructions; #endif /* ??? Ought to think about changing CONFIG_SOFTMMU to always defined. */ -#ifdef CONFIG_SOFTMMU -# define USING_SOFTMMU 1 -#else -# define USING_SOFTMMU 0 -#endif - #ifdef CONFIG_DEBUG_TCG static const char * const tcg_target_reg_names[TCG_TARGET_NB_REGS] = { "%r0", "%r1", "%r2", "%r3", "%r4", "%r5", "%r6", "%r7", @@ -1621,8 +1615,8 @@ static void tcg_out_qemu_ld_index(TCGContext *s, MemOp opc, tcg_out_ld32_r(s, COND_AL, datalo, addrlo, addend); break; case MO_Q: - /* Avoid ldrd for user-only emulation, to handle unaligned. */ - if (USING_SOFTMMU + /* LDRD requires alignment; double-check that. */ + if (get_alignment_bits(opc) >= MO_64 && (datalo & 1) == 0 && datahi == datalo + 1) { tcg_out_ldrd_r(s, COND_AL, datalo, addrlo, addend); } else if (datalo != addend) { @@ -1664,8 +1658,8 @@ static void tcg_out_qemu_ld_direct(TCGContext *s, MemOp opc, TCGReg datalo, tcg_out_ld32_12(s, COND_AL, datalo, addrlo, 0); break; case MO_Q: - /* Avoid ldrd for user-only emulation, to handle unaligned. */ - if (USING_SOFTMMU + /* LDRD requires alignment; double-check that. */ + if (get_alignment_bits(opc) >= MO_64 && (datalo & 1) == 0 && datahi == datalo + 1) { tcg_out_ldrd_8(s, COND_AL, datalo, addrlo, 0); } else if (datalo == addrlo) { @@ -1741,8 +1735,8 @@ static void tcg_out_qemu_st_index(TCGContext *s, ARMCond cond, MemOp opc, tcg_out_st32_r(s, cond, datalo, addrlo, addend); break; case MO_64: - /* Avoid strd for user-only emulation, to handle unaligned. */ - if (USING_SOFTMMU + /* STRD requires alignment; double-check that. */ + if (get_alignment_bits(opc) >= MO_64 && (datalo & 1) == 0 && datahi == datalo + 1) { tcg_out_strd_r(s, cond, datalo, addrlo, addend); } else { @@ -1773,8 +1767,8 @@ static void tcg_out_qemu_st_direct(TCGContext *s, MemOp opc, TCGReg datalo, tcg_out_st32_12(s, COND_AL, datalo, addrlo, 0); break; case MO_64: - /* Avoid strd for user-only emulation, to handle unaligned. */ - if (USING_SOFTMMU + /* STRD requires alignment; double-check that. */ + if (get_alignment_bits(opc) >= MO_64 && (datalo & 1) == 0 && datahi == datalo + 1) { tcg_out_strd_8(s, COND_AL, datalo, addrlo, 0); } else { From patchwork Sat Jan 8 06:33:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 530685 Delivered-To: patch@linaro.org Received: by 2002:ad5:544f:0:0:0:0:0 with SMTP id a15csp968891imp; Fri, 7 Jan 2022 22:50:20 -0800 (PST) X-Google-Smtp-Source: ABdhPJzFGbYJkGStuW+DDmRR+jfveNmXpc5C3qgSDgSpy5gMaOANgeLR67NhwOlD+AyBmkuU8gLa X-Received: by 2002:a25:ab94:: with SMTP id v20mr77029622ybi.338.1641624619884; Fri, 07 Jan 2022 22:50:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641624619; cv=none; d=google.com; s=arc-20160816; b=sv4BS7CYDjXUQC7ZXqw4BWKGm82Bg74n0Ne+4uXj3zmwGSfCNbgZFVC+t5oGaztw4z DSoZpe676OtC8kHAC62hbvsBTINcDp0gVg171YxGyMXuNZqtAVMtRl8tAnkUyGuqbPVl euJkFFXNy3Bl01xHY0E2SV1jtEL45w8XUZAjTEOc8Ydw8PBe2PgB5t9JL8IvfD2KxaIT KYQPUNL/r8amwoSf8aHhZ4cxu1bhsu+VfzOCWVxzwVsosY/z/Ih729YFQ1tH564ZaG1U aPAw3k/lCN/lp7IP9XSjUM9mUJC7VMvdCxwp9EgMc04m7TDaxp8n6whtMnuiXN2DGXle CM6w== 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=Y0Tsxo+6wwyGjGP1LUKn3jwXiyZIm9+mz8iPkc8Ojds=; b=kw/33FzBUxDTj2nw3BBi+GU3cLxCjTkbpkXde8IKaMPIjl4Qj1KNeE08x3I1E+vHli SWS52369rS7bAqqd+QiqJ7Fla7CZ6x/XhI5QbmHQ1rJCmj9yMFwoyi6k3jxRqcqrn7E+ aXgLNiR9yVl8+C/vgnrMtw4oCHjiP+wIWvgJWHc5n7Ss/E/9qK5eHr8I4xYUYw+LfE85 xRT7swPrt1JT/BBxEqrOd9BAeoNqyHw6XTxY4VWLnjcPLeod5tZZraUM4h0NvXY+y+3L kSIdi4Za0MwJXUBSWGo36i5/+FZam6mAUPBSeIog/dD7jAIMwQK/y6sIwGgHarXLF5sa iK8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Ln4P5Wns; 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=pass (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 u17si687452ybj.113.2022.01.07.22.50.19 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 07 Jan 2022 22:50:19 -0800 (PST) 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=pass header.i=@linaro.org header.s=google header.b=Ln4P5Wns; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:34592 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n65YQ-0006Vf-C0 for patch@linaro.org; Sat, 08 Jan 2022 01:50:19 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57722) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n65I6-0001M2-9Q for qemu-devel@nongnu.org; Sat, 08 Jan 2022 01:33:34 -0500 Received: from [2607:f8b0:4864:20::102a] (port=54952 helo=mail-pj1-x102a.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1n65I4-0003ch-RF for qemu-devel@nongnu.org; Sat, 08 Jan 2022 01:33:26 -0500 Received: by mail-pj1-x102a.google.com with SMTP id oa15so6230868pjb.4 for ; Fri, 07 Jan 2022 22:33:24 -0800 (PST) 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=Y0Tsxo+6wwyGjGP1LUKn3jwXiyZIm9+mz8iPkc8Ojds=; b=Ln4P5WnsUcLvpdXdqnMPVLWmUroSdcwfUscxRuHu80Trv1uVLnyBrAxtTFJjX5wo5K K6BJcUSrtLTt7Y64+ZO2OPh5VgOzNx2QWnzcYR7qsCE36J+IV/mTw3Ake5khoEW12KsU ZbaFxeelcIjZ3LowekyLkoRkTMWFJmG/b+x1nWvrmsuR6FBNkDRBG7TSlhmblmcj9c2p aAUrAZKr7T7SkRdlUwqBVzLeEKfVwIm10U7zSRVXeoOhAvhEcZvKwNYvlEeeoFXNWr7y SvZvzTGxjKxvMthalQOrVdMcw0ey53SSxvjyj8JfIvAFUtGKVUNHieQCGmOtkbVc+TAp Pnig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Y0Tsxo+6wwyGjGP1LUKn3jwXiyZIm9+mz8iPkc8Ojds=; b=fbCQVF732Edvcm7E4FEULLZzaeBzzzd4Zrxl/D7bchwVwULnmxUACCRDCLMmhR8lDG YYF89x0ZhQDHXFw/tddn3rZs7s/CLvqwh4GIRcPcnmVu2ezJaXBozf50Rvef+hWA9peF qrvN4o4gDfQllx99ZLzSA8AsO2qesk0UYZv5UIfk+lArQLb6HylVAev1uS9efStnq3sa t4BqRThKKgWEjqaGoxxLixpgMCRekhJzQr39ZE5Q/Vhr+3N/bPB3LW8kvv8om65lWASp UIAZbjm+/vX34Xe0lcsa85t+n4tZd5KJ/WRSLcf5uurh+V7CptoBZN6PjxhWFgkY6dIt bLrg== X-Gm-Message-State: AOAM530fFv3fnRByqkluiGj0CsKsH93PvBPVsAjPFo9xEwK1kSO7PAxj drgskuVzKRFy60w2VvVKQzSJsyNuymiT9A== X-Received: by 2002:a17:90b:1bd1:: with SMTP id oa17mr19220455pjb.242.1641623603554; Fri, 07 Jan 2022 22:33:23 -0800 (PST) Received: from localhost.localdomain (174-21-75-75.tukw.qwest.net. [174.21.75.75]) by smtp.gmail.com with ESMTPSA id s7sm834760pfu.133.2022.01.07.22.33.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Jan 2022 22:33:22 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 5/7] tcg/arm: Support unaligned access for softmmu Date: Fri, 7 Jan 2022 22:33:11 -0800 Message-Id: <20220108063313.477784-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220108063313.477784-1-richard.henderson@linaro.org> References: <20220108063313.477784-1-richard.henderson@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2607:f8b0:4864:20::102a (failed) Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" >From armv6, the architecture supports unaligned accesses. All we need to do is perform the correct alignment check in tcg_out_tlb_read. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- tcg/arm/tcg-target.c.inc | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/tcg/arm/tcg-target.c.inc b/tcg/arm/tcg-target.c.inc index 8a20224dd1..b6ef279cae 100644 --- a/tcg/arm/tcg-target.c.inc +++ b/tcg/arm/tcg-target.c.inc @@ -34,7 +34,6 @@ bool use_idiv_instructions; bool use_neon_instructions; #endif -/* ??? Ought to think about changing CONFIG_SOFTMMU to always defined. */ #ifdef CONFIG_DEBUG_TCG static const char * const tcg_target_reg_names[TCG_TARGET_NB_REGS] = { "%r0", "%r1", "%r2", "%r3", "%r4", "%r5", "%r6", "%r7", @@ -1397,16 +1396,9 @@ static TCGReg tcg_out_tlb_read(TCGContext *s, TCGReg addrlo, TCGReg addrhi, int cmp_off = (is_load ? offsetof(CPUTLBEntry, addr_read) : offsetof(CPUTLBEntry, addr_write)); int fast_off = TLB_MASK_TABLE_OFS(mem_index); - unsigned s_bits = opc & MO_SIZE; - unsigned a_bits = get_alignment_bits(opc); - - /* - * We don't support inline unaligned acceses, but we can easily - * support overalignment checks. - */ - if (a_bits < s_bits) { - a_bits = s_bits; - } + unsigned s_mask = (1 << (opc & MO_SIZE)) - 1; + unsigned a_mask = (1 << get_alignment_bits(opc)) - 1; + TCGReg t_addr; /* Load env_tlb(env)->f[mmu_idx].{mask,table} into {r0,r1}. */ tcg_out_ldrd_8(s, COND_AL, TCG_REG_R0, TCG_AREG0, fast_off); @@ -1441,27 +1433,32 @@ static TCGReg tcg_out_tlb_read(TCGContext *s, TCGReg addrlo, TCGReg addrhi, /* * Check alignment, check comparators. - * Do this in no more than 3 insns. Use MOVW for v7, if possible, + * Do this in 2-4 insns. Use MOVW for v7, if possible, * to reduce the number of sequential conditional instructions. * Almost all guests have at least 4k pages, which means that we need * to clear at least 9 bits even for an 8-byte memory, which means it * isn't worth checking for an immediate operand for BIC. */ + /* For unaligned accesses, test the page of the last byte. */ + t_addr = addrlo; + if (a_mask < s_mask) { + t_addr = TCG_REG_R0; + tcg_out_dat_imm(s, COND_AL, ARITH_ADD, t_addr, + addrlo, s_mask - a_mask); + } if (use_armv7_instructions && TARGET_PAGE_BITS <= 16) { - tcg_target_ulong mask = ~(TARGET_PAGE_MASK | ((1 << a_bits) - 1)); - - tcg_out_movi32(s, COND_AL, TCG_REG_TMP, mask); + tcg_out_movi32(s, COND_AL, TCG_REG_TMP, ~(TARGET_PAGE_MASK | a_mask)); tcg_out_dat_reg(s, COND_AL, ARITH_BIC, TCG_REG_TMP, - addrlo, TCG_REG_TMP, 0); + t_addr, TCG_REG_TMP, 0); tcg_out_dat_reg(s, COND_AL, ARITH_CMP, 0, TCG_REG_R2, TCG_REG_TMP, 0); } else { - if (a_bits) { - tcg_out_dat_imm(s, COND_AL, ARITH_TST, 0, addrlo, - (1 << a_bits) - 1); + if (a_mask) { + tcg_debug_assert(a_mask <= 0xff); + tcg_out_dat_imm(s, COND_AL, ARITH_TST, 0, addrlo, a_mask); } - tcg_out_dat_reg(s, COND_AL, ARITH_MOV, TCG_REG_TMP, 0, addrlo, + tcg_out_dat_reg(s, COND_AL, ARITH_MOV, TCG_REG_TMP, 0, t_addr, SHIFT_IMM_LSR(TARGET_PAGE_BITS)); - tcg_out_dat_reg(s, (a_bits ? COND_EQ : COND_AL), ARITH_CMP, + tcg_out_dat_reg(s, (a_mask ? COND_EQ : COND_AL), ARITH_CMP, 0, TCG_REG_R2, TCG_REG_TMP, SHIFT_IMM_LSL(TARGET_PAGE_BITS)); } From patchwork Sat Jan 8 06:33:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 530696 Delivered-To: patch@linaro.org Received: by 2002:ad5:544f:0:0:0:0:0 with SMTP id a15csp990453imp; Fri, 7 Jan 2022 23:42:25 -0800 (PST) X-Google-Smtp-Source: ABdhPJyZ4J+nbv/Pl0gg1DMID4AVshg1lao9T9NRnAbAM508oOd2sffrTvgMRtLb4HuEiYRFr6tq X-Received: by 2002:a25:b110:: with SMTP id g16mr72903559ybj.337.1641627745737; Fri, 07 Jan 2022 23:42:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641627745; cv=none; d=google.com; s=arc-20160816; b=t9TPDYvPqA3Lyo4IZaD1MF7Ry+nMsHz+huv+dIsZ2GV5AmvqPaxXS4XF3AV/6WkBOq q9rVqLLY9izGbwFtG4otcxOOmI+yrpxPxLfYl57NF28AIE374TWQ9CG9zn18lpUOAdWG 1g/nqMQH7IcRJXXNssFjQ7lYwXgOLcJTgQfR6pI2Ygsuof3GXvhsSl/6P8SGJc6b2I12 zBRiEvluXURnyEZoEshi7CJm41mMhk72Qw4TbjI6LIVgk6ERXXuDFoXZhyAG98lqDW8H y+N7uAH4h33MzBuTwdxvwaX1FiMFzItKTgBkOOgmRjU/X3lKMVmF+HJp6T39ywrT9s8a YIFg== 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=n8gyEPwJzcgJlBpee50d2KiUG6+KHxHBpSh7KBn9vpk=; b=BxYkMPOFTTC88oexh28L+sDKMYwiLTYFn2RquwYnjjx/+m5GmwlPE5fjiqz67qc2/O zUg4VmK/bYMKZL0ux/igWLS1cFFlqJKx9nE3DeogiKWBZGxX/gzGWsYdyHBng1PyDnEh GDRRqnKaAQ14APgFeBvbJ1MV8HpU56tycbsKfB5WbDoDY/0zLy/zludAoR56tnVO3hQ5 jvjuYsl6ZiCCLQlxm/zCRia4484wHH3yf8Qr90Bv0aXsINQ7oQiD8FU3PQ3sjxPxZk7/ n4yAdyxobbEpfJQcnYR1o785umHt+6XhCiItlkwed/d1D7PcpTst8x1iN0LJ6+XUmGHv 5GBw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=TPdJ0Xdt; 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=pass (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 v35si588424ybd.704.2022.01.07.23.42.25 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 07 Jan 2022 23:42:25 -0800 (PST) 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=pass header.i=@linaro.org header.s=google header.b=TPdJ0Xdt; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:59238 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n66Mr-0007Oj-6c for patch@linaro.org; Sat, 08 Jan 2022 02:42:25 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57740) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n65IE-0001ME-Pd for qemu-devel@nongnu.org; Sat, 08 Jan 2022 01:33:36 -0500 Received: from [2607:f8b0:4864:20::102b] (port=50764 helo=mail-pj1-x102b.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1n65I7-0003cv-6P for qemu-devel@nongnu.org; Sat, 08 Jan 2022 01:33:28 -0500 Received: by mail-pj1-x102b.google.com with SMTP id gp5so7109505pjb.0 for ; Fri, 07 Jan 2022 22:33:26 -0800 (PST) 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=n8gyEPwJzcgJlBpee50d2KiUG6+KHxHBpSh7KBn9vpk=; b=TPdJ0Xdt8DFWsKDC9mvsysDkQ45FGcn0BTCRF7mMS80dzmEp2pO7AawXHuNhsxSOlP 7QlfvRK01fG3mcSRNCkEecrRD2F4HQPMP18cHCIEX5eyT7FWYFSDUmta8hxt5iyu7yT0 3dewr5P5sxiBMWUstXopFgQgYW1kQ+zQCGlSv+NCDlPaapVSxLVCfyypn8r9D134vg+z yJtRtl+cA95OhWMEGXGLw+yWSx6NCPi2zOhzkNlLcUMu5yvLJnGPCph2KgyS/4IscZNM lQmJCgl/W6KshdIwIuw/lSRZwnoFGIB1Kt4Yg9QO9Z+YJk7xeg9coQGvTRPCIZ0qNIVm voSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=n8gyEPwJzcgJlBpee50d2KiUG6+KHxHBpSh7KBn9vpk=; b=sQvVLAUIaO8SZbBARyi0gQpJyoMxIhU9Fq0btIZHtTK5msYtUX9HOxV7XPCQjZy2OD H0fcq3xlAcYCzuKvbAj2CngLTuj9eGB9i7fDU5J+0luNjfk6yQMo8dvTAPhUo8mu6e9v DyHNj/y+gLOGG0HNbjW5L5BsO30sbEZm4BFH1fFfx+5tuIdlHxPWEBEvChB6Rn5ZlcnA KnW/uKpg7d9k5QeQiOKTcA0MA17+kXwJK0Nxi0GtqZcAJy0N4N/XfejQs3Q6X5uIs6f2 hVLqerdGUR3nLTiM4NRM/T33MZmH5lwaeHKUGMua9LFApvVN/34G8mH0kRa/NkPH0qMH Fkgg== X-Gm-Message-State: AOAM531SyjBVsTUPC6hG0DSQlSj1cqc6xdjnR67dkjaSUGkQDg1tE6G1 RT8/pbykfLEkdx5QiNqjjuYIVlYCk2n37A== X-Received: by 2002:a17:90b:3ec5:: with SMTP id rm5mr19449380pjb.100.1641623605934; Fri, 07 Jan 2022 22:33:25 -0800 (PST) Received: from localhost.localdomain (174-21-75-75.tukw.qwest.net. [174.21.75.75]) by smtp.gmail.com with ESMTPSA id s7sm834760pfu.133.2022.01.07.22.33.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Jan 2022 22:33:24 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 6/7] tcg/arm: Reserve a register for guest_base Date: Fri, 7 Jan 2022 22:33:12 -0800 Message-Id: <20220108063313.477784-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220108063313.477784-1-richard.henderson@linaro.org> References: <20220108063313.477784-1-richard.henderson@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2607:f8b0:4864:20::102b (failed) Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102b.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Reserve a register for the guest_base using aarch64 for reference. By doing so, we do not have to recompute it for every memory load. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- tcg/arm/tcg-target.c.inc | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/tcg/arm/tcg-target.c.inc b/tcg/arm/tcg-target.c.inc index b6ef279cae..1c00311877 100644 --- a/tcg/arm/tcg-target.c.inc +++ b/tcg/arm/tcg-target.c.inc @@ -84,6 +84,9 @@ static const int tcg_target_call_oarg_regs[2] = { #define TCG_REG_TMP TCG_REG_R12 #define TCG_VEC_TMP TCG_REG_Q15 +#ifndef CONFIG_SOFTMMU +#define TCG_REG_GUEST_BASE TCG_REG_R11 +#endif typedef enum { COND_EQ = 0x0, @@ -1590,7 +1593,8 @@ static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *lb) static void tcg_out_qemu_ld_index(TCGContext *s, MemOp opc, TCGReg datalo, TCGReg datahi, - TCGReg addrlo, TCGReg addend) + TCGReg addrlo, TCGReg addend, + bool scratch_addend) { /* Byte swapping is left to middle-end expansion. */ tcg_debug_assert((opc & MO_BSWAP) == 0); @@ -1616,7 +1620,7 @@ static void tcg_out_qemu_ld_index(TCGContext *s, MemOp opc, if (get_alignment_bits(opc) >= MO_64 && (datalo & 1) == 0 && datahi == datalo + 1) { tcg_out_ldrd_r(s, COND_AL, datalo, addrlo, addend); - } else if (datalo != addend) { + } else if (scratch_addend) { tcg_out_ld32_rwb(s, COND_AL, datalo, addend, addrlo); tcg_out_ld32_12(s, COND_AL, datahi, addend, 4); } else { @@ -1700,14 +1704,14 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is64) label_ptr = s->code_ptr; tcg_out_bl_imm(s, COND_NE, 0); - tcg_out_qemu_ld_index(s, opc, datalo, datahi, addrlo, addend); + tcg_out_qemu_ld_index(s, opc, datalo, datahi, addrlo, addend, true); add_qemu_ldst_label(s, true, oi, datalo, datahi, addrlo, addrhi, s->code_ptr, label_ptr); #else /* !CONFIG_SOFTMMU */ if (guest_base) { - tcg_out_movi(s, TCG_TYPE_PTR, TCG_REG_TMP, guest_base); - tcg_out_qemu_ld_index(s, opc, datalo, datahi, addrlo, TCG_REG_TMP); + tcg_out_qemu_ld_index(s, opc, datalo, datahi, + addrlo, TCG_REG_GUEST_BASE, false); } else { tcg_out_qemu_ld_direct(s, opc, datalo, datahi, addrlo); } @@ -1716,7 +1720,8 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is64) static void tcg_out_qemu_st_index(TCGContext *s, ARMCond cond, MemOp opc, TCGReg datalo, TCGReg datahi, - TCGReg addrlo, TCGReg addend) + TCGReg addrlo, TCGReg addend, + bool scratch_addend) { /* Byte swapping is left to middle-end expansion. */ tcg_debug_assert((opc & MO_BSWAP) == 0); @@ -1736,9 +1741,14 @@ static void tcg_out_qemu_st_index(TCGContext *s, ARMCond cond, MemOp opc, if (get_alignment_bits(opc) >= MO_64 && (datalo & 1) == 0 && datahi == datalo + 1) { tcg_out_strd_r(s, cond, datalo, addrlo, addend); - } else { + } else if (scratch_addend) { tcg_out_st32_rwb(s, cond, datalo, addend, addrlo); tcg_out_st32_12(s, cond, datahi, addend, 4); + } else { + tcg_out_dat_reg(s, cond, ARITH_ADD, TCG_REG_TMP, + addend, addrlo, SHIFT_IMM_LSL(0)); + tcg_out_st32_12(s, cond, datalo, TCG_REG_TMP, 0); + tcg_out_st32_12(s, cond, datahi, TCG_REG_TMP, 4); } break; default: @@ -1801,7 +1811,8 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is64) mem_index = get_mmuidx(oi); addend = tcg_out_tlb_read(s, addrlo, addrhi, opc, mem_index, 0); - tcg_out_qemu_st_index(s, COND_EQ, opc, datalo, datahi, addrlo, addend); + tcg_out_qemu_st_index(s, COND_EQ, opc, datalo, datahi, + addrlo, addend, true); /* The conditional call must come last, as we're going to return here. */ label_ptr = s->code_ptr; @@ -1811,9 +1822,8 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is64) s->code_ptr, label_ptr); #else /* !CONFIG_SOFTMMU */ if (guest_base) { - tcg_out_movi(s, TCG_TYPE_PTR, TCG_REG_TMP, guest_base); - tcg_out_qemu_st_index(s, COND_AL, opc, datalo, - datahi, addrlo, TCG_REG_TMP); + tcg_out_qemu_st_index(s, COND_AL, opc, datalo, datahi, + addrlo, TCG_REG_GUEST_BASE, false); } else { tcg_out_qemu_st_direct(s, opc, datalo, datahi, addrlo); } @@ -2955,6 +2965,13 @@ static void tcg_target_qemu_prologue(TCGContext *s) tcg_out_mov(s, TCG_TYPE_PTR, TCG_AREG0, tcg_target_call_iarg_regs[0]); +#ifndef CONFIG_SOFTMMU + if (guest_base) { + tcg_out_movi(s, TCG_TYPE_PTR, TCG_REG_GUEST_BASE, guest_base); + tcg_regset_set_reg(s->reserved_regs, TCG_REG_GUEST_BASE); + } +#endif + tcg_out_b_reg(s, COND_AL, tcg_target_call_iarg_regs[1]); /* From patchwork Sat Jan 8 06:33:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 530698 Delivered-To: patch@linaro.org Received: by 2002:ad5:544f:0:0:0:0:0 with SMTP id a15csp993397imp; Fri, 7 Jan 2022 23:48:32 -0800 (PST) X-Google-Smtp-Source: ABdhPJxQEYGWpUMbIrITjFsFhZXa/2EmuFaRlju+4vRCcX0c6FtTSXjMOISRKD5F/UDyfSmgV2QY X-Received: by 2002:a25:6d06:: with SMTP id i6mr58213701ybc.444.1641628112677; Fri, 07 Jan 2022 23:48:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641628112; cv=none; d=google.com; s=arc-20160816; b=GwyDq0tB/s4U/n+qWubHbMyHCZZ1SUJ0/w0SCGfi5cpIL68gkgQUfKoBscfVtlJkDb zAdLbDD2Yv9jvBVK+D+k9ivzoYisJo2KR7BjZr0mBSw/ZFrLl/4XWM3mawL6UDAAwpaY QvDfWDNKuX66Z3Z79Uql8Z94IS7dHJgnOhnfONHHhKgEreO++CrGXy8csu9VDEwCv6n9 Lt3MB8x4/ohm8c2y+FYAD8bUIZqdKfWsJb/nr7eAHmvu5t4ckJKyCxwPD23K8+5QpxAp oAbcpAevyMMC7mP8X//1C5erwK3k+l755or9IHOJcW4u6zCpbl9gEE5khu8XFaPqTsxl 0/vg== 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=mVWQbudPOl/uR8TYUS3zfMkysmPkX3RNf4TSFjZ3tBg=; b=NkpDP928M42BlVPkzulcn+VTsWa7xufCH0ikts7ZsrkNuPqvKyjf7JU+WX4bADb+2+ x4LPXyPQQ0e37Zh4lPVK85Um6tekBtqyS47M+FBMJci7uN3P2Tgj9MXoC2smo2iE7bDt 1ZRnf4UOA0dfHcak86QAuGmWPdhpbovh6g62/YdGS74eKRvfJ5QxKttjTe/yUju0XDKx j5gsBzatIqGw68PbHQRfmfD4htWsCV3V8l8tV8toBWqAAxj1M6VifWQTh5YV0J793LVw BmNMtai1M93GSpGptOQfFTpXKtkdDMQqvRS619Ubd5tDgC4EKU+8dcRBf2UfrxmgEW2O jmyw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=iyphgsqx; 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=pass (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 r10si907552ybu.765.2022.01.07.23.48.32 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 07 Jan 2022 23:48:32 -0800 (PST) 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=pass header.i=@linaro.org header.s=google header.b=iyphgsqx; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:40096 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n66Sm-0005es-4f for patch@linaro.org; Sat, 08 Jan 2022 02:48:32 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57760) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n65IE-0001MF-PW for qemu-devel@nongnu.org; Sat, 08 Jan 2022 01:33:36 -0500 Received: from [2607:f8b0:4864:20::1031] (port=46666 helo=mail-pj1-x1031.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1n65I9-0003dC-RF for qemu-devel@nongnu.org; Sat, 08 Jan 2022 01:33:31 -0500 Received: by mail-pj1-x1031.google.com with SMTP id rj2-20020a17090b3e8200b001b1944bad25so8916094pjb.5 for ; Fri, 07 Jan 2022 22:33:29 -0800 (PST) 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=mVWQbudPOl/uR8TYUS3zfMkysmPkX3RNf4TSFjZ3tBg=; b=iyphgsqxYs01DBAEg6Ngp0VYmLKlgCkTd9dX14k40zGsCL4hU+D/Hw2lLDR0udXCE7 qHqET75hcHqo764JVB2xEmz0i6xm6B5MvixxFGYnLF6khTbmZh6j90E26bQUOy4LlasQ tRYsJL1USXc9ChFOOF3WPvXFEw4EyddTInT3GVFJlz5VG24bWFLbEs3eNATkHJuwwsCh uo+MoNBSrSHYPxHY3yZJWWnaOwdf+ihe3OdY2ElYEoKsABBK3Extv2dJszgK1vZrWEKI FQJl9mkjS9hiro3l85jk81sFPEjHCrUG7FCuAGtbt+J+sigxBWYXnDR1jrMH96rx5wca S5eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mVWQbudPOl/uR8TYUS3zfMkysmPkX3RNf4TSFjZ3tBg=; b=PV0dfA1Wy529ZQjEPerZchwJ5UyATQza0DKzNXp/IZN5RitWyiWar7z+L2cenOXcGQ uec/BTWVKdp3mlPMTtLxSFPBg1TrBb+EoDmpcNkFvY0uYT0FKbjMZ84y5T/5DevksRtV xEWi5ptrptFbnU3piwhWZUI71LM0GGY7YgYKcrwEC4urdH/rKsaVWIgmfd3wpHKfNdRE APWadC6X/tpannnmgtlN/1lcIWEG4AxzpRrbmjM704SOzxWfoz5YIuG6w7bAbVFawa68 /qXsoRxu1pqQauKaArf9RFhskGcgINmYuu3wYgzfewffkjBJCtvsJ1QL1TSBW/ZmHNzb Wp1g== X-Gm-Message-State: AOAM532YGN89He5A4eV+mbGM1iuBYzNSBb7UBgNxZyqCOQ0kuoD62820 h9Op3s3DTRqJDahOF/neU50MwZOeMR5rsQ== X-Received: by 2002:a17:902:7c15:b0:148:fddf:d828 with SMTP id x21-20020a1709027c1500b00148fddfd828mr24569119pll.2.1641623608606; Fri, 07 Jan 2022 22:33:28 -0800 (PST) Received: from localhost.localdomain (174-21-75-75.tukw.qwest.net. [174.21.75.75]) by smtp.gmail.com with ESMTPSA id s7sm834760pfu.133.2022.01.07.22.33.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Jan 2022 22:33:26 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 7/7] tcg/arm: Support raising sigbus for user-only Date: Fri, 7 Jan 2022 22:33:13 -0800 Message-Id: <20220108063313.477784-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220108063313.477784-1-richard.henderson@linaro.org> References: <20220108063313.477784-1-richard.henderson@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2607:f8b0:4864:20::1031 (failed) Received-SPF: pass client-ip=2607:f8b0:4864:20::1031; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1031.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- tcg/arm/tcg-target.h | 2 - tcg/arm/tcg-target.c.inc | 83 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 81 insertions(+), 4 deletions(-) diff --git a/tcg/arm/tcg-target.h b/tcg/arm/tcg-target.h index 1dd4cd5377..27c27a1f14 100644 --- a/tcg/arm/tcg-target.h +++ b/tcg/arm/tcg-target.h @@ -151,9 +151,7 @@ extern bool use_neon_instructions; /* not defined -- call should be eliminated at compile time */ void tb_target_set_jmp_target(uintptr_t, uintptr_t, uintptr_t, uintptr_t); -#ifdef CONFIG_SOFTMMU #define TCG_TARGET_NEED_LDST_LABELS -#endif #define TCG_TARGET_NEED_POOL_LABELS #endif diff --git a/tcg/arm/tcg-target.c.inc b/tcg/arm/tcg-target.c.inc index 1c00311877..1e336a0eea 100644 --- a/tcg/arm/tcg-target.c.inc +++ b/tcg/arm/tcg-target.c.inc @@ -23,6 +23,7 @@ */ #include "elf.h" +#include "../tcg-ldst.c.inc" #include "../tcg-pool.c.inc" int arm_arch = __ARM_ARCH; @@ -1289,8 +1290,6 @@ static void tcg_out_vldst(TCGContext *s, ARMInsn insn, } #ifdef CONFIG_SOFTMMU -#include "../tcg-ldst.c.inc" - /* helper signature: helper_ret_ld_mmu(CPUState *env, target_ulong addr, * int mmu_idx, uintptr_t ra) */ @@ -1589,6 +1588,74 @@ static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *lb) tcg_out_goto(s, COND_AL, qemu_st_helpers[opc & MO_SIZE]); return true; } +#else + +static void tcg_out_test_alignment(TCGContext *s, bool is_ld, TCGReg addrlo, + TCGReg addrhi, unsigned a_bits) +{ + unsigned a_mask = (1 << a_bits) - 1; + TCGLabelQemuLdst *label = new_ldst_label(s); + + label->is_ld = is_ld; + label->addrlo_reg = addrlo; + label->addrhi_reg = addrhi; + + /* We are expecting a_bits to max out at 7, and can easily support 8. */ + tcg_debug_assert(a_mask <= 0xff); + /* tst addr, #mask */ + tcg_out_dat_imm(s, COND_AL, ARITH_TST, 0, addrlo, a_mask); + + /* blne slow_path */ + label->label_ptr[0] = s->code_ptr; + tcg_out_bl_imm(s, COND_NE, 0); + + label->raddr = tcg_splitwx_to_rx(s->code_ptr); +} + +static bool tcg_out_fail_alignment(TCGContext *s, TCGLabelQemuLdst *l) +{ + if (!reloc_pc24(l->label_ptr[0], tcg_splitwx_to_rx(s->code_ptr))) { + return false; + } + + if (TARGET_LONG_BITS == 64) { + /* 64-bit target address is aligned into R2:R3. */ + if (l->addrhi_reg != TCG_REG_R2) { + tcg_out_mov(s, TCG_TYPE_I32, TCG_REG_R2, l->addrlo_reg); + tcg_out_mov(s, TCG_TYPE_I32, TCG_REG_R3, l->addrhi_reg); + } else if (l->addrlo_reg != TCG_REG_R3) { + tcg_out_mov(s, TCG_TYPE_I32, TCG_REG_R3, l->addrhi_reg); + tcg_out_mov(s, TCG_TYPE_I32, TCG_REG_R2, l->addrlo_reg); + } else { + tcg_out_mov(s, TCG_TYPE_I32, TCG_REG_R1, TCG_REG_R2); + tcg_out_mov(s, TCG_TYPE_I32, TCG_REG_R2, TCG_REG_R3); + tcg_out_mov(s, TCG_TYPE_I32, TCG_REG_R3, TCG_REG_R1); + } + } else { + tcg_out_mov(s, TCG_TYPE_I32, TCG_REG_R1, l->addrlo_reg); + } + tcg_out_mov(s, TCG_TYPE_PTR, TCG_REG_R0, TCG_AREG0); + + /* + * Tail call to the helper, with the return address back inline, + * just for the clarity of the debugging traceback -- the helper + * cannot return. We have used BLNE to arrive here, so LR is + * already set. + */ + tcg_out_goto(s, COND_AL, (const void *) + (l->is_ld ? helper_unaligned_ld : helper_unaligned_st)); + return true; +} + +static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *l) +{ + return tcg_out_fail_alignment(s, l); +} + +static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *l) +{ + return tcg_out_fail_alignment(s, l); +} #endif /* SOFTMMU */ static void tcg_out_qemu_ld_index(TCGContext *s, MemOp opc, @@ -1686,6 +1753,8 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is64) int mem_index; TCGReg addend; tcg_insn_unit *label_ptr; +#else + unsigned a_bits; #endif datalo = *args++; @@ -1709,6 +1778,10 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is64) add_qemu_ldst_label(s, true, oi, datalo, datahi, addrlo, addrhi, s->code_ptr, label_ptr); #else /* !CONFIG_SOFTMMU */ + a_bits = get_alignment_bits(opc); + if (a_bits) { + tcg_out_test_alignment(s, true, addrlo, addrhi, a_bits); + } if (guest_base) { tcg_out_qemu_ld_index(s, opc, datalo, datahi, addrlo, TCG_REG_GUEST_BASE, false); @@ -1798,6 +1871,8 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is64) int mem_index; TCGReg addend; tcg_insn_unit *label_ptr; +#else + unsigned a_bits; #endif datalo = *args++; @@ -1821,6 +1896,10 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is64) add_qemu_ldst_label(s, false, oi, datalo, datahi, addrlo, addrhi, s->code_ptr, label_ptr); #else /* !CONFIG_SOFTMMU */ + a_bits = get_alignment_bits(opc); + if (a_bits) { + tcg_out_test_alignment(s, true, addrlo, addrhi, a_bits); + } if (guest_base) { tcg_out_qemu_st_index(s, COND_AL, opc, datalo, datahi, addrlo, TCG_REG_GUEST_BASE, false);