From patchwork Tue Feb 11 12:03:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Dennis Zhang X-Patchwork-Id: 1236260 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-519331-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha1 header.s=default header.b=TpgMuOaN; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=armh.onmicrosoft.com header.i=@armh.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-armh-onmicrosoft-com header.b=aepRDp5m; dkim=fail reason="signature verification failed" (1024-bit key) header.d=armh.onmicrosoft.com header.i=@armh.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-armh-onmicrosoft-com header.b=aepRDp5m; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 48H1dR6Z6vz9s29 for ; Tue, 11 Feb 2020 23:03:38 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:from:to:cc:references:message-id:date:in-reply-to :content-type:mime-version; q=dns; s=default; b=P/edv2sgi/q3eo59 G0a+JdxO3f8JCNgSSG9TuHpEl4TAuHbgHsmszEwI3I2azNNIj3yVEW9/H3tX+fp/ cDSRTa301Kuc4GSK1nage0jgpPS5ufPa0EDiusamHQB7iYRcxJu8L7v2y2TfIzzl xqKkNgn79psxNBD65utusGpSZu0= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:from:to:cc:references:message-id:date:in-reply-to :content-type:mime-version; s=default; bh=OFFTyyk6qD5z4JzGh05MoH lKZKw=; b=TpgMuOaNIH53xmj3Au4Z14FDwgGpRGovj26awP+iMN6UBPR/rI1cfp TWBD0LIFaj2KwiLZ+x08hIRYROXZ+m7k+pLrDF3MDa4A/gW/yRK0CY1Z25/rYhfw lob/Frm+bOjrpsKAkh883Ph+pw2iCgpKtbCrMFkzkwO4F04/i4ybo= Received: (qmail 55067 invoked by alias); 11 Feb 2020 12:03:30 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 55055 invoked by uid 89); 11 Feb 2020 12:03:29 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.3 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, KAM_SHORT, MSGID_FROM_MTA_HEADER, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 spammy= X-HELO: EUR02-AM5-obe.outbound.protection.outlook.com Received: from mail-eopbgr00058.outbound.protection.outlook.com (HELO EUR02-AM5-obe.outbound.protection.outlook.com) (40.107.0.58) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 11 Feb 2020 12:03:26 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1na1IAoAt8mFNHDv6bsEDp1E1d7xyMFomUkI3jIwm4c=; b=aepRDp5mb68ZGtGmgnu6B8TIQoNdHnn763llzdb7HVC6YI1d+MzJ7LeqMQ38eRhsl5MrBAVDWRy2Ior35V76hbsVfWRZQoDW+S/8gVvMtl7NtdxeqbRXUZB7K1pknWyCTfgnmSM93UVSvq0EvvHqfEX9+/wl8FvWMAoLYZYI/JU= Received: from VI1PR08CA0203.eurprd08.prod.outlook.com (2603:10a6:800:d2::33) by VI1PR08MB2829.eurprd08.prod.outlook.com (2603:10a6:802:22::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.24; Tue, 11 Feb 2020 12:03:22 +0000 Received: from VE1EUR03FT033.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e09::203) by VI1PR08CA0203.outlook.office365.com (2603:10a6:800:d2::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.21 via Frontend Transport; Tue, 11 Feb 2020 12:03:22 +0000 Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; gcc.gnu.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; gcc.gnu.org; dmarc=bestguesspass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT033.mail.protection.outlook.com (10.152.18.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2665.18 via Frontend Transport; Tue, 11 Feb 2020 12:03:22 +0000 Received: ("Tessian outbound d1ceabc7047e:v42"); Tue, 11 Feb 2020 12:03:22 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 199afd723243c121 X-CR-MTA-TID: 64aa7808 Received: from dbeeb7423668.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id B5110069-C10C-404D-93E9-322194973238.1; Tue, 11 Feb 2020 12:03:17 +0000 Received: from EUR03-AM5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id dbeeb7423668.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 11 Feb 2020 12:03:17 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PHbVTWa657+KAMaDoIdf6U4DSRoYp0wsb0y3n9gj812vkbCspl10nwgLGZ2W1OnDtfizfq9ot0MEbLDVRdnSC7Ulh6jZQaeWZDt7Ywt4+G+uZluf/dn1NK785o/9gA/i/7PqOCXBIwg27zvz1NK6fTNNK7vqlCChB5vfqjzOK2DaOm95suKVU2TuuTeNYJRKKAMQb3MwxqjWb8AYC/fB4WcMFi3KctDBzs1Ihdrgj45jCl7XhtfDbKDc8VuUu3KxzV7r+4cZ1D8SCHHpClciAPvy8HqBJp4mzb2TDouMYrMXp8laP8b3ypE7D8KKIkkj3tQzp2dASH3gr+TqfweKYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1na1IAoAt8mFNHDv6bsEDp1E1d7xyMFomUkI3jIwm4c=; b=HXiOwwKjVYzNBtYnXD6Rq5xO1Ucuxs5yn9C/837XuEMpid9to+fgLvag47yMAYyt/INnlDVA3wnT9IBvZJzkx/SxjFVGFZK8IzsgcN9tMjg7WzJ8jFMwPW2k5yOjd4wDGVDctaFl3sIazB+PXSgorQbTe8xadoInEe/rSMDttHW7pl1GduHFAdmHFCE3WPlXqfcC9cZddV1FCrB/6kOmksGzPTTSLNi3v2QYBvNM+uh4KrQW6vFk2omOHyd75jY+WN2QOLlHBFwu/GqQnC40KEYiQZAmFOdmdEuffilnGZsQCguxQ+0CbdbkIx19bw7Sybna24w2vc5JCgxTAbVXSA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1na1IAoAt8mFNHDv6bsEDp1E1d7xyMFomUkI3jIwm4c=; b=aepRDp5mb68ZGtGmgnu6B8TIQoNdHnn763llzdb7HVC6YI1d+MzJ7LeqMQ38eRhsl5MrBAVDWRy2Ior35V76hbsVfWRZQoDW+S/8gVvMtl7NtdxeqbRXUZB7K1pknWyCTfgnmSM93UVSvq0EvvHqfEX9+/wl8FvWMAoLYZYI/JU= Authentication-Results-Original: spf=none (sender IP is ) smtp.mailfrom=Dennis.Zhang@arm.com; Received: from DB7PR08MB3227.eurprd08.prod.outlook.com (52.134.111.13) by DB7PR08MB3852.eurprd08.prod.outlook.com (20.178.47.223) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.28; Tue, 11 Feb 2020 12:03:14 +0000 Received: from DB7PR08MB3227.eurprd08.prod.outlook.com ([fe80::f51c:6e68:e702:5883]) by DB7PR08MB3227.eurprd08.prod.outlook.com ([fe80::f51c:6e68:e702:5883%6]) with mapi id 15.20.2707.030; Tue, 11 Feb 2020 12:03:14 +0000 Subject: [Ping][PATCH][Arm] ACLE 8-bit integer matrix multiply-accumulate intrinsics From: Dennis Zhang To: gcc-patches@gcc.gnu.org Cc: nd@arm.com, richard.earnshaw@arm.com, ramana.radhakrishnan@arm.com, kyrylo.tkachov@arm.com References: <4217b60f-9032-e282-a7bf-783b26654f61@arm.com> Message-ID: <3b319753-5b00-8cf6-5a8a-804117902774@arm.com> Date: Tue, 11 Feb 2020 12:03:13 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.2 In-Reply-To: <4217b60f-9032-e282-a7bf-783b26654f61@arm.com> MIME-Version: 1.0 Received: from [10.2.79.60] (217.140.106.53) by LO2P265CA0021.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:62::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.23 via Frontend Transport; Tue, 11 Feb 2020 12:03:14 +0000 X-MS-Exchange-Transport-Forked: True x-checkrecipientrouted: true X-MS-Oob-TLC-OOBClassifiers: OLM:2000;OLM:2000; X-Forefront-Antispam-Report-Untrusted: SFV:NSPM; SFS:(10009020)(4636009)(136003)(346002)(396003)(366004)(39860400002)(376002)(189003)(199004)(31686004)(8676002)(6916009)(6486002)(8936002)(478600001)(235185007)(81166006)(81156014)(5660300002)(53546011)(4001150100001)(4326008)(2906002)(966005)(66476007)(44832011)(66946007)(16526019)(31696002)(33964004)(66616009)(66556008)(86362001)(36756003)(52116002)(186003)(26005)(16576012)(316002)(956004)(2616005); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3852; H:DB7PR08MB3227.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: Der7BoAU4oCRQCYl45ViEpolHpB/nMueSxA6l0I3vvJVf49+2+PX6bIleSnZzKQDhW+7oGImDN21hALdqGQUFP15DRN1EiYaRqa6edILXBa+4ygGHJ1muDJTuSJW/WyTsmGt5RoTAvwajuF7qGV1GkMoW8t/qv2p2fnK1t/LEuBv1i2lGXjbX4nqMu9JH8n0esZzFa2Cp85Y3q9+HOBI6AoSXnA9b9Ttd2i9oFFHRJeWNlPDDIJNF7BHu7XPlMPniZMTBKqedKDW8Flkq9M1P06zxKX8q6yaj5RtfxCcqxoyeh8gSvevPysT6KFpW1VfTDQtJ61zTMGTeBx3CskKKwooHTFt1HYqQGNnoulw5nh3UQdUMvHs+TTThMtmQ6LkFS9/dWAkbEuXFcEaxU/y0FqiFGXUtOxjb1+jgwqPAvWVkrHO3eFgSso5mc7xY2YCZ8uo4cYdqBo7RfZnjSrYSU7FVC9p/uvgCldfX2s/dmD0EFg/dxhKWi/gcY4Wn5thRvkXDynG4G48nKdA0sZwvg== X-MS-Exchange-AntiSpam-MessageData: 1qwgxn4H3IKibbTZKHSjLcfvEzKWaMK8MYUc+GPtFewBXsrAtL3orcT3cQihSG0hmzci2oZitmWy4X7ud+GLcevtevpw1l68dD1/YlcPZ+uoRLfMYccpdvBi681PZTnKxO8tjfBTNCTU5UEHqNYmSQ== Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Dennis.Zhang@arm.com; X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT033.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 9cc2d398-1490-45e0-2e8e-08d7aeea5f72 Hi all, On 16/12/2019 13:45, Dennis Zhang wrote: > Hi all, > > This patch is part of a series adding support for Armv8.6-A features. > It depends on the Arm Armv8.6-A CLI patch, > https://gcc.gnu.org/ml/gcc-patches/2019-11/msg02195.html. > It also depends on the Armv8.6-A effective target checking patch, > https://gcc.gnu.org/ml/gcc-patches/2019-12/msg00857.html. > It also depends on the ARMv8.6-A I8MM dot product patch for using the > same builtin qualifier > https://gcc.gnu.org/ml/gcc-patches/2019-12/msg00945.html. > > This patch adds intrinsics for matrix multiply-accumulate operations > including vmmlaq_s32, vmmlaq_u32, and vusmmlaq_s32. > > ACLE documents are at https://developer.arm.com/docs/101028/latest > ISA documents are at https://developer.arm.com/docs/ddi0596/latest > > Regtested for arm-none-linux-gnueabi-armv8.2-a. > > Is it OK for trunk please? > > Thanks, > Dennis > > gcc/ChangeLog: > > 2019-12-10  Dennis Zhang  > >     * config/arm/arm_neon.h (vmmlaq_s32, vmmlaq_u32, vusmmlaq_s32): New. >     * config/arm/arm_neon_builtins.def (smmla, ummla, usmmla): New. >     * config/arm/iterators.md (MATMUL): New. >     (sup): Add UNSPEC_MATMUL_S, UNSPEC_MATMUL_U, and UNSPEC_MATMUL_US. >     (mmla_sfx): New. >     * config/arm/neon.md (neon_mmlav16qi): New. >     * config/arm/unspecs.md (UNSPEC_MATMUL_S): New. >     (UNSPEC_MATMUL_U, UNSPEC_MATMUL_US): New. > > gcc/testsuite/ChangeLog: > > 2019-12-10  Dennis Zhang  > >     * gcc.target/arm/simd/vmmla_1.c: New test. This patch has been updated according to the feedback on related AArch64 version at https://gcc.gnu.org/ml/gcc-patches/2020-01/msg01591.html Regtested. OK to commit please? Many thanks Dennis gcc/ChangeLog: 2020-02-11 Dennis Zhang * config/arm/arm-builtins.c (USTERNOP_QUALIFIERS): New macro. * config/arm/arm_neon.h (vmmlaq_s32, vmmlaq_u32, vusmmlaq_s32): New. * config/arm/arm_neon_builtins.def (smmla, ummla, usmmla): New. * config/arm/iterators.md (MATMUL): New iterator. (sup): Add UNSPEC_MATMUL_S, UNSPEC_MATMUL_U, and UNSPEC_MATMUL_US. (mmla_sfx): New attribute. * config/arm/neon.md (neon_mmlav16qi): New. * config/arm/unspecs.md (UNSPEC_MATMUL_S, UNSPEC_MATMUL_U): New. (UNSPEC_MATMUL_US): New. gcc/testsuite/ChangeLog: 2020-02-11 Dennis Zhang * gcc.target/arm/simd/vmmla_1.c: New test. diff --git a/gcc/config/arm/arm-builtins.c b/gcc/config/arm/arm-builtins.c index 7f279cca668..60c65c1772f 100644 --- a/gcc/config/arm/arm-builtins.c +++ b/gcc/config/arm/arm-builtins.c @@ -122,6 +122,11 @@ arm_unsigned_uternop_qualifiers[SIMD_MAX_BUILTIN_ARGS] qualifier_unsigned }; #define UTERNOP_QUALIFIERS (arm_unsigned_uternop_qualifiers) +static enum arm_type_qualifiers +arm_usternop_qualifiers[SIMD_MAX_BUILTIN_ARGS] + = { qualifier_none, qualifier_none, qualifier_unsigned, qualifier_none }; +#define USTERNOP_QUALIFIERS (arm_usternop_qualifiers) + /* T (T, immediate). */ static enum arm_type_qualifiers arm_binop_imm_qualifiers[SIMD_MAX_BUILTIN_ARGS] diff --git a/gcc/config/arm/arm_neon.h b/gcc/config/arm/arm_neon.h index 3c78f435009..7461c90e3fe 100644 --- a/gcc/config/arm/arm_neon.h +++ b/gcc/config/arm/arm_neon.h @@ -18745,6 +18745,34 @@ vcmlaq_rot270_laneq_f32 (float32x4_t __r, float32x4_t __a, float32x4_t __b, #pragma GCC pop_options #endif +/* AdvSIMD 8-bit Integer Matrix Multiply (I8MM) intrinsics. */ + +#pragma GCC push_options +#pragma GCC target ("arch=armv8.2-a+i8mm") + +__extension__ extern __inline int32x4_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vmmlaq_s32 (int32x4_t __r, int8x16_t __a, int8x16_t __b) +{ + return __builtin_neon_smmlav16qi (__r, __a, __b); +} + +__extension__ extern __inline uint32x4_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vmmlaq_u32 (uint32x4_t __r, uint8x16_t __a, uint8x16_t __b) +{ + return __builtin_neon_ummlav16qi_uuuu (__r, __a, __b); +} + +__extension__ extern __inline int32x4_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vusmmlaq_s32 (int32x4_t __r, uint8x16_t __a, int8x16_t __b) +{ + return __builtin_neon_usmmlav16qi_ssus (__r, __a, __b); +} + +#pragma GCC pop_options + #ifdef __cplusplus } #endif diff --git a/gcc/config/arm/arm_neon_builtins.def b/gcc/config/arm/arm_neon_builtins.def index e9ff4e501cb..d304cdb33cc 100644 --- a/gcc/config/arm/arm_neon_builtins.def +++ b/gcc/config/arm/arm_neon_builtins.def @@ -373,3 +373,7 @@ VAR2 (MAC_LANE_PAIR, vcmlaq_lane0, v4sf, v8hf) VAR2 (MAC_LANE_PAIR, vcmlaq_lane90, v4sf, v8hf) VAR2 (MAC_LANE_PAIR, vcmlaq_lane180, v4sf, v8hf) VAR2 (MAC_LANE_PAIR, vcmlaq_lane270, v4sf, v8hf) + +VAR1 (TERNOP, smmla, v16qi) +VAR1 (UTERNOP, ummla, v16qi) +VAR1 (USTERNOP, usmmla, v16qi) diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md index 33e29509f00..141ad96d6db 100644 --- a/gcc/config/arm/iterators.md +++ b/gcc/config/arm/iterators.md @@ -485,6 +485,8 @@ (define_int_iterator VCADD [UNSPEC_VCADD90 UNSPEC_VCADD270]) (define_int_iterator VCMLA [UNSPEC_VCMLA UNSPEC_VCMLA90 UNSPEC_VCMLA180 UNSPEC_VCMLA270]) +(define_int_iterator MATMUL [UNSPEC_MATMUL_S UNSPEC_MATMUL_U UNSPEC_MATMUL_US]) + ;;---------------------------------------------------------------------------- ;; Mode attributes ;;---------------------------------------------------------------------------- @@ -939,6 +941,7 @@ (UNSPEC_VCVTH_S "s") (UNSPEC_VCVTH_U "u") (UNSPEC_DOT_S "s") (UNSPEC_DOT_U "u") (UNSPEC_SSAT16 "s") (UNSPEC_USAT16 "u") + (UNSPEC_MATMUL_S "s") (UNSPEC_MATMUL_U "u") (UNSPEC_MATMUL_US "us") ]) (define_int_attr vfml_half @@ -1107,6 +1110,9 @@ (UNSPEC_SMUADX "smuadx") (UNSPEC_SSAT16 "ssat16") (UNSPEC_USAT16 "usat16")]) +(define_int_attr mmla_sfx [(UNSPEC_MATMUL_S "s8") (UNSPEC_MATMUL_U "u8") + (UNSPEC_MATMUL_US "s8")]) + ;; Both kinds of return insn. (define_code_iterator RETURNS [return simple_return]) (define_code_attr return_str [(return "") (simple_return "simple_")]) diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index 6087ca6f2ba..f9f6176a596 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -6552,3 +6552,14 @@ if (BYTES_BIG_ENDIAN) "vabd. %0, %1, %2" [(set_attr "type" "neon_fp_abd_s")] ) + +(define_insn "neon_mmlav16qi" + [(set (match_operand:V4SI 0 "register_operand" "=w") + (plus:V4SI + (unspec:V4SI [(match_operand:V16QI 2 "register_operand" "w") + (match_operand:V16QI 3 "register_operand" "w")] MATMUL) + (match_operand:V4SI 1 "register_operand" "0")))] + "TARGET_I8MM" + "vmmla.\t%q0, %q2, %q3" + [(set_attr "type" "neon_mla_s_q")] +) diff --git a/gcc/config/arm/unspecs.md b/gcc/config/arm/unspecs.md index 8f4a705f43e..782c319a169 100644 --- a/gcc/config/arm/unspecs.md +++ b/gcc/config/arm/unspecs.md @@ -501,4 +501,7 @@ UNSPEC_VCMLA90 UNSPEC_VCMLA180 UNSPEC_VCMLA270 + UNSPEC_MATMUL_S + UNSPEC_MATMUL_U + UNSPEC_MATMUL_US ]) diff --git a/gcc/testsuite/gcc.target/arm/simd/vmmla_1.c b/gcc/testsuite/gcc.target/arm/simd/vmmla_1.c new file mode 100644 index 00000000000..b766a9141ce --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/simd/vmmla_1.c @@ -0,0 +1,28 @@ +/* { dg-do assemble } */ +/* { dg-require-effective-target arm_v8_2a_i8mm_ok } */ +/* { dg-options "-save-temps -O2" } */ +/* { dg-additional-options "-march=armv8.2-a+i8mm" } */ + +#include "arm_neon.h" + +int32x4_t +test_vmmlaq_s32 (int32x4_t r, int8x16_t a, int8x16_t b) +{ + return vmmlaq_s32 (r, a, b); +} + +uint32x4_t +test_vmmlaq_u32 (uint32x4_t r, uint8x16_t a, uint8x16_t b) +{ + return vmmlaq_u32 (r, a, b); +} + +int32x4_t +test_vusmmlaq_s32 (int32x4_t r, uint8x16_t a, int8x16_t b) +{ + return vusmmlaq_s32 (r, a, b); +} + +/* { dg-final { scan-assembler-times {\tvsmmla.s8\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ +/* { dg-final { scan-assembler-times {\tvummla.u8\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ +/* { dg-final { scan-assembler-times {\tvusmmla.s8\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */