From patchwork Thu May 25 23:25:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685631 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623054wrt; Thu, 25 May 2023 16:27:38 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4gB0M7jUi9dO3yPz3NGcsiIaZhkcw51R45gd+yQVz1zuHhj+Y6UkyT3cN/EnyEmF9IFyd1 X-Received: by 2002:a05:620a:3f06:b0:75b:23a0:e7e6 with SMTP id tx6-20020a05620a3f0600b0075b23a0e7e6mr263573qkn.71.1685057258533; Thu, 25 May 2023 16:27:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057258; cv=none; d=google.com; s=arc-20160816; b=k0cR4jfWRpbCkd6oBMtiq0XnGW+0efp9nOW7nbEXtTTNC8CJrqeGLTJ+EKEuOCdb4g gToZSC0A6pPB/kb6F5gezh8kZxM3wZeMFtpIJG7F4xRWiXby4WTBBj0+89nm4cLnGgJ1 7uDJE5h6xEXv6nLXJO/zmEeV7K6GYFCRiWdJltFR5JuQGNrDcElDnGY91PO26letEDCc 0PJCUjRuebWNpDLb8CcNGnxAwgIW5VNU6eBkrOLThRV/qDd6jgnbnLnV5mqaXkmZnecH ytU5teBb9s4fu3fW5HUMWFggz7hp8a9bnAwRlseRdhoyRt3CrvgnM+lRrZ1Kgo5EaS6c CK9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=CpvW00ddRwDH07plculUro7MWZapiIBGBi2vNxmqeJQ=; b=XXJyvBMqU2kyoGiTgkj/LgCQBbIb7lW8V1lsYmSp5P616oIytKyTMm0gYOdaLMQAvf LciU1DwvqYOpKn60CCS7NdZwXKazUIDQxBqyrkuWJFhNK4F5jeFNPLR3rCxt/fn5JMYQ TPabgbEWathNqt3768OB3MH63F5uipOOs1VnSw+/sWsp578NbQica8R19cjuECxXakws Arh/9breid06fAJBZh/F4mUbLa8eCZpvTRHiFWV5PV69fyJazgvHWS/wukxFAmUSNSgs iwb0mzVyNZUcmHC4wr6j6QWQcsDUopVZdryNRZr00m/rm8aLrMWWv92AhZAc7o+R72bz hFBQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NmLT9cUC; 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 fo14-20020ad45f0e000000b005ef676dbf8dsi951794qvb.96.2023.05.25.16.27.38 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:27:38 -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=pass header.i=@linaro.org header.s=google header.b=NmLT9cUC; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLa-0005rT-Lr; Thu, 25 May 2023 19:26:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLP-0005mW-QS for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:12 -0400 Received: from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLJ-0005kk-Sc for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:07 -0400 Received: by mail-pf1-x436.google.com with SMTP id d2e1a72fcca58-64d5b4c3ffeso246915b3a.2 for ; Thu, 25 May 2023 16:26:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057160; x=1687649160; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=CpvW00ddRwDH07plculUro7MWZapiIBGBi2vNxmqeJQ=; b=NmLT9cUCjY7lmLmkbl/x9Mf79s4BA4rcDsWaTasq5DcYrcbZ2kkUm/WSTPZRK/cbGz RAj0xtCdCVeXPNmHzAR/hvW6mBuliYKkDxR8wL8LxxYXZxKVg0Af2+eBhz/gjLEWp4gO A0GbAniNNmhDBkkO1tVZOqQ3fdK5oLBRP+Ex4WP8oAaNNRT0GbvVStmClfFIVIQ4N7t/ R5dMMJ8WTdR4bfs+gG8ldSpuvoFXck84CLHx8id68dEu8Hw75p1DfqyRxlhe/T6RlL+1 XdgQUAzgoEWsrWWPF1LSwDxmITNdhV78TymWbbgvDTSKjJqUoOOoZ3fKrog8tuM0wra/ z23g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057160; x=1687649160; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CpvW00ddRwDH07plculUro7MWZapiIBGBi2vNxmqeJQ=; b=jaBiPmeZOIMDyjuf3ZEEqW2FjGqDwIUD8Y1w/XfCZ82zn5gyBZOJLltudionZhtSsx WZhmivN76tdHg3FPUnW8hIkgZf+f5HUl3CCDkzAqD+RpDHMvT+GqgYfkz2wdewKV/vbc bf4ND1W8HeUZ9ArHsIjjRfgN/6iYVZhnAmxYs4R89IOOxdxoI5RWxJeWQOME7HZS5WJr AP56C7LKOFQUe7ArmU+Ro4LVxKeDNmVoevYS3rbe09LbtgS2brabX4FtgnkLKdRh2sO5 akioRBL6QG/gvwtqnDC3nEYz2KaZDaQuzOWS+L2HKnOWyAOhmvVP4VwqDWWJsY4TYMxc Tbmg== X-Gm-Message-State: AC+VfDym1Jj5Ho8GE4i9RMzHAIysqxPtCa/tJ6Olp1QGvnqK2DHQ8ymz HEaSSFH7JpdOesaamy9OXK1m2RGIKVOPr3RhXkA= X-Received: by 2002:a17:903:482:b0:1ad:e633:ee96 with SMTP id jj2-20020a170903048200b001ade633ee96mr290051plb.55.1685057160416; Thu, 25 May 2023 16:26:00 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.25.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v2 01/20] target/arm: Add commentary for CPUARMState.exclusive_high Date: Thu, 25 May 2023 16:25:39 -0700 Message-Id: <20230525232558.1758967-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::436; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x436.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Document the meaning of exclusive_high in a big-endian context, and why we can't change it now. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- target/arm/cpu.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index d469a2637b..4e16eab82e 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -677,8 +677,15 @@ typedef struct CPUArchState { uint64_t zcr_el[4]; /* ZCR_EL[1-3] */ uint64_t smcr_el[4]; /* SMCR_EL[1-3] */ } vfp; + uint64_t exclusive_addr; uint64_t exclusive_val; + /* + * Contains the 'val' for the second 64-bit register of LDXP, which comes + * from the higher address, not the high part of a complete 128-bit value. + * This is perhaps confusingly named, but the name is now baked into the + * migration format. + */ uint64_t exclusive_high; /* iwMMXt coprocessor state. */ From patchwork Thu May 25 23:25:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685636 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623338wrt; Thu, 25 May 2023 16:28:24 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4GhFmSomxb640nbx13eIoWerZIqvHIwrbkwyfeRG3lsRf4RyZbWCnx1kMWGVw68/2KENU3 X-Received: by 2002:ac8:5f93:0:b0:3f0:ab44:5b09 with SMTP id j19-20020ac85f93000000b003f0ab445b09mr226955qta.0.1685057304662; Thu, 25 May 2023 16:28:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057304; cv=none; d=google.com; s=arc-20160816; b=1COgvKccK49HIyW0JIyfm/24I9LpDidLcHf8/ADTioEqiF9b2Wrk5McAhAP0RnQlMj UYhWv4Sr8RLz9BypHA0+8GSiegLcPt/XatK1OXfT4Vf+/q9s16khKskEkmpq0z09jrsn qWBi7/29DU8uuLfhpkuIe1zvCNO12+tr87Q+prxQgCVwuWxiXRh0XbkiMs16HHwjBjQT 88FoT2bMWlTeWq4a7PUHbNJuuZu9LjlnBskLaZlh0D+PC8/WTCJqWA7tIVIYTFw10D+U M7Hv1mzhB/b4W+wpirdDCkurUZjEq1JdunzapPBQr/4Gl6G24+gMZwcRtUVS/6kog8fi qmNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=gvPlN3bWbcwG4Z4jy3Ej1l53fdQMXRJE0/Y4IwND3T4=; b=GPKw8bhaSQ9j9o1uvy95BoAJzKIyMMxQXXA7jNzzOmbd1uiiKNlYRlFUB57xiIDVv2 LLhZqWPDPLnRdH6kCjThYgBtFLxUqPg29A4LoyBnhPQOM6hLWPB/1phuDXNsPRnZnLEN RLWLCSYgH0i2IFUAxHuZ081+tsCBnrnvAGEV2X5rIXs8PuDf8hyRZNR4RwRDLwQAuOGX h+W/gVN/NHelsJwexbsnpe6+hSTsiHrCHQoqGzweHhmhGEvZb769xS9FuQqsmr88102a RmBIJNMQhWla5hAM9+NwAvZM84IyzF+d03yRNvBvUCIT+/GGT1qyYZdqYi4QUm7jHIY7 jQ5g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=kL7pSfnZ; 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 o14-20020ac85a4e000000b003e4e314252dsi907147qta.509.2023.05.25.16.28.24 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:28:24 -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=pass header.i=@linaro.org header.s=google header.b=kL7pSfnZ; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLY-0005ps-5P; Thu, 25 May 2023 19:26:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLP-0005mX-QO for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:12 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLK-0005kz-La for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:07 -0400 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-1ae763f9c0bso964205ad.2 for ; Thu, 25 May 2023 16:26:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057161; x=1687649161; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=gvPlN3bWbcwG4Z4jy3Ej1l53fdQMXRJE0/Y4IwND3T4=; b=kL7pSfnZ1zEcjAqurOxGtT+rC1Fyfwi8qQgeASL9LYTZoM2/Flo1KbOcRkzp1DFnKI sbHH31cmSa0vuXQIoY+vnUUg2hGQZQ8yLa5W8l4dpuKeyWtU8MAuzNu6tAhfAtYO9Ph1 yyLbYj3+eubo7JFb0FZ0aOZToSZodKA4vx0gov/IRrJfpbyL7dcI5U6wb5FiTc4JwV1V g6eCqywL4UfKb74Nc+nFRrQPJNZCw5AF00ByqHzjpx1Nv5cSIGHigNs2UTw2IqqtS4N9 n//mII291xkmB8+yOcOJymbd3ZZkDL1jXwI1li/S9qyH5Rjwt1QNEcx4p104FofLrbra wzWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057161; x=1687649161; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gvPlN3bWbcwG4Z4jy3Ej1l53fdQMXRJE0/Y4IwND3T4=; b=OmI4nBL5eP9R92ZJPbekjgIaF11eoyxNguTbpimBRHiyBJM6GbUN0NsSDmCiSjw4Iu PjXpjj6jjVP3GdLlGYWNDcylkwjtSbqsWatiS/tsvNPtsomGLFdlYP03FseXGdglfePD D/O4y/pB6JlZ4s9s79Q//TOw4F+pdFHY72ogtRbKcE/F9ajA8GFg5KmVzkYRZfWFlPwT lPoBQmkJ+o61SQk8M3uSxf8L4pxMAqbGHbzU6MIN2Dgct6VaxwbjaUBZq7qpK2NiTqIv yOo+9KJBLhfXBfo8g8hEKMKFcb2Ib/e9jlwYRj3pJ7OvXmkqZ0ZOCNqvHZVvcH9jJAj9 JJ/A== X-Gm-Message-State: AC+VfDzKlgu2J7OP0oE5SNW0Rp+Wava9Urifk1vX1DFter4UfAFyH/LS CaJM0ePWCsnrV8KP7kpHZ9MvTr0HFI4UI6gECzo= X-Received: by 2002:a17:903:22cd:b0:1aa:cf25:41d0 with SMTP id y13-20020a17090322cd00b001aacf2541d0mr422457plg.33.1685057161282; Thu, 25 May 2023 16:26:01 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v2 02/20] target/arm: Add feature test for FEAT_LSE2 Date: Thu, 25 May 2023 16:25:40 -0700 Message-Id: <20230525232558.1758967-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x634.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daudé --- target/arm/cpu.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 4e16eab82e..36ab66d0c3 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -3850,6 +3850,11 @@ static inline bool isar_feature_aa64_st(const ARMISARegisters *id) return FIELD_EX64(id->id_aa64mmfr2, ID_AA64MMFR2, ST) != 0; } +static inline bool isar_feature_aa64_lse2(const ARMISARegisters *id) +{ + return FIELD_EX64(id->id_aa64mmfr2, ID_AA64MMFR2, AT) != 0; +} + static inline bool isar_feature_aa64_fwb(const ARMISARegisters *id) { return FIELD_EX64(id->id_aa64mmfr2, ID_AA64MMFR2, FWB) != 0; From patchwork Thu May 25 23:25:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685629 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623012wrt; Thu, 25 May 2023 16:27:31 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ712WFLdp5iOtopKuzwzNQFQAyAwiemdufA2wB6BRZwozq5ABmTskn0PrCRk5fORSMwynJA X-Received: by 2002:a05:620a:7e4:b0:75b:23a0:dea8 with SMTP id k4-20020a05620a07e400b0075b23a0dea8mr256518qkk.38.1685057251041; Thu, 25 May 2023 16:27:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057251; cv=none; d=google.com; s=arc-20160816; b=gOXv4Zt3RobvPhEL88FOO7rzzWv8oGQREBYVDAHm2fthmgW0uiB5U5Lr46g5/JXRPR +d9ID365vxWy+zl1zXkyFd6rYIgBQQNASfxueJtZ7hH9Rq/nyYqQcTLlCYB8/Gcpy90T vuTjWyrBUaS9qeHby2valdJQ55JDXXB2O/YDLUTc4X5wwkQdODuU2tCpeoD9xJWa/PEu DCq8WATqa69nLi9T2LVlumQfZgpXqqysOaIDL+PuhV0zNLhFQvcOyGIC9CHQFnkd2RIB WPQh1EmXPXxr6UJvZijc8rHW4W0baoxtSjTqLDahOrGwpNUgf774YgzCGsTXzC00/m43 g0+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=mD6kr0K2WWzq0R0KMPRLKEJC7VZQzRuGxAGHXMfdo/k=; b=Kap1qR+YcCYbREZlkUu5+a0Eym+Psps0gyPHQq7kd0nPjSEMqjZnvb1arMmNlmN6gS gMCgaDoR9D/iXZ3+n0Fsj+O3d2qYE3gVcSTMZfudZ/JwluS0t0OxfY8EXnmmN0Aw9uE8 +F8r8tk9MkZwSONpahdnRx6+DF0ALSaklgG5XmT7GXiqoSIFdbkKZNXhQ7mw0fg8vzzQ V5Qe1PHM5IsC8mcS7IebEtl/xqOnODdRz/hhL2eIWTkkl0trnSQHl9sYkq3mdGkhJqdw yRenxznhYyoaLgqSVbktNWDFdfv34E5g6HBVdhLuw1KKFKOtI6JXDilaVrwUcZxtTyzZ wJHw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Pm6U3GL6; 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 fv4-20020a056214240400b00625b2e0fff0si651674qvb.321.2023.05.25.16.27.30 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:27:31 -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=pass header.i=@linaro.org header.s=google header.b=Pm6U3GL6; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLa-0005rF-3Y; Thu, 25 May 2023 19:26:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLR-0005mf-JK for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:12 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLL-0005lF-SR for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:09 -0400 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-1ae6dce19f7so913535ad.3 for ; Thu, 25 May 2023 16:26:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057162; x=1687649162; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mD6kr0K2WWzq0R0KMPRLKEJC7VZQzRuGxAGHXMfdo/k=; b=Pm6U3GL6RHGcNAx7Xr1MxoR2GCDU2yvZGygrFqTuiYD15qi0fOhk652GVBaOYQSaS4 AlO4CQ06Ey5LMe0qf/Am/xreAnOvuqpbEHNtg4An9fXlH4pSVQIgfvoSFYgo15AEi8d9 eku/dI2rq1PF5OAnAZb1yzTaBsz/apdM+6NSyPY8Cp+mrK328DDYNZ6PBTmi9RnACu1f 00s7dxZgLMBGkCrdh7Lc7Kldhswh7wOqZE3Tx6QZEgQmV7D1+GCsD+gJoiwOVkLtt4us m4rr5X9s7CxCSgiRhKrawQL2SHe+iYzi2a3QttFpHpPob0ZYxr62wlO1QPv7ZUQOJl5Y IA5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057162; x=1687649162; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mD6kr0K2WWzq0R0KMPRLKEJC7VZQzRuGxAGHXMfdo/k=; b=ZA/EikkXsdJ8EL9iJ2+Zq7wEa3tUVuK503oW/YBoP2eYTI8ou4+u4aZLIg6aD+PEsE d5AEFRaTzvCnIt7gdKoXoVqploobgvgd7PNMHXdmH1GIE/5I9zCV7XoFrnQyhjqvlN0P 8aofgjWBEMZn7sNkO19o0WgHS/fc2fxJaTZEON9yEsGR5QJL0qkXrlL/36BWpGFuYvef WSMgAFFWhzFMaxp0dMWt+isQB5Q+dDlNABa766br83lL5/QRWExoE3XHp7BvrD3py+kQ QPq3ppFtZ9IeTXIiyERJ5dgCL9bFzZ/F0AjOXLpeoatqnljJQQOCSk+SJxbtQtLDw5yi 1yjg== X-Gm-Message-State: AC+VfDwdauQ+5+/OCagZqt2EN1cnsBYcpxiTUwgBWiD23yixaQ1PT8Nk oubQPOK5g4M6ZAIoA4bcEDOhpKZ8sJu5yvUrjzE= X-Received: by 2002:a17:902:e5c9:b0:1ac:8ad0:1707 with SMTP id u9-20020a170902e5c900b001ac8ad01707mr546299plf.1.1685057162250; Thu, 25 May 2023 16:26:02 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v2 03/20] target/arm: Introduce finalize_memop_{atom,pair} Date: Thu, 25 May 2023 16:25:41 -0700 Message-Id: <20230525232558.1758967-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 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: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Let finalize_memop_atom be the new basic function, with finalize_memop and finalize_memop_pair testing FEAT_LSE2 to apply the appropriate atomicity. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Peter Maydell --- target/arm/tcg/translate.h | 39 +++++++++++++++++++++++++++++----- target/arm/tcg/translate-a64.c | 2 ++ target/arm/tcg/translate.c | 1 + 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h index a9d1f4adc2..9a33076c3d 100644 --- a/target/arm/tcg/translate.h +++ b/target/arm/tcg/translate.h @@ -85,6 +85,7 @@ typedef struct DisasContext { uint64_t features; /* CPU features bits */ bool aarch64; bool thumb; + bool lse2; /* Because unallocated encodings generate different exception syndrome * information from traps due to FP being disabled, we can't do a single * "is fp access disabled" check at a high level in the decode tree. @@ -552,12 +553,13 @@ static inline TCGv_ptr fpstatus_ptr(ARMFPStatusFlavour flavour) } /** - * finalize_memop: + * finalize_memop_atom: * @s: DisasContext * @opc: size+sign+align of the memory operation + * @atom: atomicity of the memory operation * - * Build the complete MemOp for a memory operation, including alignment - * and endianness. + * Build the complete MemOp for a memory operation, including alignment, + * endianness, and atomicity. * * If (op & MO_AMASK) then the operation already contains the required * alignment, e.g. for AccType_ATOMIC. Otherwise, this an optionally @@ -567,12 +569,39 @@ static inline TCGv_ptr fpstatus_ptr(ARMFPStatusFlavour flavour) * and this is applied here. Note that there is no way to indicate that * no alignment should ever be enforced; this must be handled manually. */ -static inline MemOp finalize_memop(DisasContext *s, MemOp opc) +static inline MemOp finalize_memop_atom(DisasContext *s, MemOp opc, MemOp atom) { if (s->align_mem && !(opc & MO_AMASK)) { opc |= MO_ALIGN; } - return opc | s->be_data; + return opc | atom | s->be_data; +} + +/** + * finalize_memop: + * @s: DisasContext + * @opc: size+sign+align of the memory operation + * + * Like finalize_memop_atom, but with default atomicity. + */ +static inline MemOp finalize_memop(DisasContext *s, MemOp opc) +{ + MemOp atom = s->lse2 ? MO_ATOM_WITHIN16 : MO_ATOM_IFALIGN; + return finalize_memop_atom(s, opc, atom); +} + +/** + * finalize_memop_pair: + * @s: DisasContext + * @opc: size+sign+align of the memory operation + * + * Like finalize_memop_atom, but with atomicity for a pair. + * C.f. Pseudocode for Mem[], operand ispair. + */ +static inline MemOp finalize_memop_pair(DisasContext *s, MemOp opc) +{ + MemOp atom = s->lse2 ? MO_ATOM_WITHIN16_PAIR : MO_ATOM_IFALIGN_PAIR; + return finalize_memop_atom(s, opc, atom); } /** diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 741a608739..967400ed68 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -14110,6 +14110,8 @@ static void aarch64_tr_init_disas_context(DisasContextBase *dcbase, tcg_debug_assert(dc->tbid & 1); #endif + dc->lse2 = dc_isar_feature(aa64_lse2, dc); + /* Single step state. The code-generation logic here is: * SS_ACTIVE == 0: * generate code with no special handling for single-stepping (except diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c index 7468476724..7a6a8029e5 100644 --- a/target/arm/tcg/translate.c +++ b/target/arm/tcg/translate.c @@ -9183,6 +9183,7 @@ static void arm_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs) dc->sme_trap_nonstreaming = EX_TBFLAG_A32(tb_flags, SME_TRAP_NONSTREAMING); } + dc->lse2 = false; /* applies only to aarch64 */ dc->cp_regs = cpu->cp_regs; dc->features = env->features; From patchwork Thu May 25 23:25:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685640 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623418wrt; Thu, 25 May 2023 16:28:44 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6QjorZJA8+e2wWVANopIDiH5AiDoVgxMh/xmsnBCkOPw6Hl1HCm/rbQl4aFXjCP4yUGH8X X-Received: by 2002:a05:620a:e8c:b0:75b:23a0:de87 with SMTP id w12-20020a05620a0e8c00b0075b23a0de87mr446626qkm.5.1685057324119; Thu, 25 May 2023 16:28:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057324; cv=none; d=google.com; s=arc-20160816; b=GaPjGBBnMkhi+ghbkvpAid3zhq5M0aTuUysi/cgOIZVaKMfJWB6Vs6YuspM0CFNRxP xAI84rOvfdS1yZbEpxR6WRWsxn4mwaOBBbsUCsTRME1d9vldfSS0MlwsczC1AzzF0lMi HTh4qR6xO9oYSp9/OM0FsGzrcBHDG505EY4gBJKjF4Eh6fwW10l7tU8LSJDX7WhhjBcX fM/f4lNtFcXHrs5Rqd1NHvAc92Stv0aAnZftfEb2qt/9LYCZN8vdAX5V8UtXo+xA9/qH GqP2YKmqkftpIRuN3sJn4v/2fuZfHtQcK+SSz01JeCvJA2pLOykd4SYEmjpDW7/gib6K vnow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=reNglzojAm/2eSC7ZTJRnNXnyOyaPQoOTSyZDoXpgF4=; b=q2U25OPOMKc3zKVWp1X1sKyFFZ0vp+Z1Sbnq9/HepulB0ax25RTsgnAXXIy2CWEB/t lLonUH+E2+YrFzd5KxIds18pH2hdra7pPKqmdwsg7/bw02kPGyYBPjjhr8sBolEaDGtU 97P6x1JoC4Z8utxQhX+0H4tS7bS78zj4wIlBeRAmnojfDzPOiWFe1vTv7Eaxu5F4pC3j vy0T5H9olZWyDVLGo/T/CVIFd0bKGXVSi8v4xQ2WqwKCOSJid1LT67/e0Cf3vT91SS33 nT0lx+JWnN2jgcugyZqe8bbmKB9aPgbRE3rCPvhQFk/MPJvWcwh+Sh3N4per07F466GM OJOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ttAFYgjU; 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 x10-20020a05620a12aa00b0075c9cb484edsi922752qki.628.2023.05.25.16.28.43 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:28:44 -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=pass header.i=@linaro.org header.s=google header.b=ttAFYgjU; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLY-0005qI-Vj; Thu, 25 May 2023 19:26:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLR-0005me-JP for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:12 -0400 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLO-0005lS-7z for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:09 -0400 Received: by mail-pg1-x533.google.com with SMTP id 41be03b00d2f7-51b33c72686so72345a12.1 for ; Thu, 25 May 2023 16:26:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057163; x=1687649163; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=reNglzojAm/2eSC7ZTJRnNXnyOyaPQoOTSyZDoXpgF4=; b=ttAFYgjUID5bqCY5HC/r3gQuI2aI9gNe+jagFjsluF337n7Lf025YSJ641UTid+hDq n6/IHd4juVDXp7WaoZR3Jov4xLHTDmKc86LHJoyhpht2wY7opNAiHeta9TDyBoclnLNX ueelr0BKoY8DHmyarT2HP7zYAypka3JN0rLCjfl5Q+JaoUkpybcNWxDEYjRNlhJ96aST UREOucQlIuTC49VvzkGm7N23bxtt3jkSrLaWM2PoRBj+IQxP6QwnY0cYCuB43G9T81MT brPPmXsF2YTRhWvKah0dao4f1cmovQjWFcVp5xjnnhFWauiJ9DKbU7h+jNRx6CYBz1GG CDqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057163; x=1687649163; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=reNglzojAm/2eSC7ZTJRnNXnyOyaPQoOTSyZDoXpgF4=; b=M1mR1KcxgzMcQkssXDSRvCncizUZlkI9z/hzD6JmDJVjS67MYs5s0idisWDTPvoRbG XSfETYvU+kJEeVN4zsA7x9DMm9CqDzXwOMAVggU1cUMh/sOc5b1VcBNF+IYK3VMR482n xpTPGd060qkHlxGieyu/nFzvhvkfWAyO8NsqysnQc/TX544btramGpJF3UTv/R6qIHZ/ qhsLX1twBt3zEsGjobVdR44DDVvMox2ITPosV9/f8cXONsFzUWbPBhhg85NmRWaoyRiy nfM8xJnXTkOROY0q7p4Tl0g9ACMbEcpcsk/rtjOIOTlbVjMI5wW+12iLWnbturKI0yxz LbAw== X-Gm-Message-State: AC+VfDwbuYWGoK6BH1Y38np2y3qWoesbdH9bmg8C5xQlEwDhCbNDGCZB lCijcYARQlXaWjeQnX17ghAZ9KE0KoNAnQmhdKE= X-Received: by 2002:a17:902:d2c9:b0:1a9:90bc:c3c6 with SMTP id n9-20020a170902d2c900b001a990bcc3c6mr464591plc.16.1685057162943; Thu, 25 May 2023 16:26:02 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v2 04/20] target/arm: Use tcg_gen_qemu_ld_i128 for LDXP Date: Thu, 25 May 2023 16:25:42 -0700 Message-Id: <20230525232558.1758967-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::533; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x533.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org While we don't require 16-byte atomicity here, using a single larger load simplifies the code, and makes it a closer match to STXP. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- target/arm/tcg/translate-a64.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 967400ed68..0e720f2612 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -2398,14 +2398,14 @@ static void gen_load_exclusive(DisasContext *s, int rt, int rt2, TCGv_i64 addr, int size, bool is_pair) { int idx = get_mem_index(s); - MemOp memop = s->be_data; + MemOp memop; g_assert(size <= 3); if (is_pair) { g_assert(size >= 2); if (size == 2) { /* The pair must be single-copy atomic for the doubleword. */ - memop |= MO_64 | MO_ALIGN; + memop = finalize_memop(s, MO_64 | MO_ALIGN); tcg_gen_qemu_ld_i64(cpu_exclusive_val, addr, idx, memop); if (s->be_data == MO_LE) { tcg_gen_extract_i64(cpu_reg(s, rt), cpu_exclusive_val, 0, 32); @@ -2415,21 +2415,30 @@ static void gen_load_exclusive(DisasContext *s, int rt, int rt2, tcg_gen_extract_i64(cpu_reg(s, rt2), cpu_exclusive_val, 0, 32); } } else { - /* The pair must be single-copy atomic for *each* doubleword, not - the entire quadword, however it must be quadword aligned. */ - memop |= MO_64; - tcg_gen_qemu_ld_i64(cpu_exclusive_val, addr, idx, - memop | MO_ALIGN_16); + /* + * The pair must be single-copy atomic for *each* doubleword, not + * the entire quadword, however it must be quadword aligned. + * Expose the complete load to tcg, for ease of tlb lookup, + * but indicate that only 8-byte atomicity is required. + */ + TCGv_i128 t16 = tcg_temp_new_i128(); - TCGv_i64 addr2 = tcg_temp_new_i64(); - tcg_gen_addi_i64(addr2, addr, 8); - tcg_gen_qemu_ld_i64(cpu_exclusive_high, addr2, idx, memop); + memop = finalize_memop_atom(s, MO_128 | MO_ALIGN_16, + MO_ATOM_IFALIGN_PAIR); + tcg_gen_qemu_ld_i128(t16, addr, idx, memop); + if (s->be_data == MO_LE) { + tcg_gen_extr_i128_i64(cpu_exclusive_val, + cpu_exclusive_high, t16); + } else { + tcg_gen_extr_i128_i64(cpu_exclusive_high, + cpu_exclusive_val, t16); + } tcg_gen_mov_i64(cpu_reg(s, rt), cpu_exclusive_val); tcg_gen_mov_i64(cpu_reg(s, rt2), cpu_exclusive_high); } } else { - memop |= size | MO_ALIGN; + memop = finalize_memop(s, size | MO_ALIGN); tcg_gen_qemu_ld_i64(cpu_exclusive_val, addr, idx, memop); tcg_gen_mov_i64(cpu_reg(s, rt), cpu_exclusive_val); } From patchwork Thu May 25 23:25:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685632 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623119wrt; Thu, 25 May 2023 16:27:48 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ54ZJ/TmE7sxTB/XqFcmttaSjq9zjdm18JObsrLVXFs+uF6O5QRqZkQvGFtageoT82OmEwi X-Received: by 2002:a05:620a:1aaa:b0:75b:23a0:e7c4 with SMTP id bl42-20020a05620a1aaa00b0075b23a0e7c4mr383795qkb.37.1685057268336; Thu, 25 May 2023 16:27:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057268; cv=none; d=google.com; s=arc-20160816; b=Ey1XXcyf4FlN+uexzei7hrUsqbNJVUFJFYqGHkv+Q+5Kzq6RQ2PAysUBsPQCfiev2j /ejgmALhfBwnCEAE6TCvhj9aknjkMHeLSSHlcZZ57N9rFrhJTTijXLCGu1R+XBhg4SU6 a5xo/ZkHE3vWd3fUjBgtlu6hvoPR7663tE/o1AWpfgglnmPJObLdleTpdKD3yuhPRovn Pja3ltZ4mh3DzOnW9aFV9Mfk14I8jdDJf4U6yH6BH+ocS0LDLmm1MvPbEgHf2SXfkyLP 9aoI3BnejdZbmZTz6VUI9h1Uyplpo77s+//3pnNNw+nMJbWRVK38ThZIveZAMIY+kpbB +CBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=rtSYCMxMp7gu1dlc7aLKdss5Sdhc6PP6/xIuz/FTNhg=; b=fjw+AxG1SQW/TEu/gOV4lrjCUuZ9kmVVZe6PGF/g5tpLPc1SKg1upkV4eNfOW7F5WR p4NFZF0WuxbkFHvwZLF86rm9Uk22TcfC1ZPJVjMTka234X8nugD3mejJqkVveo1+6dLz kPpkizuVJZ0DYjAJ3SoZcBAri0JJlUj7+2zAgMWNOiJ3AVoUXxg682rsfWPp1twxHooH Cuwmo8S7O30hBx0bQglasRYYeGBxmryjAvglLFi4DcHocoxDLNsfqQ/DaYnH6VkBsd4b g15nXmdUYKLAjJp+byLQTsvDDxTdkmAONzsBa/HoX5mfpEokaNhjh2OX2QU2BQyJhBIm yNSw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=jGXUk8G9; 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 c5-20020a05620a164500b0074a6c2570d1si930253qko.245.2023.05.25.16.27.48 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:27:48 -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=jGXUk8G9; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLg-0005uy-U6; Thu, 25 May 2023 19:26:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLV-0005mz-B4 for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:13 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLO-0005ld-Lw for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:10 -0400 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-1ae454844edso958755ad.1 for ; Thu, 25 May 2023 16:26:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057164; x=1687649164; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rtSYCMxMp7gu1dlc7aLKdss5Sdhc6PP6/xIuz/FTNhg=; b=jGXUk8G9TdikrwgLEjvP0EonH9TS/u7MWh3Oz6g/ocvBW+gBIUyXB0pLw7ZiSy7pPQ spH8b17JyMOtf/GWtmTZPP+mYKGt2IcQFRtzsBPHZdKYzNvc0DFnES/UnHDJzK78EtMZ SLCNqWLbXGeMTpYO3Eg/Kz3tHdjoVn54EOgol9wjRRLhO1IAknZ6DRDhhx5ALDvV6hp8 Wjs7v+I1+tyj06wxPv14e4PFrx+E2WelxBZ+ZJWBVLX0hu2OYLj3lLUQ3PeBylxfy7Dq oWcIxAsUDtTeDsLQB4yYFeoKcUsH8mPtFq0L+xVchPr483S4x/1SYBo9EKFNlr/IdICs mM0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057164; x=1687649164; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rtSYCMxMp7gu1dlc7aLKdss5Sdhc6PP6/xIuz/FTNhg=; b=Nn44cGMu5nuMwo4iFaf+Lx6pEid25Z/MKAqR4UmsETCJLBqFs5kug7f50OwzxeOegL o4/g/w3HRKwmYfKmfQYZGtL5sfkUX3EtnxrNXpwNBTNRYA6CPixtwP7ubGjeaHFng+tv OUU8vNBL6WvIBvPsPKaEczcjt4EJ7QNoGtpoyQi60DzzbsI7q4Q5O53Ueoq3y9jP9bsc S5PmBE4vQ+rH1WrxeC7psrPCvAraddwjoXq9QyvGM5BhLoB+UzBnsbo10pARs8+MKbg3 sp77q99pSG2+FAmSSOH2ixp1YZqkoC4bpx+RehKNHz996E2ZjusMD6RSuJXQE088uvE3 smNg== X-Gm-Message-State: AC+VfDwGkMK+pI1YEb7k+IDbtUrQWVi682wFnmdHAJ2we1UJnsX/HZVY 1i/mchA2Ll/N+KL+rh2L/4V9fjbMshUlIdFYEFw= X-Received: by 2002:a17:902:c3c6:b0:1af:bade:2b0a with SMTP id j6-20020a170902c3c600b001afbade2b0amr321794plj.3.1685057163695; Thu, 25 May 2023 16:26:03 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:03 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v2 05/20] target/arm: Use tcg_gen_qemu_{st, ld}_i128 for do_fp_{st, ld} Date: Thu, 25 May 2023 16:25:43 -0700 Message-Id: <20230525232558.1758967-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62b; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org While we don't require 16-byte atomicity here, using a single larger operation simplifies the code. Introduce finalize_memop_asimd for this. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- target/arm/tcg/translate.h | 24 +++++++++++++++++++++++ target/arm/tcg/translate-a64.c | 35 +++++++++++----------------------- 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h index 9a33076c3d..626cf07970 100644 --- a/target/arm/tcg/translate.h +++ b/target/arm/tcg/translate.h @@ -604,6 +604,30 @@ static inline MemOp finalize_memop_pair(DisasContext *s, MemOp opc) return finalize_memop_atom(s, opc, atom); } +/** + * finalize_memop_asimd: + * @s: DisasContext + * @opc: size+sign+align of the memory operation + * + * Like finalize_memop_atom, but with atomicity of AccessType_ASIMD. + */ +static inline MemOp finalize_memop_asimd(DisasContext *s, MemOp opc) +{ + /* + * In the pseudocode for Mem[], with AccessType_ASIMD, size == 16, + * if IsAligned(8), the first case provides separate atomicity for + * the pair of 64-bit accesses. If !IsAligned(8), the middle cases + * do not apply, and we're left with the final case of no atomicity. + * Thus MO_ATOM_IFALIGN_PAIR. + * + * For other sizes, normal LSE2 rules apply. + */ + if ((opc & MO_SIZE) == MO_128) { + return finalize_memop_atom(s, opc, MO_ATOM_IFALIGN_PAIR); + } + return finalize_memop(s, opc); +} + /** * asimd_imm_const: Expand an encoded SIMD constant value * diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 0e720f2612..6bb68618a0 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -921,26 +921,20 @@ static void do_fp_st(DisasContext *s, int srcidx, TCGv_i64 tcg_addr, int size) { /* This writes the bottom N bits of a 128 bit wide vector to memory */ TCGv_i64 tmplo = tcg_temp_new_i64(); - MemOp mop; + MemOp mop = finalize_memop_asimd(s, size); tcg_gen_ld_i64(tmplo, cpu_env, fp_reg_offset(s, srcidx, MO_64)); - if (size < 4) { - mop = finalize_memop(s, size); + if (size < MO_128) { tcg_gen_qemu_st_i64(tmplo, tcg_addr, get_mem_index(s), mop); } else { - bool be = s->be_data == MO_BE; - TCGv_i64 tcg_hiaddr = tcg_temp_new_i64(); TCGv_i64 tmphi = tcg_temp_new_i64(); + TCGv_i128 t16 = tcg_temp_new_i128(); tcg_gen_ld_i64(tmphi, cpu_env, fp_reg_hi_offset(s, srcidx)); + tcg_gen_concat_i64_i128(t16, tmplo, tmphi); - mop = s->be_data | MO_UQ; - tcg_gen_qemu_st_i64(be ? tmphi : tmplo, tcg_addr, get_mem_index(s), - mop | (s->align_mem ? MO_ALIGN_16 : 0)); - tcg_gen_addi_i64(tcg_hiaddr, tcg_addr, 8); - tcg_gen_qemu_st_i64(be ? tmplo : tmphi, tcg_hiaddr, - get_mem_index(s), mop); + tcg_gen_qemu_st_i128(t16, tcg_addr, get_mem_index(s), mop); } } @@ -952,24 +946,17 @@ static void do_fp_ld(DisasContext *s, int destidx, TCGv_i64 tcg_addr, int size) /* This always zero-extends and writes to a full 128 bit wide vector */ TCGv_i64 tmplo = tcg_temp_new_i64(); TCGv_i64 tmphi = NULL; - MemOp mop; + MemOp mop = finalize_memop_asimd(s, size); - if (size < 4) { - mop = finalize_memop(s, size); + if (size < MO_128) { tcg_gen_qemu_ld_i64(tmplo, tcg_addr, get_mem_index(s), mop); } else { - bool be = s->be_data == MO_BE; - TCGv_i64 tcg_hiaddr; + TCGv_i128 t16 = tcg_temp_new_i128(); + + tcg_gen_qemu_ld_i128(t16, tcg_addr, get_mem_index(s), mop); tmphi = tcg_temp_new_i64(); - tcg_hiaddr = tcg_temp_new_i64(); - - mop = s->be_data | MO_UQ; - tcg_gen_qemu_ld_i64(be ? tmphi : tmplo, tcg_addr, get_mem_index(s), - mop | (s->align_mem ? MO_ALIGN_16 : 0)); - tcg_gen_addi_i64(tcg_hiaddr, tcg_addr, 8); - tcg_gen_qemu_ld_i64(be ? tmplo : tmphi, tcg_hiaddr, - get_mem_index(s), mop); + tcg_gen_extr_i128_i64(tmplo, tmphi, t16); } tcg_gen_st_i64(tmplo, cpu_env, fp_reg_offset(s, destidx, MO_64)); From patchwork Thu May 25 23:25:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685645 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623545wrt; Thu, 25 May 2023 16:29:06 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4Ix81QeCfrBQUm1cuOKX7vpazdU0P4vsoymz1b6/ArZGjVL9lSUSE7IVpMqRfX8dVOaxlM X-Received: by 2002:a05:620a:408b:b0:75b:23a1:834c with SMTP id f11-20020a05620a408b00b0075b23a1834cmr422289qko.71.1685057346447; Thu, 25 May 2023 16:29:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057346; cv=none; d=google.com; s=arc-20160816; b=dFU8WFxtuk8XUKEsmBBqNph9BZXLVNOLjMHkWsUjwSygbAjUmfbiZ9F3yk6QpcH8Hg ZJNSTlG7q2UXpkUpHohmdbHHA7QBzbe/N3P09bMUsFj3xV6tli21T59zKWgw1IK171eC TAtVSPsZk80l1uhljydVH2siWJ5Xxe4T1FXUhjecoem4mAgUrd8AKDFL5JUM0poCM0cz W+5eX2fLduP88gsRA6Z9c6Y8+kWkQDJd4e9pIgPmmHN695kiIivPZrAxNZ2V0EGAHIFy oUYlBsDxXGhCsXUySOelcf+5/y+XO49PXkCdwnbCVpKVqynYBG7YWKxGRfHe+SgSgwc6 Vm/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=QJBfhL5s/JujOKO92cVuqA077g93rVli8DiADyiaM+o=; b=tZOSRsDwNm2x4Kwg//Q0l1V7DIMSKNYS4EIyOkLX+y4HZfABoux2QOCdaNYJI0aLBf hrwVpcbhIY0GY/RXZqizHSfWMyJrP+zGRdk7/UM+J94kCP6+YVgSqp8PR37sWvIJYVwc awO61VzNOUdZjqV1nfowO/FDKNmov7wIR300RfE5Y/1EGHL2kT98FW31OwSQImHccOuB OTpGDIZVvNN+SirnKZ3BVLnZ86WYSjCTC0MM9/hE2t6N7FYYXuVIkryRDs1J1obtnvvc w51kdZ0UTe28P92LgFFNhFzmpnGttC6iD/0/QGq8u4mjVDl/xYa0+bzkgAJqfxi1J6wt dCog== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=A5hvo23g; 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 jm5-20020ad45ec5000000b006253099010asi914197qvb.588.2023.05.25.16.29.06 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:29:06 -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=pass header.i=@linaro.org header.s=google header.b=A5hvo23g; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLZ-0005qb-8y; Thu, 25 May 2023 19:26:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLR-0005mg-Jl for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:12 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLO-0005lq-L8 for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:08 -0400 Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-64d604cc0aaso262797b3a.2 for ; Thu, 25 May 2023 16:26:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057164; x=1687649164; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QJBfhL5s/JujOKO92cVuqA077g93rVli8DiADyiaM+o=; b=A5hvo23gwC8j+XKAUw2mNHEBSYX+NlpEgOv6/2UzF82T7wc6+/iPrcpetNllUrS4hs Na5TX/jjAobW1W5F8l5XKWRyKfUisbP4LI3GKQ5AX/tS/HaeBZQmoNRK6WYcJsnlDC6n d+Wddaiue+RdosErOmzDA/gNYkq2t0n+a/fIiZmoED0ML81NeKHcbCnjaQEDgm6wsZok ygXE/yPyTocEu7Cy/RegdyczI1S7crDdlRO6II/5/3K+ZFn+otSXcOlxhpz1dauJBroy 4/yFCIjmyclkWySVGLnobllIi51nIwn9jAYWlTJWxeM/q8sG/izfM+EEoPZhTW23DvXn rXmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057164; x=1687649164; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QJBfhL5s/JujOKO92cVuqA077g93rVli8DiADyiaM+o=; b=JawPNNKQ/jyZIpKWwGJYVPi16qBHbY/WcwZLoNOI5JWR5OWeWnUuSEF+N+VC2xx7nx AfVFF/KDAtva/6fuuIR9MlObtFJJWJnaq8Wfv3l2BX5DHagfm05NPzZ8OCNJnCz/KJBK vrrdmcIBeq+bD58AVecPeBpVwc0kk5Ixvb+QDKPKOJ5k2TgtMsPQnkeKXTZTW5K2xHaj HpZJpm0ihyiYNTlKOdVQzg5dHUEiOaBOGBLxoNuVtog0XrikL6sT4UkUPpSCmqfT2QGr yd3vEeGGurVKoLWMRUm8UNPQbF1KsOp1lXPgi6tUTPBDbuZJOatdJk9t554jn4Ivlq94 egrQ== X-Gm-Message-State: AC+VfDyyA9kBDBum3CexUuSbZihf6Pl0+iapdIxFGkJknIAznlb3VTgU hIvZa0g8zTAtD0FYNspEHclZCmGEAUPnpJ9SVJg= X-Received: by 2002:a05:6a20:8f14:b0:10b:27d0:70cc with SMTP id b20-20020a056a208f1400b0010b27d070ccmr21617096pzk.20.1685057164437; Thu, 25 May 2023 16:26:04 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:04 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v2 06/20] target/arm: Use tcg_gen_qemu_st_i128 for STZG, STZ2G Date: Thu, 25 May 2023 16:25:44 -0700 Message-Id: <20230525232558.1758967-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::42c; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org This fixes a bug in that these two insns should have been using atomic 16-byte stores, since MTE is ARMv8.5 and LSE2 is mandatory from ARMv8.4. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 6bb68618a0..51f9d227e7 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -4070,15 +4070,18 @@ static void disas_ldst_tag(DisasContext *s, uint32_t insn) if (is_zero) { TCGv_i64 clean_addr = clean_data_tbi(s, addr); - TCGv_i64 tcg_zero = tcg_constant_i64(0); + TCGv_i64 zero64 = tcg_constant_i64(0); + TCGv_i128 zero128 = tcg_temp_new_i128(); int mem_index = get_mem_index(s); - int i, n = (1 + is_pair) << LOG2_TAG_GRANULE; + MemOp mop = finalize_memop(s, MO_128 | MO_ALIGN); - tcg_gen_qemu_st_i64(tcg_zero, clean_addr, mem_index, - MO_UQ | MO_ALIGN_16); - for (i = 8; i < n; i += 8) { - tcg_gen_addi_i64(clean_addr, clean_addr, 8); - tcg_gen_qemu_st_i64(tcg_zero, clean_addr, mem_index, MO_UQ); + tcg_gen_concat_i64_i128(zero128, zero64, zero64); + + /* This is 1 or 2 atomic 16-byte operations. */ + tcg_gen_qemu_st_i128(zero128, clean_addr, mem_index, mop); + if (is_pair) { + tcg_gen_addi_i64(clean_addr, clean_addr, 16); + tcg_gen_qemu_st_i128(zero128, clean_addr, mem_index, mop); } } From patchwork Thu May 25 23:25:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685642 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623436wrt; Thu, 25 May 2023 16:28:49 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5dPBryACIWNQ/mRYUJzol1BQUmQ+qnCbNM5ErGFzQ9kNDbqFr2xJbiaOGvn0kITVL65vO0 X-Received: by 2002:a05:6214:c22:b0:5b5:9c2:8c29 with SMTP id a2-20020a0562140c2200b005b509c28c29mr228346qvd.12.1685057328848; Thu, 25 May 2023 16:28:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057328; cv=none; d=google.com; s=arc-20160816; b=B0ONGzV8BXQH6GRcULuF3QzIYzHPwxvUH6Sd3ehuj7An6zCpOFkBcHm8BrRFrkCGSI WCjXfpPxyPJAabWixJBkxVZd5ISv+X2px5wX3zLt71EcQkkP4yS2qorfd4Wwugg6Wf9f SNEJMJEDvqoObX6WFfgjllePYfE+todz+iPbh21SgKOkWw7Zq/fH2JvoIZddODnPaIcO omQfEtarnAytQJ4EcnqcUQ778I4xAUkncbd3TXYXFL1dnFoNjT5gByaDD76MWi3hsQgm BkJu2GAvVIYZP4ViCbmC882nK9pQ6yqdow+1+Vi1kSJbd602A3rCTzgQTppoDClicAkm WFVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=rymPdgpajYoSymhNmUPGHozjpKn+tM24QE5wv8ugMXw=; b=au7xLbJ82ZCf5G5I9wnDncavtXY3NKhX2ZxSKGkmkCO/SMumehwbOJebwG6hyGqDp7 V2D+gwkbpA1tL8GeXq7YVsYUmiUySrONRcYeINWMfMJogSKeYKYl9Qf7/RYuaYWAHbW0 //Kaoyv+6Iapgau4GO+Egy8ho8gzDwhjomTN6S9UvRJR9PRuNFXgHIPvXaIAQLQR4N2L jEczz+5AwFK2DlbiDgal22z7FpNvQeAQHPdAMqYfoxrht+HRWEnTGM3EO7uKzVAd1KMv BqC6P1NeOyNgxXe1aTgNRCeV8EGxhdu+Vhm0TZ/SnRC1PmoEsviY0woMs4ZHuDcSbVJW JDjQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=jaOIDnyu; 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 r3-20020a0562140c4300b0061b5a6032b2si928579qvj.571.2023.05.25.16.28.48 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:28:48 -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=jaOIDnyu; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLk-00060g-Ae; Thu, 25 May 2023 19:26:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLV-0005mw-AQ for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:13 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLP-0005m4-0O for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:11 -0400 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-1ae74ab3089so888505ad.0 for ; Thu, 25 May 2023 16:26:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057165; x=1687649165; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rymPdgpajYoSymhNmUPGHozjpKn+tM24QE5wv8ugMXw=; b=jaOIDnyuVn7kV17Tr3e2I2zyU1w6ah4I33tPla3dU1DzB/WdAljmGENtK5JexUly6y SDdzNHjoPEoUyafHEdx4PcvPWcP1aprQdmyDQs1lwNhN9L6+1TIBuo6N4McLFCGlt1aS D2cNkK+b7G60IkgFdzHL7ot9sd8Egg9A17zx7gSK8FbsDFPSLx3FR2mf2FmBi+d+Kn7B Puy6yylg3fJH3/jRZ/cloLxhMOnmuiZ3pu6RrP7uVTvOnA6v+Gllogg1imSzJqsw98bD ON/mWARxOG9kStQsCoXZfb1KuYS5RX5O4NmBBRtDWydaAFkQ6qFp+at3Jwkbi59VvcxI 1FAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057165; x=1687649165; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rymPdgpajYoSymhNmUPGHozjpKn+tM24QE5wv8ugMXw=; b=drSlKd6R5hRfwYNp3CXdg41yZL6GKvU7wAB6/udUwzZUBKmkBP2eq8nkttTFX0/EVE 1zGBPbRo6CrvFlV5+gSVzyIxwS8wI23cXahy2Sy0uFjSXHYNmN9M6hpYJIGtSlOzx/9A 8zK2APzcpi2ZluJ5g6hOKAkNIqfQ5NixagZW203TBkc8RkbPIqJDnbe6OsgCI7ls3YuA QZGcJ4wJ07ftqATNC0cdRxcn6+MvLPDJC1NcjAaaxdkaZbjSSBJKTvU1eQP/VI3qUnSE E4NDWOGG8FdUtAsaHSJfqgkjwcgvMeat/5uT2WLlVBG2EyXEXk65DAVhL26vVyvVhX38 Xzog== X-Gm-Message-State: AC+VfDyymqV8tdE0VTEJ6SfGmv9bWVvT10L/z/67xlhInhG1187K1TNe pd+P6BdEYoodbzuJEZqA2LD/18XyHtj02T8drwo= X-Received: by 2002:a17:902:c94f:b0:1af:b681:5313 with SMTP id i15-20020a170902c94f00b001afb6815313mr440062pla.33.1685057165337; Thu, 25 May 2023 16:26:05 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:04 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v2 07/20] target/arm: Use tcg_gen_qemu_{ld, st}_i128 in gen_sve_{ld, st}r Date: Thu, 25 May 2023 16:25:45 -0700 Message-Id: <20230525232558.1758967-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62f; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Round len_align to 16 instead of 8, handling an odd 8-byte as part of the tail. Use MO_ATOM_NONE to indicate that all of these memory ops have only byte atomicity. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sve.c | 95 +++++++++++++++++++++++++--------- 1 file changed, 70 insertions(+), 25 deletions(-) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 92ab290106..058f7ef237 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -4178,11 +4178,12 @@ TRANS_FEAT(UCVTF_dd, aa64_sve, gen_gvec_fpst_arg_zpz, void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int vofs, int len, int rn, int imm) { - int len_align = QEMU_ALIGN_DOWN(len, 8); - int len_remain = len % 8; - int nparts = len / 8 + ctpop8(len_remain); + int len_align = QEMU_ALIGN_DOWN(len, 16); + int len_remain = len % 16; + int nparts = len / 16 + ctpop8(len_remain); int midx = get_mem_index(s); TCGv_i64 dirty_addr, clean_addr, t0, t1; + TCGv_i128 t16; dirty_addr = tcg_temp_new_i64(); tcg_gen_addi_i64(dirty_addr, cpu_reg_sp(s, rn), imm); @@ -4199,10 +4200,16 @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int vofs, int i; t0 = tcg_temp_new_i64(); - for (i = 0; i < len_align; i += 8) { - tcg_gen_qemu_ld_i64(t0, clean_addr, midx, MO_LEUQ); + t1 = tcg_temp_new_i64(); + t16 = tcg_temp_new_i128(); + + for (i = 0; i < len_align; i += 16) { + tcg_gen_qemu_ld_i128(t16, clean_addr, midx, + MO_LE | MO_128 | MO_ATOM_NONE); + tcg_gen_extr_i128_i64(t0, t1, t16); tcg_gen_st_i64(t0, base, vofs + i); - tcg_gen_addi_i64(clean_addr, clean_addr, 8); + tcg_gen_st_i64(t1, base, vofs + i + 8); + tcg_gen_addi_i64(clean_addr, clean_addr, 16); } } else { TCGLabel *loop = gen_new_label(); @@ -4211,14 +4218,21 @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int vofs, tcg_gen_movi_ptr(i, 0); gen_set_label(loop); - t0 = tcg_temp_new_i64(); - tcg_gen_qemu_ld_i64(t0, clean_addr, midx, MO_LEUQ); - tcg_gen_addi_i64(clean_addr, clean_addr, 8); + t16 = tcg_temp_new_i128(); + tcg_gen_qemu_ld_i128(t16, clean_addr, midx, + MO_LE | MO_128 | MO_ATOM_NONE); + tcg_gen_addi_i64(clean_addr, clean_addr, 16); tp = tcg_temp_new_ptr(); tcg_gen_add_ptr(tp, base, i); - tcg_gen_addi_ptr(i, i, 8); + tcg_gen_addi_ptr(i, i, 16); + + t0 = tcg_temp_new_i64(); + t1 = tcg_temp_new_i64(); + tcg_gen_extr_i128_i64(t0, t1, t16); + tcg_gen_st_i64(t0, tp, vofs); + tcg_gen_st_i64(t1, tp, vofs + 8); tcg_gen_brcondi_ptr(TCG_COND_LTU, i, len_align, loop); } @@ -4227,6 +4241,16 @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int vofs, * Predicate register loads can be any multiple of 2. * Note that we still store the entire 64-bit unit into cpu_env. */ + if (len_remain >= 8) { + t0 = tcg_temp_new_i64(); + tcg_gen_qemu_ld_i64(t0, clean_addr, midx, MO_LEUQ | MO_ATOM_NONE); + tcg_gen_st_i64(t0, base, vofs + len_align); + len_remain -= 8; + len_align += 8; + if (len_remain) { + tcg_gen_addi_i64(clean_addr, clean_addr, 8); + } + } if (len_remain) { t0 = tcg_temp_new_i64(); switch (len_remain) { @@ -4234,14 +4258,14 @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int vofs, case 4: case 8: tcg_gen_qemu_ld_i64(t0, clean_addr, midx, - MO_LE | ctz32(len_remain)); + MO_LE | ctz32(len_remain) | MO_ATOM_NONE); break; case 6: t1 = tcg_temp_new_i64(); - tcg_gen_qemu_ld_i64(t0, clean_addr, midx, MO_LEUL); + tcg_gen_qemu_ld_i64(t0, clean_addr, midx, MO_LEUL | MO_ATOM_NONE); tcg_gen_addi_i64(clean_addr, clean_addr, 4); - tcg_gen_qemu_ld_i64(t1, clean_addr, midx, MO_LEUW); + tcg_gen_qemu_ld_i64(t1, clean_addr, midx, MO_LEUW | MO_ATOM_NONE); tcg_gen_deposit_i64(t0, t0, t1, 32, 32); break; @@ -4256,11 +4280,12 @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int vofs, void gen_sve_str(DisasContext *s, TCGv_ptr base, int vofs, int len, int rn, int imm) { - int len_align = QEMU_ALIGN_DOWN(len, 8); - int len_remain = len % 8; - int nparts = len / 8 + ctpop8(len_remain); + int len_align = QEMU_ALIGN_DOWN(len, 16); + int len_remain = len % 16; + int nparts = len / 16 + ctpop8(len_remain); int midx = get_mem_index(s); - TCGv_i64 dirty_addr, clean_addr, t0; + TCGv_i64 dirty_addr, clean_addr, t0, t1; + TCGv_i128 t16; dirty_addr = tcg_temp_new_i64(); tcg_gen_addi_i64(dirty_addr, cpu_reg_sp(s, rn), imm); @@ -4278,10 +4303,15 @@ void gen_sve_str(DisasContext *s, TCGv_ptr base, int vofs, int i; t0 = tcg_temp_new_i64(); + t1 = tcg_temp_new_i64(); + t16 = tcg_temp_new_i128(); for (i = 0; i < len_align; i += 8) { tcg_gen_ld_i64(t0, base, vofs + i); - tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEUQ); - tcg_gen_addi_i64(clean_addr, clean_addr, 8); + tcg_gen_ld_i64(t1, base, vofs + i + 8); + tcg_gen_concat_i64_i128(t16, t0, t1); + tcg_gen_qemu_st_i128(t16, clean_addr, midx, + MO_LE | MO_128 | MO_ATOM_NONE); + tcg_gen_addi_i64(clean_addr, clean_addr, 16); } } else { TCGLabel *loop = gen_new_label(); @@ -4291,18 +4321,33 @@ void gen_sve_str(DisasContext *s, TCGv_ptr base, int vofs, gen_set_label(loop); t0 = tcg_temp_new_i64(); + t1 = tcg_temp_new_i64(); tp = tcg_temp_new_ptr(); tcg_gen_add_ptr(tp, base, i); tcg_gen_ld_i64(t0, tp, vofs); - tcg_gen_addi_ptr(i, i, 8); + tcg_gen_ld_i64(t1, tp, vofs + 8); + tcg_gen_addi_ptr(i, i, 16); - tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEUQ); - tcg_gen_addi_i64(clean_addr, clean_addr, 8); + t16 = tcg_temp_new_i128(); + tcg_gen_concat_i64_i128(t16, t0, t1); + + tcg_gen_qemu_st_i128(t16, clean_addr, midx, MO_LEUQ); + tcg_gen_addi_i64(clean_addr, clean_addr, 16); tcg_gen_brcondi_ptr(TCG_COND_LTU, i, len_align, loop); } /* Predicate register stores can be any multiple of 2. */ + if (len_remain >= 8) { + t0 = tcg_temp_new_i64(); + tcg_gen_st_i64(t0, base, vofs + len_align); + tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEUQ | MO_ATOM_NONE); + len_remain -= 8; + len_align += 8; + if (len_remain) { + tcg_gen_addi_i64(clean_addr, clean_addr, 8); + } + } if (len_remain) { t0 = tcg_temp_new_i64(); tcg_gen_ld_i64(t0, base, vofs + len_align); @@ -4312,14 +4357,14 @@ void gen_sve_str(DisasContext *s, TCGv_ptr base, int vofs, case 4: case 8: tcg_gen_qemu_st_i64(t0, clean_addr, midx, - MO_LE | ctz32(len_remain)); + MO_LE | ctz32(len_remain) | MO_ATOM_NONE); break; case 6: - tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEUL); + tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEUL | MO_ATOM_NONE); tcg_gen_addi_i64(clean_addr, clean_addr, 4); tcg_gen_shri_i64(t0, t0, 32); - tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEUW); + tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEUW | MO_ATOM_NONE); break; default: From patchwork Thu May 25 23:25:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685638 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623382wrt; Thu, 25 May 2023 16:28:36 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4s/AOvS1AAhb/pfsB2U3kNbNEXJkiwiNQV0Emvo6hV+X2kbIBGn0TSHrPAvli4pnjenyqJ X-Received: by 2002:ac8:5b06:0:b0:3e3:9117:66e8 with SMTP id m6-20020ac85b06000000b003e3911766e8mr97990qtw.35.1685057316205; Thu, 25 May 2023 16:28:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057316; cv=none; d=google.com; s=arc-20160816; b=veV4wdGXA7g2BxpAsmlV+zG9t1omxTN3SE7SU/yoSbtyLP0NdxCvIziMH/sL9aZE3z cfEZVoq2nykYZC9FDt9Depw8rsyT3bFD79+Ky+fom6L3eEUCKvQej+3dTEaIowc3LGNa 9YjIdB+IYXgR1wFjUmGagbwvz/mr+WBqGIPXX4FXZwb+u3V0hl08AGNXJNXEYnDItSyJ MADBwFVywlBwOKYWsNayg0OSMT5Sw4brdzdWRInke4ZfNpyvQP+FKgcv5ZGT+GAcunzv GYcVh9ixigyJhYMEBxC1tZ931iTOfFp6EhVa7s6W4hylgKJKhKFQ6+m+hcKzOzt1N/GI 8WRQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=lVXqrkVpUbyPr7RXHtkXkDFqvAZ64HbnSrMT6ekrwjQ=; b=sKmbjQ/+ZrsClvTg8XSJT1V3dEPEP2hUKB8A9TDIO4cSAXC27ZkZX9bj8Gddfb+os1 jTnyGvtWBA6BlQE2fWP9wabbYcU4cXFgvLWkf152o6MjXeKTBEJ6FT54S4bAkbwqn9+M jYgF7aSx+vq3Q+PVBpNM9ktQvBq1oGYFMVRHwlQ5p2qy87K4hgFq3u2b94uQXKS+zbMe IBxtxs/NLC47Kcv2XjiNz+9+4ENw8g3Sts8VXxrJJKqALixjG+jJ0WnXnHz5NmNV8l6+ /8VL8SBJixpWdeQwHACU280ZNcZbSSWDgIQvyESe/+3wvzzKrppsOkrHu4Mywu/zmloY EmHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="RkhP/7yW"; 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 n16-20020ac85a10000000b003f70b95f08fsi73190qta.734.2023.05.25.16.28.36 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:28:36 -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=pass header.i=@linaro.org header.s=google header.b="RkhP/7yW"; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLc-0005tJ-3C; Thu, 25 May 2023 19:26:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLV-0005my-Af for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:13 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLP-0005mE-Mc for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:12 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-1ae54b623c2so1334965ad.3 for ; Thu, 25 May 2023 16:26:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057166; x=1687649166; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=lVXqrkVpUbyPr7RXHtkXkDFqvAZ64HbnSrMT6ekrwjQ=; b=RkhP/7yWw+36cAz83PwT2CYCN5s3wwyz6N9sqeO+Cqn9dZ8Yn3QlVxWZN8uMlGDLNA kkgnRS5EUBMOC9duEz9smrpgmP4LbCgBzYNZqRpLJUvV+ozmProOjtkYO/ZnIt88xJms 1OavXsgy8do2Qh5r1cK+KAgNN0b0bE4LPBEevhlhAOcBynQGdF6itdfJ3uih0mxh8uPO QQiO2/WES4YZaecJbc8Jaq5JBmmmQennUDsLaeWtPcjYdZrLQxpxEWn5rv90Alnp7hVZ g25QYmwtx5B8GB7el7NStAfIwBSxhi9SiGCGqvgY7dNL1D79dBEpffnCpx9dXVTgNx8e 0v/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057166; x=1687649166; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lVXqrkVpUbyPr7RXHtkXkDFqvAZ64HbnSrMT6ekrwjQ=; b=blHGb05Wdjoi7GPob6/ym4a/3QCC6kWDPTCfC2FJWr3YJXhKRVEFj9Fy6goWkNwLwG aBNabCN1XBojJuchfRpDjVoWktXmC2NmnS95sy6+3B0gkUUtB6kFmtBmk8Nl/EgYCwd7 Dpo4GVI6WoehtCR8xZFU7vYThKdH/sWAu6oDzLg71UdcdY8GAswOUhKwvE3srDaji/2u aEqROB48cMgiaAInUHirdnjh04B0DMgIP7BreH/lkELq6a9eI50YXdzMBdSBxt10AS4L 2PTpGGgCSKMjztBkN4po0M1Nx5A5EHwMrOYIP6k01NkAb+WkNeAZ/Oq+HNQ/qmiiDiEb sNZw== X-Gm-Message-State: AC+VfDxoPz9frMvFFvbTWMdNYMThmOZ1RCb21VgAilWlmHaB39XE+/Qy jtfdIwcK9PCAVWNZ6jzIS3AfoXbpUb2Hj5HVrCQ= X-Received: by 2002:a17:902:7c05:b0:1af:bb99:d590 with SMTP id x5-20020a1709027c0500b001afbb99d590mr373853pll.7.1685057166046; Thu, 25 May 2023 16:26:06 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:05 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v2 08/20] target/arm: Sink gen_mte_check1 into load/store_exclusive Date: Thu, 25 May 2023 16:25:46 -0700 Message-Id: <20230525232558.1758967-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org No need to duplicate this check across multiple call sites. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.c | 44 ++++++++++++++++------------------ 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 51f9d227e7..19f0f20896 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -2381,11 +2381,16 @@ static void disas_b_exc_sys(DisasContext *s, uint32_t insn) * races in multi-threaded linux-user and when MTTCG softmmu is * enabled. */ -static void gen_load_exclusive(DisasContext *s, int rt, int rt2, - TCGv_i64 addr, int size, bool is_pair) +static void gen_load_exclusive(DisasContext *s, int rt, int rt2, int rn, + int size, bool is_pair) { int idx = get_mem_index(s); MemOp memop; + TCGv_i64 dirty_addr, clean_addr; + + s->is_ldex = true; + dirty_addr = cpu_reg_sp(s, rn); + clean_addr = gen_mte_check1(s, dirty_addr, false, rn != 31, size); g_assert(size <= 3); if (is_pair) { @@ -2393,7 +2398,7 @@ static void gen_load_exclusive(DisasContext *s, int rt, int rt2, if (size == 2) { /* The pair must be single-copy atomic for the doubleword. */ memop = finalize_memop(s, MO_64 | MO_ALIGN); - tcg_gen_qemu_ld_i64(cpu_exclusive_val, addr, idx, memop); + tcg_gen_qemu_ld_i64(cpu_exclusive_val, clean_addr, idx, memop); if (s->be_data == MO_LE) { tcg_gen_extract_i64(cpu_reg(s, rt), cpu_exclusive_val, 0, 32); tcg_gen_extract_i64(cpu_reg(s, rt2), cpu_exclusive_val, 32, 32); @@ -2412,7 +2417,7 @@ static void gen_load_exclusive(DisasContext *s, int rt, int rt2, memop = finalize_memop_atom(s, MO_128 | MO_ALIGN_16, MO_ATOM_IFALIGN_PAIR); - tcg_gen_qemu_ld_i128(t16, addr, idx, memop); + tcg_gen_qemu_ld_i128(t16, clean_addr, idx, memop); if (s->be_data == MO_LE) { tcg_gen_extr_i128_i64(cpu_exclusive_val, @@ -2426,14 +2431,14 @@ static void gen_load_exclusive(DisasContext *s, int rt, int rt2, } } else { memop = finalize_memop(s, size | MO_ALIGN); - tcg_gen_qemu_ld_i64(cpu_exclusive_val, addr, idx, memop); + tcg_gen_qemu_ld_i64(cpu_exclusive_val, clean_addr, idx, memop); tcg_gen_mov_i64(cpu_reg(s, rt), cpu_exclusive_val); } - tcg_gen_mov_i64(cpu_exclusive_addr, addr); + tcg_gen_mov_i64(cpu_exclusive_addr, clean_addr); } static void gen_store_exclusive(DisasContext *s, int rd, int rt, int rt2, - TCGv_i64 addr, int size, int is_pair) + int rn, int size, int is_pair) { /* if (env->exclusive_addr == addr && env->exclusive_val == [addr] * && (!is_pair || env->exclusive_high == [addr + datasize])) { @@ -2449,9 +2454,12 @@ static void gen_store_exclusive(DisasContext *s, int rd, int rt, int rt2, */ TCGLabel *fail_label = gen_new_label(); TCGLabel *done_label = gen_new_label(); - TCGv_i64 tmp; + TCGv_i64 tmp, dirty_addr, clean_addr; - tcg_gen_brcond_i64(TCG_COND_NE, addr, cpu_exclusive_addr, fail_label); + dirty_addr = cpu_reg_sp(s, rn); + clean_addr = gen_mte_check1(s, dirty_addr, true, rn != 31, size); + + tcg_gen_brcond_i64(TCG_COND_NE, clean_addr, cpu_exclusive_addr, fail_label); tmp = tcg_temp_new_i64(); if (is_pair) { @@ -2639,9 +2647,7 @@ static void disas_ldst_excl(DisasContext *s, uint32_t insn) if (is_lasr) { tcg_gen_mb(TCG_MO_ALL | TCG_BAR_STRL); } - clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), - true, rn != 31, size); - gen_store_exclusive(s, rs, rt, rt2, clean_addr, size, false); + gen_store_exclusive(s, rs, rt, rt2, rn, size, false); return; case 0x4: /* LDXR */ @@ -2649,10 +2655,7 @@ static void disas_ldst_excl(DisasContext *s, uint32_t insn) if (rn == 31) { gen_check_sp_alignment(s); } - clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), - false, rn != 31, size); - s->is_ldex = true; - gen_load_exclusive(s, rt, rt2, clean_addr, size, false); + gen_load_exclusive(s, rt, rt2, rn, size, false); if (is_lasr) { tcg_gen_mb(TCG_MO_ALL | TCG_BAR_LDAQ); } @@ -2704,9 +2707,7 @@ static void disas_ldst_excl(DisasContext *s, uint32_t insn) if (is_lasr) { tcg_gen_mb(TCG_MO_ALL | TCG_BAR_STRL); } - clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), - true, rn != 31, size); - gen_store_exclusive(s, rs, rt, rt2, clean_addr, size, true); + gen_store_exclusive(s, rs, rt, rt2, rn, size, true); return; } if (rt2 == 31 @@ -2723,10 +2724,7 @@ static void disas_ldst_excl(DisasContext *s, uint32_t insn) if (rn == 31) { gen_check_sp_alignment(s); } - clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), - false, rn != 31, size); - s->is_ldex = true; - gen_load_exclusive(s, rt, rt2, clean_addr, size, true); + gen_load_exclusive(s, rt, rt2, rn, size, true); if (is_lasr) { tcg_gen_mb(TCG_MO_ALL | TCG_BAR_LDAQ); } From patchwork Thu May 25 23:25:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685639 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623400wrt; Thu, 25 May 2023 16:28:39 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7YB1U7ZsBy10SdhtphAByStzuWaOo8UFEtGS4ozC9rpw/qjfnRjWqLcfrQRWPhRB6nUvCn X-Received: by 2002:a05:6214:c6d:b0:61b:5dd6:1f22 with SMTP id t13-20020a0562140c6d00b0061b5dd61f22mr203519qvj.35.1685057319009; Thu, 25 May 2023 16:28:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057318; cv=none; d=google.com; s=arc-20160816; b=I4di9r4uMudPwSpX4Lhg+LLeCXH/r4I4AYOEekxZx8NKZEyab5q/5FEIrSE2mWcZdM Y1iVpwptqf0gtKTbqM12GPR3b0SPu/bhCpz8C8658xW3ZlXm4zWCpKV9x4cfRCd2Qqcx kclvvdRiBAOapGBHYJSVAAoMuYXLdGxx9Eoh+vI26g3rLisqLP+jgZTFlrrr8a+fv4gP EeTJEYClpDoIpOnwL9aY7Wa8sKEPvh2PEI7oPVnL0GsJlr1efUihbgQyKeWKsUJWemiE GD9aAT9kL25vfo5RwTZvWjhFmUIqZ8mA2rAR4tut4N2RjuXs/aSSfnfuzMS+U54vWn+4 4PLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=N/k1qWQ9n1nK/LPGBxkHi7oTQfCtAyyOXQtWzeqV16Y=; b=sUQy8cmg9o3kpmaaFfD9ocdsRihHP2u3ECJhZsIhr0plvmc8nLwPH0/sfQ6KOImP5O ACJjxnhMV/7zdy2Rrn6neI/4X9EBVqU/Glsn04xtOGRfbacms2ZkkDsRTJavZuj/EYMd M6DTwS83jg8ejEAellHTbnEm8986DmG7tOk3w7UnWqkSIfAIln05aNF2MCX8+0L4Yp9j ds7Ar3Nn8b+cc0Gl2PWkC0Wt6TNjW1/KaYwIORF8aeaSTUYD4USsV+f5FFNjDoTokwmZ yPJpcZnRzUcB9d7A0J7WQ7hyMNlvkiJzxn/3beoT3OO2ItPO/9V2zhV1+ph9t5TgEUAg uUDg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=QPcqo3D9; 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 a4-20020ac85b84000000b003e38f2f61dasi898697qta.577.2023.05.25.16.28.38 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:28:38 -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=pass header.i=@linaro.org header.s=google header.b=QPcqo3D9; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLY-0005qD-Ro; Thu, 25 May 2023 19:26:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLW-0005oq-0S for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:15 -0400 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLQ-0005me-Ey for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:13 -0400 Received: by mail-pg1-x52d.google.com with SMTP id 41be03b00d2f7-5346d150972so100042a12.3 for ; Thu, 25 May 2023 16:26:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057167; x=1687649167; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=N/k1qWQ9n1nK/LPGBxkHi7oTQfCtAyyOXQtWzeqV16Y=; b=QPcqo3D9BOm9RWkUYTd0/sVdjwWj9QIa2ZcskEusulX3urqxaZ25taJ/8SsWe06hZC rP/rZ2ALkgf/fw+aBS1j3ec4sw+bqJ4pP/M38KEksLh11jmqyqzaHvzCmhiNxyIiexL4 KFNpe+7H6yQAHS56MMM7PpMB5cgWqavevT5psd/SkoymXBnewc8ojYF7ACJPVGUAr4FE rdiZ64P/C5zQv7UrNOCRD4fcQU0vn9vlbzutUyEHmWyYptdBMRfg3Wf1dgoEHySyZkFL RaKNE+qPPtjTjaV45LVWATsI2ViuYtpe+GQHSeUMtBRpwH7UhfQzG+U1rll2jhAG1X79 KJcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057167; x=1687649167; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=N/k1qWQ9n1nK/LPGBxkHi7oTQfCtAyyOXQtWzeqV16Y=; b=ihNId+lg9YqfPdFCBWBVGHENaCrvuqusbQq4p7PIxwtVfYrve5JLzLTP7deWjeDcgU PqRKlJSD36XgOBv6piNL9nGrdwi3WOnznwyd2uQtSwY36WFzj03bmBy1D7oyeWyefQDU zoqpdBsdNARGAGZTVmAn88KlK6Lurd5qlnD6dyrH2Ii+k1S0HEwWv8O5PT0gMsYnZBnZ mM9d+y8bmSslgTLI+L1YWZuY3VlAu8MzBzQR8hIZlnI63CGwtcYmCISIuseI146KmItg 6CCaJuiN5j0nzFOJ1D3xGrqGEP5pl6WumW6GwkLjeFA43XietbYwdtrf9GlpD2OrSO+R qSBA== X-Gm-Message-State: AC+VfDylT7RcuF7kpq+lupxWL9WJC+YkK6915bbIQjLRawpGtOarhZrI KNdzw90hOYaJCbmtwA4aygwy4zqppMUukzr2u+w= X-Received: by 2002:a17:902:f801:b0:1ae:5212:748b with SMTP id ix1-20020a170902f80100b001ae5212748bmr288567plb.49.1685057166872; Thu, 25 May 2023 16:26:06 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:06 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v2 09/20] target/arm: Load/store integer pair with one tcg operation Date: Thu, 25 May 2023 16:25:47 -0700 Message-Id: <20230525232558.1758967-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::52d; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org This is required for LSE2, where the pair must be treated atomically if it does not cross a 16-byte boundary. But it simplifies the code to do this always. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.c | 70 ++++++++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 15 deletions(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 19f0f20896..40c6adc9cc 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -2954,26 +2954,66 @@ static void disas_ldst_pair(DisasContext *s, uint32_t insn) } else { TCGv_i64 tcg_rt = cpu_reg(s, rt); TCGv_i64 tcg_rt2 = cpu_reg(s, rt2); + MemOp mop = size + 1; + + /* + * With LSE2, non-sign-extending pairs are treated atomically if + * aligned, and if unaligned one of the pair will be completely + * within a 16-byte block and that element will be atomic. + * Otherwise each element is separately atomic. + * In all cases, issue one operation with the correct atomicity. + * + * This treats sign-extending loads like zero-extending loads, + * since that reuses the most code below. + */ + if (s->align_mem) { + mop |= (size == 2 ? MO_ALIGN_4 : MO_ALIGN_8); + } + mop = finalize_memop_pair(s, mop); if (is_load) { - TCGv_i64 tmp = tcg_temp_new_i64(); + if (size == 2) { + int o2 = s->be_data == MO_LE ? 32 : 0; + int o1 = o2 ^ 32; - /* Do not modify tcg_rt before recognizing any exception - * from the second load. - */ - do_gpr_ld(s, tmp, clean_addr, size + is_signed * MO_SIGN, - false, false, 0, false, false); - tcg_gen_addi_i64(clean_addr, clean_addr, 1 << size); - do_gpr_ld(s, tcg_rt2, clean_addr, size + is_signed * MO_SIGN, - false, false, 0, false, false); + tcg_gen_qemu_ld_i64(tcg_rt, clean_addr, get_mem_index(s), mop); + if (is_signed) { + tcg_gen_sextract_i64(tcg_rt2, tcg_rt, o2, 32); + tcg_gen_sextract_i64(tcg_rt, tcg_rt, o1, 32); + } else { + tcg_gen_extract_i64(tcg_rt2, tcg_rt, o2, 32); + tcg_gen_extract_i64(tcg_rt, tcg_rt, o1, 32); + } + } else { + TCGv_i128 tmp = tcg_temp_new_i128(); - tcg_gen_mov_i64(tcg_rt, tmp); + tcg_gen_qemu_ld_i128(tmp, clean_addr, get_mem_index(s), mop); + if (s->be_data == MO_LE) { + tcg_gen_extr_i128_i64(tcg_rt, tcg_rt2, tmp); + } else { + tcg_gen_extr_i128_i64(tcg_rt2, tcg_rt, tmp); + } + } } else { - do_gpr_st(s, tcg_rt, clean_addr, size, - false, 0, false, false); - tcg_gen_addi_i64(clean_addr, clean_addr, 1 << size); - do_gpr_st(s, tcg_rt2, clean_addr, size, - false, 0, false, false); + if (size == 2) { + TCGv_i64 tmp = tcg_temp_new_i64(); + + if (s->be_data == MO_LE) { + tcg_gen_concat32_i64(tmp, tcg_rt, tcg_rt2); + } else { + tcg_gen_concat32_i64(tmp, tcg_rt2, tcg_rt); + } + tcg_gen_qemu_st_i64(tmp, clean_addr, get_mem_index(s), mop); + } else { + TCGv_i128 tmp = tcg_temp_new_i128(); + + if (s->be_data == MO_LE) { + tcg_gen_concat_i64_i128(tmp, tcg_rt, tcg_rt2); + } else { + tcg_gen_concat_i64_i128(tmp, tcg_rt2, tcg_rt); + } + tcg_gen_qemu_st_i128(tmp, clean_addr, get_mem_index(s), mop); + } } } From patchwork Thu May 25 23:25:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685634 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623316wrt; Thu, 25 May 2023 16:28:22 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ41CgMF9FrdASUGbAh/nEcf2HpR3hnrTp7imUaZWz7b9p2unt1SLd5cWN6eMSgvqMyzBd+Y X-Received: by 2002:a05:620a:3c11:b0:75b:23a1:8e63 with SMTP id tn17-20020a05620a3c1100b0075b23a18e63mr304740qkn.52.1685057301818; Thu, 25 May 2023 16:28:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057301; cv=none; d=google.com; s=arc-20160816; b=WR+cAex5WTGq0wm7i8JGnKjsNAWSQcQlhlqP6tvOnJ3YIZs28yhsHT+OSgAV7vnF6b HwNfpUCWmTBzNd+viLuODSkyfLP45faZQIzhPBWHbIslHqXfXPSXMZhZw2pdpY4x9Jdp 6tfzh3fosHkEc6yaDaDQ+7BswBy/c3RB60cvlQ3IiYqSv0SsPSSLk2gdeetCvskHIpcN KxJsEWqiNaaq3hd5WJ6RWTpegRoZP9TvHVhw1gaV9QNcIH10qTFcjczXqNfPKm1h9hIv OtR2JhPRpXXSJjqx6rqE6LYovfOfTLjG9TjOx2+EcbxhjTBibFx2heak5TT7xC+qAxsc g8HA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=L9J2NnnSlzPHrP6ymAfgvQWzttJWy4QYx3ryvCW/W4k=; b=CTr9+EyavKLMlzNJeJzBrCjLTXJgOvu23C3f1KiO5g7Nbys88B/Qxh8y/4nySI/y6X bpxQt2AjoxXW5F5P83E1ltxeVlM1iGeuCo1d5PjR7vftSuuCbCENT8O7pwdlU5N1Fpbf CdZ925QGBVzmtD+xQ9nsA5dSceEaZAjaLEuZUQb/ecvplTV514f5qg53wyIiBhZdPYoa 5hii3vv9iGWC9e9GCqg/hKSRstSTcwMelyIxpnkCC7UbhlNHpVhIPFgbxSZLHzAoQpeO dpxmUvprSTdgNkuXAzNxt7C8K0QeBmkTlPZtbHq3zJADiQ1l3LAfgSer875YOFWGT9CN VL8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=CaV97EC5; 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 i18-20020ae9ee12000000b00759057aa321si944360qkg.530.2023.05.25.16.28.21 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:28:21 -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=CaV97EC5; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLa-0005rW-Pv; Thu, 25 May 2023 19:26:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLY-0005pz-EQ for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:16 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLV-0005n2-1q for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:16 -0400 Received: by mail-pg1-x529.google.com with SMTP id 41be03b00d2f7-53f448cde66so97481a12.1 for ; Thu, 25 May 2023 16:26:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057167; x=1687649167; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=L9J2NnnSlzPHrP6ymAfgvQWzttJWy4QYx3ryvCW/W4k=; b=CaV97EC5ZtPX3MUiFcGwxanBEPfNS9PuR75ztg7eKZjIFbncnAPK6dk1EQ7zxjAX+I iD0E2Qzd/hrGzpCLrEuqqkUMWcuCc30FWI4nmfajKhjpnBmN7AO+TnJQMlvsfhdtDdRP hBjtYJ6Y2s40xTrhZrWLLz0jdEvF++DHD59eLMjyNJqIpe6wEAaC1fTSWjUB6HQFz4eh H6g6owkPDZqYeUYRks5orRZBz/Hhl4uIFPpX5EczywvLfY76IMN8WDJs7OEY+8qcdxuG UIlwTQDxRubd1b5qsfSe5/Q9hk68E75JoKu2DlyNi1ucMTL7gsW8K9+LOj/9u11m77zP h5xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057167; x=1687649167; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=L9J2NnnSlzPHrP6ymAfgvQWzttJWy4QYx3ryvCW/W4k=; b=CobMJHaGpYdQENQmW/e78mZc2U3dAbN3FaAKRI5Om9UfXlfYkoB+QcLf08Or2CPdWL GJUqHyA1qo3zL1nLtU7Anno+9KG56AHdzsPOvzPwCzQOVh1f6geuFom91El3Yf8ijvhy 2/VrsZYtgtHREAjn5+1epIcctGcuwQS57fQQyfjZDZJhnY0d9yBLdOfN21Lty5605NIH smnxwE/dgoLc6H5abr89M/d50T+84qhScznLEUI8laRMW3vCphns8NOW43hITccSFQZ3 uoI9qssX0qfJOdeZgD2s+rt7hPIiCldTAoCGcfjFar0XIy840xsKpWnVxdI9ES+2LAin qDjw== X-Gm-Message-State: AC+VfDxg0oJKBejhV3Js24wRI2c8hXDCrLBOnEGIdjb+COSPZHwPGX9D Ud5bUdSqz+JEOhrtVx6y6sADVvFAnDbacs73g8c= X-Received: by 2002:a17:902:ecd2:b0:1ac:5717:fd5 with SMTP id a18-20020a170902ecd200b001ac57170fd5mr278461plh.60.1685057167559; Thu, 25 May 2023 16:26:07 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v2 10/20] target/arm: Hoist finalize_memop out of do_gpr_{ld, st} Date: Thu, 25 May 2023 16:25:48 -0700 Message-Id: <20230525232558.1758967-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::529; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org We are going to need the complete memop beforehand, so let's not compute it twice. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.c | 61 +++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 40c6adc9cc..24e255aa34 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -848,7 +848,6 @@ static void do_gpr_st_memidx(DisasContext *s, TCGv_i64 source, unsigned int iss_srt, bool iss_sf, bool iss_ar) { - memop = finalize_memop(s, memop); tcg_gen_qemu_st_i64(source, tcg_addr, memidx, memop); if (iss_valid) { @@ -883,7 +882,6 @@ static void do_gpr_ld_memidx(DisasContext *s, TCGv_i64 dest, TCGv_i64 tcg_addr, bool iss_valid, unsigned int iss_srt, bool iss_sf, bool iss_ar) { - memop = finalize_memop(s, memop); tcg_gen_qemu_ld_i64(dest, tcg_addr, memidx, memop); if (extend && (memop & MO_SIGN)) { @@ -2637,6 +2635,7 @@ static void disas_ldst_excl(DisasContext *s, uint32_t insn) int o2_L_o1_o0 = extract32(insn, 21, 3) * 2 | is_lasr; int size = extract32(insn, 30, 2); TCGv_i64 clean_addr; + MemOp memop; switch (o2_L_o1_o0) { case 0x0: /* STXR */ @@ -2673,10 +2672,11 @@ static void disas_ldst_excl(DisasContext *s, uint32_t insn) gen_check_sp_alignment(s); } tcg_gen_mb(TCG_MO_ALL | TCG_BAR_STRL); + /* TODO: ARMv8.4-LSE SCTLR.nAA */ + memop = finalize_memop(s, size | MO_ALIGN); clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), true, rn != 31, size); - /* TODO: ARMv8.4-LSE SCTLR.nAA */ - do_gpr_st(s, cpu_reg(s, rt), clean_addr, size | MO_ALIGN, true, rt, + do_gpr_st(s, cpu_reg(s, rt), clean_addr, memop, true, rt, disas_ldst_compute_iss_sf(size, false, 0), is_lasr); return; @@ -2691,10 +2691,11 @@ static void disas_ldst_excl(DisasContext *s, uint32_t insn) if (rn == 31) { gen_check_sp_alignment(s); } + /* TODO: ARMv8.4-LSE SCTLR.nAA */ + memop = finalize_memop(s, size | MO_ALIGN); clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), false, rn != 31, size); - /* TODO: ARMv8.4-LSE SCTLR.nAA */ - do_gpr_ld(s, cpu_reg(s, rt), clean_addr, size | MO_ALIGN, false, true, + do_gpr_ld(s, cpu_reg(s, rt), clean_addr, memop, false, true, rt, disas_ldst_compute_iss_sf(size, false, 0), is_lasr); tcg_gen_mb(TCG_MO_ALL | TCG_BAR_LDAQ); return; @@ -2802,9 +2803,9 @@ static void disas_ld_lit(DisasContext *s, uint32_t insn) } else { /* Only unsigned 32bit loads target 32bit registers. */ bool iss_sf = opc != 0; + MemOp memop = finalize_memop(s, size + is_signed * MO_SIGN); - do_gpr_ld(s, tcg_rt, clean_addr, size + is_signed * MO_SIGN, - false, true, rt, iss_sf, false); + do_gpr_ld(s, tcg_rt, clean_addr, memop, false, true, rt, iss_sf, false); } } @@ -3058,7 +3059,7 @@ static void disas_ldst_reg_imm9(DisasContext *s, uint32_t insn, bool post_index; bool writeback; int memidx; - + MemOp memop; TCGv_i64 clean_addr, dirty_addr; if (is_vector) { @@ -3085,7 +3086,7 @@ static void disas_ldst_reg_imm9(DisasContext *s, uint32_t insn, return; } is_store = (opc == 0); - is_signed = extract32(opc, 1, 1); + is_signed = !is_store && extract32(opc, 1, 1); is_extended = (size < 3) && extract32(opc, 0, 1); } @@ -3119,6 +3120,8 @@ static void disas_ldst_reg_imm9(DisasContext *s, uint32_t insn, } memidx = is_unpriv ? get_a64_user_mem_index(s) : get_mem_index(s); + memop = finalize_memop(s, size + is_signed * MO_SIGN); + clean_addr = gen_mte_check1_mmuidx(s, dirty_addr, is_store, writeback || rn != 31, size, is_unpriv, memidx); @@ -3134,10 +3137,10 @@ static void disas_ldst_reg_imm9(DisasContext *s, uint32_t insn, bool iss_sf = disas_ldst_compute_iss_sf(size, is_signed, opc); if (is_store) { - do_gpr_st_memidx(s, tcg_rt, clean_addr, size, memidx, + do_gpr_st_memidx(s, tcg_rt, clean_addr, memop, memidx, iss_valid, rt, iss_sf, false); } else { - do_gpr_ld_memidx(s, tcg_rt, clean_addr, size + is_signed * MO_SIGN, + do_gpr_ld_memidx(s, tcg_rt, clean_addr, memop, is_extended, memidx, iss_valid, rt, iss_sf, false); } @@ -3186,8 +3189,8 @@ static void disas_ldst_reg_roffset(DisasContext *s, uint32_t insn, bool is_signed = false; bool is_store = false; bool is_extended = false; - TCGv_i64 tcg_rm, clean_addr, dirty_addr; + MemOp memop; if (extract32(opt, 1, 1) == 0) { unallocated_encoding(s); @@ -3214,7 +3217,7 @@ static void disas_ldst_reg_roffset(DisasContext *s, uint32_t insn, return; } is_store = (opc == 0); - is_signed = extract32(opc, 1, 1); + is_signed = !is_store && extract32(opc, 1, 1); is_extended = (size < 3) && extract32(opc, 0, 1); } @@ -3227,6 +3230,8 @@ static void disas_ldst_reg_roffset(DisasContext *s, uint32_t insn, ext_and_shift_reg(tcg_rm, tcg_rm, opt, shift ? size : 0); tcg_gen_add_i64(dirty_addr, dirty_addr, tcg_rm); + + memop = finalize_memop(s, size + is_signed * MO_SIGN); clean_addr = gen_mte_check1(s, dirty_addr, is_store, true, size); if (is_vector) { @@ -3238,11 +3243,12 @@ static void disas_ldst_reg_roffset(DisasContext *s, uint32_t insn, } else { TCGv_i64 tcg_rt = cpu_reg(s, rt); bool iss_sf = disas_ldst_compute_iss_sf(size, is_signed, opc); + if (is_store) { - do_gpr_st(s, tcg_rt, clean_addr, size, + do_gpr_st(s, tcg_rt, clean_addr, memop, true, rt, iss_sf, false); } else { - do_gpr_ld(s, tcg_rt, clean_addr, size + is_signed * MO_SIGN, + do_gpr_ld(s, tcg_rt, clean_addr, memop, is_extended, true, rt, iss_sf, false); } } @@ -3274,12 +3280,11 @@ static void disas_ldst_reg_unsigned_imm(DisasContext *s, uint32_t insn, int rn = extract32(insn, 5, 5); unsigned int imm12 = extract32(insn, 10, 12); unsigned int offset; - TCGv_i64 clean_addr, dirty_addr; - bool is_store; bool is_signed = false; bool is_extended = false; + MemOp memop; if (is_vector) { size |= (opc & 2) << 1; @@ -3301,7 +3306,7 @@ static void disas_ldst_reg_unsigned_imm(DisasContext *s, uint32_t insn, return; } is_store = (opc == 0); - is_signed = extract32(opc, 1, 1); + is_signed = !is_store && extract32(opc, 1, 1); is_extended = (size < 3) && extract32(opc, 0, 1); } @@ -3311,6 +3316,8 @@ static void disas_ldst_reg_unsigned_imm(DisasContext *s, uint32_t insn, dirty_addr = read_cpu_reg_sp(s, rn, 1); offset = imm12 << size; tcg_gen_addi_i64(dirty_addr, dirty_addr, offset); + + memop = finalize_memop(s, size + is_signed * MO_SIGN); clean_addr = gen_mte_check1(s, dirty_addr, is_store, rn != 31, size); if (is_vector) { @@ -3323,10 +3330,9 @@ static void disas_ldst_reg_unsigned_imm(DisasContext *s, uint32_t insn, TCGv_i64 tcg_rt = cpu_reg(s, rt); bool iss_sf = disas_ldst_compute_iss_sf(size, is_signed, opc); if (is_store) { - do_gpr_st(s, tcg_rt, clean_addr, size, - true, rt, iss_sf, false); + do_gpr_st(s, tcg_rt, clean_addr, memop, true, rt, iss_sf, false); } else { - do_gpr_ld(s, tcg_rt, clean_addr, size + is_signed * MO_SIGN, + do_gpr_ld(s, tcg_rt, clean_addr, memop, is_extended, true, rt, iss_sf, false); } } @@ -3356,7 +3362,7 @@ static void disas_ldst_atomic(DisasContext *s, uint32_t insn, bool a = extract32(insn, 23, 1); TCGv_i64 tcg_rs, tcg_rt, clean_addr; AtomicThreeOpFn *fn = NULL; - MemOp mop = s->be_data | size | MO_ALIGN; + MemOp mop = finalize_memop(s, size | MO_ALIGN); if (is_vector || !dc_isar_feature(aa64_atomics, s)) { unallocated_encoding(s); @@ -3417,7 +3423,7 @@ static void disas_ldst_atomic(DisasContext *s, uint32_t insn, * full load-acquire (we only need "load-acquire processor consistent"), * but we choose to implement them as full LDAQ. */ - do_gpr_ld(s, cpu_reg(s, rt), clean_addr, size, false, + do_gpr_ld(s, cpu_reg(s, rt), clean_addr, mop, false, true, rt, disas_ldst_compute_iss_sf(size, false, 0), true); tcg_gen_mb(TCG_MO_ALL | TCG_BAR_LDAQ); return; @@ -3463,6 +3469,7 @@ static void disas_ldst_pac(DisasContext *s, uint32_t insn, bool use_key_a = !extract32(insn, 23, 1); int offset; TCGv_i64 clean_addr, dirty_addr, tcg_rt; + MemOp memop; if (size != 3 || is_vector || !dc_isar_feature(aa64_pauth, s)) { unallocated_encoding(s); @@ -3489,12 +3496,14 @@ static void disas_ldst_pac(DisasContext *s, uint32_t insn, offset = sextract32(offset << size, 0, 10 + size); tcg_gen_addi_i64(dirty_addr, dirty_addr, offset); + memop = finalize_memop(s, size); + /* Note that "clean" and "dirty" here refer to TBI not PAC. */ clean_addr = gen_mte_check1(s, dirty_addr, false, is_wback || rn != 31, size); tcg_rt = cpu_reg(s, rt); - do_gpr_ld(s, tcg_rt, clean_addr, size, + do_gpr_ld(s, tcg_rt, clean_addr, memop, /* extend */ false, /* iss_valid */ !is_wback, /* iss_srt */ rt, /* iss_sf */ true, /* iss_ar */ false); @@ -3536,7 +3545,7 @@ static void disas_ldst_ldapr_stlr(DisasContext *s, uint32_t insn) } /* TODO: ARMv8.4-LSE SCTLR.nAA */ - mop = size | MO_ALIGN; + mop = finalize_memop(s, size | MO_ALIGN); switch (opc) { case 0: /* STLURB */ From patchwork Thu May 25 23:25:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685628 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623011wrt; Thu, 25 May 2023 16:27:31 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6SaV6dl7ZuZT/gsEc4zBowGbe4yWW2Hh/Ut3kkOTmQ8Lo32hFmYukcV3c7afruUEhrp2Bw X-Received: by 2002:a05:6214:21c6:b0:621:3979:9be7 with SMTP id d6-20020a05621421c600b0062139799be7mr389451qvh.23.1685057250817; Thu, 25 May 2023 16:27:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057250; cv=none; d=google.com; s=arc-20160816; b=cS6tmjevJkRhPU8BhHCLDCXGwh/S4zHtAzfJn15LcjWW3h0ROnfexA4AJeOBsYE9EM woJY5JoltrpnKpgE7WsCFVnfagQGtwc2igtLQrIsrR1Qscl7FJ7dVG0qzRUstnGL5eZE bpNFyB1LUf/imC4Nl8HHhMyp88tovxuyNX1FdPYMfeNX81YsfTRiY4h2vgNKlDKODCA4 HA5/1YHgCRy4pStfbB6CrslvWkCtaIugS3njWvz0vCNTAkG0zcU7ywbzypTy6WiAMYyl /JWt1rBDpEemhJUBLGCJ/pYQSDTJfg35dH7qRWICYv/jSa2jgthvFLW+Rt0s3BoEOrUG rBzA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=BYK7f1Pw/I321noMCBsCUrAN7CJvgDgyb0P7aQ+L6OI=; b=oTqPUVrLfiYfJ6f5Xit4c7waCDUfDE8bqc//OmhasITZzuqt8j4WOuvI59Jm9F6EWt k4uAiBkpJ2dZ4qiso/OLD9edg8jwtA8VGWodU5xl1fdgjVFaJrHdQhQBwihDKb8g1wCy q9nwasFYURL2MQzS5M1qOBoR6r847Ac1ftvWggO+bdE49jiICvUSMPL7iJd47q2HxyWs V7Mh0OV2XH2yimSHJu0dLK+2KxqBFe9oyqLoeTK+fzGx+PAorEMI/ELmqynRYGG1f1l/ 74MieHgWLFAv5ZmDz1lfALjsMLWqpZANcDnRxH69EDSaqj283dlV/GBapJXWWVP42wNr 1t7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=hy5CcB2f; 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 t8-20020ad45bc8000000b00621b361f1eesi932427qvt.552.2023.05.25.16.27.30 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:27:30 -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=hy5CcB2f; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLb-0005sl-Ia; Thu, 25 May 2023 19:26:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLX-0005pd-Sp for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:15 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLV-0005nJ-15 for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:15 -0400 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-1ae408f4d1aso1082775ad.0 for ; Thu, 25 May 2023 16:26:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057168; x=1687649168; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BYK7f1Pw/I321noMCBsCUrAN7CJvgDgyb0P7aQ+L6OI=; b=hy5CcB2foxnz4wh/u+gmXwIozc8kgUXPKaW3HlT2lsN3xu1SEZInyMEqSF8P9pPLuY iKza4anwcwVmpTl9DcUk2HCUgSBpAo1DbAdjq7LYUBrIKu3n9I9mOWGbYd3iCx94Fg0V 4KfFLiUB7yjoQsUQKE0jPT/OurGf6MGYctgvD2oaexmEsy4E950LeGeozid9AoQ/TuJc UJJ6wbhKSBEdF3yfr+WHrTS7iKvBp2EwuUS858R8clOW+hgjKJBDf+AtESs5qoAAfaCg xykWwtNzF1sQ8o2Z37vig1FfaZ0NEpgLqQ5JITklkLnLdN6LWNkt89L8j6hssiqhqwu7 91ZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057168; x=1687649168; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BYK7f1Pw/I321noMCBsCUrAN7CJvgDgyb0P7aQ+L6OI=; b=TwQgxeLgjut6KFKF75YtLPAn1UirEDiZHUeJxlzKwurMzWkZOUPwsco/8nBD8VGON5 QSnEtMQtlsFK9OcOISUGCJjvjGfmsy8ts1HxLS0/P0ScRXCGJRETJmrqIAbbemvlNnJn fJDgxqZRzNNwzLnWUNVi4Y8k+JxKHVb0lZLloQfsqSRu2mY3Hd+HHrIOxcwv0lGNJ/it Xd21pkGIqnB2s+M5B7Q04K8MIcJsZRB10aYD5jweFXDR5HYETM1bIHebbec3Seci5Opv tBw1gOi6yt7+labK+Wf13dFe0HGElol9IMIf5+AlAJD4sjNRLgHw9GoARkhMrXMNUFNK FMyQ== X-Gm-Message-State: AC+VfDwdLFlsxbRNirNjXfd5PswkBZVWzqlVkjGerCMDA0PFzXwbVcEl X81WEfMomGPtzIA5kUct+o0Exm7VRBPhNfyj3xA= X-Received: by 2002:a17:902:bc43:b0:1af:de3d:bbe6 with SMTP id t3-20020a170902bc4300b001afde3dbbe6mr510098plz.2.1685057168278; Thu, 25 May 2023 16:26:08 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v2 11/20] target/arm: Hoist finalize_memop out of do_fp_{ld, st} Date: Thu, 25 May 2023 16:25:49 -0700 Message-Id: <20230525232558.1758967-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::632; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x632.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org We are going to need the complete memop beforehand, so let's not compute it twice. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daudé --- target/arm/tcg/translate-a64.c | 43 ++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 24e255aa34..02dbf76feb 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -915,15 +915,14 @@ static void do_gpr_ld(DisasContext *s, TCGv_i64 dest, TCGv_i64 tcg_addr, /* * Store from FP register to memory */ -static void do_fp_st(DisasContext *s, int srcidx, TCGv_i64 tcg_addr, int size) +static void do_fp_st(DisasContext *s, int srcidx, TCGv_i64 tcg_addr, MemOp mop) { /* This writes the bottom N bits of a 128 bit wide vector to memory */ TCGv_i64 tmplo = tcg_temp_new_i64(); - MemOp mop = finalize_memop_asimd(s, size); tcg_gen_ld_i64(tmplo, cpu_env, fp_reg_offset(s, srcidx, MO_64)); - if (size < MO_128) { + if ((mop & MO_SIZE) < MO_128) { tcg_gen_qemu_st_i64(tmplo, tcg_addr, get_mem_index(s), mop); } else { TCGv_i64 tmphi = tcg_temp_new_i64(); @@ -939,14 +938,13 @@ static void do_fp_st(DisasContext *s, int srcidx, TCGv_i64 tcg_addr, int size) /* * Load from memory to FP register */ -static void do_fp_ld(DisasContext *s, int destidx, TCGv_i64 tcg_addr, int size) +static void do_fp_ld(DisasContext *s, int destidx, TCGv_i64 tcg_addr, MemOp mop) { /* This always zero-extends and writes to a full 128 bit wide vector */ TCGv_i64 tmplo = tcg_temp_new_i64(); TCGv_i64 tmphi = NULL; - MemOp mop = finalize_memop_asimd(s, size); - if (size < MO_128) { + if ((mop & MO_SIZE) < MO_128) { tcg_gen_qemu_ld_i64(tmplo, tcg_addr, get_mem_index(s), mop); } else { TCGv_i128 t16 = tcg_temp_new_i128(); @@ -2775,6 +2773,7 @@ static void disas_ld_lit(DisasContext *s, uint32_t insn) bool is_signed = false; int size = 2; TCGv_i64 tcg_rt, clean_addr; + MemOp memop; if (is_vector) { if (opc == 3) { @@ -2785,6 +2784,7 @@ static void disas_ld_lit(DisasContext *s, uint32_t insn) if (!fp_access_check(s)) { return; } + memop = finalize_memop_asimd(s, size); } else { if (opc == 3) { /* PRFM (literal) : prefetch */ @@ -2792,19 +2792,19 @@ static void disas_ld_lit(DisasContext *s, uint32_t insn) } size = 2 + extract32(opc, 0, 1); is_signed = extract32(opc, 1, 1); + memop = finalize_memop(s, size + is_signed * MO_SIGN); } tcg_rt = cpu_reg(s, rt); clean_addr = tcg_temp_new_i64(); gen_pc_plus_diff(s, clean_addr, imm); + if (is_vector) { - do_fp_ld(s, rt, clean_addr, size); + do_fp_ld(s, rt, clean_addr, memop); } else { /* Only unsigned 32bit loads target 32bit registers. */ bool iss_sf = opc != 0; - MemOp memop = finalize_memop(s, size + is_signed * MO_SIGN); - do_gpr_ld(s, tcg_rt, clean_addr, memop, false, true, rt, iss_sf, false); } } @@ -2941,16 +2941,18 @@ static void disas_ldst_pair(DisasContext *s, uint32_t insn) (wback || rn != 31) && !set_tag, 2 << size); if (is_vector) { + MemOp mop = finalize_memop_asimd(s, size); + if (is_load) { - do_fp_ld(s, rt, clean_addr, size); + do_fp_ld(s, rt, clean_addr, mop); } else { - do_fp_st(s, rt, clean_addr, size); + do_fp_st(s, rt, clean_addr, mop); } tcg_gen_addi_i64(clean_addr, clean_addr, 1 << size); if (is_load) { - do_fp_ld(s, rt2, clean_addr, size); + do_fp_ld(s, rt2, clean_addr, mop); } else { - do_fp_st(s, rt2, clean_addr, size); + do_fp_st(s, rt2, clean_addr, mop); } } else { TCGv_i64 tcg_rt = cpu_reg(s, rt); @@ -3072,6 +3074,7 @@ static void disas_ldst_reg_imm9(DisasContext *s, uint32_t insn, if (!fp_access_check(s)) { return; } + memop = finalize_memop_asimd(s, size); } else { if (size == 3 && opc == 2) { /* PRFM - prefetch */ @@ -3088,6 +3091,7 @@ static void disas_ldst_reg_imm9(DisasContext *s, uint32_t insn, is_store = (opc == 0); is_signed = !is_store && extract32(opc, 1, 1); is_extended = (size < 3) && extract32(opc, 0, 1); + memop = finalize_memop(s, size + is_signed * MO_SIGN); } switch (idx) { @@ -3120,7 +3124,6 @@ static void disas_ldst_reg_imm9(DisasContext *s, uint32_t insn, } memidx = is_unpriv ? get_a64_user_mem_index(s) : get_mem_index(s); - memop = finalize_memop(s, size + is_signed * MO_SIGN); clean_addr = gen_mte_check1_mmuidx(s, dirty_addr, is_store, writeback || rn != 31, @@ -3128,9 +3131,9 @@ static void disas_ldst_reg_imm9(DisasContext *s, uint32_t insn, if (is_vector) { if (is_store) { - do_fp_st(s, rt, clean_addr, size); + do_fp_st(s, rt, clean_addr, memop); } else { - do_fp_ld(s, rt, clean_addr, size); + do_fp_ld(s, rt, clean_addr, memop); } } else { TCGv_i64 tcg_rt = cpu_reg(s, rt); @@ -3236,9 +3239,9 @@ static void disas_ldst_reg_roffset(DisasContext *s, uint32_t insn, if (is_vector) { if (is_store) { - do_fp_st(s, rt, clean_addr, size); + do_fp_st(s, rt, clean_addr, memop); } else { - do_fp_ld(s, rt, clean_addr, size); + do_fp_ld(s, rt, clean_addr, memop); } } else { TCGv_i64 tcg_rt = cpu_reg(s, rt); @@ -3322,9 +3325,9 @@ static void disas_ldst_reg_unsigned_imm(DisasContext *s, uint32_t insn, if (is_vector) { if (is_store) { - do_fp_st(s, rt, clean_addr, size); + do_fp_st(s, rt, clean_addr, memop); } else { - do_fp_ld(s, rt, clean_addr, size); + do_fp_ld(s, rt, clean_addr, memop); } } else { TCGv_i64 tcg_rt = cpu_reg(s, rt); From patchwork Thu May 25 23:25:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685643 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623445wrt; Thu, 25 May 2023 16:28:50 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7IFv31ELCPtl1PHMYJ9OU0j6qI+Uz+aiUODBxXeY3CJbXyTmMOlWfd/PSfhdfZsl7qTSJa X-Received: by 2002:a05:622a:1482:b0:3f5:80b:471e with SMTP id t2-20020a05622a148200b003f5080b471emr149819qtx.24.1685057330005; Thu, 25 May 2023 16:28:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057329; cv=none; d=google.com; s=arc-20160816; b=UVhdgrfQiXwZ7D1if7DnpX5cispDiPzTh33zKiH7q/ZX7WSOWSoXopwkRJg6tg+17J ruGfcwMVeZq/pgX+jym06yOQEl+gYE4dSaySQ+deRWLctr8T56CxhEYYeRZ5LrA/OF2S QHAdTsy98sRYaOqExisgbC82jWCBlMo08ugAxLODaPk8nXkRjwgSn1Q8oyWLdRaeDcp6 pAm7b36DDM89X+OvQMq8I4E3m9LV0DOrOEETFaIdRkMAg+4M6Ctb1z5lZ9hqEAZbtSpB 8X0G1L+vC2qg9Wm8hV+9cmfwpFvp++pULcjeH14KMPGRrzXSYPYNCBWDQBsGSgVQBhEQ 7ESw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=YCRe18lX4hxzOUj7mXv+qMuB6xU6vkt8dgfEQPLSZ34=; b=mbTBoYLaER0fuJJFIyCciDijjbJyKoZQl7ju8hZi5zbkt3oYMqULO2E9KHjaaIhFJ5 NQmGqNpOc7ZTErQ3U5iAQRodA+iM6SM5HBVjpr8QaYLLp/aM+lGikQu4IruSsbWRU7ky PuNZX/clIVRq9YtWmVtrrvcmxvVp5wn6cbyG7BuCVzhMaxPko9DLmwgoxZsckQkd81WL D9CAT5dSp+gVkWQXR6bY5QQv+hTpyIqHRBxJkl47yP2y5GHXBQ3zM+pJKaq+mPgvHGkx ruhu5w5ywTWsM6G7GE7bfkACwpwLVN6gBEM4ljEfg6aIlDSonJDbU1b0jeXHbcbcGwhT ucjA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=rQKAF2JW; 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 h5-20020ac87d45000000b003e651ef42c3si915548qtb.112.2023.05.25.16.28.49 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:28:49 -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=pass header.i=@linaro.org header.s=google header.b=rQKAF2JW; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLi-0005ye-OJ; Thu, 25 May 2023 19:26:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLb-0005rw-3S for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:19 -0400 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLV-0005lS-26 for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:18 -0400 Received: by mail-pg1-x533.google.com with SMTP id 41be03b00d2f7-51b33c72686so72381a12.1 for ; Thu, 25 May 2023 16:26:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057169; x=1687649169; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YCRe18lX4hxzOUj7mXv+qMuB6xU6vkt8dgfEQPLSZ34=; b=rQKAF2JWJQa4oEk0iFNjsZMZgURPh161OlrrIBRc39u4BYHESfraxhbrkoduN3wTvw ha84QxWFE0mpQsZQICP1Y/Yr/Xy3sno8zUoxcW26rNomsrSBXbOyUiGKH6cTUmSDxHtw zIFORvj40fmTRrwopgaw6jkk7F3zR5IoCJK6Nu6L0VdND3/mRY6faDb86r/42D+OYCx5 yS++ZXKKSFN7oEJYFQUP1URRWdezfKmIymWtqtV5nwi3NWr+y8n83bPfJwiNqYWlB9Wz hQDTKGBCSsG9CAj1Hok797tqUF303h7RHUFaXduyqJYLTFwb/pbAvyqkqsJYKaAgYWFJ t8Jw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057169; x=1687649169; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YCRe18lX4hxzOUj7mXv+qMuB6xU6vkt8dgfEQPLSZ34=; b=PTlBWCRg/yf7eBYYIghof9u7KVD7mYpF9FamcZPuvQFpLyhaXEi0iMArMkMdBrhL5t U8qnhNtKBEeV21TyyyMaoWN6UlcbZdSwVvhxwSbcNXhUoxQZL8KYOpwZHvk6GvterdHp cMAddeALLnwNiBUjUChrfKaSrJ0NXm2u8/uy55Fz1HfoKzs1XymtHx/9TBWgblRod/WV BV1rDmLqaCh3VSQmFbhD/7g0jyGWLxS2/dknwrC1ds97HpVhzCpef46NAEC/OCBRWm3Z x1yficOfQjBALDY4l8liZVs58VF+t1GW5aPi7S9fp7/Z4v3XIXVLGlhWYI/AN0Yug8Qg tgbw== X-Gm-Message-State: AC+VfDwC+UW3E5n4WtP0M5qhSyLnSacKP4VNyzxPRqmi9AV1+UiV7WDs fZ3X6QV6Rj4yXyvrY1w/7rvWlEiBDHE9gHBA4u0= X-Received: by 2002:a17:903:189:b0:1aa:f203:781c with SMTP id z9-20020a170903018900b001aaf203781cmr335106plg.44.1685057169257; Thu, 25 May 2023 16:26:09 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v2 12/20] target/arm: Pass memop to gen_mte_check1* Date: Thu, 25 May 2023 16:25:50 -0700 Message-Id: <20230525232558.1758967-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::533; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x533.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Pass the completed memop to gen_mte_check1_mmuidx. For the moment, do nothing more than extract the size. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.h | 2 +- target/arm/tcg/translate-a64.c | 82 ++++++++++++++++++---------------- target/arm/tcg/translate-sve.c | 7 +-- 3 files changed, 49 insertions(+), 42 deletions(-) diff --git a/target/arm/tcg/translate-a64.h b/target/arm/tcg/translate-a64.h index 0576c4ea12..cecf2bab8f 100644 --- a/target/arm/tcg/translate-a64.h +++ b/target/arm/tcg/translate-a64.h @@ -49,7 +49,7 @@ static inline bool sme_smza_enabled_check(DisasContext *s) TCGv_i64 clean_data_tbi(DisasContext *s, TCGv_i64 addr); TCGv_i64 gen_mte_check1(DisasContext *s, TCGv_i64 addr, bool is_write, - bool tag_checked, int log2_size); + bool tag_checked, MemOp memop); TCGv_i64 gen_mte_checkN(DisasContext *s, TCGv_i64 addr, bool is_write, bool tag_checked, int size); diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 02dbf76feb..2a7be5c745 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -263,7 +263,7 @@ static void gen_probe_access(DisasContext *s, TCGv_i64 ptr, */ static TCGv_i64 gen_mte_check1_mmuidx(DisasContext *s, TCGv_i64 addr, bool is_write, bool tag_checked, - int log2_size, bool is_unpriv, + MemOp memop, bool is_unpriv, int core_idx) { if (tag_checked && s->mte_active[is_unpriv]) { @@ -274,7 +274,7 @@ static TCGv_i64 gen_mte_check1_mmuidx(DisasContext *s, TCGv_i64 addr, desc = FIELD_DP32(desc, MTEDESC, TBI, s->tbid); desc = FIELD_DP32(desc, MTEDESC, TCMA, s->tcma); desc = FIELD_DP32(desc, MTEDESC, WRITE, is_write); - desc = FIELD_DP32(desc, MTEDESC, SIZEM1, (1 << log2_size) - 1); + desc = FIELD_DP32(desc, MTEDESC, SIZEM1, memop_size(memop) - 1); ret = tcg_temp_new_i64(); gen_helper_mte_check(ret, cpu_env, tcg_constant_i32(desc), addr); @@ -285,9 +285,9 @@ static TCGv_i64 gen_mte_check1_mmuidx(DisasContext *s, TCGv_i64 addr, } TCGv_i64 gen_mte_check1(DisasContext *s, TCGv_i64 addr, bool is_write, - bool tag_checked, int log2_size) + bool tag_checked, MemOp memop) { - return gen_mte_check1_mmuidx(s, addr, is_write, tag_checked, log2_size, + return gen_mte_check1_mmuidx(s, addr, is_write, tag_checked, memop, false, get_mem_index(s)); } @@ -2381,19 +2381,31 @@ static void gen_load_exclusive(DisasContext *s, int rt, int rt2, int rn, int size, bool is_pair) { int idx = get_mem_index(s); - MemOp memop; TCGv_i64 dirty_addr, clean_addr; + MemOp memop; + + /* + * For pairs: + * if size == 2, the operation is single-copy atomic for the doubleword. + * if size == 3, the operation is single-copy atomic for *each* doubleword, + * not the entire quadword, however it must be quadword aligned. + */ + memop = size + is_pair; + if (memop == MO_128) { + memop = finalize_memop_atom(s, MO_128 | MO_ALIGN, + MO_ATOM_IFALIGN_PAIR); + } else { + memop = finalize_memop(s, memop | MO_ALIGN); + } s->is_ldex = true; dirty_addr = cpu_reg_sp(s, rn); - clean_addr = gen_mte_check1(s, dirty_addr, false, rn != 31, size); + clean_addr = gen_mte_check1(s, dirty_addr, false, rn != 31, memop); g_assert(size <= 3); if (is_pair) { g_assert(size >= 2); if (size == 2) { - /* The pair must be single-copy atomic for the doubleword. */ - memop = finalize_memop(s, MO_64 | MO_ALIGN); tcg_gen_qemu_ld_i64(cpu_exclusive_val, clean_addr, idx, memop); if (s->be_data == MO_LE) { tcg_gen_extract_i64(cpu_reg(s, rt), cpu_exclusive_val, 0, 32); @@ -2403,16 +2415,8 @@ static void gen_load_exclusive(DisasContext *s, int rt, int rt2, int rn, tcg_gen_extract_i64(cpu_reg(s, rt2), cpu_exclusive_val, 0, 32); } } else { - /* - * The pair must be single-copy atomic for *each* doubleword, not - * the entire quadword, however it must be quadword aligned. - * Expose the complete load to tcg, for ease of tlb lookup, - * but indicate that only 8-byte atomicity is required. - */ TCGv_i128 t16 = tcg_temp_new_i128(); - memop = finalize_memop_atom(s, MO_128 | MO_ALIGN_16, - MO_ATOM_IFALIGN_PAIR); tcg_gen_qemu_ld_i128(t16, clean_addr, idx, memop); if (s->be_data == MO_LE) { @@ -2426,7 +2430,6 @@ static void gen_load_exclusive(DisasContext *s, int rt, int rt2, int rn, tcg_gen_mov_i64(cpu_reg(s, rt2), cpu_exclusive_high); } } else { - memop = finalize_memop(s, size | MO_ALIGN); tcg_gen_qemu_ld_i64(cpu_exclusive_val, clean_addr, idx, memop); tcg_gen_mov_i64(cpu_reg(s, rt), cpu_exclusive_val); } @@ -2451,9 +2454,13 @@ static void gen_store_exclusive(DisasContext *s, int rd, int rt, int rt2, TCGLabel *fail_label = gen_new_label(); TCGLabel *done_label = gen_new_label(); TCGv_i64 tmp, dirty_addr, clean_addr; + MemOp memop; + + memop = (size + is_pair) | MO_ALIGN; + memop = finalize_memop(s, memop); dirty_addr = cpu_reg_sp(s, rn); - clean_addr = gen_mte_check1(s, dirty_addr, true, rn != 31, size); + clean_addr = gen_mte_check1(s, dirty_addr, true, rn != 31, memop); tcg_gen_brcond_i64(TCG_COND_NE, clean_addr, cpu_exclusive_addr, fail_label); @@ -2467,8 +2474,7 @@ static void gen_store_exclusive(DisasContext *s, int rd, int rt, int rt2, } tcg_gen_atomic_cmpxchg_i64(tmp, cpu_exclusive_addr, cpu_exclusive_val, tmp, - get_mem_index(s), - MO_64 | MO_ALIGN | s->be_data); + get_mem_index(s), memop); tcg_gen_setcond_i64(TCG_COND_NE, tmp, tmp, cpu_exclusive_val); } else { TCGv_i128 t16 = tcg_temp_new_i128(); @@ -2486,8 +2492,7 @@ static void gen_store_exclusive(DisasContext *s, int rd, int rt, int rt2, } tcg_gen_atomic_cmpxchg_i128(t16, cpu_exclusive_addr, c16, t16, - get_mem_index(s), - MO_128 | MO_ALIGN | s->be_data); + get_mem_index(s), memop); a = tcg_temp_new_i64(); b = tcg_temp_new_i64(); @@ -2505,8 +2510,7 @@ static void gen_store_exclusive(DisasContext *s, int rd, int rt, int rt2, } } else { tcg_gen_atomic_cmpxchg_i64(tmp, cpu_exclusive_addr, cpu_exclusive_val, - cpu_reg(s, rt), get_mem_index(s), - size | MO_ALIGN | s->be_data); + cpu_reg(s, rt), get_mem_index(s), memop); tcg_gen_setcond_i64(TCG_COND_NE, tmp, tmp, cpu_exclusive_val); } tcg_gen_mov_i64(cpu_reg(s, rd), tmp); @@ -2525,13 +2529,15 @@ static void gen_compare_and_swap(DisasContext *s, int rs, int rt, TCGv_i64 tcg_rt = cpu_reg(s, rt); int memidx = get_mem_index(s); TCGv_i64 clean_addr; + MemOp memop; if (rn == 31) { gen_check_sp_alignment(s); } - clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), true, rn != 31, size); - tcg_gen_atomic_cmpxchg_i64(tcg_rs, clean_addr, tcg_rs, tcg_rt, memidx, - size | MO_ALIGN | s->be_data); + memop = finalize_memop(s, size | MO_ALIGN); + clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), true, rn != 31, memop); + tcg_gen_atomic_cmpxchg_i64(tcg_rs, clean_addr, tcg_rs, tcg_rt, + memidx, memop); } static void gen_compare_and_swap_pair(DisasContext *s, int rs, int rt, @@ -2543,13 +2549,15 @@ static void gen_compare_and_swap_pair(DisasContext *s, int rs, int rt, TCGv_i64 t2 = cpu_reg(s, rt + 1); TCGv_i64 clean_addr; int memidx = get_mem_index(s); + MemOp memop; if (rn == 31) { gen_check_sp_alignment(s); } /* This is a single atomic access, despite the "pair". */ - clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), true, rn != 31, size + 1); + memop = finalize_memop(s, (size + 1) | MO_ALIGN); + clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), true, rn != 31, memop); if (size == 2) { TCGv_i64 cmp = tcg_temp_new_i64(); @@ -2563,8 +2571,7 @@ static void gen_compare_and_swap_pair(DisasContext *s, int rs, int rt, tcg_gen_concat32_i64(cmp, s2, s1); } - tcg_gen_atomic_cmpxchg_i64(cmp, clean_addr, cmp, val, memidx, - MO_64 | MO_ALIGN | s->be_data); + tcg_gen_atomic_cmpxchg_i64(cmp, clean_addr, cmp, val, memidx, memop); if (s->be_data == MO_LE) { tcg_gen_extr32_i64(s1, s2, cmp); @@ -2583,8 +2590,7 @@ static void gen_compare_and_swap_pair(DisasContext *s, int rs, int rt, tcg_gen_concat_i64_i128(cmp, s2, s1); } - tcg_gen_atomic_cmpxchg_i128(cmp, clean_addr, cmp, val, memidx, - MO_128 | MO_ALIGN | s->be_data); + tcg_gen_atomic_cmpxchg_i128(cmp, clean_addr, cmp, val, memidx, memop); if (s->be_data == MO_LE) { tcg_gen_extr_i128_i64(s1, s2, cmp); @@ -2673,7 +2679,7 @@ static void disas_ldst_excl(DisasContext *s, uint32_t insn) /* TODO: ARMv8.4-LSE SCTLR.nAA */ memop = finalize_memop(s, size | MO_ALIGN); clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), - true, rn != 31, size); + true, rn != 31, memop); do_gpr_st(s, cpu_reg(s, rt), clean_addr, memop, true, rt, disas_ldst_compute_iss_sf(size, false, 0), is_lasr); return; @@ -2692,7 +2698,7 @@ static void disas_ldst_excl(DisasContext *s, uint32_t insn) /* TODO: ARMv8.4-LSE SCTLR.nAA */ memop = finalize_memop(s, size | MO_ALIGN); clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), - false, rn != 31, size); + false, rn != 31, memop); do_gpr_ld(s, cpu_reg(s, rt), clean_addr, memop, false, true, rt, disas_ldst_compute_iss_sf(size, false, 0), is_lasr); tcg_gen_mb(TCG_MO_ALL | TCG_BAR_LDAQ); @@ -3235,7 +3241,7 @@ static void disas_ldst_reg_roffset(DisasContext *s, uint32_t insn, tcg_gen_add_i64(dirty_addr, dirty_addr, tcg_rm); memop = finalize_memop(s, size + is_signed * MO_SIGN); - clean_addr = gen_mte_check1(s, dirty_addr, is_store, true, size); + clean_addr = gen_mte_check1(s, dirty_addr, is_store, true, memop); if (is_vector) { if (is_store) { @@ -3321,7 +3327,7 @@ static void disas_ldst_reg_unsigned_imm(DisasContext *s, uint32_t insn, tcg_gen_addi_i64(dirty_addr, dirty_addr, offset); memop = finalize_memop(s, size + is_signed * MO_SIGN); - clean_addr = gen_mte_check1(s, dirty_addr, is_store, rn != 31, size); + clean_addr = gen_mte_check1(s, dirty_addr, is_store, rn != 31, memop); if (is_vector) { if (is_store) { @@ -3416,7 +3422,7 @@ static void disas_ldst_atomic(DisasContext *s, uint32_t insn, if (rn == 31) { gen_check_sp_alignment(s); } - clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), false, rn != 31, size); + clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), false, rn != 31, mop); if (o3_opc == 014) { /* @@ -3503,7 +3509,7 @@ static void disas_ldst_pac(DisasContext *s, uint32_t insn, /* Note that "clean" and "dirty" here refer to TBI not PAC. */ clean_addr = gen_mte_check1(s, dirty_addr, false, - is_wback || rn != 31, size); + is_wback || rn != 31, memop); tcg_rt = cpu_reg(s, rt); do_gpr_ld(s, tcg_rt, clean_addr, memop, diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 058f7ef237..18ab5bf7c6 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -5020,6 +5020,7 @@ static bool trans_LD1R_zpri(DisasContext *s, arg_rpri_load *a) unsigned msz = dtype_msz(a->dtype); TCGLabel *over; TCGv_i64 temp, clean_addr; + MemOp memop; if (!dc_isar_feature(aa64_sve, s)) { return false; @@ -5049,10 +5050,10 @@ static bool trans_LD1R_zpri(DisasContext *s, arg_rpri_load *a) /* Load the data. */ temp = tcg_temp_new_i64(); tcg_gen_addi_i64(temp, cpu_reg_sp(s, a->rn), a->imm << msz); - clean_addr = gen_mte_check1(s, temp, false, true, msz); - tcg_gen_qemu_ld_i64(temp, clean_addr, get_mem_index(s), - finalize_memop(s, dtype_mop[a->dtype])); + memop = finalize_memop(s, dtype_mop[a->dtype]); + clean_addr = gen_mte_check1(s, temp, false, true, memop); + tcg_gen_qemu_ld_i64(temp, clean_addr, get_mem_index(s), memop); /* Broadcast to *all* elements. */ tcg_gen_gvec_dup_i64(esz, vec_full_reg_offset(s, a->rd), From patchwork Thu May 25 23:25:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685627 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623006wrt; Thu, 25 May 2023 16:27:30 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ59gogLYBSZUkuESz7ekFOaImQ9M4u3Et7trguJ5NFRrlx/kKORVxPuKmc6qLCD91o8h+RB X-Received: by 2002:a37:ef19:0:b0:75b:23a1:422 with SMTP id j25-20020a37ef19000000b0075b23a10422mr311601qkk.56.1685057250519; Thu, 25 May 2023 16:27:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057250; cv=none; d=google.com; s=arc-20160816; b=BwELLr9yrxbpELF0hvAAA6BnH37aHv82Lg3w7snwONAEpSBLUup/a4Y8uHpdiyIPIy TGnE7MxJifS+ugiyJEAs2YxbKIF7vB2RzoB8hXqdM/06gAvg1XEubcxcALGQt8cGj2YX uHBlRUscHNfnMv80lPjwoAjCx0aaly0XkAi9MAFVSJpMqn9ybZ1I83kPD+HBksHhfsmU e8gGakOl8nkx+dWe5NBh+VMVxFRBdurVYNRC28YQEdaWHsoNQjfvo7S8av2iOcZpi9O1 eP8s1QxDe/Wm5z8E7QkHmt9V4phuWrZIwOw/DQKK8iArwH1RnconnSgl4WgkanivyUS+ 4RKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=2QxG0bahKcXSUtA6+ptPNjNIckP34vwB5oyRvje+RLk=; b=pcEuAWnrcAnCQ3pSVk+Wfz0tqLCrEr6v1dB6M9gk/bIsIltif51NOTYuwbFnDEhc/i mHaYRF0R+u2zxpDgWZIH0f4bhtJMirD+/J/RSV/HLBvRm1i0EXl0exBjJg5YwmN4F2pp D2+7y3E3G0/W/OMBuwnPRwOEVsqJZzMlzejvnWMB/xjV4aP0KpIDi17XLapNZCT6p2Bi sxU4mwwyzRbOa/6PlbU5jisJpulg0bKkc6psBO3C8I3Svrwr+01T6/95g+3xzk2GA9w2 E6Utxb4Y45jm6D+LP45L8qZWqJGGqdGNkI958S7fKc/qI8b6RCwPw2BQIWWXDwuDJLTH WAgw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=LYX0rx6F; 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 p19-20020a05620a113300b007592003c079si943361qkk.193.2023.05.25.16.27.30 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:27:30 -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=pass header.i=@linaro.org header.s=google header.b=LYX0rx6F; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLh-0005ws-HY; Thu, 25 May 2023 19:26:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLa-0005rG-43 for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:18 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLV-0005oA-2a for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:17 -0400 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-1afa6afcf4fso1525555ad.0 for ; Thu, 25 May 2023 16:26:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057170; x=1687649170; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2QxG0bahKcXSUtA6+ptPNjNIckP34vwB5oyRvje+RLk=; b=LYX0rx6FkstjNBRrdzkA/o8sg/W1+eEkxH6y1Pn/51qk0fkZ1Nd7WzgnPQMqwEXBkg oHauMzD7KXrDjNE/EQ4D3vDNkgZ8R/gnP+DidBLUYd98IJ88Z+gjxnX/hWVmHfn6O+RT WIZvPFmVAsqWYCVaUuX9XNCLrk4M/Xwlrk67nr0TX6GgKXNTrV5ZWkpm3yWXgxO14RWl akr2Xk7lR5AkwTeeBhubxTv6WtGrZ0VhOUZUpIVFKNhhfbpMQE3dC52zKuhlrMgeAgVh ZhON7+fSltH46SidEJ/v92cqcNlS+i+2NOuS+QIS9g1t7A/S/sIKllyW7NRAmq3/cjhH ekBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057170; x=1687649170; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2QxG0bahKcXSUtA6+ptPNjNIckP34vwB5oyRvje+RLk=; b=PX1eADPFkN+wXUzm4DtcgRYQTxzdnaIk+auuzUjZGBvivSJ5InUVK6LcR3nWLjrYlX zZO/HbR0uVXRRqHpB44rm34t4r0zZp0/6FnDgipQHIypEVNT8PM9fY5TV8f/eQ5dWiEw 5Afn61+rbWsyWdxNfG5zHrc1bguxMyeZAA3F3oo4ZZGqY3RfCCquaA+FEna//UvlsiHd L2tkXwRahPcq++6rS7L8WosGqDNB1OijLPdXInqOLaP+g9yNu/uDvadIvKD/yHEd7Hpn J62QuXXyL33TuuglfI0ecnVXqNGZQ7YLb9U6q+nVchgk7wD4D51Ee/ngApzmWLr4wfnk agIg== X-Gm-Message-State: AC+VfDypc9KvcwlI7XN/jMGpTIsYU5xXzDvG39FrfGhdexy02l99nwm9 9CGDHgXLjp0WxNmxSVAYGr7eIX2Taxhi60HzBOE= X-Received: by 2002:a17:902:db02:b0:1ae:6135:a050 with SMTP id m2-20020a170902db0200b001ae6135a050mr498582plx.19.1685057170195; Thu, 25 May 2023 16:26:10 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v2 13/20] target/arm: Pass single_memop to gen_mte_checkN Date: Thu, 25 May 2023 16:25:51 -0700 Message-Id: <20230525232558.1758967-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62f; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Pass the individual memop to gen_mte_checkN. For the moment, do nothing with it. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.h | 2 +- target/arm/tcg/translate-a64.c | 31 +++++++++++++++++++------------ target/arm/tcg/translate-sve.c | 4 ++-- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/target/arm/tcg/translate-a64.h b/target/arm/tcg/translate-a64.h index cecf2bab8f..b55dc435fc 100644 --- a/target/arm/tcg/translate-a64.h +++ b/target/arm/tcg/translate-a64.h @@ -51,7 +51,7 @@ TCGv_i64 clean_data_tbi(DisasContext *s, TCGv_i64 addr); TCGv_i64 gen_mte_check1(DisasContext *s, TCGv_i64 addr, bool is_write, bool tag_checked, MemOp memop); TCGv_i64 gen_mte_checkN(DisasContext *s, TCGv_i64 addr, bool is_write, - bool tag_checked, int size); + bool tag_checked, int total_size, MemOp memop); /* We should have at some point before trying to access an FP register * done the necessary access check, so assert that diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 2a7be5c745..214a9b1638 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -295,7 +295,7 @@ TCGv_i64 gen_mte_check1(DisasContext *s, TCGv_i64 addr, bool is_write, * For MTE, check multiple logical sequential accesses. */ TCGv_i64 gen_mte_checkN(DisasContext *s, TCGv_i64 addr, bool is_write, - bool tag_checked, int size) + bool tag_checked, int total_size, MemOp single_mop) { if (tag_checked && s->mte_active[0]) { TCGv_i64 ret; @@ -305,7 +305,7 @@ TCGv_i64 gen_mte_checkN(DisasContext *s, TCGv_i64 addr, bool is_write, desc = FIELD_DP32(desc, MTEDESC, TBI, s->tbid); desc = FIELD_DP32(desc, MTEDESC, TCMA, s->tcma); desc = FIELD_DP32(desc, MTEDESC, WRITE, is_write); - desc = FIELD_DP32(desc, MTEDESC, SIZEM1, size - 1); + desc = FIELD_DP32(desc, MTEDESC, SIZEM1, total_size - 1); ret = tcg_temp_new_i64(); gen_helper_mte_check(ret, cpu_env, tcg_constant_i32(desc), addr); @@ -2853,14 +2853,12 @@ static void disas_ldst_pair(DisasContext *s, uint32_t insn) bool is_vector = extract32(insn, 26, 1); bool is_load = extract32(insn, 22, 1); int opc = extract32(insn, 30, 2); - bool is_signed = false; bool postindex = false; bool wback = false; bool set_tag = false; - TCGv_i64 clean_addr, dirty_addr; - + MemOp mop; int size; if (opc == 3) { @@ -2943,12 +2941,17 @@ static void disas_ldst_pair(DisasContext *s, uint32_t insn) } } + if (is_vector) { + mop = finalize_memop_asimd(s, size); + } else { + mop = finalize_memop(s, size); + } clean_addr = gen_mte_checkN(s, dirty_addr, !is_load, - (wback || rn != 31) && !set_tag, 2 << size); + (wback || rn != 31) && !set_tag, + 2 << size, mop); if (is_vector) { - MemOp mop = finalize_memop_asimd(s, size); - + /* LSE2 does not merge FP pairs; leave these as separate operations. */ if (is_load) { do_fp_ld(s, rt, clean_addr, mop); } else { @@ -2963,9 +2966,11 @@ static void disas_ldst_pair(DisasContext *s, uint32_t insn) } else { TCGv_i64 tcg_rt = cpu_reg(s, rt); TCGv_i64 tcg_rt2 = cpu_reg(s, rt2); - MemOp mop = size + 1; /* + * We built mop above for the single logical access -- rebuild it + * now for the paired operation. + * * With LSE2, non-sign-extending pairs are treated atomically if * aligned, and if unaligned one of the pair will be completely * within a 16-byte block and that element will be atomic. @@ -2975,6 +2980,7 @@ static void disas_ldst_pair(DisasContext *s, uint32_t insn) * This treats sign-extending loads like zero-extending loads, * since that reuses the most code below. */ + mop = size + 1; if (s->align_mem) { mop |= (size == 2 ? MO_ALIGN_4 : MO_ALIGN_8); } @@ -3753,7 +3759,7 @@ static void disas_ldst_multiple_struct(DisasContext *s, uint32_t insn) * promote consecutive little-endian elements below. */ clean_addr = gen_mte_checkN(s, tcg_rn, is_store, is_postidx || rn != 31, - total); + total, finalize_memop(s, size)); /* * Consecutive little-endian elements from a single register @@ -3911,10 +3917,11 @@ static void disas_ldst_single_struct(DisasContext *s, uint32_t insn) total = selem << scale; tcg_rn = cpu_reg_sp(s, rn); - clean_addr = gen_mte_checkN(s, tcg_rn, !is_load, is_postidx || rn != 31, - total); mop = finalize_memop(s, scale); + clean_addr = gen_mte_checkN(s, tcg_rn, !is_load, is_postidx || rn != 31, + total, mop); + tcg_ebytes = tcg_constant_i64(1 << scale); for (xs = 0; xs < selem; xs++) { if (replicate) { diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 18ab5bf7c6..1eea6ab5ac 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -4187,7 +4187,7 @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int vofs, dirty_addr = tcg_temp_new_i64(); tcg_gen_addi_i64(dirty_addr, cpu_reg_sp(s, rn), imm); - clean_addr = gen_mte_checkN(s, dirty_addr, false, rn != 31, len); + clean_addr = gen_mte_checkN(s, dirty_addr, false, rn != 31, len, MO_8); /* * Note that unpredicated load/store of vector/predicate registers @@ -4289,7 +4289,7 @@ void gen_sve_str(DisasContext *s, TCGv_ptr base, int vofs, dirty_addr = tcg_temp_new_i64(); tcg_gen_addi_i64(dirty_addr, cpu_reg_sp(s, rn), imm); - clean_addr = gen_mte_checkN(s, dirty_addr, false, rn != 31, len); + clean_addr = gen_mte_checkN(s, dirty_addr, false, rn != 31, len, MO_8); /* Note that unpredicated load/store of vector/predicate registers * are defined as a stream of bytes, which equates to little-endian From patchwork Thu May 25 23:25:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685633 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623307wrt; Thu, 25 May 2023 16:28:19 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6jgOHQK1bL8/EyEmIMRp3tHmuxMdaoVarQAToNX9Usk2Y9U5mvoWfTtj6cgLhh6K39PLjR X-Received: by 2002:ad4:5be4:0:b0:621:68e8:99a4 with SMTP id k4-20020ad45be4000000b0062168e899a4mr260089qvc.8.1685057299372; Thu, 25 May 2023 16:28:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057299; cv=none; d=google.com; s=arc-20160816; b=O7nEZQdvRfzbYcyfSC3ZtMXiyiBWMYS5TW6vEeUKScn6Zg6zExt3yVVbAY/WmT/dVY wUp+b8EyrkRAoJ3P04gvkIoXB0sSIZMsMhPjiRGrtCXVJvUctwyLUTZuD6vx/q/gzr/m AZmvIHrzPlm5K0huXPrFm9OuSTBYBZdXiMzdoVdkfLFMIdNS1t8+ohXoCvO+RprCmp/Z tTGdAPC89pdnR5b6o5S+AMXzNmZu09ggg4UxfYIrDTMMY0AHXM4d0XMZojx/20TzVzzk FqiyouaXgAaBrvxsoq8Ln4VD8Qyg0EDmMbP9wuy/hobvA6/UrYVe4I24VczNovENsyJN EpSw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=6JfHuaMlr/R5D+hsSo7rFRMVl2Kxv9MZXkN8QLhXQd8=; b=BCMShPzRuE24ZyH+pNZmJxQDzkWeWOMsMPa9ZkdFspy6DbIKUeJzjk37B8PP4wJoIW /MZDWoiuWXgjH1n/Sv1dIehelKZpboGAnC28QwVIOtYQmXTV9EzHEXnW/svtaW5hTwFt PdbXaH6b1KQLzKMarpWFq9v0PBYrZ7fRWkuRY87vZPYp5MQH4FC4HtajGxK5rrbUklzb BzUd1c88MYu066wF9Xi70CpF8Je2k/0OHosf5Wk9G8d6l3KjsSNLe9/EjvjPBkxWivSh /pHtcu38jtEP2A8u94xf3DTpsnfYijjWGW0BkBSLqe8SX73W6V/nmrKIJZCJX9dBeZkW yAwQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=HINTjw9b; 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 15-20020a0562140d4f00b0062390c1fe6dsi921817qvr.480.2023.05.25.16.28.19 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:28:19 -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=pass header.i=@linaro.org header.s=google header.b=HINTjw9b; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLh-0005wz-Ql; Thu, 25 May 2023 19:26:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLZ-0005r6-RT for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:17 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLV-0005lF-2P for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:17 -0400 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-1ae6dce19f7so914395ad.3 for ; Thu, 25 May 2023 16:26:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057171; x=1687649171; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6JfHuaMlr/R5D+hsSo7rFRMVl2Kxv9MZXkN8QLhXQd8=; b=HINTjw9bUT2rY8kSkU2uJaGT+Ite0+KHbsrnD58qW0uHk9LxeNrtqHyNs5SKeUxXLO fzh1nLHHC5JiW//dCOlB26VNT5j0K7BGrLCZlu6BUifSIZAtOgagTDipMO/ujZ2SlVNz iJKs/t+0QOQ3Nvmli1HaENLEwl5MCmTzP+D9fwcc5AFNtCAbp5LCcsWIp/l70RAqhkSS QEUmsB7SUVG/qIXw4o5zG2NpY5wG1fLoQaqxIjPbYL5zTo/G26f01K/otgXrmyeoNHBU J//1EGJEoBzjFTl7K+Kx28/btFdBCG+bnuCruY/rrg9eAe7H2BQ4so5MI6FHKGmCXVbK LTAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057171; x=1687649171; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6JfHuaMlr/R5D+hsSo7rFRMVl2Kxv9MZXkN8QLhXQd8=; b=NuS5vnTMbfjSYU+b3qwdu7+D2labpwRqCMtjpG9OvmSLX3TjWSzPRDuo6w6gm655Pd 3HFSSangnd5vCLk+2bWsqSrm+cx/dLeqk1oP5bqzBsTEZQ4FcCMGpZArSPGissQ57yVr 04KZ8AM/4dPvH3Ib+JXP24C+ap/QObea9Pc8Hc9jPzikvHny+9xOslFqRPAWS4jmGx2c WT5/j9bgxxFVPQDHCeIMWtHcoN1EmdSez55+Drj35KMRDGAf2Cj/vP2RPT0OGDWFgRx3 BFecZkeAAo0NDKn6tlkTYUwbWxdz1pYzeZ8EPxxc1FyuOU0mNn4H7ZJlgJC65lyAgzSq NC8w== X-Gm-Message-State: AC+VfDzCaEwo4DEbNpipZWnKcFXAZlDhWSltW31ifWPnw0XBmd46qfEY VBlpEhzlcEuNZEyQjt1BzByEvadyUWGXBEj+sOs= X-Received: by 2002:a17:902:f64e:b0:1ae:626b:475f with SMTP id m14-20020a170902f64e00b001ae626b475fmr420941plg.12.1685057170961; Thu, 25 May 2023 16:26:10 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v2 14/20] target/arm: Check alignment in helper_mte_check Date: Thu, 25 May 2023 16:25:52 -0700 Message-Id: <20230525232558.1758967-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 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: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Fixes a bug in that with SCTLR.A set, we should raise any alignment fault before raising any MTE check fault. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/internals.h | 3 ++- target/arm/tcg/mte_helper.c | 18 ++++++++++++++++++ target/arm/tcg/translate-a64.c | 2 ++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index c869d18c38..05b5231d43 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1242,7 +1242,8 @@ FIELD(MTEDESC, MIDX, 0, 4) FIELD(MTEDESC, TBI, 4, 2) FIELD(MTEDESC, TCMA, 6, 2) FIELD(MTEDESC, WRITE, 8, 1) -FIELD(MTEDESC, SIZEM1, 9, SIMD_DATA_BITS - 9) /* size - 1 */ +FIELD(MTEDESC, ALIGN, 9, 3) +FIELD(MTEDESC, SIZEM1, 12, SIMD_DATA_BITS - 12) /* size - 1 */ bool mte_probe(CPUARMState *env, uint32_t desc, uint64_t ptr); uint64_t mte_check(CPUARMState *env, uint32_t desc, uint64_t ptr, uintptr_t ra); diff --git a/target/arm/tcg/mte_helper.c b/target/arm/tcg/mte_helper.c index a4f3f92bc0..9c64def081 100644 --- a/target/arm/tcg/mte_helper.c +++ b/target/arm/tcg/mte_helper.c @@ -785,6 +785,24 @@ uint64_t mte_check(CPUARMState *env, uint32_t desc, uint64_t ptr, uintptr_t ra) uint64_t HELPER(mte_check)(CPUARMState *env, uint32_t desc, uint64_t ptr) { + /* + * R_XCHFJ: Alignment check not caused by memory type is priority 1, + * higher than any translation fault. When MTE is disabled, tcg + * performs the alignment check during the code generated for the + * memory access. With MTE enabled, we must check this here before + * raising any translation fault in allocation_tag_mem. + */ + unsigned align = FIELD_EX32(desc, MTEDESC, ALIGN); + if (unlikely(align)) { + align = (1u << align) - 1; + if (unlikely(ptr & align)) { + int idx = FIELD_EX32(desc, MTEDESC, MIDX); + bool w = FIELD_EX32(desc, MTEDESC, WRITE); + MMUAccessType type = w ? MMU_DATA_STORE : MMU_DATA_LOAD; + arm_cpu_do_unaligned_access(env_cpu(env), ptr, type, idx, GETPC()); + } + } + return mte_check(env, desc, ptr, GETPC()); } diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 214a9b1638..8301d6c8e2 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -274,6 +274,7 @@ static TCGv_i64 gen_mte_check1_mmuidx(DisasContext *s, TCGv_i64 addr, desc = FIELD_DP32(desc, MTEDESC, TBI, s->tbid); desc = FIELD_DP32(desc, MTEDESC, TCMA, s->tcma); desc = FIELD_DP32(desc, MTEDESC, WRITE, is_write); + desc = FIELD_DP32(desc, MTEDESC, ALIGN, get_alignment_bits(memop)); desc = FIELD_DP32(desc, MTEDESC, SIZEM1, memop_size(memop) - 1); ret = tcg_temp_new_i64(); @@ -305,6 +306,7 @@ TCGv_i64 gen_mte_checkN(DisasContext *s, TCGv_i64 addr, bool is_write, desc = FIELD_DP32(desc, MTEDESC, TBI, s->tbid); desc = FIELD_DP32(desc, MTEDESC, TCMA, s->tcma); desc = FIELD_DP32(desc, MTEDESC, WRITE, is_write); + desc = FIELD_DP32(desc, MTEDESC, ALIGN, get_alignment_bits(single_mop)); desc = FIELD_DP32(desc, MTEDESC, SIZEM1, total_size - 1); ret = tcg_temp_new_i64(); From patchwork Thu May 25 23:25:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685635 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623329wrt; Thu, 25 May 2023 16:28:23 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5q+QR7EwPh6mm0oKdilSZrs0mdo9MJml9o6u+otb2sLEXYGHCr/6ATMJXz9s6FgF6prcK8 X-Received: by 2002:a05:622a:14cc:b0:3f6:a5f6:c03b with SMTP id u12-20020a05622a14cc00b003f6a5f6c03bmr123007qtx.39.1685057303657; Thu, 25 May 2023 16:28:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057303; cv=none; d=google.com; s=arc-20160816; b=Agz4Lno91+cBZ9x1SmLU18mqMsVuo2G3phCbFhHqkTlYOIcMiE3ZkKsWZ4X2IfCUiy muooqDKdc0ve+87LZkp7drHfM4phyzuWJIfasF8ZPFKDeboR+5RisbxTxCkbSiA0MUKc y7Fe+2iFZYvP0c5XhwZHlKLGPvmp1lGrejYpzlWWd8AE6csMv9LmG8au2KCi+8rpGh08 XEMA6JnlpylyCMsi3o+AGLWfpMDeSeLeE9ZAO84aHqGeTLR0Fm4INu6BCNr5t/QkF7OY LmXIDsSwJTaiD8lt//Rg4qwij2tJWH5RrWpI6s06hSkEVGqczigLdP/7Ty360rqHauY7 grgw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=Idgzie8Bagv/okuq3PZRR6bulWfE7VOtkKl3IxnEacg=; b=LIzGatO4WwgbMdAejcD8jcwruc2YE4WmlJ4cPDSHrkHZgGMosk7Z5pWn7+xqw/Xh8r IMSz28gSa4sZoNVP3yvewxM+tifOMjPv4NRajZHvAi3JUtfHuBWqQfomkr7LVBl1m49q QwOO6y80tJa/dMHz+a0Phr8lQZeDbg0MWv7AvzHaYZ/KBVprj+Mt3zre/1XI7Dia0r7A 4JWerQqgVgdXDCe1HfJAY6srfzwyttwPxRMAjxv45pV3KcjG8uuWzVyqUMS0n4tUuAGZ KYsYUEXJFwK1jiWPKwaqhKBh5bZKlAtV8nC10ETn9Zh+YKpcxUEQAgZNXo+GBzSuzlK3 auZw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=gcI87G3V; 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 j22-20020ac85f96000000b003f36c78b040si896174qta.397.2023.05.25.16.28.23 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:28:23 -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=pass header.i=@linaro.org header.s=google header.b=gcI87G3V; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLj-000608-FP; Thu, 25 May 2023 19:26:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLb-0005sW-CU for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:19 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLV-0005od-MT for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:19 -0400 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-2553663f71eso215363a91.3 for ; Thu, 25 May 2023 16:26:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057172; x=1687649172; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Idgzie8Bagv/okuq3PZRR6bulWfE7VOtkKl3IxnEacg=; b=gcI87G3VR68vc31MEkZ2xr8+K5PIgLhe73iBC6tLBAD2vtHiMtsHBHhWtVrlRvSjdg WP9CCE1+AtBXAXmLfkipbXajNCGQFVnKCsYbH4HPtuyg8+wLruIQPxZpkd3UiKktCXK8 u0kdfs+3S9jszPkRloSBew46mt7uv+dysDKOn3NamYObn2UAzLYdbIr7YZcF9SPC6ZC5 95q33LcgHxO9sajrEq+sJ1379GmLE5ygmBbr9ilMVmGe12frsFgV4kV3SylsVzQHMkHt TQNvMXNeuFrQX9SKZL6VDctHBGlSNhtYski/gz4lOHMc+JqiH8RmQVRIdw5Q5xDg9kAB Qj+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057172; x=1687649172; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Idgzie8Bagv/okuq3PZRR6bulWfE7VOtkKl3IxnEacg=; b=NFLSzGM8+thsD6HtQW96MEd+1F1AwEZ6Gn5uzghAmqM7E/9e5cAPOT7ArOdCE69we4 oG1LgnvDraiiFxEvoTdUFz4ZWNmD4d3DnsBaWCURI1YqElOQhi5psfS38UZARECl+kyT TofILZyJOUD7eDRhT8Xv+w6Jv2k5dWiftFUjvGQfg87dRIdWjtQIei9V/AHLTbRJfYbR pwiJSbBIs4wZl21sX1ccOnzCV4TVja4cCBSHW9mouUyYCwe1YgeCF/XuPHgOF1WXFIxm 1eNTzCaYei7xp+4+onCEzluy0Q0dZApeUp5W6jaiX98lAbvtTLB4aVFB3Dt0IpttEjoS 4LMA== X-Gm-Message-State: AC+VfDz93lYJIe45Y4ehKwbKo836qkiME39a02RDWdtemGiWF5JMAmVb PwMQLGMKSvXnrceMjXjscsizaGvIzgsMRd17H8Q= X-Received: by 2002:a17:902:e541:b0:1af:cbb1:837 with SMTP id n1-20020a170902e54100b001afcbb10837mr360451plf.65.1685057171825; Thu, 25 May 2023 16:26:11 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v2 15/20] target/arm: Add SCTLR.nAA to TBFLAG_A64 Date: Thu, 25 May 2023 16:25:53 -0700 Message-Id: <20230525232558.1758967-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 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: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/cpu.h | 3 ++- target/arm/tcg/translate.h | 2 ++ target/arm/tcg/hflags.c | 6 ++++++ target/arm/tcg/translate-a64.c | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 36ab66d0c3..23092572d7 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1247,7 +1247,7 @@ void pmu_init(ARMCPU *cpu); #define SCTLR_D (1U << 5) /* up to v5; RAO in v6 */ #define SCTLR_CP15BEN (1U << 5) /* v7 onward */ #define SCTLR_L (1U << 6) /* up to v5; RAO in v6 and v7; RAZ in v8 */ -#define SCTLR_nAA (1U << 6) /* when v8.4-LSE is implemented */ +#define SCTLR_nAA (1U << 6) /* when FEAT_LSE2 is implemented */ #define SCTLR_B (1U << 7) /* up to v6; RAZ in v7 */ #define SCTLR_ITD (1U << 7) /* v8 onward */ #define SCTLR_S (1U << 8) /* up to v6; RAZ in v7 */ @@ -3043,6 +3043,7 @@ FIELD(TBFLAG_A64, SVL, 24, 4) /* Indicates that SME Streaming mode is active, and SMCR_ELx.FA64 is not. */ FIELD(TBFLAG_A64, SME_TRAP_NONSTREAMING, 28, 1) FIELD(TBFLAG_A64, FGT_ERET, 29, 1) +FIELD(TBFLAG_A64, NAA, 30, 1) /* * Helpers for using the above. diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h index 626cf07970..38086a23f4 100644 --- a/target/arm/tcg/translate.h +++ b/target/arm/tcg/translate.h @@ -137,6 +137,8 @@ typedef struct DisasContext { bool fgt_eret; /* True if fine-grained trap on SVC is enabled */ bool fgt_svc; + /* True if FEAT_LSE2 SCTLR_ELx.nAA is set */ + bool naa; /* * >= 0, a copy of PSTATE.BTYPE, which will be 0 without v8.5-BTI. * < 0, set by the current instruction. diff --git a/target/arm/tcg/hflags.c b/target/arm/tcg/hflags.c index b2ccd77cff..616c5fa723 100644 --- a/target/arm/tcg/hflags.c +++ b/target/arm/tcg/hflags.c @@ -248,6 +248,12 @@ static CPUARMTBFlags rebuild_hflags_a64(CPUARMState *env, int el, int fp_el, } } + if (cpu_isar_feature(aa64_lse2, env_archcpu(env))) { + if (sctlr & SCTLR_nAA) { + DP_TBFLAG_A64(flags, NAA, 1); + } + } + /* Compute the condition for using AccType_UNPRIV for LDTR et al. */ if (!(env->pstate & PSTATE_UAO)) { switch (mmu_idx) { diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 8301d6c8e2..bbcdf31728 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -14163,6 +14163,7 @@ static void aarch64_tr_init_disas_context(DisasContextBase *dcbase, dc->pstate_sm = EX_TBFLAG_A64(tb_flags, PSTATE_SM); dc->pstate_za = EX_TBFLAG_A64(tb_flags, PSTATE_ZA); dc->sme_trap_nonstreaming = EX_TBFLAG_A64(tb_flags, SME_TRAP_NONSTREAMING); + dc->naa = EX_TBFLAG_A64(tb_flags, NAA); dc->vec_len = 0; dc->vec_stride = 0; dc->cp_regs = arm_cpu->cp_regs; From patchwork Thu May 25 23:25:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685630 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623024wrt; Thu, 25 May 2023 16:27:34 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6XYmBA3PfIctqpRgMGrY827nDhoGNfAVxbWQWnwG/Oeg/3lPVovyDkQTjrqMC8Cf3R0LMa X-Received: by 2002:ad4:4ea3:0:b0:625:aa48:fb77 with SMTP id ed3-20020ad44ea3000000b00625aa48fb77mr178409qvb.65.1685057254331; Thu, 25 May 2023 16:27:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057254; cv=none; d=google.com; s=arc-20160816; b=z6M0Xkyr4C6lIzy2nqCCp9erMDfh48fdcDnqsw/ekBTxc9MLowg2J5ePp5gwMG2n8A Ay6q9x3wDm5bDANXD+jtKzm7h0S28O0ifinSl6sW13fwhbqAyTXzy1GQSmNWqyXt7MC6 xJF9elRNj6AfKgmuMVAT0V9cldPT03V3ihiRwuCG66mfbSg2IfGefFXBFqD3lb79mblO xJfzPfy+gu7qxaDODJ+I7VYyGj5ZHnasDvRC6QuEKyI+/XPeScnz2GLl2OwLDn0/pHiU Zpp++xRE1ZG+m8v6ES3YFTr4ZkbzWSpd+0KPbg+GLKmhJ+Olf8HkmidpAm960Y/dWdk6 OyFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=x3uZjZZOr3HW4FRprJ8Kd+x2DjMsbg7oiFeCX+0gI5c=; b=GV4evBfbnEgNGE85cGHc3v4IXWzGypTc3xYiS/mGa6R++vxfvVK4URNJ6WBOd0kD5v oV+201L1TFqIJqOZpU68XCoQVgFqXx9JWPFYmXoOXEyzK1CstrsNoqbQdk4rZ1xPhn0y IoOwtLfP1mf80EmQ+u8G7gB6FlSV6vgTXi2EVVRIsYWoEUoUmFgL6rSxlu0tlmXWzFbd k1/qkNsH0BDEFmOMJ2DPMPtNXzmPRFxP+paEjQSWswbOwSjk6lk6CAkw1485tv1py8mO YszbTLjh30n3heXsP560YHCxVtCy7b97wqo9jComnJdGy/p8Yb6yO8n/KLazMAKC6trJ FBpw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=YevBkewT; 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 x5-20020a05620a01e500b0074d885db7b3si950378qkn.66.2023.05.25.16.27.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:27:34 -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=pass header.i=@linaro.org header.s=google header.b=YevBkewT; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLk-00060h-MV; Thu, 25 May 2023 19:26:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLc-0005uk-QF for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:24 -0400 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLW-0005oy-AD for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:20 -0400 Received: by mail-pg1-x52b.google.com with SMTP id 41be03b00d2f7-52c30fa5271so67920a12.0 for ; Thu, 25 May 2023 16:26:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057172; x=1687649172; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=x3uZjZZOr3HW4FRprJ8Kd+x2DjMsbg7oiFeCX+0gI5c=; b=YevBkewTMsMqFh9i/gleEcvBZ1ItXyDRSiq4CyxHQYK195Uvh14PcLvGALIf75F5FD SUknx9WIQm2u/gRbG9n67NFLaX4c4qB8rpHdmWWYXVJ7tzkoTCDcs7SPl18OivpPkEHo U8K2nfOsL8b2O482xGExtYBfhmrYpbIX6nCm2XvH7rduWWb0UqlsY01HaRco5Ieau339 eZdTnLIE5IOYwmW14k9C2+lge8J9bChScUFu0Y8OlvICLgCtESJBui9P/jQqLRupdQ7a tSSGtqI/HDqgJRmQp8eqaoJ7hpwzNJwHfyke9rc1ovMm4QUm6a5P+9a3dNlLTNNtD9lb b2kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057172; x=1687649172; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=x3uZjZZOr3HW4FRprJ8Kd+x2DjMsbg7oiFeCX+0gI5c=; b=aZGyo3Hwwj2TGDlNfcAiV4xoima/3en+Jv5lEMe8WunTDPIGoSWkF6cgLyTeJfhJsR O2Cw+IZ4mh8cf5sUFHPZH/H8Q1Gjwa7rQiEBS+Eb7jXVwEQ3slwtvrGZIeDkcR+SHRm3 VcjGyOOWXGPah7Jpp9c5p/FLauYA20TYHHkTnYr/LRPr/HomQzcFBBjuUmhkqsCt/cL4 fsEV/o7cVIvQLgw0AFDhOOi2kSRclqGlrYMUvQ5frEee4yzdUF800U2/xuSrnvbus62b e074pGG01VtAEW8rG9T/rcRukGpMCfGSS/Vi0czDHJFsH25sqfuNpEfTQwtyFKvHYll7 hqOA== X-Gm-Message-State: AC+VfDwu+a/6m//nVKdmUIuJLVfTIPbWg6uvTJZ9dN2ojhElLU1G8xJJ djgZDpn6csilzb0NoAp+G9+OTQhrGLT3jcYbLsI= X-Received: by 2002:a17:903:22cf:b0:1ac:a28e:4b1d with SMTP id y15-20020a17090322cf00b001aca28e4b1dmr524866plg.34.1685057172617; Thu, 25 May 2023 16:26:12 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v2 16/20] target/arm: Relax ordered/atomic alignment checks for LSE2 Date: Thu, 25 May 2023 16:25:54 -0700 Message-Id: <20230525232558.1758967-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::52b; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org FEAT_LSE2 only requires that atomic operations not cross a 16-byte boundary. Ordered operations may be completely unaligned if SCTLR.nAA is set. Because this alignment check is so special, do it by hand. Make sure not to keep TCG temps live across the branch. Signed-off-by: Richard Henderson --- target/arm/tcg/helper-a64.h | 3 + target/arm/tcg/helper-a64.c | 7 ++ target/arm/tcg/translate-a64.c | 120 ++++++++++++++++++++++++++------- 3 files changed, 104 insertions(+), 26 deletions(-) diff --git a/target/arm/tcg/helper-a64.h b/target/arm/tcg/helper-a64.h index ff56807247..3d5957c11f 100644 --- a/target/arm/tcg/helper-a64.h +++ b/target/arm/tcg/helper-a64.h @@ -110,3 +110,6 @@ DEF_HELPER_FLAGS_2(st2g_stub, TCG_CALL_NO_WG, void, env, i64) DEF_HELPER_FLAGS_2(ldgm, TCG_CALL_NO_WG, i64, env, i64) DEF_HELPER_FLAGS_3(stgm, TCG_CALL_NO_WG, void, env, i64, i64) DEF_HELPER_FLAGS_3(stzgm_tags, TCG_CALL_NO_WG, void, env, i64, i64) + +DEF_HELPER_FLAGS_4(unaligned_access, TCG_CALL_NO_WG, + noreturn, env, i64, i32, i32) diff --git a/target/arm/tcg/helper-a64.c b/target/arm/tcg/helper-a64.c index c3edf163be..1c9370f07b 100644 --- a/target/arm/tcg/helper-a64.c +++ b/target/arm/tcg/helper-a64.c @@ -952,3 +952,10 @@ void HELPER(dc_zva)(CPUARMState *env, uint64_t vaddr_in) memset(mem, 0, blocklen); } + +void HELPER(unaligned_access)(CPUARMState *env, uint64_t addr, + uint32_t access_type, uint32_t mmu_idx) +{ + arm_cpu_do_unaligned_access(env_cpu(env), addr, access_type, + mmu_idx, GETPC()); +} diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index bbcdf31728..49cb7a7dd5 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -317,6 +317,89 @@ TCGv_i64 gen_mte_checkN(DisasContext *s, TCGv_i64 addr, bool is_write, return clean_data_tbi(s, addr); } +/* + * Generate the special alignment check that applies to AccType_ATOMIC + * and AccType_ORDERED insns under FEAT_LSE2: the access need not be + * naturally aligned, but it must not cross a 16-byte boundary. + * See AArch64.CheckAlignment(). + */ +static void check_lse2_align(DisasContext *s, int rn, int imm, + bool is_write, MemOp mop) +{ + TCGv_i32 tmp; + TCGv_i64 addr; + TCGLabel *over_label; + MMUAccessType type; + int mmu_idx; + + tmp = tcg_temp_new_i32(); + tcg_gen_extrl_i64_i32(tmp, cpu_reg_sp(s, rn)); + tcg_gen_addi_i32(tmp, tmp, imm & 15); + tcg_gen_andi_i32(tmp, tmp, 15); + tcg_gen_addi_i32(tmp, tmp, memop_size(mop)); + + over_label = gen_new_label(); + tcg_gen_brcondi_i32(TCG_COND_LEU, tmp, 16, over_label); + + addr = tcg_temp_new_i64(); + tcg_gen_addi_i64(addr, cpu_reg_sp(s, rn), imm); + + type = is_write ? MMU_DATA_STORE : MMU_DATA_LOAD, + mmu_idx = get_mem_index(s); + gen_helper_unaligned_access(cpu_env, addr, tcg_constant_i32(type), + tcg_constant_i32(mmu_idx)); + + gen_set_label(over_label); + +} + +/* Handle the alignment check for AccType_ATOMIC instructions. */ +static MemOp check_atomic_align(DisasContext *s, int rn, MemOp mop) +{ + MemOp size = mop & MO_SIZE; + + if (size == MO_8) { + return mop; + } + + /* + * If size == MO_128, this is a LDXP, and the operation is single-copy + * atomic for each doubleword, not the entire quadword; it still must + * be quadword aligned. + */ + if (size == MO_128) { + return finalize_memop_atom(s, MO_128 | MO_ALIGN, + MO_ATOM_IFALIGN_PAIR); + } + if (dc_isar_feature(aa64_lse2, s)) { + check_lse2_align(s, rn, 0, true, mop); + } else { + mop |= MO_ALIGN; + } + return finalize_memop(s, mop); +} + +/* Handle the alignment check for AccType_ORDERED instructions. */ +static MemOp check_ordered_align(DisasContext *s, int rn, int imm, + bool is_write, MemOp mop) +{ + MemOp size = mop & MO_SIZE; + + if (size == MO_8) { + return mop; + } + if (size == MO_128) { + return finalize_memop_atom(s, MO_128 | MO_ALIGN, + MO_ATOM_IFALIGN_PAIR); + } + if (!dc_isar_feature(aa64_lse2, s)) { + mop |= MO_ALIGN; + } else if (!s->naa) { + check_lse2_align(s, rn, imm, is_write, mop); + } + return finalize_memop(s, mop); +} + typedef struct DisasCompare64 { TCGCond cond; TCGv_i64 value; @@ -2384,21 +2467,7 @@ static void gen_load_exclusive(DisasContext *s, int rt, int rt2, int rn, { int idx = get_mem_index(s); TCGv_i64 dirty_addr, clean_addr; - MemOp memop; - - /* - * For pairs: - * if size == 2, the operation is single-copy atomic for the doubleword. - * if size == 3, the operation is single-copy atomic for *each* doubleword, - * not the entire quadword, however it must be quadword aligned. - */ - memop = size + is_pair; - if (memop == MO_128) { - memop = finalize_memop_atom(s, MO_128 | MO_ALIGN, - MO_ATOM_IFALIGN_PAIR); - } else { - memop = finalize_memop(s, memop | MO_ALIGN); - } + MemOp memop = check_atomic_align(s, rn, size + is_pair); s->is_ldex = true; dirty_addr = cpu_reg_sp(s, rn); @@ -2536,7 +2605,7 @@ static void gen_compare_and_swap(DisasContext *s, int rs, int rt, if (rn == 31) { gen_check_sp_alignment(s); } - memop = finalize_memop(s, size | MO_ALIGN); + memop = check_atomic_align(s, rn, size); clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), true, rn != 31, memop); tcg_gen_atomic_cmpxchg_i64(tcg_rs, clean_addr, tcg_rs, tcg_rt, memidx, memop); @@ -2558,7 +2627,7 @@ static void gen_compare_and_swap_pair(DisasContext *s, int rs, int rt, } /* This is a single atomic access, despite the "pair". */ - memop = finalize_memop(s, (size + 1) | MO_ALIGN); + memop = check_atomic_align(s, rn, size + 1); clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), true, rn != 31, memop); if (size == 2) { @@ -2678,8 +2747,7 @@ static void disas_ldst_excl(DisasContext *s, uint32_t insn) gen_check_sp_alignment(s); } tcg_gen_mb(TCG_MO_ALL | TCG_BAR_STRL); - /* TODO: ARMv8.4-LSE SCTLR.nAA */ - memop = finalize_memop(s, size | MO_ALIGN); + memop = check_ordered_align(s, rn, 0, true, size); clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), true, rn != 31, memop); do_gpr_st(s, cpu_reg(s, rt), clean_addr, memop, true, rt, @@ -2697,8 +2765,7 @@ static void disas_ldst_excl(DisasContext *s, uint32_t insn) if (rn == 31) { gen_check_sp_alignment(s); } - /* TODO: ARMv8.4-LSE SCTLR.nAA */ - memop = finalize_memop(s, size | MO_ALIGN); + memop = check_ordered_align(s, rn, 0, false, size); clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), false, rn != 31, memop); do_gpr_ld(s, cpu_reg(s, rt), clean_addr, memop, false, true, @@ -3379,7 +3446,7 @@ static void disas_ldst_atomic(DisasContext *s, uint32_t insn, bool a = extract32(insn, 23, 1); TCGv_i64 tcg_rs, tcg_rt, clean_addr; AtomicThreeOpFn *fn = NULL; - MemOp mop = finalize_memop(s, size | MO_ALIGN); + MemOp mop = size; if (is_vector || !dc_isar_feature(aa64_atomics, s)) { unallocated_encoding(s); @@ -3430,6 +3497,8 @@ static void disas_ldst_atomic(DisasContext *s, uint32_t insn, if (rn == 31) { gen_check_sp_alignment(s); } + + mop = check_atomic_align(s, rn, mop); clean_addr = gen_mte_check1(s, cpu_reg_sp(s, rn), false, rn != 31, mop); if (o3_opc == 014) { @@ -3554,16 +3623,13 @@ static void disas_ldst_ldapr_stlr(DisasContext *s, uint32_t insn) bool is_store = false; bool extend = false; bool iss_sf; - MemOp mop; + MemOp mop = size; if (!dc_isar_feature(aa64_rcpc_8_4, s)) { unallocated_encoding(s); return; } - /* TODO: ARMv8.4-LSE SCTLR.nAA */ - mop = finalize_memop(s, size | MO_ALIGN); - switch (opc) { case 0: /* STLURB */ is_store = true; @@ -3595,6 +3661,8 @@ static void disas_ldst_ldapr_stlr(DisasContext *s, uint32_t insn) gen_check_sp_alignment(s); } + mop = check_ordered_align(s, rn, offset, is_store, mop); + dirty_addr = read_cpu_reg_sp(s, rn, 1); tcg_gen_addi_i64(dirty_addr, dirty_addr, offset); clean_addr = clean_data_tbi(s, dirty_addr); From patchwork Thu May 25 23:25:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685637 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623380wrt; Thu, 25 May 2023 16:28:36 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4KiCz6qfUEqRRyUn3S6mHas0lRHidju2o/K3xR8pzZzmcqndzXW5UtouY3pvy/PKnFitbl X-Received: by 2002:a05:622a:1804:b0:3f7:f9c6:d33a with SMTP id t4-20020a05622a180400b003f7f9c6d33amr112838qtc.51.1685057315966; Thu, 25 May 2023 16:28:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057315; cv=none; d=google.com; s=arc-20160816; b=ajMGJQit5HTWbksAeIXPFuB4MoyD30GV8132jL2O33t6fwl7sK1KKeWZrSu9gD6pjX xY0aJifFMZG3XTy9KjO4L9rKjQUodyrpXXLVLhNs9OrdyXFs89gHlObEWVxyGV5gkoQl Lu2ecalzNXZAn5FSHpp+hYupTkgKAEhYP7YGcmhscA6px2h1hokRTDzCZ+vLJi91Kbue tRIv14XZtB0MEtW7V2QZswzrFzXIEdDvKOFcGKulCQMgxi/wIV7CENxFMXpioDHs2LjP tE88TUZM4EAF1wiemVBZwm9A9kWK0VGU1sIXsutBDkjrheE81zPXK/+AMEoXiVfSjY6f yZGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=nH2fDEqJMLjGJ94XHGNSezah8PhFABFUd5z9bFsr8bY=; b=DQ7LS6GO0xn5SOg+LgvLn798Ax1iUVpOwdN+LyjqasOR2EUh0rJPBbbStVyKhbnZTt Q/D07+FmYH4fkSEihJLcJbB4wnEJpEAlFg9uPeEVz3GDPc09WL4s8tuLKPkaRS+X73oU lol5dIk2RZNqK9fcioubT5IqUBXIRB5ROc6xeEuz+ucK1NKdDPBEH2ca4b8d0+enSsk7 4+Xs6EJGwIGyezPFgpyQ0I1Mj3/kjILCzJMJbEcWwnq/2PNov3Tw/zUQS/3dUKh+0oWS Ho5YCy2Wnme5E9f4vmos6JBfqLWDrRykJDg9y7yFsZKuwp5UlWd7q75c/GjlmtCBzz6j Pqxw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=s9bev9Ez; 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 t2-20020a05622a01c200b003f43703b305si875438qtw.714.2023.05.25.16.28.35 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:28:35 -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=pass header.i=@linaro.org header.s=google header.b=s9bev9Ez; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLk-000610-Ue; Thu, 25 May 2023 19:26:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLd-0005v2-T6 for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:24 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLX-0005pq-NZ for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:21 -0400 Received: by mail-pg1-x52f.google.com with SMTP id 41be03b00d2f7-528cdc9576cso84499a12.0 for ; Thu, 25 May 2023 16:26:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057173; x=1687649173; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nH2fDEqJMLjGJ94XHGNSezah8PhFABFUd5z9bFsr8bY=; b=s9bev9EzPbIp+avWjI4z0rBnz3v1tsdGaCA1JdAoq23NX0C8oaTaUS9D9hpdB7KVcb 2rQuV1mf/xpygvJBlxdE4M6eMSV16/9MbRRaKjlKDb0aeX+umV0nGcSN13QekHtDp8jd 7sC6IUbxPDRmBA+kcOSh6I4pmg+97EjuwC5kiGCPAf/7CNLUgJ8wWw8g7HyIXTmwr5U0 Ku8ra8HQ2syC9CqNjOT4Y108+wFgUGVlTJQJXV9bv97DdGUUrgWlHszgzStYY5D4PDso 9kZe5V3KjJCuS5CkjmiPBBhZB6MqGTtaD3vJJNHmjXU0juHLv/pSEIL7ZqGojubv8/iN UzwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057173; x=1687649173; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nH2fDEqJMLjGJ94XHGNSezah8PhFABFUd5z9bFsr8bY=; b=Co6uQmlXfFkj0RYtOfG3uvah7oN2THRVs96nMPfhl/xsh/5V6kDATNAjPtLmaxHDd9 4oPWR7muFS843oRtUhF86I8j+WNJwwQ6ilgL2tkJHEGDd4GItm8GrmPrXr04XzFL2dhM N49ztyVYJyTBDOujVHgwk23hBmJn3zNNuzUE8L0kEkccIoXcD0XF0n3sX1uFapqeHEAq m1A211IdXlM4EmMF7gQ5PCfZw8G9tC2xozHQ5bkaxJ9nxoMqvzC/MjJObBUbxTZ+Zxl7 mu9TDYkjjjPYDO68GR7ytzXYI0DmZXTspcDZu3MrNy668+HYmduld6Xdz9ZrGQ+nMiLw oIAg== X-Gm-Message-State: AC+VfDzHJ8dvxrsPxWbV1rkyaOWOYth79RNGhHG6wl0KWr534xmmsy/N iz482Q2/VCyDOq4/8R5sbAsykl73uGh7MmkTNHI= X-Received: by 2002:a17:902:ab5a:b0:1ac:acb5:4336 with SMTP id ij26-20020a170902ab5a00b001acacb54336mr412392plb.33.1685057173345; Thu, 25 May 2023 16:26:13 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v2 17/20] target/arm: Move mte check for store-exclusive Date: Thu, 25 May 2023 16:25:55 -0700 Message-Id: <20230525232558.1758967-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::52f; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Push the mte check behind the exclusive_addr check. Document the several ways that we are still out of spec with this implementation. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.c | 42 +++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 49cb7a7dd5..9654c5746a 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -2524,17 +2524,47 @@ static void gen_store_exclusive(DisasContext *s, int rd, int rt, int rt2, */ TCGLabel *fail_label = gen_new_label(); TCGLabel *done_label = gen_new_label(); - TCGv_i64 tmp, dirty_addr, clean_addr; + TCGv_i64 tmp, clean_addr; MemOp memop; - memop = (size + is_pair) | MO_ALIGN; - memop = finalize_memop(s, memop); - - dirty_addr = cpu_reg_sp(s, rn); - clean_addr = gen_mte_check1(s, dirty_addr, true, rn != 31, memop); + /* + * FIXME: We are out of spec here. We have recorded only the address + * from load_exclusive, not the entire range, and we assume that the + * size of the access on both sides match. The architecture allows the + * store to be smaller than the load, so long as the stored bytes are + * within the range recorded by the load. + */ + /* See AArch64.ExclusiveMonitorsPass() and AArch64.IsExclusiveVA(). */ + clean_addr = clean_data_tbi(s, cpu_reg_sp(s, rn)); tcg_gen_brcond_i64(TCG_COND_NE, clean_addr, cpu_exclusive_addr, fail_label); + /* + * The write, and any associated faults, only happen if the virtual + * and physical addresses pass the exclusive monitor check. These + * faults are exceedingly unlikely, because normally the guest uses + * the exact same address register for the load_exclusive, and we + * would have recognized these faults there. + * + * It is possible to trigger an alignment fault pre-LSE2, e.g. with an + * unaligned 4-byte write within the range of an aligned 8-byte load. + * With LSE2, the store would need to cross a 16-byte boundary when the + * load did not, which would mean the store is outside the range + * recorded for the monitor, which would have failed a corrected monitor + * check above. For now, we assume no size change and retain the + * MO_ALIGN to let tcg know what we checked in the load_exclusive. + * + * It is possible to trigger an MTE fault, by performing the load with + * a virtual address with a valid tag and performing the store with the + * same virtual address and a different invalid tag. + */ + memop = size + is_pair; + if (memop == MO_128 || !dc_isar_feature(aa64_lse2, s)) { + memop |= MO_ALIGN; + } + memop = finalize_memop(s, memop); + gen_mte_check1(s, cpu_reg_sp(s, rn), true, rn != 31, memop); + tmp = tcg_temp_new_i64(); if (is_pair) { if (size == 2) { From patchwork Thu May 25 23:25:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685646 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623562wrt; Thu, 25 May 2023 16:29:09 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6kSgo5hd96wVO8XJgE/MYETXMchpMbgb+UD1FDatMpX/ETU9klg/NdYTNjKtRkootoELXh X-Received: by 2002:a05:6214:622:b0:625:aa49:ea03 with SMTP id a2-20020a056214062200b00625aa49ea03mr2725218qvx.32.1685057349728; Thu, 25 May 2023 16:29:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057349; cv=none; d=google.com; s=arc-20160816; b=CPg5mDm3vgqCFZJ0jMb/BY+EwMyOhaVaxkeOrPk4On2mi+uKDM/gL22egLwjYWxnwS LDvHgtQukl9NJdA3IgcdpOP7y6ahBu9vFwU0bj5G3RoS3nkA0NIVKrJstZNY16gCwOP4 Q2rhNY4p0wwQTrR5vJ4Fw/Wpw+YukVvcEElClbJDnvQiEAshHWnR17u2PVJTikoG86pq Uuxnlh47RGYETB2PgViLJ2UfHqZ0PSnvXJ84nv2j7lz+kNukAaF3eO6AenAbwLnOHDaQ z1sdfkskV7MK2UvmHci4dIgin3cAfTAyxxUV1GCwIwqV6nqqiH+cKnujMaBwQENU5BqX LCHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=5jZpc4ui8pytrAOHBcN47e2TS8aNKppKYujWBst2xkI=; b=TNPxDIHK1u8fx8dUTixmjKgwSsK2zmX8OIKBLDoUzXOhxw6zIXK0G+BxywG7CI2/B7 dC9PLh76GAPRrqmcOSXzULAPAVqmQHZpzBaFbbSd68xaO2+4UgHx9UYHEi5KYIGQ/JbQ bk4X+Y2ew/OvDdLl6qesKblxjf7jwT+f43zPVjkf+ihRjyVNG6pRDE1fv6rG5NpSk1H3 QILG1udQaxaqs2xDI9f/+CXuZVkeSO2cXIzFb0n+TNCUTLzKjMG9M9CcMl6TSA0aYadM 8UGoL056rFfeO/7yxwmlNYScTouvTE341PSoSSTSTmtuVMz9c/Rk3EQCLIpBUievwBWR 65GA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=a3VNenc5; 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 gc14-20020a056214230e00b0061ea67b7999si912252qvb.326.2023.05.25.16.29.09 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:29:09 -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=pass header.i=@linaro.org header.s=google header.b=a3VNenc5; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLi-0005yx-UM; Thu, 25 May 2023 19:26:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLc-0005uU-KK for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:20 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLX-0005q9-Cr for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:20 -0400 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-1ae851f2a7dso12106935ad.0 for ; Thu, 25 May 2023 16:26:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057174; x=1687649174; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5jZpc4ui8pytrAOHBcN47e2TS8aNKppKYujWBst2xkI=; b=a3VNenc59ZwfkPdbQlygo1lA3JV7RStXarxjq1Ev7kG684eT2geLvMt3sFkPjct1uJ M6C22JdR957+IM9U5p8xuYvppADAxuMJrBH5B5So4OIrQgsz5XuTN3YOByKsWFB1UOEY 3pop/LsJqfcI9e6Nuz7N27blfei3Qde6gsmVOP8bguhnj+yvkt0Ao2ZdUmHq3J2nkist KsxgNFglI3vAfljj580x9bPwGDMv6ii33sdux/ubji6lV0HFKDs3QoMspUPNjBEzx3Wp HVORmL6LlDgXkXcLzKkEA5Mx2fRQW8eAetL9YxtL12pVvIkaCY5nSuM9O+Iv76oNIquK 0NYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057174; x=1687649174; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5jZpc4ui8pytrAOHBcN47e2TS8aNKppKYujWBst2xkI=; b=KCL8FuS2UvDNv8NjtFicklZ8rej0rUSq8fnH98OS4xogiAvDX0MBqrTrx/EtyR5mz6 JdOFTMjYSqkwIOTXVcvRGgEOxEZVKyhPsFwRUigPL9UnV8wXbRM+IhV2yQrZFS6Y2quh Yi9qELB/6/JPyHGfQEAGb4hHjcw4xwFjmwEJkW3z4E1j3s7mPASnHY22v14R5vWaTB8c BzUo27N4LctOVs88bK7jY++l2IaLpDjrtZuDbrGuXH+PGIkw+r8Rno9L81nIPlStu+MV pOfSY5i1jgKv2YqFs6bmcBGS6IiymYfnGqBIJUCHAN+apspq1zDjbeg+JBa7hM9PFr03 0UjA== X-Gm-Message-State: AC+VfDxFivDZxwZf4LQov0UwJHEg7GaOmCHzZvByVFWirfKsxTnRXdoF u3bgJYvYpQw4vRs/y4IT/kLTRRGnY74i44TLPjs= X-Received: by 2002:a17:902:7289:b0:1af:bfb0:e80b with SMTP id d9-20020a170902728900b001afbfb0e80bmr2945900pll.31.1685057174029; Thu, 25 May 2023 16:26:14 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v2 18/20] tests/tcg/aarch64: Use stz2g in mte-7.c Date: Thu, 25 May 2023 16:25:56 -0700 Message-Id: <20230525232558.1758967-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x634.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org We have many other instances of stg in the testsuite; change these to provide an instance of stz2g. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- tests/tcg/aarch64/mte-7.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/tcg/aarch64/mte-7.c b/tests/tcg/aarch64/mte-7.c index a981de62d4..04974f9ebb 100644 --- a/tests/tcg/aarch64/mte-7.c +++ b/tests/tcg/aarch64/mte-7.c @@ -19,8 +19,7 @@ int main(int ac, char **av) p = (void *)((unsigned long)p | (1ul << 56)); /* Store tag in sequential granules. */ - asm("stg %0, [%0]" : : "r"(p + 0x0ff0)); - asm("stg %0, [%0]" : : "r"(p + 0x1000)); + asm("stz2g %0, [%0]" : : "r"(p + 0x0ff0)); /* * Perform an unaligned store with tag 1 crossing the pages. From patchwork Thu May 25 23:25:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685641 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623430wrt; Thu, 25 May 2023 16:28:47 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7ASI9a1rksrEJld+7sqSIfNGRqrtYeykUKWOGG5O2eP9NVjSOCCZIHz/uvgtSQ0N+LWlz7 X-Received: by 2002:a05:620a:468a:b0:75b:23a1:3f7 with SMTP id bq10-20020a05620a468a00b0075b23a103f7mr459263qkb.13.1685057327009; Thu, 25 May 2023 16:28:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057326; cv=none; d=google.com; s=arc-20160816; b=wfeoQVjHav769XcLp0xEFFUkjhryO6/ZoQhAcpU6b+UiX7DdE/MX5PxOYilQDUAbI9 Mq+pnIjyHBt+eBRrzWHNKLIPXJKmWXGARdKwtHECXJwQwatHsSFNaUjOOfS/BxdiCAvr c4httLQ87yVp7DsX/F+gNhwJveTkKPkzbLpVp8ja4KrwZCLGKoqWqk2uELGkBnh4y6X9 60WafmDQuuEsOxb1SBhpdHtE8DeQkL+6W9R7nxN+RruKOCjlwt4vgzSq+38nKLZ60SqN uFERV0hnPu67I6L5O4kjRIGZ5v5eZ5LoouVuP/xjql4x8z5CEUbOxN1rIyKPnX6/Osxr fIIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=HmTrzaAymfCp1fyYj9R9fztmY/GgYJekROiEVCv4rCU=; b=vBsXVP/9XAPVIKfQuOPr6F4cwYH35zFcGFTIfd/o9COVXSkf/H9lNiMAdJ7AHIvRIL 73NGGFuKXi56995JavE7DHAqUOWfp/7919lSl8PBHKGrIQT0MIKvfAyjn7dnYuBM+Pfe OYJAfac2q4Pua7cNnAAxYWKCZLOJZcIQPfq6BGPlNIVCuKvF0TGq9++rBiYUKTJ0UzkO RwUtzsFVfUU6anJZlXPhcCQfGJSSJHXBvA1rlk/dyPlBZg2Iny1mrg6BXJuSzQBe0tOD eyc+Cti2N+oD9Ty/tzJ1FfqLHFiZ7G1bXA20MJDO1ucow+wQh10f6iu6kmkFDYq1n43Z JJ/w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=D95VQ1tR; 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 i11-20020ae9ee0b000000b0074a44b93927si937060qkg.272.2023.05.25.16.28.46 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:28:46 -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=pass header.i=@linaro.org header.s=google header.b=D95VQ1tR; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLl-000612-1P; Thu, 25 May 2023 19:26:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLe-0005v4-1I for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:24 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLY-0005qH-3Q for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:21 -0400 Received: by mail-pg1-x536.google.com with SMTP id 41be03b00d2f7-53474b0c494so104563a12.3 for ; Thu, 25 May 2023 16:26:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057175; x=1687649175; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HmTrzaAymfCp1fyYj9R9fztmY/GgYJekROiEVCv4rCU=; b=D95VQ1tRvJ2i3Xtl/TXHyO428ZCDEjHiiy8RNMauvE+2eLnZBxLjEPgwbOzI0AWKXd 0XlxlhGhDHyiGaEBF5z4ud6GED4fHoe0WusI1HIhYf/z8pSjugPfR3AZVqCcTLaIFo7C 16T7hOzI+/PVgW6RTirRgIjquhDbP9Wexl2tVagA5WXLFML9bE31byxjFIVBODpNPYDb XWMHjfy02fekXFX7zvaPpXVtsUxd2ujNdi2tMlC/6A52GXwDmIiY5YIgWVyucBDjeAeL EwAJRMxEc9WA8GavvLekx9S4HUO+tm1FDpx1qVx4uii2t3lOD1+PAswd71IWJrM1jIAZ OR+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057175; x=1687649175; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HmTrzaAymfCp1fyYj9R9fztmY/GgYJekROiEVCv4rCU=; b=EqgvEUpfyu89r6X82AO8kmDxUxUqiW65g5a6jqBxI49Bqx2yzjS4udIWBtUsWB2/QU MOi4LAt4/khSC63ORJJ1mK7aJmke+jphZm2SLm1640XnNQob/x8fZhxMVfF8apf38LjV cgui79lBXDnlxDCcT50ljMYF9q3zIZ0EhCq+tGLuWIk/BQQ0GRfHtIQG81grNN5Tk+c6 ZZ61IEdquz+XUJP6ZQ753XMM7dbDXAfa1tA2X1+0GeiIpZze3xbdzCrW6ADg3oP73w6r CWSC3BpDcjnmnAO5wJbKZOTyTYCy5vUwY7oK6QzU5OO4WClSnaeBEtUDK11hGzvdm/fI p5Fg== X-Gm-Message-State: AC+VfDwugwddK0qB70jxXJCV6eWjqQQHOZHNlKmbBjdPd0TKSTgXLc1v 8aoNfK0TiQhr4lYCyr1vI4HQFcky85DxqX8gCU8= X-Received: by 2002:a17:902:f686:b0:1aa:f78d:97b7 with SMTP id l6-20020a170902f68600b001aaf78d97b7mr433101plg.46.1685057174934; Thu, 25 May 2023 16:26:14 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v2 19/20] tests/tcg/multiarch: Adjust sigbus.c Date: Thu, 25 May 2023 16:25:57 -0700 Message-Id: <20230525232558.1758967-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::536; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x536.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org With -cpu max and FEAT_LSE2, the __aarch64__ section will only raise an alignment exception when the load crosses a 16-byte boundary. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- tests/tcg/multiarch/sigbus.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tests/tcg/multiarch/sigbus.c b/tests/tcg/multiarch/sigbus.c index 8134c5fd56..f47c7390e7 100644 --- a/tests/tcg/multiarch/sigbus.c +++ b/tests/tcg/multiarch/sigbus.c @@ -6,8 +6,13 @@ #include -unsigned long long x = 0x8877665544332211ull; -void * volatile p = (void *)&x + 1; +char x[32] __attribute__((aligned(16))) = { + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, +}; +void * volatile p = (void *)&x + 15; void sigbus(int sig, siginfo_t *info, void *uc) { @@ -60,9 +65,9 @@ int main() * We might as well validate the unaligned load worked. */ if (BYTE_ORDER == LITTLE_ENDIAN) { - assert(tmp == 0x55443322); + assert(tmp == 0x13121110); } else { - assert(tmp == 0x77665544); + assert(tmp == 0x10111213); } return EXIT_SUCCESS; } From patchwork Thu May 25 23:25:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 685644 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp623473wrt; Thu, 25 May 2023 16:28:53 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4fGAVqzZaJ0pwnQQJccQoMyRX9KFNak9uMO1RhqTw4DSQI8BNBkw/o9EL6sKoQGzcqANmf X-Received: by 2002:a05:620a:3c95:b0:75b:23a1:d851 with SMTP id tp21-20020a05620a3c9500b0075b23a1d851mr3990249qkn.19.1685057333718; Thu, 25 May 2023 16:28:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685057333; cv=none; d=google.com; s=arc-20160816; b=m0H9Sct1SMNRuEuCeX7oIFmi6aLvSvjjvhNmudTTql16whe18rBsjSwSYuUugbvfM7 KisM5YxKcORJyE9/FuIPo1RLngQWnHkgR0PJuW4ilh53e5Llw/hLecjpZzgKZW0CjCws J39a6gbzQb+vLPqHFihP9BiXIj8ZdIVbII3dfv/YgKGWdbPqLgEsO20m+ID/Z+RfgLyD iyGda7DeSuFwTzjp8pS+UbzP9qW9pxjR3IdqBVMsIeqS+tQuPRl7oVVNGl+K23RsSjE5 R3jF0h6uaMmS6rk6YxELH2qR9dGXIZ7Z2r00aBl1wou0VEMaot+vjYylZB17lOb0mbru oaYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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:cc:to :from:dkim-signature; bh=9dWxpkriL89hdVCzkPxCT8S4I2dcQ51ihNaTFHcE9jo=; b=RhUI/TCGsMG7IdX7Cyop2PmP0DnaVqR88cbuX+vmsPSJSptDneqhJSdiDLWpkFSA46 C9Xy+6dBdS9Ngvqra1i4+k4rOSGmMR3wwnikqxGBZPoVwpUeb2qe5BrzDmBPxDEBIXvW DSa1HRXnHULmFv6cuejFVeFQWGFKSxV5cIXyb6IqBXPAEcSWal7/VZq1Oetap7dw5KIJ gGS12DSg2ChWbGT6rSZYvb+X8IepataUExz7ifT+oqgz80IOMKRwk4khi7EPUJy0J86r a6rrkm091z4viMTUtY4I7aeswL7dmd3/MooxRBxJnNJ8j0ui2F2k4UDeueFkXKPekk6Z FIcQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=GIS7GXDc; 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 f26-20020a05620a12fa00b007577a8cfcf9si949578qkl.199.2023.05.25.16.28.53 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 May 2023 16:28:53 -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=pass header.i=@linaro.org header.s=google header.b=GIS7GXDc; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2KLj-0005zQ-7K; Thu, 25 May 2023 19:26:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2KLe-0005vE-Mh for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:24 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2KLY-0005qf-VF for qemu-devel@nongnu.org; Thu, 25 May 2023 19:26:22 -0400 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-1afbc02c602so11983255ad.1 for ; Thu, 25 May 2023 16:26:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685057176; x=1687649176; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9dWxpkriL89hdVCzkPxCT8S4I2dcQ51ihNaTFHcE9jo=; b=GIS7GXDcYWW+HuFG94328LSD+e96Nwuq8mKeQLBJjTeDvRGMT+eNs/ILNn3TZnuZCm r1AlS1ma2ZyYDCD0Nst4uuSfBSw1plXP8pipyFIlE+z2cWgc//2AGAbF278bRQvkkFz+ 0i0/7S2mqf2bU01B02Tzt49xbdQrSQwEDAzW0AHPJ3pejEuHKzHFIbKX8sEldAxzbCuw oVUQTmvXXylVSFz5ISqfOPdQ56FWkswt2kjau7kqgGQbQl41zZtHVkTGI54II1MLoKiF 17IWsUaHxv6mjO2FxogfZ8W7EIixFl3dhSgq9HpH9iYglsouigptA9IMP+twp9ik5GfB qMVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685057176; x=1687649176; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9dWxpkriL89hdVCzkPxCT8S4I2dcQ51ihNaTFHcE9jo=; b=lYPDd/05FOVY3Qmth2HVGMZp/YcrdcUC0vE8KdZT7XtvLU0aNDy6wxdNSP+00qLVSY KYtSA8EyIMASQIH4TOxJDsN+WSOP5VMGKp6Hjh7hp36zhGe0pfVcZ7CP4/5CcL1eNpUU o/ExhtQFVoxb7d8dFfxE1daph+eUa5MevqVGTrckPdE1J6ZrWdF5MRtn5qmfzXtx8SxC XkhGX70evZ+XuKBfYPzIYer5a3RExX6J4DNhkmCvCPx29mUl0qWAwFDFnxBl+ImVzOBH meSUSZ7guo4PmWtYlcuk3ZltsB/DP6lnTL+9ac139KpV5+qQ/7iLNJODVHfSZ0LTfbo9 SRlQ== X-Gm-Message-State: AC+VfDxS0BiFNolf/2HqPAkPd7q5VzHWn/TppD6pTfwagc8fjgad+Ib0 1VH1kZpAsRgxlsM7DMLdHlSEG8xZACZ4PrDLphY= X-Received: by 2002:a17:903:1ca:b0:1a1:d54b:71df with SMTP id e10-20020a17090301ca00b001a1d54b71dfmr3306831plh.0.1685057175701; Thu, 25 May 2023 16:26:15 -0700 (PDT) Received: from stoup.. ([2602:ae:1598:4c01:7ac5:31cc:3997:3a16]) by smtp.gmail.com with ESMTPSA id s15-20020a170902ea0f00b0019e60c645b1sm1885036plg.305.2023.05.25.16.26.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 May 2023 16:26:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v2 20/20] target/arm: Enable FEAT_LSE2 for -cpu max Date: Thu, 25 May 2023 16:25:58 -0700 Message-Id: <20230525232558.1758967-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230525232558.1758967-1-richard.henderson@linaro.org> References: <20230525232558.1758967-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x634.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- docs/system/arm/emulation.rst | 1 + target/arm/tcg/cpu64.c | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/system/arm/emulation.rst b/docs/system/arm/emulation.rst index 7338987875..ecbbd63adf 100644 --- a/docs/system/arm/emulation.rst +++ b/docs/system/arm/emulation.rst @@ -50,6 +50,7 @@ the following architecture extensions: - FEAT_LRCPC (Load-acquire RCpc instructions) - FEAT_LRCPC2 (Load-acquire RCpc instructions v2) - FEAT_LSE (Large System Extensions) +- FEAT_LSE2 (Large System Extensions v2) - FEAT_LVA (Large Virtual Address space) - FEAT_MTE (Memory Tagging Extension) - FEAT_MTE2 (Memory Tagging Extension) diff --git a/target/arm/tcg/cpu64.c b/target/arm/tcg/cpu64.c index 886674a443..2976f94ae4 100644 --- a/target/arm/tcg/cpu64.c +++ b/target/arm/tcg/cpu64.c @@ -644,6 +644,7 @@ void aarch64_max_tcg_initfn(Object *obj) t = FIELD_DP64(t, ID_AA64MMFR2, IESB, 1); /* FEAT_IESB */ t = FIELD_DP64(t, ID_AA64MMFR2, VARANGE, 1); /* FEAT_LVA */ t = FIELD_DP64(t, ID_AA64MMFR2, ST, 1); /* FEAT_TTST */ + t = FIELD_DP64(t, ID_AA64MMFR2, AT, 1); /* FEAT_LSE2 */ t = FIELD_DP64(t, ID_AA64MMFR2, IDS, 1); /* FEAT_IDST */ t = FIELD_DP64(t, ID_AA64MMFR2, FWB, 1); /* FEAT_S2FWB */ t = FIELD_DP64(t, ID_AA64MMFR2, TTL, 1); /* FEAT_TTL */