From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2080.outbound.protection.outlook.com [40.107.20.80]) by sourceware.org (Postfix) with ESMTPS id 03298382FADC for ; Thu, 24 Nov 2022 18:36:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 03298382FADC Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com 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=MLqK8Xz5VaACxB6vCsdOXTpvMvdW9GV5OUsiSk9A93c=; b=MNTJwgAfv84Af/bOhQ8sLcgsqQ3/n6meLT89xbLm9XPdNSoyt//HDKrcWDwFmJ9QxIe01ZsOXl3NaEoaDCem41conXNMKuIMTrFzEeF/K2mn5y7jsUGgjWEiEqN2golvbbwmkl0kZBedRpemzKxn4IC1hygZEpqHciXgRVgxGRI= Received: from AM0PR03CA0093.eurprd03.prod.outlook.com (2603:10a6:208:69::34) by AS8PR08MB10151.eurprd08.prod.outlook.com (2603:10a6:20b:628::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.17; Thu, 24 Nov 2022 18:36:18 +0000 Received: from AM7EUR03FT058.eop-EUR03.prod.protection.outlook.com (2603:10a6:208:69:cafe::d7) by AM0PR03CA0093.outlook.office365.com (2603:10a6:208:69::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.19 via Frontend Transport; Thu, 24 Nov 2022 18:36:18 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass 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; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM7EUR03FT058.mail.protection.outlook.com (100.127.140.247) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.8 via Frontend Transport; Thu, 24 Nov 2022 18:36:18 +0000 Received: ("Tessian outbound 2ff13c8f2c05:v130"); Thu, 24 Nov 2022 18:36:17 +0000 X-CR-MTA-TID: 64aa7808 Received: from e90461f69621.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 5FE23DA8-CB72-4781-9A4E-13CB7C6A7B2C.1; Thu, 24 Nov 2022 18:36:06 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id e90461f69621.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 24 Nov 2022 18:36:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=crmwZZ1Of4Ic6eQczR3cE9IwSdjNCEVKnN0SZD2nAyzF/JKGn4kSaD4Z/piCGhpeFDitHTW/SJJF5URuPdye3zREDED+M7DMvIsfuURsqJzE+/UsKkvzs95bzoElAfb3Cq1HptTF7QQKUIgnlO7QybKevqLDiQg0SYG0ldKuAW5iU7yCkQFOEMkgx+PDGwQkxkA8Px+gxD4SXFAz0oMwhqUc9wjBVdoOXmri0xyyJJq9enjhBbNtnmMxzfS6bS0dSfYr4Hy+p6Krb9/GVTa9dDM9Neut/xeyxXAmLjK5jtXAa94KA9VwCZEJYIr0tY6M+RKg7II2E/iiS5ipdzEw7Q== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=MLqK8Xz5VaACxB6vCsdOXTpvMvdW9GV5OUsiSk9A93c=; b=FI5QSB8j7pygPEjEwWll8eOoDp2bj2aNDhGLWi10nAhxh1qifCokj14p2B+4m4bRQ7FJycRhNBTIWzmonkmZshM7y+5JkNWsnk1bvWOqy1iaUBIfaLlN/HnuIzpnJpa9R0/ZahQgkey/AOHHW0DvP1LZTlBgG4aE1O9qvSn8qCU1wVOu9lMeQee0z48SkdMJsnYK5rKQZbaJl2iNqZZxvAkEnbZQXEZospbX2rXdPccQhx0fx6uI7YnWkgRH44VvpgGJS7qWiOmL79N1szLpQaFo+ZyyRljygxO58I6taXLYtT6smF9yxwh15ncHlqzK2DGGA1FTVMBWjhdJTo+h5Q== 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=MLqK8Xz5VaACxB6vCsdOXTpvMvdW9GV5OUsiSk9A93c=; b=MNTJwgAfv84Af/bOhQ8sLcgsqQ3/n6meLT89xbLm9XPdNSoyt//HDKrcWDwFmJ9QxIe01ZsOXl3NaEoaDCem41conXNMKuIMTrFzEeF/K2mn5y7jsUGgjWEiEqN2golvbbwmkl0kZBedRpemzKxn4IC1hygZEpqHciXgRVgxGRI= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by PAXPR08MB7383.eurprd08.prod.outlook.com (2603:10a6:102:22e::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.5; Thu, 24 Nov 2022 18:35:58 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7%4]) with mapi id 15.20.5857.017; Thu, 24 Nov 2022 18:35:58 +0000 From: Tamar Christina To: Richard Sandiford CC: "gcc-patches@gcc.gnu.org" , nd , Richard Earnshaw , Marcus Shawcroft , Kyrylo Tkachov Subject: RE: [PATCH]AArch64 sve2: Fix expansion of division [PR107830] Thread-Topic: [PATCH]AArch64 sve2: Fix expansion of division [PR107830] Thread-Index: AQHY/0dZfirwZCyX6061HQtZnR8h/65Mr9k4gAG359A= Date: Thu, 24 Nov 2022 18:35:58 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ts-tracking-id: 6F245038FC307145A9DB6D1C9EADAF0E.0 x-checkrecipientchecked: true Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|PAXPR08MB7383:EE_|AM7EUR03FT058:EE_|AS8PR08MB10151:EE_ X-MS-Office365-Filtering-Correlation-Id: 3f572172-186c-426c-1b8f-08dace4ac6a8 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: R74HUJoKxscXbg97/fLxRjL9MxYN4YDJZdnrbFUf+BbtrfiqLrvo4k0Vo3uFq4w4nksHp63Ts2raal8M/uQFAcrFMpByP7+te7K9wxVr+kQCF2awwJwtSR5tUZl2wPgk7oXtQ9DozfgQ3RcNjzu+V/p3znwxdOZlIPC5OdZJgKuEHGF0ahhkrfKhzLmICPUyrmsGBRWSs6Rnwvy3C9FpjEwv1sM8JmhN59StgCqwePYNorgLp6sPQKOT466f21FNOej34LwTQHoakp33chETWcUywmANsYdZHv2EgoYswFYP/amGuRa3dE9g0uBYowUyPtyWPJjw9JQY26fZMbqWtZVHep4td3PEgJ4GGI8JmYMsuC381zIIQ7PnBYCuCdK1JYKdUZdRAH+VTJC4wSRPHkCiBp0DMjK3HdW2xDqQ1zJ5p9HbsNMEruo7aSI+GF/Hxya8g4lqaXWgAt0fBo8b7x9/UwKT73HlxGWsm3TJNvGPkkHPmRMQrluRG0zTXrDFiDbXa+HXq6ABsS2ArozbCj9TL3ajKQDwI6BUy1aT7enMOXb4duepDwIcFZjoZ5yuZq8efZvErOuGYmCkRFs/i6kiUiv79wS1QgqWH2t0LR2HjhQJcY77gsWKHz6fdC7ZL43CpCqfYWIw8fn++GJJbBJCbQnGlr0eHk5Vef6RaMEASm/rL2j0deEC9WvTELIY6fBbDlqAGpjw5vSt0DL3812z2Ksf4EsGNKcYwMsPRdbqqrNnjH5vTXIuThLj4OwUrOvsGGbLw3VikfJ37YuwDA== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB5325.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(376002)(366004)(346002)(396003)(39860400002)(136003)(451199015)(6862004)(83380400001)(8936002)(52536014)(76116006)(66946007)(8676002)(64756008)(66446008)(66476007)(66556008)(41300700001)(5660300002)(4326008)(86362001)(55016003)(33656002)(38100700002)(2906002)(99936003)(122000001)(38070700005)(186003)(71200400001)(478600001)(84970400001)(6636002)(316002)(53546011)(54906003)(6506007)(7696005)(26005)(9686003);DIR:OUT;SFP:1101; Content-Type: multipart/mixed; boundary="_002_VI1PR08MB5325ECD7C747EB009D8F2D5AFF0F9VI1PR08MB5325eurp_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB7383 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT058.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 9533290b-65b7-49a9-7c62-08dace4abaae X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YpLI21wjbz1RVlVqLrzkSO/N7qOGKp0fFlhZy6GECinPXRWU7Bw2cJO1988vOaVUtBqPj5VBXj9LRfFJkrOxgV2FnAFqQmnmCZJlA3Y4vP7hwpmOYkx9mxJU8XkSTIcq7V6sPPWWsCyXosM21q6TxDyqWTZUU/I122Y1lwzs+meOAFAJpjAiQtVQoMqhul+9+cONciGciBpurHvD+BJ+YxQhNZTDtwEeANcfF0YU5BwGc+5mTj6X5LweCIYyOjFZnzaobqWl5wg9TrgC6VXd2uYD/oO2bycWp+qoq4Xot5KyrpDLMa6XsAASrlxASddPjmX03MsRCea2dA2asVOBrGNOFOC2iWdytTzi1wB7cuK1C07f3Q4pDXDxLHo1rPGkuTwsnNGRCAVTbSTyMaGKFRbNGwoR7VcfIr2es3Q2R3LDhlLc3ZZc9ThD/38q+NsvajV1K189SZbfktEpMqQXf3VNFlfU6th1VN8rFiDaq7ivdboxd3Avh5EDou5lDvd23YV2+yIYUF7WeAtO76vjBIpgdQQqjk2vvCfMlIYZkrWNlHMCG+vuHOcz1j1TFf2Q+Px7L5MhBAT/DllV2Qf5inTBWLaK2LFDsckPbTtSbTGy6ymnX+1vbiADl+ii/iN4ENyZEz9AXWsW55ZctLhQal66jtPcFErKRvrfSnGZ+kxQHFpgE3oDhVotp+EDuIYZW41Qesmsf4+GA1Fb0uBAtlzN56TqjM6bQ8unGnEbsWHZ0JfTmwPdUjoK3pVm8eB6zNGFiVYpwF0up5OzeNZp9w== X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230022)(4636009)(376002)(39860400002)(346002)(136003)(396003)(451199015)(46966006)(36840700001)(40470700004)(84970400001)(99936003)(86362001)(40480700001)(55016003)(5660300002)(2906002)(81166007)(356005)(36860700001)(235185007)(33656002)(83380400001)(70586007)(54906003)(336012)(186003)(47076005)(6636002)(40460700003)(82740400003)(478600001)(316002)(4326008)(6862004)(82310400005)(41300700001)(8676002)(53546011)(7696005)(9686003)(52536014)(6506007)(70206006)(26005)(8936002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Nov 2022 18:36:18.1372 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3f572172-186c-426c-1b8f-08dace4ac6a8 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM7EUR03FT058.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB10151 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --_002_VI1PR08MB5325ECD7C747EB009D8F2D5AFF0F9VI1PR08MB5325eurp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable > -----Original Message----- > From: Richard Sandiford > Sent: Wednesday, November 23, 2022 4:18 PM > To: Tamar Christina > Cc: gcc-patches@gcc.gnu.org; nd ; Richard Earnshaw > ; Marcus Shawcroft > ; Kyrylo Tkachov > Subject: Re: [PATCH]AArch64 sve2: Fix expansion of division [PR107830] >=20 > Tamar Christina writes: > > Hi All, > > > > SVE has an actual division optab, and when using -Os we don't optimize > > the division away. This means that we need to distinguish between a > > div which we can optimize and one we cannot even during expansion. > > > > Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. > > > > Ok for master? > > > > Thanks, > > Tamar > > > > gcc/ChangeLog: > > > > PR target/107830 > > * config/aarch64/aarch64.cc > > (aarch64_vectorize_can_special_div_by_constant): Check validity > during > > codegen phase as well. > > > > gcc/testsuite/ChangeLog: > > > > PR target/107830 > > * gcc.target/aarch64/sve2/pr107830.c: New test. > > > > --- inline copy of patch -- > > diff --git a/gcc/config/aarch64/aarch64.cc > > b/gcc/config/aarch64/aarch64.cc index > > > 4176d7b046a126664360596b6db79a43e77ff76a..bee23625807af95d5ec15ad45 > 702 > > 961b2d7ab55d 100644 > > --- a/gcc/config/aarch64/aarch64.cc > > +++ b/gcc/config/aarch64/aarch64.cc > > @@ -24322,12 +24322,15 @@ > aarch64_vectorize_can_special_div_by_constant (enum tree_code code, > > if ((flags & VEC_ANY_SVE) && !TARGET_SVE2) > > return false; > > > > + wide_int val =3D wi::add (cst, 1); > > + int pow =3D wi::exact_log2 (val); > > + bool valid_p =3D pow =3D=3D (int)(element_precision (vectype) / 2); > > + /* SVE actually has a div operator, we we may have gotten here throu= gh > > + that route. */ > > if (in0 =3D=3D NULL_RTX && in1 =3D=3D NULL_RTX) > > - { > > - wide_int val =3D wi::add (cst, 1); > > - int pow =3D wi::exact_log2 (val); > > - return pow =3D=3D (int)(element_precision (vectype) / 2); > > - } > > + return valid_p; > > + else if (!valid_p) > > + return false; >=20 > Is this equivalent to: >=20 > int pow =3D wi::exact_log2 (cst + 1); > if (pow !=3D (int) (element_precision (vectype) / 2)) > return false; >=20 > /* We can use the optimized pattern. */ > if (in0 =3D=3D NULL_RTX && in1 =3D=3D NULL_RTX) > return true; >=20 > ? If so, I'd find that slightly easier to follow, but I realise it's per= sonal taste. > OK with that change if it works and you agree. >=20 > While looking at this, I noticed that we ICE for: >=20 > void f(unsigned short *restrict p1, unsigned int *restrict p2) > { > for (int i =3D 0; i < 16; ++i) > { > p1[i] /=3D 0xff; > p2[i] +=3D 1; > } > } >=20 > for -march=3Darmv8-a+sve2 -msve-vector-bits=3D512. I guess we need to fi= lter > out partial modes or (better) add support for them. Adding support for t= hem > probably requires changes to the underlying ADDHNB pattern. I've prevented the ice by checking if the expansion for the mode exists. I'= d like to defer adding partial support because when I tried I had to modify some iter= ators as well and need to check that it's safe to do so. Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. Ok for master? Thanks, Tamar gcc/ChangeLog: PR target/107830 * config/aarch64/aarch64.cc (aarch64_vectorize_can_special_div_by_constant): Check validity during codegen phase as well. gcc/testsuite/ChangeLog: PR target/107830 * gcc.target/aarch64/sve2/pr107830-1.c: New test. * gcc.target/aarch64/sve2/pr107830-2.c: New test. --- inline copy of patch ---- diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 4176d7b046a126664360596b6db79a43e77ff76a..02aa1f34ac6155b877340d788c6= d151b7c8d8bcd 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -24322,12 +24322,18 @@ aarch64_vectorize_can_special_div_by_constant (en= um tree_code code, if ((flags & VEC_ANY_SVE) && !TARGET_SVE2) return false; =20 + wide_int val =3D wi::add (cst, 1); + int pow =3D wi::exact_log2 (val); + auto insn_code =3D maybe_code_for_aarch64_bitmask_udiv3 (TYPE_MODE (vect= ype)); + /* SVE actually has a div operator, we may have gotten here through + that route. */ + if (pow !=3D (int)(element_precision (vectype) / 2) + || insn_code =3D=3D CODE_FOR_nothing) + return false; + + /* We can use the optimized pattern. */ if (in0 =3D=3D NULL_RTX && in1 =3D=3D NULL_RTX) - { - wide_int val =3D wi::add (cst, 1); - int pow =3D wi::exact_log2 (val); - return pow =3D=3D (int)(element_precision (vectype) / 2); - } + return true; =20 if (!VECTOR_TYPE_P (vectype)) return false; diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/pr107830-1.c b/gcc/tests= uite/gcc.target/aarch64/sve2/pr107830-1.c new file mode 100644 index 0000000000000000000000000000000000000000..6d8ee3615fdb0083dbde1e45a28= 26fb681726139 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/pr107830-1.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target fopenmp } */ +/* { dg-additional-options "-Os -fopenmp" } */ + +void +f2 (int *a) +{ + unsigned int i; + +#pragma omp simd + for (i =3D 0; i < 4; ++i) + a[i / 3] -=3D 4; +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/pr107830-2.c b/gcc/tests= uite/gcc.target/aarch64/sve2/pr107830-2.c new file mode 100644 index 0000000000000000000000000000000000000000..4ec45d7a47e591263fa9acbfc7e= 6d3297e10a109 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/pr107830-2.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O3 -msve-vector-bits=3D512" } */ + +void f(unsigned short *restrict p1, unsigned int *restrict p2) +{ + for (int i =3D 0; i < 16; ++i) + { + p1[i] /=3D 0xff; + p2[i] +=3D 1; + } +} + --_002_VI1PR08MB5325ECD7C747EB009D8F2D5AFF0F9VI1PR08MB5325eurp_ Content-Type: application/octet-stream; name="rb16645.patch" Content-Description: rb16645.patch Content-Disposition: attachment; filename="rb16645.patch"; size=2195; creation-date="Thu, 24 Nov 2022 18:34:49 GMT"; modification-date="Thu, 24 Nov 2022 18:35:57 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmNjIGIvZ2NjL2NvbmZpZy9h YXJjaDY0L2FhcmNoNjQuY2MKaW5kZXggNDE3NmQ3YjA0NmExMjY2NjQzNjA1OTZiNmRiNzlhNDNl NzdmZjc2YS4uMDJhYTFmMzRhYzYxNTViODc3MzQwZDc4OGM2ZDE1MWI3YzhkOGJjZCAxMDA2NDQK LS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuY2MKKysrIGIvZ2NjL2NvbmZpZy9hYXJj aDY0L2FhcmNoNjQuY2MKQEAgLTI0MzIyLDEyICsyNDMyMiwxOCBAQCBhYXJjaDY0X3ZlY3Rvcml6 ZV9jYW5fc3BlY2lhbF9kaXZfYnlfY29uc3RhbnQgKGVudW0gdHJlZV9jb2RlIGNvZGUsCiAgIGlm ICgoZmxhZ3MgJiBWRUNfQU5ZX1NWRSkgJiYgIVRBUkdFVF9TVkUyKQogICAgIHJldHVybiBmYWxz ZTsKIAorICB3aWRlX2ludCB2YWwgPSB3aTo6YWRkIChjc3QsIDEpOworICBpbnQgcG93ID0gd2k6 OmV4YWN0X2xvZzIgKHZhbCk7CisgIGF1dG8gaW5zbl9jb2RlID0gbWF5YmVfY29kZV9mb3JfYWFy Y2g2NF9iaXRtYXNrX3VkaXYzIChUWVBFX01PREUgKHZlY3R5cGUpKTsKKyAgLyogU1ZFIGFjdHVh bGx5IGhhcyBhIGRpdiBvcGVyYXRvciwgd2UgbWF5IGhhdmUgZ290dGVuIGhlcmUgdGhyb3VnaAor ICAgICB0aGF0IHJvdXRlLiAgKi8KKyAgaWYgKHBvdyAhPSAoaW50KShlbGVtZW50X3ByZWNpc2lv biAodmVjdHlwZSkgLyAyKQorICAgICAgfHwgaW5zbl9jb2RlID09IENPREVfRk9SX25vdGhpbmcp CisgICAgcmV0dXJuIGZhbHNlOworCisgIC8qIFdlIGNhbiB1c2UgdGhlIG9wdGltaXplZCBwYXR0 ZXJuLiAgKi8KICAgaWYgKGluMCA9PSBOVUxMX1JUWCAmJiBpbjEgPT0gTlVMTF9SVFgpCi0gICAg ewotICAgICAgd2lkZV9pbnQgdmFsID0gd2k6OmFkZCAoY3N0LCAxKTsKLSAgICAgIGludCBwb3cg PSB3aTo6ZXhhY3RfbG9nMiAodmFsKTsKLSAgICAgIHJldHVybiBwb3cgPT0gKGludCkoZWxlbWVu dF9wcmVjaXNpb24gKHZlY3R5cGUpIC8gMik7Ci0gICAgfQorICAgIHJldHVybiB0cnVlOwogCiAg IGlmICghVkVDVE9SX1RZUEVfUCAodmVjdHlwZSkpCiAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9zdmUyL3ByMTA3ODMwLTEuYyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N2ZTIvcHIxMDc4MzAtMS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAuLjZkOGVlMzYxNWZkYjAwODNkYmRlMWU0NWEyODI2ZmI2ODE3MjYxMzkKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9zdmUyL3ByMTA3ODMw LTEuYwpAQCAtMCwwICsxLDEzIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgZm9wZW5tcCB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwt b3B0aW9ucyAiLU9zIC1mb3Blbm1wIiB9ICovCisKK3ZvaWQKK2YyIChpbnQgKmEpCit7CisgIHVu c2lnbmVkIGludCBpOworCisjcHJhZ21hIG9tcCBzaW1kCisgIGZvciAoaSA9IDA7IGkgPCA0OyAr K2kpCisgICAgYVtpIC8gM10gLT0gNDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9hYXJjaDY0L3N2ZTIvcHIxMDc4MzAtMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2FhcmNoNjQvc3ZlMi9wcjEwNzgzMC0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGVjNDVkN2E0N2U1OTEy NjNmYTlhY2JmYzdlNmQzMjk3ZTEwYTEwOQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N2ZTIvcHIxMDc4MzAtMi5jCkBAIC0wLDAgKzEsMTIgQEAK Ky8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU8z IC1tc3ZlLXZlY3Rvci1iaXRzPTUxMiIgfSAqLworCit2b2lkIGYodW5zaWduZWQgc2hvcnQgKnJl c3RyaWN0IHAxLCB1bnNpZ25lZCBpbnQgKnJlc3RyaWN0IHAyKQoreworICAgIGZvciAoaW50IGkg PSAwOyBpIDwgMTY7ICsraSkKKyAgICAgIHsKKyAgICAgICAgcDFbaV0gLz0gMHhmZjsKKyAgICAg ICAgcDJbaV0gKz0gMTsKKyAgICAgIH0KK30KKwo= --_002_VI1PR08MB5325ECD7C747EB009D8F2D5AFF0F9VI1PR08MB5325eurp_--