From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30080.outbound.protection.outlook.com [40.107.3.80]) by sourceware.org (Postfix) with ESMTPS id 6F786385840A for ; Thu, 11 Nov 2021 10:25:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6F786385840A Received: from DB7PR02CA0021.eurprd02.prod.outlook.com (2603:10a6:10:52::34) by HE1PR0801MB1867.eurprd08.prod.outlook.com (2603:10a6:3:53::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.14; Thu, 11 Nov 2021 10:25:53 +0000 Received: from DB5EUR03FT063.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:52:cafe::76) by DB7PR02CA0021.outlook.office365.com (2603:10a6:10:52::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4690.15 via Frontend Transport; Thu, 11 Nov 2021 10:25:53 +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 DB5EUR03FT063.mail.protection.outlook.com (10.152.20.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4690.19 via Frontend Transport; Thu, 11 Nov 2021 10:25:53 +0000 Received: ("Tessian outbound d49ee2bec50d:v108"); Thu, 11 Nov 2021 10:25:53 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: f2fa264236843998 X-CR-MTA-TID: 64aa7808 Received: from a111b1ce031f.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 20725133-BC52-4749-99E7-CAF33A4FC5F4.1; Thu, 11 Nov 2021 10:25:42 +0000 Received: from EUR03-VE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id a111b1ce031f.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 11 Nov 2021 10:25:42 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ax8WKNXquZOIQY2B3NXJ350ysK0FfE7BGb9xuJCPFHV5rtOiXxRVFlPnH4A/HQzgk1IEQjeKLeM2eEfLc7yTbNgOqcY/acA0YNXuvgyFw0GERRwB+rR0+kMbfmclAZL0lPYZk4uYp89k67YLxCu4JE6HdGjsJ48tCQYf7yRneeb2BFMNpSsm1H/uSzoghKO4jGvDhVrzq31Yc1OOid04gWT1HXyUjRsGZl9D1nm36TBdJ8GTApkvDbxLmZQ97UNuwF4u49neZhBmualIewTPdl/WHfMyv/P4cp4WhWjaxVi2BF7bAB8pmyESmNFu4eBCeEIBuSyGC0pAva/U/kqnxQ== 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=7rKIX6ZAquweir6lR3DhFnRgefdCA3GvKDEn//h3mM8=; b=XnlMuElfhKhTnwy9YXQ5yPJZTux2+vPyPITSzmJUamsxQGgXZpfTaOCHel2hJeANrI02sU4SuORCwuCa73KG3f6U5qENDOwvHZNyhYSLROQkmwAt98LNl7mGBrsJ4ppIW5klbJ8RkaKd2MfquTcxkfINr4gWTCOZs+17/tOJAhLwK1FgE1eZZSfyXSPCJlV9flrhhuqUxgAK5WunyI+ToD5VLtsXZqBzo3z/prv+1UiHVNlgoccjA4Mng76MdyCY5B8n78sG0SqCVxN51ZfhCO/aNwf+lfLJmS/0XNcstlx6tMKnpq8nj05vkghPnIt4eIClfw/ag8l0bWkTtX2zBQ== 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 DB6PR0801MB1766.eurprd08.prod.outlook.com (2603:10a6:4:3c::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.10; Thu, 11 Nov 2021 10:25:40 +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:25:40 +0000 From: Jonathan Wright To: "gcc-patches@gcc.gnu.org" CC: Richard Sandiford , Kyrylo Tkachov Subject: [PATCH] aarch64: Use type-qualified builtins for [R]ADDHN[2] Neon intrinsics Thread-Topic: [PATCH] aarch64: Use type-qualified builtins for [R]ADDHN[2] Neon intrinsics Thread-Index: AQHX1uZNcjtzuK4MTkWWhEb17i+w0w== Date: Thu, 11 Nov 2021 10:25:40 +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: 3514a5d1-4c69-765f-7649-ca9e6ae173e8 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: 66b1dd19-8148-41ac-6b4f-08d9a4fda3f6 x-ms-traffictypediagnostic: DB6PR0801MB1766:|HE1PR0801MB1867: 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: mwOpx7coqKWsSDqvckYrYjYdn/Ay7BHKzyaJ9vmsD63T2A74tZCvHGDsHOyW4qTolySEm9wDv8I4QjsxKW8b1lzcDZIuI+xvU20IFTvGENaD3esL7xVVsKA/aP4a2icW+C6akB5jBiFV5WudJwIIT2IuXCDPYBIxOhYc34lJ7C9Ca6WaR61jqsB5FU7n+mA0R4iAlncf67bnDGnXPCIRs30LeSZxTU8Ia72nYC+4VYAYzRTL+BlSBp2SCiHDxOB901YdT1xM8mcsHyJ1KxU8TVfMuKoh8eB5vLq5p/YfWSO5IaPIATnwm21PuZeRwBYcfBDcPUPjOrQ4r8D/ALMrR2uj864vw2fcdybCFkPUaYm/onh8XNbmoWawJWEdqWeZiRjvhUjWgXksKisbkq0LNjrF5mTLrfrKmwXc5bzUWD6M8WK9Yptlng7JgujHcZzgw8fNCfhY1jFuJhMHH/Kib6FAz3Isu+9zSqktAIItKocnVoeYeSRX3D9JTVmPlSQqSqKHJTQFFrQlfjbGDSAn5pNUb07RTIoagBL3zVKfURTB8O9DoK0yBoEWM+eSEa+T4EifPZv+G4TBCF2dy/Vw8qLSFUfpsyVuo9IonBK9DZI10ddaciBC3jGH+dDjECzyjXEIxX33Wc/jNgvqvT36HzrnWy8b9OcMJH4oHXNb/ObOR1ILhNwIVsMw5w6k/f1t4a++2vV3WAqMbHMpQG+2uA== 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)(5660300002)(26005)(6506007)(8676002)(38100700002)(316002)(55016002)(71200400001)(54906003)(9686003)(33656002)(91956017)(38070700005)(7696005)(6916009)(66446008)(76116006)(2906002)(86362001)(64756008)(66556008)(66476007)(186003)(8936002)(99936003)(52536014)(122000001)(66946007)(4326008)(508600001); DIR:OUT; SFP:1101; Content-Type: multipart/mixed; boundary="_002_DB9PR08MB695957AE0E64364748045B02EB949DB9PR08MB6959eurp_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1766 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: DB5EUR03FT063.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: a4be99cc-4ca0-4b80-a758-08d9a4fd9c79 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: pWKVlXBdHzbWmSSINCKLIF4pxPgI7u7D0vTN9+lN9XXYSC87vSAYN65N8jBa7KecFePwKRjHOXLcSneOKaFDq8aIGm+D7l2ilHoRJ1btqNtBqK7FLWDjxHmvNDcoDEO7VTgEkSMXUC/cuSjx2qXrrChkqELbMvo2E5njYoY6UBtlsZ85BOF78KedmDNY6XuDvb70FIY0Zkw8/JC9BNvFaCs9tc0KiN0s9WlI1Zd8yEjbTTk5sBt3xvS1iPF8tHCfm6AREbgDhMWvNYNFdHa98IXyHCnuHzK+nkp2P1/jJ5087lcGiaJE7PIsyfOMrjMijLe5DewuBvBVm+R9QzCLIDaViAroV6sQNa+77D5jt/fe3rIxpHJ/BBzgu8K8426fyLaDwZmzbX4JLhcvP5oH+fPG1TZVTs5ClzaJlQhx4e3ScjFDdYKmOZBpYTkgLvhyl/n1CMqlXqxpJ5u9UsbncZJY7x53lL374QMkhqb4xE0cIwrlmj0ErIv9t5pJ6NXSOPvqJK2zQngEKYvNc07dyfdGzicwkgijzYErEdq8HsTm6g5RHbM4c+aCtjiS2tx3IukqpmvRlcu4zuEryi89BI1a1jmxqSpUYS0h2lkEqOJLVb1567zh3pijdWezgnlPTuXw7ybRJ4SmmFUN1LdPMzAsiTMXY+ABV0Lm81AwhY+fzk/SEFaz7y0h+Fh4l9J5nxU8p87OD1RaLpfSdEL60g== 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)(8676002)(336012)(81166007)(7696005)(99936003)(508600001)(8936002)(86362001)(186003)(36860700001)(55016002)(26005)(54906003)(2906002)(5660300002)(6916009)(6506007)(4326008)(52536014)(70586007)(316002)(235185007)(82310400003)(33656002)(70206006)(356005)(9686003)(47076005); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Nov 2021 10:25:53.4072 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 66b1dd19-8148-41ac-6b4f-08d9a4fda3f6 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: DB5EUR03FT063.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1867 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:25:59 -0000 --_002_DB9PR08MB695957AE0E64364748045B02EB949DB9PR08MB6959eurp_ 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-add 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]addhn[2].=0A= * config/aarch64/arm_neon.h (vaddhn_s16): Remove unnecessary=0A= cast.=0A= (vaddhn_s32): Likewise.=0A= (vaddhn_s64): Likewise.=0A= (vaddhn_u16): Use type-qualified builtin and remove casts.=0A= (vaddhn_u32): Likewise.=0A= (vaddhn_u64): Likewise.=0A= (vraddhn_s16): Remove unnecessary cast.=0A= (vraddhn_s32): Likewise.=0A= (vraddhn_s64): Likewise.=0A= (vraddhn_u16): Use type-qualified builtin and remove casts.=0A= (vraddhn_u32): Likewise.=0A= (vraddhn_u64): Likewise.=0A= (vaddhn_high_s16): Remove unnecessary cast.=0A= (vaddhn_high_s32): Likewise.=0A= (vaddhn_high_s64): Likewise.=0A= (vaddhn_high_u16): Use type-qualified builtin and remove=0A= casts.=0A= (vaddhn_high_u32): Likewise.=0A= (vaddhn_high_u64): Likewise.=0A= (vraddhn_high_s16): Remove unnecessary cast.=0A= (vraddhn_high_s32): Likewise.=0A= (vraddhn_high_s64): Likewise.=0A= (vraddhn_high_u16): Use type-qualified builtin and remove=0A= casts.=0A= (vraddhn_high_u32): Likewise.=0A= (vraddhn_high_u64): Likewise.=0A= --_002_DB9PR08MB695957AE0E64364748045B02EB949DB9PR08MB6959eurp_ Content-Type: application/octet-stream; name="rb15037.patch" Content-Description: rb15037.patch Content-Disposition: attachment; filename="rb15037.patch"; size=8914; creation-date="Thu, 11 Nov 2021 10:25:29 GMT"; modification-date="Thu, 11 Nov 2021 10:25:29 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXNpbWQtYnVpbHRpbnMuZGVm IGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2ltZC1idWlsdGlucy5kZWYKaW5kZXggYWYw NGI3MzIyMjc0MzlkY2FhYTJmMzc1MTA5NzA1MGQ5ODhlYjcyOS4uNjM3MmRhODBiZTMzYzQwY2Iy N2U1ODExYmZiNGY0ZjY3MmYyOGEzNSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2Fh cmNoNjQtc2ltZC1idWlsdGlucy5kZWYKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQt c2ltZC1idWlsdGlucy5kZWYKQEAgLTIyMCwxMyArMjIwLDE3IEBACiAKICAgLyogSW1wbGVtZW50 ZWQgYnkgYWFyY2g2NF88c3VyPjxhZGRzdWI+aG48bW9kZT4uICAqLwogICBCVUlMVElOX1ZRTiAo QklOT1AsIGFkZGhuLCAwLCBOT05FKQorICBCVUlMVElOX1ZRTiAoQklOT1BVLCBhZGRobiwgMCwg Tk9ORSkKICAgQlVJTFRJTl9WUU4gKEJJTk9QLCBzdWJobiwgMCwgTk9ORSkKICAgQlVJTFRJTl9W UU4gKEJJTk9QLCByYWRkaG4sIDAsIE5PTkUpCisgIEJVSUxUSU5fVlFOIChCSU5PUFUsIHJhZGRo biwgMCwgTk9ORSkKICAgQlVJTFRJTl9WUU4gKEJJTk9QLCByc3ViaG4sIDAsIE5PTkUpCiAgIC8q IEltcGxlbWVudGVkIGJ5IGFhcmNoNjRfPHN1cj48YWRkc3ViPmhuMjxtb2RlPi4gICovCiAgIEJV SUxUSU5fVlFOIChURVJOT1AsIGFkZGhuMiwgMCwgTk9ORSkKKyAgQlVJTFRJTl9WUU4gKFRFUk5P UFUsIGFkZGhuMiwgMCwgTk9ORSkKICAgQlVJTFRJTl9WUU4gKFRFUk5PUCwgc3ViaG4yLCAwLCBO T05FKQogICBCVUlMVElOX1ZRTiAoVEVSTk9QLCByYWRkaG4yLCAwLCBOT05FKQorICBCVUlMVElO X1ZRTiAoVEVSTk9QVSwgcmFkZGhuMiwgMCwgTk9ORSkKICAgQlVJTFRJTl9WUU4gKFRFUk5PUCwg cnN1YmhuMiwgMCwgTk9ORSkKIAogICAvKiBJbXBsZW1lbnRlZCBieSBhYXJjaDY0Xzx1cz54dGw8 bW9kZT4uICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FybV9uZW9uLmggYi9n Y2MvY29uZmlnL2FhcmNoNjQvYXJtX25lb24uaAppbmRleCBiMjc4MWY2ODBkMTQyYjg0OGY2MjJk MmY0OTY1YjQyOTg1ODg1NTAyLi5jYjQ4MTU0MmJhMGQ2ZmZiN2NjOGZmZTdjMWEwOTg5MzBmYzVl NzQ2IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYXJtX25lb24uaAorKysgYi9nY2Mv Y29uZmlnL2FhcmNoNjQvYXJtX25lb24uaApAQCAtNzEzLDE4NiArNzEzLDE2OCBAQCBfX2V4dGVu c2lvbl9fIGV4dGVybiBfX2lubGluZSBpbnQ4eDhfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlz X2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdmFkZGhuX3MxNiAo aW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKIHsKLSAgcmV0dXJuIChpbnQ4eDhfdCkgX19i dWlsdGluX2FhcmNoNjRfYWRkaG52OGhpIChfX2EsIF9fYik7CisgIHJldHVybiBfX2J1aWx0aW5f YWFyY2g2NF9hZGRobnY4aGkgKF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4g X19pbmxpbmUgaW50MTZ4NF90CiBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9f Z251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2YWRkaG5fczMyIChpbnQzMng0X3QgX19h LCBpbnQzMng0X3QgX19iKQogewotICByZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNo NjRfYWRkaG52NHNpIChfX2EsIF9fYik7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9hZGRo bnY0c2kgKF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgaW50 MzJ4Ml90CiBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9f LCBfX2FydGlmaWNpYWxfXykpCiB2YWRkaG5fczY0IChpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3Qg X19iKQogewotICByZXR1cm4gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfYWRkaG52MmRp IChfX2EsIF9fYik7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9hZGRobnYyZGkgKF9fYSwg X19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDh4OF90CiBfX2F0 dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCiB2YWRkaG5fdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IpCiB7Ci0g IHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9hZGRobnY4aGkgKChpbnQxNng4 X3QpIF9fYSwKLQkJCQkJCSAgKGludDE2eDhfdCkgX19iKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9h YXJjaDY0X2FkZGhudjhoaV91dXUgKF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRl cm4gX19pbmxpbmUgdWludDE2eDRfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9f LCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdmFkZGhuX3UzMiAodWludDMyeDRf dCBfX2EsIHVpbnQzMng0X3QgX19iKQogewotICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRp bl9hYXJjaDY0X2FkZGhudjRzaSAoKGludDMyeDRfdCkgX19hLAotCQkJCQkJICAgKGludDMyeDRf dCkgX19iKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2FkZGhudjRzaV91dXUgKF9fYSwg X19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDMyeDJfdAogX19h dHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQogdmFkZGhuX3U2NCAodWludDY0eDJfdCBfX2EsIHVpbnQ2NHgyX3QgX19iKQogewot ICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2FkZGhudjJkaSAoKGludDY0 eDJfdCkgX19hLAotCQkJCQkJICAgKGludDY0eDJfdCkgX19iKTsKKyAgcmV0dXJuIF9fYnVpbHRp bl9hYXJjaDY0X2FkZGhudjJkaV91dXUgKF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNpb25fXyBl eHRlcm4gX19pbmxpbmUgaW50OHg4X3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVf XywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZyYWRkaG5fczE2IChpbnQxNng4 X3QgX19hLCBpbnQxNng4X3QgX19iKQogewotICByZXR1cm4gKGludDh4OF90KSBfX2J1aWx0aW5f YWFyY2g2NF9yYWRkaG52OGhpIChfX2EsIF9fYik7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2 NF9yYWRkaG52OGhpIChfX2EsIF9fYik7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5s aW5lIGludDE2eDRfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnJhZGRobl9zMzIgKGludDMyeDRfdCBfX2EsIGlu dDMyeDRfdCBfX2IpCiB7Ci0gIHJldHVybiAoaW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9y YWRkaG52NHNpIChfX2EsIF9fYik7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9yYWRkaG52 NHNpIChfX2EsIF9fYik7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDMy eDJfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQogdnJhZGRobl9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBf X2IpCiB7Ci0gIHJldHVybiAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yYWRkaG52MmRp IChfX2EsIF9fYik7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9yYWRkaG52MmRpIChfX2Es IF9fYik7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVpbnQ4eDhfdAogX19h dHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQogdnJhZGRobl91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKIHsK LSAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JhZGRobnY4aGkgKChpbnQx Nng4X3QpIF9fYSwKLQkJCQkJCSAgIChpbnQxNng4X3QpIF9fYik7CisgIHJldHVybiBfX2J1aWx0 aW5fYWFyY2g2NF9yYWRkaG52OGhpX3V1dSAoX19hLCBfX2IpOwogfQogCiBfX2V4dGVuc2lvbl9f IGV4dGVybiBfX2lubGluZSB1aW50MTZ4NF90CiBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5s aW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2cmFkZGhuX3UzMiAodWlu dDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQogewotICByZXR1cm4gKHVpbnQxNng0X3QpIF9f YnVpbHRpbl9hYXJjaDY0X3JhZGRobnY0c2kgKChpbnQzMng0X3QpIF9fYSwKLQkJCQkJCSAgICAo aW50MzJ4NF90KSBfX2IpOworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfcmFkZGhudjRzaV91 dXUgKF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDMy eDJfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQogdnJhZGRobl91NjQgKHVpbnQ2NHgyX3QgX19hLCB1aW50NjR4Ml90 IF9fYikKIHsKLSAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yYWRkaG52 MmRpICgoaW50NjR4Ml90KSBfX2EsCi0JCQkJCQkgICAgKGludDY0eDJfdCkgX19iKTsKKyAgcmV0 dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3JhZGRobnYyZGlfdXV1IChfX2EsIF9fYik7CiB9CiAKIF9f ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDh4MTZfdAogX19hdHRyaWJ1dGVfXyAoKF9f YWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdmFkZGhu X2hpZ2hfczE2IChpbnQ4eDhfdCBfX2EsIGludDE2eDhfdCBfX2IsIGludDE2eDhfdCBfX2MpCiB7 Ci0gIHJldHVybiAoaW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9hZGRobjJ2OGhpIChfX2Es IF9fYiwgX19jKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2FkZGhuMnY4aGkgKF9fYSwg X19iLCBfX2MpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBpbnQxNng4X3QK IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0 aWZpY2lhbF9fKSkKIHZhZGRobl9oaWdoX3MzMiAoaW50MTZ4NF90IF9fYSwgaW50MzJ4NF90IF9f YiwgaW50MzJ4NF90IF9fYykKIHsKLSAgcmV0dXJuIChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJj aDY0X2FkZGhuMnY0c2kgKF9fYSwgX19iLCBfX2MpOworICByZXR1cm4gX19idWlsdGluX2FhcmNo NjRfYWRkaG4ydjRzaSAoX19hLCBfX2IsIF9fYyk7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJu IF9faW5saW5lIGludDMyeDRfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBf X2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdmFkZGhuX2hpZ2hfczY0IChpbnQzMngy X3QgX19hLCBpbnQ2NHgyX3QgX19iLCBpbnQ2NHgyX3QgX19jKQogewotICByZXR1cm4gKGludDMy eDRfdCkgX19idWlsdGluX2FhcmNoNjRfYWRkaG4ydjJkaSAoX19hLCBfX2IsIF9fYyk7CisgIHJl dHVybiBfX2J1aWx0aW5fYWFyY2g2NF9hZGRobjJ2MmRpIChfX2EsIF9fYiwgX19jKTsKIH0KIAog X19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDh4MTZfdAogX19hdHRyaWJ1dGVfXyAo KF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdmFk ZGhuX2hpZ2hfdTE2ICh1aW50OHg4X3QgX19hLCB1aW50MTZ4OF90IF9fYiwgdWludDE2eDhfdCBf X2MpCiB7Ci0gIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfYWRkaG4ydjho aSAoKGludDh4OF90KSBfX2EsCi0JCQkJCQkgICAgKGludDE2eDhfdCkgX19iLAotCQkJCQkJICAg IChpbnQxNng4X3QpIF9fYyk7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9hZGRobjJ2OGhp X3V1dXUgKF9fYSwgX19iLCBfX2MpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu ZSB1aW50MTZ4OF90CiBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lu bGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2YWRkaG5faGlnaF91MzIgKHVpbnQxNng0X3QgX19h LCB1aW50MzJ4NF90IF9fYiwgdWludDMyeDRfdCBfX2MpCiB7Ci0gIHJldHVybiAodWludDE2eDhf dCkgX19idWlsdGluX2FhcmNoNjRfYWRkaG4ydjRzaSAoKGludDE2eDRfdCkgX19hLAotCQkJCQkJ ICAgIChpbnQzMng0X3QpIF9fYiwKLQkJCQkJCSAgICAoaW50MzJ4NF90KSBfX2MpOworICByZXR1 cm4gX19idWlsdGluX2FhcmNoNjRfYWRkaG4ydjRzaV91dXV1IChfX2EsIF9fYiwgX19jKTsKIH0K IAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDMyeDRfdAogX19hdHRyaWJ1dGVf XyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQog dmFkZGhuX2hpZ2hfdTY0ICh1aW50MzJ4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IsIHVpbnQ2NHgy X3QgX19jKQogewotICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2FkZGhu MnYyZGkgKChpbnQzMngyX3QpIF9fYSwKLQkJCQkJCSAgICAoaW50NjR4Ml90KSBfX2IsCi0JCQkJ CQkgICAgKGludDY0eDJfdCkgX19jKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2FkZGhu MnYyZGlfdXV1dSAoX19hLCBfX2IsIF9fYyk7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9f aW5saW5lIGludDh4MTZfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2du dV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnJhZGRobl9oaWdoX3MxNiAoaW50OHg4X3Qg X19hLCBpbnQxNng4X3QgX19iLCBpbnQxNng4X3QgX19jKQogewotICByZXR1cm4gKGludDh4MTZf dCkgX19idWlsdGluX2FhcmNoNjRfcmFkZGhuMnY4aGkgKF9fYSwgX19iLCBfX2MpOworICByZXR1 cm4gX19idWlsdGluX2FhcmNoNjRfcmFkZGhuMnY4aGkgKF9fYSwgX19iLCBfX2MpOwogfQogCiBf X2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBpbnQxNng4X3QKIF9fYXR0cmlidXRlX18gKChf X2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZyYWRk aG5faGlnaF9zMzIgKGludDE2eDRfdCBfX2EsIGludDMyeDRfdCBfX2IsIGludDMyeDRfdCBfX2Mp CiB7Ci0gIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yYWRkaG4ydjRzaSAo X19hLCBfX2IsIF9fYyk7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9yYWRkaG4ydjRzaSAo X19hLCBfX2IsIF9fYyk7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDMy eDRfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQogdnJhZGRobl9oaWdoX3M2NCAoaW50MzJ4Ml90IF9fYSwgaW50NjR4 Ml90IF9fYiwgaW50NjR4Ml90IF9fYykKIHsKLSAgcmV0dXJuIChpbnQzMng0X3QpIF9fYnVpbHRp bl9hYXJjaDY0X3JhZGRobjJ2MmRpIChfX2EsIF9fYiwgX19jKTsKKyAgcmV0dXJuIF9fYnVpbHRp bl9hYXJjaDY0X3JhZGRobjJ2MmRpIChfX2EsIF9fYiwgX19jKTsKIH0KIAogX19leHRlbnNpb25f XyBleHRlcm4gX19pbmxpbmUgdWludDh4MTZfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lu bGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnJhZGRobl9oaWdoX3Ux NiAodWludDh4OF90IF9fYSwgdWludDE2eDhfdCBfX2IsIHVpbnQxNng4X3QgX19jKQogewotICBy ZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JhZGRobjJ2OGhpICgoaW50OHg4 X3QpIF9fYSwKLQkJCQkJCSAgICAgKGludDE2eDhfdCkgX19iLAotCQkJCQkJICAgICAoaW50MTZ4 OF90KSBfX2MpOworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfcmFkZGhuMnY4aGlfdXV1dSAo X19hLCBfX2IsIF9fYyk7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVpbnQx Nng4X3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKIHZyYWRkaG5faGlnaF91MzIgKHVpbnQxNng0X3QgX19hLCB1aW50 MzJ4NF90IF9fYiwgdWludDMyeDRfdCBfX2MpCiB7Ci0gIHJldHVybiAodWludDE2eDhfdCkgX19i dWlsdGluX2FhcmNoNjRfcmFkZGhuMnY0c2kgKChpbnQxNng0X3QpIF9fYSwKLQkJCQkJCSAgICAg KGludDMyeDRfdCkgX19iLAotCQkJCQkJICAgICAoaW50MzJ4NF90KSBfX2MpOworICByZXR1cm4g X19idWlsdGluX2FhcmNoNjRfcmFkZGhuMnY0c2lfdXV1dSAoX19hLCBfX2IsIF9fYyk7CiB9CiAK IF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVpbnQzMng0X3QKIF9fYXR0cmlidXRlX18g KChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZy YWRkaG5faGlnaF91NjQgKHVpbnQzMngyX3QgX19hLCB1aW50NjR4Ml90IF9fYiwgdWludDY0eDJf dCBfX2MpCiB7Ci0gIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmFkZGhu MnYyZGkgKChpbnQzMngyX3QpIF9fYSwKLQkJCQkJCSAgICAgKGludDY0eDJfdCkgX19iLAotCQkJ CQkJICAgICAoaW50NjR4Ml90KSBfX2MpOworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfcmFk ZGhuMnYyZGlfdXV1dSAoX19hLCBfX2IsIF9fYyk7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJu IF9faW5saW5lIGZsb2F0MzJ4Ml90Cg== --_002_DB9PR08MB695957AE0E64364748045B02EB949DB9PR08MB6959eurp_--