From patchwork Fri Apr 28 06:12:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christoph_M=C3=BCllner?= X-Patchwork-Id: 55720 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 019193856DE0 for ; Fri, 28 Apr 2023 06:12:34 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-ej1-x630.google.com (mail-ej1-x630.google.com [IPv6:2a00:1450:4864:20::630]) by sourceware.org (Postfix) with ESMTPS id A033A3858CDA for ; Fri, 28 Apr 2023 06:12:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A033A3858CDA Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=vrull.eu Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=vrull.eu Received: by mail-ej1-x630.google.com with SMTP id a640c23a62f3a-953343581a4so1446260266b.3 for ; Thu, 27 Apr 2023 23:12:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vrull.eu; s=google; t=1682662334; x=1685254334; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=TnbD6pS8PI1PlB8PbXdXkfBiRAkxZeDyTsRvAGqVIQE=; b=a78cXtTcHThFa+A4fN1UI+Y161SkHglC/SyqegWmP5Ko/WezU980mK3P0GFghevTMb tflnDet5HoHJ+OSVwcyuteBlJcUQwtxYZI92VpmGUyawF4jxPhmNgS/Ib1TFyzMNqTv2 5IeNIzwcKgpFBqMJwlid3X/zO+P4g37NqfDEkBQKO6ZHwLWamT2zdr3hpDnShkmf2scu OkjYykt/dLS1DzvjK323bMhfmzXyl8eDJzVn1KPpkdf9h7bw40GC9oLOabGrd7WDxlx+ /YhgKhw8cRuccOA/FMWjYgDC60P4Vr3bmjlAAQHlclK36dqCg75oXP6U99fIyLj9jNZW fFtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682662334; x=1685254334; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=TnbD6pS8PI1PlB8PbXdXkfBiRAkxZeDyTsRvAGqVIQE=; b=WKVGwjHieXz1Ne0Ylfbumv3BZXIQrQxjI43N+OePTiDYPQnDgxo1Lana1johmbKpre dI62Qz5CoGD68qkpDIh461uwL84W9/0jskBnSjc470TUpfZGM+EOrQE3YxskUKovisvP Y8QxjzUZVVM84IGk8MCL+9KAtq645BjaEYUDxhI54PUrRNovVq7S9K2ga++tegjNJFnf yNp9mrV84GGF0jJ5S0RhZs0x6yFVOkhua8UPNlg+bs7LIZ/12ro78Oe4EJfl3wQTUuUJ 6Cf4eoXZvwTPNM4q/+MZW0jVZQ6OoEewicqSwZWteHEuGau+0NU3HEycl5LuYfw3a1xW NuBw== X-Gm-Message-State: AC+VfDyb842lJ7PTNHNXlRQJfObYAOKMU3E04VM6kl4a7NNxT+KPWvyB ywpdQLto9kn967f9/oGZz5c5HyBYlo0MRvBVnno= X-Google-Smtp-Source: ACHHUZ5HhUpBm6PPOeCIU9n3+pjJACHAg9LR2TqE+Fv46E8UwFoKCqY7UQudI9zmeN7hThXz8GB6Zg== X-Received: by 2002:a17:907:1625:b0:94f:8f37:d54 with SMTP id hb37-20020a170907162500b0094f8f370d54mr3791076ejc.44.1682662333684; Thu, 27 Apr 2023 23:12:13 -0700 (PDT) Received: from beast.fritz.box (62-178-148-172.cable.dynamic.surfer.at. [62.178.148.172]) by smtp.gmail.com with ESMTPSA id x20-20020aa7d394000000b00504803f4071sm8669431edq.44.2023.04.27.23.12.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Apr 2023 23:12:12 -0700 (PDT) From: Christoph Muellner To: gcc-patches@gcc.gnu.org, Kito Cheng , Jim Wilson , Palmer Dabbelt , Andrew Waterman , Philipp Tomsich , Cooper Qu , Lifang Xia , Yunhai Shang , Zhiwei Liu Cc: =?utf-8?q?Christoph_M=C3=BCllner?= Subject: [PATCH 00/11] Improvements for XThead* support Date: Fri, 28 Apr 2023 08:12:01 +0200 Message-Id: <20230428061210.2988035-1-christoph.muellner@vrull.eu> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 X-Spam-Status: No, score=-6.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, JMQ_SPF_NEUTRAL, KAM_MANYTO, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" From: Christoph Müllner This series improves the support for the XThead* ISA extensions which are available e.g. on the T-Head XuanTie C906. The ISA spec can be found here: https://github.com/T-head-Semi/thead-extension-spec So far the following extension support has been merged in GCC: * XTheadBa * XTheadBb * XTheadBs * XTheadCmo * XTheadCondMov * XTheadMemPair This patchset builds upon that and contains the following changes: * Fix for sign/zero extension support for th.ext and th.extu This is actually a resend, that has not been merged. Jeff Law acked the patch last Friday. * Fix for CFA reg notes creation * Small fix for documentation of th_mempair_order_operands() * Introduction of Xmode macro * Two non-functional preparation commits for additional addressing modes * A patch that moves XThead* specific peephole passes in its own file * Support for XTheadMemIdx and its addressing modes * Support for XTheadFMemIdx, which is similar to XTheadMemIdx All patches have been tested and don't introduce regressions for RV32 or RV64. The patches have also been tested with SPEC CPU2017 on QEMU (multiple combinations of extensions). Support patches of these extensions for Binutils, QEMU, and LLVM have already been merged in the corresponding upstream projects. Support patches for XTheadMemIdx and XTheadFMemIdx have been submitted in an earlier series as well and received a couple of rework-comments from Kito. We rewrote the whole support to better meet the (reasonable) goal of keeping vendor extension code separated from RISC-V standard code and to address other issues. The resulting code is structured much better, which can be seen in the small number of changes that are required for the last patch (XTheadFMemIdx support). Christoph Müllner (11): riscv: xtheadbb: Add sign/zero extension support for th.ext and th.extu riscv: xtheadmempair: Fix CFA reg notes riscv: xtheadmempair: Fix doc for th_mempair_order_operands() riscv: thead: Adjust constraints of th_addsl INSN riscv: Simplify output of MEM addresses riscv: Define Xmode macro riscv: Move address classification info types to riscv-protos.h riscv: Prepare backend for index registers riscv: thead: Factor out XThead*-specific peepholes riscv: thead: Add support for the XTheadMemIdx ISA extension riscv: thead: Add support for the XTheadFMemIdx ISA extension gcc/config/riscv/constraints.md | 24 + gcc/config/riscv/peephole.md | 56 -- gcc/config/riscv/riscv-protos.h | 74 +++ gcc/config/riscv/riscv.cc | 87 ++- gcc/config/riscv/riscv.h | 13 +- gcc/config/riscv/riscv.md | 26 +- gcc/config/riscv/thead-peephole.md | 292 ++++++++++ gcc/config/riscv/thead.cc | 506 +++++++++++++++++- gcc/config/riscv/thead.md | 240 ++++++++- .../gcc.target/riscv/xtheadbb-ext-1.c | 67 +++ .../gcc.target/riscv/xtheadbb-extu-1.c | 67 +++ .../riscv/xtheadfmemidx-index-update.c | 20 + .../xtheadfmemidx-index-xtheadbb-update.c | 20 + .../riscv/xtheadfmemidx-index-xtheadbb.c | 22 + .../gcc.target/riscv/xtheadfmemidx-index.c | 22 + .../riscv/xtheadfmemidx-uindex-update.c | 20 + .../xtheadfmemidx-uindex-xtheadbb-update.c | 20 + .../riscv/xtheadfmemidx-uindex-xtheadbb.c | 24 + .../gcc.target/riscv/xtheadfmemidx-uindex.c | 25 + .../gcc.target/riscv/xtheadmemidx-helpers.h | 222 ++++++++ .../riscv/xtheadmemidx-index-update.c | 27 + .../xtheadmemidx-index-xtheadbb-update.c | 27 + .../riscv/xtheadmemidx-index-xtheadbb.c | 36 ++ .../gcc.target/riscv/xtheadmemidx-index.c | 36 ++ .../riscv/xtheadmemidx-modify-xtheadbb.c | 74 +++ .../gcc.target/riscv/xtheadmemidx-modify.c | 74 +++ .../riscv/xtheadmemidx-uindex-update.c | 27 + .../xtheadmemidx-uindex-xtheadbb-update.c | 27 + .../riscv/xtheadmemidx-uindex-xtheadbb.c | 44 ++ .../gcc.target/riscv/xtheadmemidx-uindex.c | 44 ++ 30 files changed, 2146 insertions(+), 117 deletions(-) create mode 100644 gcc/config/riscv/thead-peephole.md create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadbb-ext-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadbb-extu-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadfmemidx-index-update.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadfmemidx-index-xtheadbb-update.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadfmemidx-index-xtheadbb.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadfmemidx-index.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadfmemidx-uindex-update.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadfmemidx-uindex-xtheadbb-update.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadfmemidx-uindex-xtheadbb.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadfmemidx-uindex.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadmemidx-helpers.h create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadmemidx-index-update.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadmemidx-index-xtheadbb-update.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadmemidx-index-xtheadbb.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadmemidx-index.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadmemidx-modify-xtheadbb.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadmemidx-modify.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadmemidx-uindex-update.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadmemidx-uindex-xtheadbb-update.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadmemidx-uindex-xtheadbb.c create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadmemidx-uindex.c