From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2059.outbound.protection.outlook.com [40.107.22.59]) by sourceware.org (Postfix) with ESMTPS id 4DAA33858035 for ; Thu, 11 Nov 2021 10:27:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4DAA33858035 Received: from AM6P193CA0113.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:85::18) by DBBPR08MB6202.eurprd08.prod.outlook.com (2603:10a6:10:209::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.17; Thu, 11 Nov 2021 10:27:42 +0000 Received: from VE1EUR03FT006.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:85:cafe::66) by AM6P193CA0113.outlook.office365.com (2603:10a6:209:85::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.11 via Frontend Transport; Thu, 11 Nov 2021 10:27:42 +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; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT006.mail.protection.outlook.com (10.152.18.116) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4649.14 via Frontend Transport; Thu, 11 Nov 2021 10:27:41 +0000 Received: ("Tessian outbound 2bb1f94ba47e:v108"); Thu, 11 Nov 2021 10:27:41 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 82969fecd0797f78 X-CR-MTA-TID: 64aa7808 Received: from faa847aaa4ce.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 7D2A014F-3E06-447C-9A08-21C272C9F203.1; Thu, 11 Nov 2021 10:27:28 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id faa847aaa4ce.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 11 Nov 2021 10:27:28 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=k0g6oT35YpMm8bLRA9uUNMK3uSKHK4u3sBaDtOzntSid2N+A62OMOeH21BYwS/UwMKoIB5Y3woqbw9R0fYgH65fOLix0GdUKr0uHr/MdKW55u+Z3OOT4Qg7Go3RcYD08Gnz02wYAJ7GfcJXIsY7pPWcO3dJt9dagAFcfQpyNeHOmr+MCsCphGCDrQBJwGsJJ4D7d1uCER+BbUD6KZvolqyDjR6Lf1p81aXVz8G5rwiupU5pXI0YJKwUJQGqbyQNdHISTCjZj8d9/YaPmkW3JCq97bkzddXCGAauzk6wigM4esN2z96gT/L/UC6FXt5VdJz4JZ9zUIOJwnNBJsJwV7w== 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=VJa1QMTESyG4lCXXZ5bGkuyOgmiNeK7R5Ke3xEyf1t4=; b=H6CvzdS+12g7E7++BuJoYL7H/06KOIMlEbBGdOEBtm7gsAfSx7luoARmytGR5yzOCa6J4cfYy8jbKZ/oy/q9mMyqLo1WSQGWKhN6RlNQIqTSPijhclYKL/toEftwQa9L+O/fo0UPzcE27rlKDM1iw5Lb7hKbdWiZ88O0R4RmggdU/d/2ysizqoScSQyUYMa3OBhHXasFjerOOpudncI/rBPepg4poeXruLfVOtVBDfsi42s6GODgukGzw5Gd6xrOBcm+n1xeox5ZVaBfKOv3hlbX0hnj0n+Kr7RCwITaX93s79CocDuVg3295jW4oh1M27uV+KhScTB263PSosSD3w== 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 Received: from DB9PR08MB6959.eurprd08.prod.outlook.com (2603:10a6:10:2bf::11) by DB8PR08MB4571.eurprd08.prod.outlook.com (2603:10a6:10:ac::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.15; Thu, 11 Nov 2021 10:27:26 +0000 Received: from DB9PR08MB6959.eurprd08.prod.outlook.com ([fe80::4c14:9d27:688c:65fc]) by DB9PR08MB6959.eurprd08.prod.outlook.com ([fe80::4c14:9d27:688c:65fc%5]) with mapi id 15.20.4690.015; Thu, 11 Nov 2021 10:27:26 +0000 From: Jonathan Wright To: "gcc-patches@gcc.gnu.org" CC: Richard Sandiford , Kyrylo Tkachov Subject: [PATCH] aarch64: Use type-qualified builtins for [R]SUBHN[2] Neon intrinsics Thread-Topic: [PATCH] aarch64: Use type-qualified builtins for [R]SUBHN[2] Neon intrinsics Thread-Index: AQHX1uaVVIKNiRrxTE26JPTsNADM6w== Date: Thu, 11 Nov 2021 10:27:26 +0000 Message-ID: Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: yes X-MS-TNEF-Correlator: suggested_attachment_session_id: 6127e7b5-4200-9bed-f9e6-7d55589eb8ee Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-publictraffictype: Email X-MS-Office365-Filtering-Correlation-Id: fd2cf71a-b0df-4cfa-f23e-08d9a4fde492 x-ms-traffictypediagnostic: DB8PR08MB4571:|DBBPR08MB6202: X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:546;OLM:546; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: 28PI3in56c0ENYJyCmoTSPtDJRfQJVBAKFfUEvqbYEn+gcv/5uXW1Y02V+2esFSQWJDUSCgIC1QyD2CM5Ho3GGroZF6EEqghXK9orGfOEaNE5a9TTGXTKxNs0eHC6yyPzEm7/gGHzI14rwjSgZ9DOFcdM8+R27G1KCx9+1ua8aD3rOwro9cozQfzFj5Y/qeDyTRCzQrsf2ADiYEc09jz0ayx53rHJzLusswdLHoDGGTfpmmvmEEwws7gIqJRRNl0M0THFF9IV4LOoH9H9S8HCNe4A2Id5HAvlN1VhT4/Z5pUeXKkAoWXTFvSkC69S5buniwtlcvcrbBIKow5eO8Uit1ikcgx+Fup0HBCL1jMaJ8frTNLDRupcnOjsrIKv913ymLnEv7jozZEbfI3LLx0aDT4RPAYko3Kv+qTINQbfN0XnXMjCbQ9xfmoSglETVTZ+B6GKegGN/D1lG2lyf+PpJroEfu1dKmiw6Hy9jrk5A3RObH6YJ0W4IRczGmeK3xm7/qP6m/RRawtVJeUuGCi102YIFXyFv13yY3PwvjWgfI1z46wAqn4P7M1OHt3X8oguF4GRwRiOjpiRsZLKxDVi8jEJ8o3/CTca1Gg0NwvA0AJ5PSjMLEER7cZ/GPVmb4RKmiyzj7iPvDdNBf6Ra9ALoANHg+kAz8Rda+B0eddj+Zu85FnAD6Occ2lVAT8lZ6mU7xE+D4Di3HqRq5RM/V7rA== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB9PR08MB6959.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(26005)(7696005)(55016002)(5660300002)(122000001)(66476007)(64756008)(2906002)(186003)(8676002)(66446008)(71200400001)(8936002)(6506007)(9686003)(86362001)(99936003)(38100700002)(508600001)(54906003)(4326008)(52536014)(76116006)(91956017)(38070700005)(316002)(66556008)(33656002)(6916009)(66946007); DIR:OUT; SFP:1101; Content-Type: multipart/mixed; boundary="_002_DB9PR08MB695961671B4E2BE369F96C60EB949DB9PR08MB6959eurp_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB4571 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: VE1EUR03FT006.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: d49f2020-ff3c-4ef9-4c99-08d9a4fddb61 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 20CgOngR+USTV6HLts1Sq7LbRyQhnL1lmBb+FH/oIvZUdWV9Jsm8Rzv1fcA749CFOqWJ9js2zdzaEVfcH/PvqM90X9cA8Nhm9SQrfzYvOq3zh/sgPIpCOOh5btzYu0UoQClX3vcf+397xudNJUapH4K4ZK9Y/Mpe3jsk1KgCn++19YFexstMVIvmMGjUsslkIk1Hko0XR0WTtb7tsmjnX5zwJZ3mcL0qKR5vNQKZofOsTm4LEkBz091O2pGp0vIbPTp6qosoQUGC4r8n3o/hYWjsgtvLdutJ5SVilSpaJ+teQw1xLe0OyT/Bq5yzT4QCAJU1iaU/TrZUpC7ImG5G2481PiiuDcEXkifBaihVCG6SFejwGUYsp5C0ehduK8vIElOovt/cjzZ4LQ9i/RMng+i6PESFekWZ6Ynou1G8k9MW3QdfwwI3BmNsWsBnhTNZ7obkPMWG205QFq6N7btAT/2cLtaCxQ3xeDSwZ3HRyzZgntyrtiK4I9qr3e30c5woBkffKIiq3m2UaWvKJurLZnm6u0zRTz7Mg4eyVlnnVlMG8dV1aDo30V4wlrHvlql/fNIlkFLOaFOUiedG/6LBQhtpKQKozHGf1P1qwnNCe43QaKZStt/s69CxB+nFD7soz0y8WvQCZDm9QkVxgR4yDBreTDwsJanVJxnOvuoQMqdnUEJ0itrlGXR6gwrJH/nEJTs8oi8GPoCk7gjtP0RWOg== 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:(4636009)(46966006)(36840700001)(6916009)(4326008)(7696005)(186003)(508600001)(5660300002)(70586007)(9686003)(2906002)(356005)(55016002)(54906003)(86362001)(26005)(6506007)(336012)(33656002)(316002)(82310400003)(8676002)(47076005)(36860700001)(52536014)(8936002)(81166007)(70206006)(235185007)(99936003); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Nov 2021 10:27:41.6713 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fd2cf71a-b0df-4cfa-f23e-08d9a4fde492 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: VE1EUR03FT006.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6202 X-Spam-Status: No, score=-6.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Nov 2021 10:27:46 -0000 --_002_DB9PR08MB695961671B4E2BE369F96C60EB949DB9PR08MB6959eurp_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi,=0A= =0A= This patch declares unsigned type-qualified builtins and uses them to=0A= implement (rounding) halving-narrowing-subtract Neon intrinsics. This=0A= removes the need for many casts in arm_neon.h.=0A= =0A= Bootstrapped and regression tested on aarch64-none-linux-gnu - no=0A= issues.=0A= =0A= Ok for master?=0A= =0A= Thanks,=0A= Jonathan=0A= =0A= ---=0A= =0A= gcc/ChangeLog:=0A= =0A= 2021-11-09 =A0Jonathan Wright =A0=0A= =0A= * config/aarch64/aarch64-simd-builtins.def: Declare unsigned=0A= builtins for [r]subhn[2].=0A= * config/aarch64/arm_neon.h (vsubhn_s16): Remove unnecessary=0A= cast.=0A= (vsubhn_s32): Likewise.=0A= (vsubhn_s64): Likewise.=0A= (vsubhn_u16): Use type-qualified builtin and remove casts.=0A= (vsubhn_u32): Likewise.=0A= (vsubhn_u64): Likewise.=0A= (vrsubhn_s16): Remove unnecessary cast.=0A= (vrsubhn_s32): Likewise.=0A= (vrsubhn_s64): Likewise.=0A= (vrsubhn_u16): Use type-qualified builtin and remove casts.=0A= (vrsubhn_u32): Likewise.=0A= (vrsubhn_u64): Likewise.=0A= (vrsubhn_high_s16): Remove unnecessary cast.=0A= (vrsubhn_high_s32): Likewise.=0A= (vrsubhn_high_s64): Likewise.=0A= (vrsubhn_high_u16): Use type-qualified builtin and remove=0A= casts.=0A= (vrsubhn_high_u32): Likewise.=0A= (vrsubhn_high_u64): Likewise.=0A= (vsubhn_high_s16): Remove unnecessary cast.=0A= (vsubhn_high_s32): Likewise.=0A= (vsubhn_high_s64): Likewise.=0A= (vsubhn_high_u16): Use type-qualified builtin and remove=0A= casts.=0A= (vsubhn_high_u32): Likewise.=0A= (vsubhn_high_u64): Likewise.=0A= --_002_DB9PR08MB695961671B4E2BE369F96C60EB949DB9PR08MB6959eurp_ Content-Type: application/octet-stream; name="rb15038.patch" Content-Description: rb15038.patch Content-Disposition: attachment; filename="rb15038.patch"; size=9062; creation-date="Thu, 11 Nov 2021 10:27:16 GMT"; modification-date="Thu, 11 Nov 2021 10:27:16 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXNpbWQtYnVpbHRpbnMuZGVm IGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2ltZC1idWlsdGlucy5kZWYKaW5kZXggNjM3 MmRhODBiZTMzYzQwY2IyN2U1ODExYmZiNGY0ZjY3MmYyOGEzNS4uMDM1YmRkY2I2NjBlMzQxNDZi NzA5ZmRhZTI0NDU3MWNkZWIwNjI3MiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2Fh cmNoNjQtc2ltZC1idWlsdGlucy5kZWYKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQt c2ltZC1idWlsdGlucy5kZWYKQEAgLTIyMiwxNiArMjIyLDIwIEBACiAgIEJVSUxUSU5fVlFOIChC SU5PUCwgYWRkaG4sIDAsIE5PTkUpCiAgIEJVSUxUSU5fVlFOIChCSU5PUFUsIGFkZGhuLCAwLCBO T05FKQogICBCVUlMVElOX1ZRTiAoQklOT1AsIHN1YmhuLCAwLCBOT05FKQorICBCVUlMVElOX1ZR TiAoQklOT1BVLCBzdWJobiwgMCwgTk9ORSkKICAgQlVJTFRJTl9WUU4gKEJJTk9QLCByYWRkaG4s IDAsIE5PTkUpCiAgIEJVSUxUSU5fVlFOIChCSU5PUFUsIHJhZGRobiwgMCwgTk9ORSkKICAgQlVJ TFRJTl9WUU4gKEJJTk9QLCByc3ViaG4sIDAsIE5PTkUpCisgIEJVSUxUSU5fVlFOIChCSU5PUFUs IHJzdWJobiwgMCwgTk9ORSkKICAgLyogSW1wbGVtZW50ZWQgYnkgYWFyY2g2NF88c3VyPjxhZGRz dWI+aG4yPG1vZGU+LiAgKi8KICAgQlVJTFRJTl9WUU4gKFRFUk5PUCwgYWRkaG4yLCAwLCBOT05F KQogICBCVUlMVElOX1ZRTiAoVEVSTk9QVSwgYWRkaG4yLCAwLCBOT05FKQogICBCVUlMVElOX1ZR TiAoVEVSTk9QLCBzdWJobjIsIDAsIE5PTkUpCisgIEJVSUxUSU5fVlFOIChURVJOT1BVLCBzdWJo bjIsIDAsIE5PTkUpCiAgIEJVSUxUSU5fVlFOIChURVJOT1AsIHJhZGRobjIsIDAsIE5PTkUpCiAg IEJVSUxUSU5fVlFOIChURVJOT1BVLCByYWRkaG4yLCAwLCBOT05FKQogICBCVUlMVElOX1ZRTiAo VEVSTk9QLCByc3ViaG4yLCAwLCBOT05FKQorICBCVUlMVElOX1ZRTiAoVEVSTk9QVSwgcnN1Ymhu MiwgMCwgTk9ORSkKIAogICAvKiBJbXBsZW1lbnRlZCBieSBhYXJjaDY0Xzx1cz54dGw8bW9kZT4u ICAqLwogICBCVUlMVElOX1ZRTiAoVU5PUCwgc3h0bCwgMCwgTk9ORSkKZGlmZiAtLWdpdCBhL2dj Yy9jb25maWcvYWFyY2g2NC9hcm1fbmVvbi5oIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FybV9uZW9u LmgKaW5kZXggY2I0ODE1NDJiYTBkNmZmYjdjYzhmZmU3YzFhMDk4OTMwZmM1ZTc0Ni4uYWM4NzFk NGU1MDNjNjM0YjQ1M2NkMWYxZDNlNjExODJjZTRhNWE4OCAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9hYXJjaDY0L2FybV9uZW9uLmgKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FybV9uZW9uLmgK QEAgLTIwMjIsMTg2ICsyMDIyLDE2OCBAQCBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBp bnQ4eDhfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQogdnN1YmhuX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90 IF9fYikKIHsKLSAgcmV0dXJuIChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3ViaG52OGhp IChfX2EsIF9fYik7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zdWJobnY4aGkgKF9fYSwg X19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgaW50MTZ4NF90CiBfX2F0 dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCiB2c3ViaG5fczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQogewotICBy ZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfc3ViaG52NHNpIChfX2EsIF9fYik7 CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zdWJobnY0c2kgKF9fYSwgX19iKTsKIH0KIAog X19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgaW50MzJ4Ml90CiBfX2F0dHJpYnV0ZV9fICgo X19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2c3Vi aG5fczY0IChpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3QgX19iKQogewotICByZXR1cm4gKGludDMy eDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3ViaG52MmRpIChfX2EsIF9fYik7CisgIHJldHVybiBf X2J1aWx0aW5fYWFyY2g2NF9zdWJobnYyZGkgKF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNpb25f XyBleHRlcm4gX19pbmxpbmUgdWludDh4OF90CiBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5s aW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2c3ViaG5fdTE2ICh1aW50 MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IpCiB7Ci0gIHJldHVybiAodWludDh4OF90KSBfX2J1 aWx0aW5fYWFyY2g2NF9zdWJobnY4aGkgKChpbnQxNng4X3QpIF9fYSwKLQkJCQkJCSAgKGludDE2 eDhfdCkgX19iKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3N1YmhudjhoaV91dXUgKF9f YSwgX19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDE2eDRfdAog X19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQogdnN1YmhuX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQog ewotICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3N1YmhudjRzaSAoKGlu dDMyeDRfdCkgX19hLAotCQkJCQkJICAgKGludDMyeDRfdCkgX19iKTsKKyAgcmV0dXJuIF9fYnVp bHRpbl9hYXJjaDY0X3N1YmhudjRzaV91dXUgKF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNpb25f XyBleHRlcm4gX19pbmxpbmUgdWludDMyeDJfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lu bGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnN1YmhuX3U2NCAodWlu dDY0eDJfdCBfX2EsIHVpbnQ2NHgyX3QgX19iKQogewotICByZXR1cm4gKHVpbnQzMngyX3QpIF9f YnVpbHRpbl9hYXJjaDY0X3N1YmhudjJkaSAoKGludDY0eDJfdCkgX19hLAotCQkJCQkJICAgKGlu dDY0eDJfdCkgX19iKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3N1YmhudjJkaV91dXUg KF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgaW50OHg4X3QK IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0 aWZpY2lhbF9fKSkKIHZyc3ViaG5fczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQog ewotICByZXR1cm4gKGludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yc3ViaG52OGhpIChfX2Es IF9fYik7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9yc3ViaG52OGhpIChfX2EsIF9fYik7 CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDE2eDRfdAogX19hdHRyaWJ1 dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQogdnJzdWJobl9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCiB7Ci0gIHJldHVy biAoaW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yc3ViaG52NHNpIChfX2EsIF9fYik7Cisg IHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9yc3ViaG52NHNpIChfX2EsIF9fYik7CiB9CiAKIF9f ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDMyeDJfdAogX19hdHRyaWJ1dGVfXyAoKF9f YWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnJzdWJo bl9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCiB7Ci0gIHJldHVybiAoaW50MzJ4 Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yc3ViaG52MmRpIChfX2EsIF9fYik7CisgIHJldHVybiBf X2J1aWx0aW5fYWFyY2g2NF9yc3ViaG52MmRpIChfX2EsIF9fYik7CiB9CiAKIF9fZXh0ZW5zaW9u X18gZXh0ZXJuIF9faW5saW5lIHVpbnQ4eDhfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lu bGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnJzdWJobl91MTYgKHVp bnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKIHsKLSAgcmV0dXJuICh1aW50OHg4X3QpIF9f YnVpbHRpbl9hYXJjaDY0X3JzdWJobnY4aGkgKChpbnQxNng4X3QpIF9fYSwKLQkJCQkJCSAgIChp bnQxNng4X3QpIF9fYik7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9yc3ViaG52OGhpX3V1 dSAoX19hLCBfX2IpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1aW50MTZ4 NF90CiBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCiB2cnN1YmhuX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3Qg X19iKQogewotICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JzdWJobnY0 c2kgKChpbnQzMng0X3QpIF9fYSwKLQkJCQkJCSAgICAoaW50MzJ4NF90KSBfX2IpOworICByZXR1 cm4gX19idWlsdGluX2FhcmNoNjRfcnN1YmhudjRzaV91dXUgKF9fYSwgX19iKTsKIH0KIAogX19l eHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDMyeDJfdAogX19hdHRyaWJ1dGVfXyAoKF9f YWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnJzdWJo bl91NjQgKHVpbnQ2NHgyX3QgX19hLCB1aW50NjR4Ml90IF9fYikKIHsKLSAgcmV0dXJuICh1aW50 MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yc3ViaG52MmRpICgoaW50NjR4Ml90KSBfX2EsCi0J CQkJCQkgICAgKGludDY0eDJfdCkgX19iKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3Jz dWJobnYyZGlfdXV1IChfX2EsIF9fYik7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5s aW5lIGludDh4MTZfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnJzdWJobl9oaWdoX3MxNiAoaW50OHg4X3QgX19h LCBpbnQxNng4X3QgX19iLCBpbnQxNng4X3QgX19jKQogewotICByZXR1cm4gKGludDh4MTZfdCkg X19idWlsdGluX2FhcmNoNjRfcnN1YmhuMnY4aGkgKF9fYSwgX19iLCBfX2MpOworICByZXR1cm4g X19idWlsdGluX2FhcmNoNjRfcnN1YmhuMnY4aGkgKF9fYSwgX19iLCBfX2MpOwogfQogCiBfX2V4 dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBpbnQxNng4X3QKIF9fYXR0cmlidXRlX18gKChfX2Fs d2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZyc3ViaG5f aGlnaF9zMzIgKGludDE2eDRfdCBfX2EsIGludDMyeDRfdCBfX2IsIGludDMyeDRfdCBfX2MpCiB7 Ci0gIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yc3ViaG4ydjRzaSAoX19h LCBfX2IsIF9fYyk7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9yc3ViaG4ydjRzaSAoX19h LCBfX2IsIF9fYyk7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDMyeDRf dAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQogdnJzdWJobl9oaWdoX3M2NCAoaW50MzJ4Ml90IF9fYSwgaW50NjR4Ml90 IF9fYiwgaW50NjR4Ml90IF9fYykKIHsKLSAgcmV0dXJuIChpbnQzMng0X3QpIF9fYnVpbHRpbl9h YXJjaDY0X3JzdWJobjJ2MmRpIChfX2EsIF9fYiwgX19jKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9h YXJjaDY0X3JzdWJobjJ2MmRpIChfX2EsIF9fYiwgX19jKTsKIH0KIAogX19leHRlbnNpb25fXyBl eHRlcm4gX19pbmxpbmUgdWludDh4MTZfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGlu ZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnJzdWJobl9oaWdoX3UxNiAo dWludDh4OF90IF9fYSwgdWludDE2eDhfdCBfX2IsIHVpbnQxNng4X3QgX19jKQogewotICByZXR1 cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JzdWJobjJ2OGhpICgoaW50OHg4X3Qp IF9fYSwKLQkJCQkJCSAgICAgKGludDE2eDhfdCkgX19iLAotCQkJCQkJICAgICAoaW50MTZ4OF90 KSBfX2MpOworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfcnN1YmhuMnY4aGlfdXV1dSAoX19h LCBfX2IsIF9fYyk7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVpbnQxNng4 X3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9f YXJ0aWZpY2lhbF9fKSkKIHZyc3ViaG5faGlnaF91MzIgKHVpbnQxNng0X3QgX19hLCB1aW50MzJ4 NF90IF9fYiwgdWludDMyeDRfdCBfX2MpCiB7Ci0gIHJldHVybiAodWludDE2eDhfdCkgX19idWls dGluX2FhcmNoNjRfcnN1YmhuMnY0c2kgKChpbnQxNng0X3QpIF9fYSwKLQkJCQkJCSAgICAgKGlu dDMyeDRfdCkgX19iLAotCQkJCQkJICAgICAoaW50MzJ4NF90KSBfX2MpOworICByZXR1cm4gX19i dWlsdGluX2FhcmNoNjRfcnN1YmhuMnY0c2lfdXV1dSAoX19hLCBfX2IsIF9fYyk7CiB9CiAKIF9f ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVpbnQzMng0X3QKIF9fYXR0cmlidXRlX18gKChf X2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZyc3Vi aG5faGlnaF91NjQgKHVpbnQzMngyX3QgX19hLCB1aW50NjR4Ml90IF9fYiwgdWludDY0eDJfdCBf X2MpCiB7Ci0gIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfcnN1YmhuMnYy ZGkgKChpbnQzMngyX3QpIF9fYSwKLQkJCQkJCSAgICAgKGludDY0eDJfdCkgX19iLAotCQkJCQkJ ICAgICAoaW50NjR4Ml90KSBfX2MpOworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfcnN1Ymhu MnYyZGlfdXV1dSAoX19hLCBfX2IsIF9fYyk7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9f aW5saW5lIGludDh4MTZfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2du dV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnN1YmhuX2hpZ2hfczE2IChpbnQ4eDhfdCBf X2EsIGludDE2eDhfdCBfX2IsIGludDE2eDhfdCBfX2MpCiB7Ci0gIHJldHVybiAoaW50OHgxNl90 KSBfX2J1aWx0aW5fYWFyY2g2NF9zdWJobjJ2OGhpIChfX2EsIF9fYiwgX19jKTsKKyAgcmV0dXJu IF9fYnVpbHRpbl9hYXJjaDY0X3N1YmhuMnY4aGkgKF9fYSwgX19iLCBfX2MpOwogfQogCiBfX2V4 dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBpbnQxNng4X3QKIF9fYXR0cmlidXRlX18gKChfX2Fs d2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZzdWJobl9o aWdoX3MzMiAoaW50MTZ4NF90IF9fYSwgaW50MzJ4NF90IF9fYiwgaW50MzJ4NF90IF9fYykKIHsK LSAgcmV0dXJuIChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3N1YmhuMnY0c2kgKF9fYSwg X19iLCBfX2MpOzsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3N1YmhuMnY0c2kgKF9fYSwg X19iLCBfX2MpOzsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgaW50MzJ4NF90 CiBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCiB2c3ViaG5faGlnaF9zNjQgKGludDMyeDJfdCBfX2EsIGludDY0eDJfdCBf X2IsIGludDY0eDJfdCBfX2MpCiB7Ci0gIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFy Y2g2NF9zdWJobjJ2MmRpIChfX2EsIF9fYiwgX19jKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJj aDY0X3N1YmhuMnYyZGkgKF9fYSwgX19iLCBfX2MpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVy biBfX2lubGluZSB1aW50OHgxNl90CiBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18s IF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2c3ViaG5faGlnaF91MTYgKHVpbnQ4 eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iLCB1aW50MTZ4OF90IF9fYykKIHsKLSAgcmV0dXJuICh1 aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9zdWJobjJ2OGhpICgoaW50OHg4X3QpIF9fYSwK LQkJCQkJCSAgICAoaW50MTZ4OF90KSBfX2IsCi0JCQkJCQkgICAgKGludDE2eDhfdCkgX19jKTsK KyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3N1YmhuMnY4aGlfdXV1dSAoX19hLCBfX2IsIF9f Yyk7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVpbnQxNng4X3QKIF9fYXR0 cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKIHZzdWJobl9oaWdoX3UzMiAodWludDE2eDRfdCBfX2EsIHVpbnQzMng0X3QgX19iLCB1 aW50MzJ4NF90IF9fYykKIHsKLSAgcmV0dXJuICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2 NF9zdWJobjJ2NHNpICgoaW50MTZ4NF90KSBfX2EsCi0JCQkJCQkgICAgKGludDMyeDRfdCkgX19i LAotCQkJCQkJICAgIChpbnQzMng0X3QpIF9fYyk7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2 NF9zdWJobjJ2NHNpX3V1dXUgKF9fYSwgX19iLCBfX2MpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4 dGVybiBfX2lubGluZSB1aW50MzJ4NF90CiBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5l X18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2c3ViaG5faGlnaF91NjQgKHVp bnQzMngyX3QgX19hLCB1aW50NjR4Ml90IF9fYiwgdWludDY0eDJfdCBfX2MpCiB7Ci0gIHJldHVy biAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfc3ViaG4ydjJkaSAoKGludDMyeDJfdCkg X19hLAotCQkJCQkJICAgIChpbnQ2NHgyX3QpIF9fYiwKLQkJCQkJCSAgICAoaW50NjR4Ml90KSBf X2MpOworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3ViaG4ydjJkaV91dXV1IChfX2EsIF9f YiwgX19jKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDE2eDRfdAo= --_002_DB9PR08MB695961671B4E2BE369F96C60EB949DB9PR08MB6959eurp_--