From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-eopbgr80079.outbound.protection.outlook.com [40.107.8.79]) by sourceware.org (Postfix) with ESMTPS id 4BB563858017 for ; Thu, 11 Nov 2021 10:20:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4BB563858017 Received: from DB6PR0201CA0021.eurprd02.prod.outlook.com (2603:10a6:4:3f::31) by VI1PR08MB3440.eurprd08.prod.outlook.com (2603:10a6:803:7c::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.16; Thu, 11 Nov 2021 10:19:56 +0000 Received: from DB5EUR03FT056.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:3f:cafe::90) by DB6PR0201CA0021.outlook.office365.com (2603:10a6:4:3f::31) 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:19:56 +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 DB5EUR03FT056.mail.protection.outlook.com (10.152.21.124) 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:19:56 +0000 Received: ("Tessian outbound c71e1a752bff:v108"); Thu, 11 Nov 2021 10:19:56 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 3113c79936ee967a X-CR-MTA-TID: 64aa7808 Received: from 2d37bdf82f73.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id E3D53C8C-A25F-4F0B-B9A4-07D340C11E95.1; Thu, 11 Nov 2021 10:19:45 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 2d37bdf82f73.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 11 Nov 2021 10:19:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TEV825kghMTRp+cg9T8rVreCBD3EqgTDLIMnRwToFh6bQERU15esmdzu7qyL+L2Sm6mbuFDa+8MBbggGrDVIf4UunPMCWYW18GIRfYnZIceN5ja8qBDeSM6pyvx7ZGamImdZVxkaeDcPdwExRbY+waU0xxjEMIDEkgmhiUNaKi1nOMILund9GPvwdQxC0BWOeYfbABcstTSB6HfjbQV6lw5nx7n+9P4R7a9oRjA15waeD/G7G30Jr8IJfGYE3iubXyLIZixrDUzxBWQHZ8dR+2NP0UAmG5G3cnbeAQ7Rf8peti9Sv7HuyvsXlK6AitkZ8GweOR6OEyp4MQxXRtwjkw== 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=pOuPp+uBVTanQk99Q5Kal6+cxn8di3wdqruVO5A2doU=; b=iuu4M2xfyJfejD8uyymtPLQY6Xxia0qT0ckQAJxNpVvrn0+WgUxWKNn4jH5hRhLVZ2cs0Z0d+buxe3jILPB7kE60MPNQSXFrsvb1Q7kLF7Xqop9vm+Mmxe/RbOnIuCPJCCgrD848Rq3c3QuRErQNXFBivoRXlqZUv1Hy2StkTzbmKfx4PKazRI5h9pfbS4QXIxaG0+uapY4LgdKRTmeqiyG4PnxLX5qlsclrnJCkF3YczR+H/k3R8D/MYoWicIHMR5P/gztc0zxuWtQL3NcPfou7swbqlizY+MoHFp4d+O7WLekG0/eh+M3rE5jOrVdWM0idQZfriFhk/kNy79dwlg== 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 DB6PR08MB2806.eurprd08.prod.outlook.com (2603:10a6:6:23::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.13; Thu, 11 Nov 2021 10:19:44 +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:19:44 +0000 From: Jonathan Wright To: "gcc-patches@gcc.gnu.org" CC: Richard Sandiford , Kyrylo Tkachov Subject: [PATCH] aarch64: Use type-qualified builtins for USUB[LW][2] Neon intrinsics Thread-Topic: [PATCH] aarch64: Use type-qualified builtins for USUB[LW][2] Neon intrinsics Thread-Index: AQHX1uV2HDpoYVp4iUGiTte8+E8W5w== Date: Thu, 11 Nov 2021 10:19:44 +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: 45537a43-b197-e2b5-cb4c-51ff7a6ff36c 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: f300904f-5822-4114-bb6b-08d9a4fccf50 x-ms-traffictypediagnostic: DB6PR08MB2806:|VI1PR08MB3440: X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:628;OLM:628; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: E+rra+FUyOYPz5eKDQ21gW70kUO0i8xa+3YiED3jSpLpgcpyv4R+6yD4vHheIC4aBDZRHqsnjVrZ4xz6xZvx+LJIHy9aiLO0GGV0scEG9a51TZMUh74OKNYkx4XihUdpb79iF7fLuik9f2sQ4GSEmotJIP4Z9fkhnQqpKvWhKYAc+I3dDXbKzzmfWD77FE4qDrOTM1gtdtbqcNsCt/MSRB8ekgsu8o0n/z4TlFaYQB/CWIh56AHytekJJF7jF+ySnJdGa9A3wSdL8iXE942wlsg6IH4td65YVrVap2mMeUgvQSumOXebrxywjwmc0vdbwk+2oGguBJ7XLoRqZjlxdaqHAr4uy0SGgO3WvnLDaOCtMdpd6zIpZFFSKTaEtdZ6Oec8hJAGDp4gMxeS5IefRqGWXMzqP/2T43tjygWR0TwEzDeA63FTN9V4Tykip+W3mKvvXHQ0VVMynbCNAY1yIUK2aSOhbn2C8HdTEbaLwUH9wHlRrO/ZBaZWFSL/cxeglKFRzyC0jwkYUfSkF8V16XZWMAky6eH8SrfazoObZs0WdXXu4vboNioFq5zWELHAtfkJhlLMeWSOyk9uev2iSuE+eFJZ9RF1ITL2BVjs2kz3pW8Khg3yMP/xDoKY40/zwYQIqGfYBeuiTZ//0CA80G86JNBcVbTKtHT3GxcC10XH6VMlNVx+2lUeHQ4jCIjU1FGJuFdtbyur4ygQveEpww== 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)(316002)(508600001)(52536014)(2906002)(8936002)(6916009)(4326008)(5660300002)(86362001)(99936003)(33656002)(7696005)(38100700002)(55016002)(54906003)(66946007)(66446008)(6506007)(186003)(91956017)(64756008)(66476007)(9686003)(76116006)(71200400001)(26005)(8676002)(122000001)(66556008)(38070700005); DIR:OUT; SFP:1101; Content-Type: multipart/mixed; boundary="_002_DB9PR08MB69591EA055BC25FA003A9ED8EB949DB9PR08MB6959eurp_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR08MB2806 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: DB5EUR03FT056.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: e4f3f2cb-0502-4041-72db-08d9a4fcc7e1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kQpsk3ncOYTijnkad+KLe+zi9nvONCHg+wAs2o+9T4lKkGqmBUEinB8aUarRv8Wy+OE5T9DvmbTlsIwSyH1YSB5B6AC8f6ZY/PKtLeI1Dft7TDEtu2gidp3wZ9M5L1Bag3+B9vHftbqB2dm47c+jYVQdtH3KUBkVONMcPN2x/O0HIG2vJXQFTiE4rImHiRYUW+1wtvNrAGbiMkchyYoONzdHfg+C6sgnBiyCv0oSki3TA7oQnfeHwQMGW/Jq179mXav2KFIzPGvH/ghjdj341vehdng+OdTXeDdFSIqQOlL2wurQqsHP4BW/M1mQy25bsj2WvWnlOv8RCx0FrIF0nARCR5DIx3kHWfXB8jU6ZMLieI/JYg3/HKGA9YmSfSXYTCtJH/RgG9qwdrpq0/RhQHAjzUWbdGFQoqzp1slxxy3+lmcUL+c5gPDS2LK+G413cp+lkb4DDRYpnA/CjgSc34+9rG+/UNtToRATa6tEU8eLw4EMx/A58NSz27BIr3gYMSwYcLGI3M8b3YY0mcq121QUxgLRNDUvsTsa7v6TkNjbk70dktLlT+P+6tlIK9ZkT2ERmD0UZnHo55nGbT9WGqxvixXZSTp1pewlEagKpvZ16OyD2M6YSr4v7HVDRxZsFeoMRCtJNC6acH3PuKP6GRIFtePWMOtXOwt80PVEQAFGLu7iBtRyeZ1xoiL3zzhAMx4Rf85DgdeKNdiXkrcyzQ== 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)(36840700001)(46966006)(508600001)(47076005)(6916009)(33656002)(36860700001)(186003)(4326008)(8676002)(81166007)(7696005)(336012)(356005)(82310400003)(70586007)(2906002)(99936003)(8936002)(70206006)(54906003)(235185007)(26005)(86362001)(55016002)(52536014)(316002)(6506007)(9686003)(5660300002); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Nov 2021 10:19:56.6434 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f300904f-5822-4114-bb6b-08d9a4fccf50 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: DB5EUR03FT056.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB3440 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:20:03 -0000 --_002_DB9PR08MB69591EA055BC25FA003A9ED8EB949DB9PR08MB6959eurp_ 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 widening-subtract Neon intrinsics. This removes the need=0A= 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: Use BINOPU type=0A= qualifiers in generator macros for usub[lw][2] builtins.=0A= * config/aarch64/arm_neon.h (vsubl_s8): Remove unnecessary=0A= cast.=0A= (vsubl_s16): Likewise.=0A= (vsubl_s32): Likewise.=0A= (vsubl_u8): Use type-qualified builtin and remove casts.=0A= (vsubl_u16): Likewise.=0A= (vsubl_u32): Likewise.=0A= (vsubl_high_s8): Remove unnecessary cast.=0A= (vsubl_high_s16): Likewise.=0A= (vsubl_high_s32): Likewise.=0A= (vsubl_high_u8): Use type-qualified builtin and remove casts.=0A= (vsubl_high_u16): Likewise.=0A= (vsubl_high_u32): Likewise.=0A= (vsubw_s8): Remove unnecessary casts.=0A= (vsubw_s16): Likewise.=0A= (vsubw_s32): Likewise.=0A= (vsubw_u8): Use type-qualified builtin and remove casts.=0A= (vsubw_u16): Likewise.=0A= (vsubw_u32): Likewise.=0A= (vsubw_high_s8): Remove unnecessary cast.=0A= (vsubw_high_s16): Likewise.=0A= (vsubw_high_s32): Likewise.=0A= (vsubw_high_u8): Use type-qualified builtin and remove casts.=0A= (vsubw_high_u16): Likewise.=0A= (vsubw_high_u32): Likewise.=0A= --_002_DB9PR08MB69591EA055BC25FA003A9ED8EB949DB9PR08MB6959eurp_ Content-Type: application/octet-stream; name="rb15034.patch" Content-Description: rb15034.patch Content-Disposition: attachment; filename="rb15034.patch"; size=8871; creation-date="Thu, 11 Nov 2021 10:19:34 GMT"; modification-date="Thu, 11 Nov 2021 10:19:34 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXNpbWQtYnVpbHRpbnMuZGVm IGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2ltZC1idWlsdGlucy5kZWYKaW5kZXggY2Nk MTk0OTc4Zjk0ODIwMTY5OGFlYzE2ZDc0YmFhODJjMTg3Y2FkNC4uYmUwNmE4MGNlYTM3OWI4Yjc4 Yzc5OGRiZWM0N2ZiOTVlZWM2OGRiMSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2Fh cmNoNjQtc2ltZC1idWlsdGlucy5kZWYKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQt c2ltZC1idWlsdGlucy5kZWYKQEAgLTE2MCwyMSArMTYwLDIxIEBACiAgIEJVSUxUSU5fVlFXIChC SU5PUCwgc2FkZGwyLCAwLCBOT05FKQogICBCVUlMVElOX1ZRVyAoQklOT1BVLCB1YWRkbDIsIDAs IE5PTkUpCiAgIEJVSUxUSU5fVlFXIChCSU5PUCwgc3N1YmwyLCAwLCBOT05FKQotICBCVUlMVElO X1ZRVyAoQklOT1AsIHVzdWJsMiwgMCwgTk9ORSkKKyAgQlVJTFRJTl9WUVcgKEJJTk9QVSwgdXN1 YmwyLCAwLCBOT05FKQogICBCVUlMVElOX1ZRVyAoQklOT1AsIHNhZGR3MiwgMCwgTk9ORSkKICAg QlVJTFRJTl9WUVcgKEJJTk9QVSwgdWFkZHcyLCAwLCBOT05FKQogICBCVUlMVElOX1ZRVyAoQklO T1AsIHNzdWJ3MiwgMCwgTk9ORSkKLSAgQlVJTFRJTl9WUVcgKEJJTk9QLCB1c3VidzIsIDAsIE5P TkUpCisgIEJVSUxUSU5fVlFXIChCSU5PUFUsIHVzdWJ3MiwgMCwgTk9ORSkKICAgLyogSW1wbGVt ZW50ZWQgYnkgYWFyY2g2NF88QU5ZX0VYVEVORDpzdT48QUREU1VCOm9wdGFiPmw8bW9kZT4uICAq LwogICBCVUlMVElOX1ZEX0JIU0kgKEJJTk9QLCBzYWRkbCwgMCwgTk9ORSkKICAgQlVJTFRJTl9W RF9CSFNJIChCSU5PUFUsIHVhZGRsLCAwLCBOT05FKQogICBCVUlMVElOX1ZEX0JIU0kgKEJJTk9Q LCBzc3VibCwgMCwgTk9ORSkKLSAgQlVJTFRJTl9WRF9CSFNJIChCSU5PUCwgdXN1YmwsIDAsIE5P TkUpCisgIEJVSUxUSU5fVkRfQkhTSSAoQklOT1BVLCB1c3VibCwgMCwgTk9ORSkKICAgLyogSW1w bGVtZW50ZWQgYnkgYWFyY2g2NF88QU5ZX0VYVEVORDpzdT48QUREU1VCOm9wdGFiPnc8bW9kZT4u ICAqLwogICBCVUlMVElOX1ZEX0JIU0kgKEJJTk9QLCBzYWRkdywgMCwgTk9ORSkKICAgQlVJTFRJ Tl9WRF9CSFNJIChCSU5PUFUsIHVhZGR3LCAwLCBOT05FKQogICBCVUlMVElOX1ZEX0JIU0kgKEJJ Tk9QLCBzc3VidywgMCwgTk9ORSkKLSAgQlVJTFRJTl9WRF9CSFNJIChCSU5PUCwgdXN1YncsIDAs IE5PTkUpCisgIEJVSUxUSU5fVkRfQkhTSSAoQklOT1BVLCB1c3VidywgMCwgTk9ORSkKICAgLyog SW1wbGVtZW50ZWQgYnkgYWFyY2g2NF88c3VyPmg8YWRkc3ViPjxtb2RlPi4gICovCiAgIEJVSUxU SU5fVkRRX0JIU0kgKEJJTk9QLCBzaGFkZCwgMCwgTk9ORSkKICAgQlVJTFRJTl9WRFFfQkhTSSAo QklOT1AsIHNoc3ViLCAwLCBOT05FKQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2Fy bV9uZW9uLmggYi9nY2MvY29uZmlnL2FhcmNoNjQvYXJtX25lb24uaAppbmRleCBhM2Q3NDJmMjVh ODk2ZjhlNzM2YTVmYjAxNTM1ZDM3MmNkNGIyMGRiLi41OGIzZGRkYjJjNGViZjg1NmRlMGU5Y2Yw Mzk5ZTQyZDMyMmJlZmY5IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYXJtX25lb24u aAorKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYXJtX25lb24uaApAQCAtMTc2NSwxODAgKzE3NjUs MTY4IEBAIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDE2eDhfdAogX19hdHRyaWJ1 dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQogdnN1YmxfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQogewotICByZXR1cm4gKGlu dDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3N1Ymx2OHFpIChfX2EsIF9fYik7CisgIHJldHVy biBfX2J1aWx0aW5fYWFyY2g2NF9zc3VibHY4cWkgKF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNp b25fXyBleHRlcm4gX19pbmxpbmUgaW50MzJ4NF90CiBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNf aW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2c3VibF9zMTYgKGlu dDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCiB7Ci0gIHJldHVybiAoaW50MzJ4NF90KSBfX2J1 aWx0aW5fYWFyY2g2NF9zc3VibHY0aGkgKF9fYSwgX19iKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9h YXJjaDY0X3NzdWJsdjRoaSAoX19hLCBfX2IpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBf X2lubGluZSBpbnQ2NHgyX3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19n bnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZzdWJsX3MzMiAoaW50MzJ4Ml90IF9fYSwg aW50MzJ4Ml90IF9fYikKIHsKLSAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0 X3NzdWJsdjJzaSAoX19hLCBfX2IpOworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3N1Ymx2 MnNpIChfX2EsIF9fYik7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVpbnQx Nng4X3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKIHZzdWJsX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19i KQogewotICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzdWJsdjhxaSAo KGludDh4OF90KSBfX2EsCi0JCQkJCQkgICAoaW50OHg4X3QpIF9fYik7CisgIHJldHVybiBfX2J1 aWx0aW5fYWFyY2g2NF91c3VibHY4cWlfdXV1IChfX2EsIF9fYik7CiB9CiAKIF9fZXh0ZW5zaW9u X18gZXh0ZXJuIF9faW5saW5lIHVpbnQzMng0X3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19p bmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZzdWJsX3UxNiAodWlu dDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQogewotICByZXR1cm4gKHVpbnQzMng0X3QpIF9f YnVpbHRpbl9hYXJjaDY0X3VzdWJsdjRoaSAoKGludDE2eDRfdCkgX19hLAotCQkJCQkJICAgKGlu dDE2eDRfdCkgX19iKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3VzdWJsdjRoaV91dXUg KF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDY0eDJf dAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQogdnN1YmxfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2Ip CiB7Ci0gIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXN1Ymx2MnNpICgo aW50MzJ4Ml90KSBfX2EsCi0JCQkJCQkgICAoaW50MzJ4Ml90KSBfX2IpOworICByZXR1cm4gX19i dWlsdGluX2FhcmNoNjRfdXN1Ymx2MnNpX3V1dSAoX19hLCBfX2IpOwogfQogCiBfX2V4dGVuc2lv bl9fIGV4dGVybiBfX2lubGluZSBpbnQxNng4X3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19p bmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZzdWJsX2hpZ2hfczgg KGludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCiB7Ci0gIHJldHVybiAoaW50MTZ4OF90KSBf X2J1aWx0aW5fYWFyY2g2NF9zc3VibDJ2MTZxaSAoX19hLCBfX2IpOworICByZXR1cm4gX19idWls dGluX2FhcmNoNjRfc3N1YmwydjE2cWkgKF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNpb25fXyBl eHRlcm4gX19pbmxpbmUgaW50MzJ4NF90CiBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5l X18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2c3VibF9oaWdoX3MxNiAoaW50 MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKIHsKLSAgcmV0dXJuIChpbnQzMng0X3QpIF9fYnVp bHRpbl9hYXJjaDY0X3NzdWJsMnY4aGkgKF9fYSwgX19iKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9h YXJjaDY0X3NzdWJsMnY4aGkgKF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4g X19pbmxpbmUgaW50NjR4Ml90CiBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9f Z251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2c3VibF9oaWdoX3MzMiAoaW50MzJ4NF90 IF9fYSwgaW50MzJ4NF90IF9fYikKIHsKLSAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9h YXJjaDY0X3NzdWJsMnY0c2kgKF9fYSwgX19iKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0 X3NzdWJsMnY0c2kgKF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxp bmUgdWludDE2eDhfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnN1YmxfaGlnaF91OCAodWludDh4MTZfdCBfX2Es IHVpbnQ4eDE2X3QgX19iKQogewotICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJj aDY0X3VzdWJsMnYxNnFpICgoaW50OHgxNl90KSBfX2EsCi0JCQkJCQkgICAgIChpbnQ4eDE2X3Qp IF9fYik7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF91c3VibDJ2MTZxaV91dXUgKF9fYSwg X19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDMyeDRfdAogX19h dHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQogdnN1YmxfaGlnaF91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikK IHsKLSAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3VibDJ2OGhpICgo aW50MTZ4OF90KSBfX2EsCi0JCQkJCQkgICAgKGludDE2eDhfdCkgX19iKTsKKyAgcmV0dXJuIF9f YnVpbHRpbl9hYXJjaDY0X3VzdWJsMnY4aGlfdXV1IChfX2EsIF9fYik7CiB9CiAKIF9fZXh0ZW5z aW9uX18gZXh0ZXJuIF9faW5saW5lIHVpbnQ2NHgyX3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5 c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZzdWJsX2hpZ2hf dTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCiB7Ci0gIHJldHVybiAodWludDY0 eDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXN1YmwydjRzaSAoKGludDMyeDRfdCkgX19hLAotCQkJ CQkJICAgIChpbnQzMng0X3QpIF9fYik7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF91c3Vi bDJ2NHNpX3V1dSAoX19hLCBfX2IpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu ZSBpbnQxNng4X3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5s aW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZzdWJ3X3M4IChpbnQxNng4X3QgX19hLCBpbnQ4eDhf dCBfX2IpCiB7Ci0gIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zc3Vid3Y4 cWkgKF9fYSwgX19iKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NzdWJ3djhxaSAoX19h LCBfX2IpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBpbnQzMng0X3QKIF9f YXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkKIHZzdWJ3X3MxNiAoaW50MzJ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKIHsKLSAg cmV0dXJuIChpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzdWJ3djRoaSAoX19hLCBfX2Ip OworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3N1Ynd2NGhpIChfX2EsIF9fYik7CiB9CiAK IF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDY0eDJfdAogX19hdHRyaWJ1dGVfXyAo KF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnN1 YndfczMyIChpbnQ2NHgyX3QgX19hLCBpbnQzMngyX3QgX19iKQogewotICByZXR1cm4gKGludDY0 eDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3N1Ynd2MnNpIChfX2EsIF9fYik7CisgIHJldHVybiBf X2J1aWx0aW5fYWFyY2g2NF9zc3Vid3Yyc2kgKF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNpb25f XyBleHRlcm4gX19pbmxpbmUgdWludDE2eDhfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lu bGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnN1YndfdTggKHVpbnQx Nng4X3QgX19hLCB1aW50OHg4X3QgX19iKQogewotICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVp bHRpbl9hYXJjaDY0X3VzdWJ3djhxaSAoKGludDE2eDhfdCkgX19hLAotCQkJCQkJICAgKGludDh4 OF90KSBfX2IpOworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfdXN1Ynd2OHFpX3V1dSAoX19h LCBfX2IpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1aW50MzJ4NF90CiBf X2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCiB2c3Vid191MTYgKHVpbnQzMng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKIHsK LSAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3Vid3Y0aGkgKChpbnQz Mng0X3QpIF9fYSwKLQkJCQkJCSAgIChpbnQxNng0X3QpIF9fYik7CisgIHJldHVybiBfX2J1aWx0 aW5fYWFyY2g2NF91c3Vid3Y0aGlfdXV1IChfX2EsIF9fYik7CiB9CiAKIF9fZXh0ZW5zaW9uX18g ZXh0ZXJuIF9faW5saW5lIHVpbnQ2NHgyX3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxp bmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZzdWJ3X3UzMiAodWludDY0 eDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQogewotICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVp bHRpbl9hYXJjaDY0X3VzdWJ3djJzaSAoKGludDY0eDJfdCkgX19hLAotCQkJCQkJICAgKGludDMy eDJfdCkgX19iKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3VzdWJ3djJzaV91dXUgKF9f YSwgX19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgaW50MTZ4OF90CiBf X2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCiB2c3Vid19oaWdoX3M4IChpbnQxNng4X3QgX19hLCBpbnQ4eDE2X3QgX19iKQog ewotICByZXR1cm4gKGludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3N1YncydjE2cWkgKF9f YSwgX19iKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NzdWJ3MnYxNnFpIChfX2EsIF9f Yik7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDMyeDRfdAogX19hdHRy aWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFs X18pKQogdnN1YndfaGlnaF9zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDhfdCBfX2IpCiB7Ci0g IHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zc3VidzJ2OGhpIChfX2EsIF9f Yik7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zc3VidzJ2OGhpIChfX2EsIF9fYik7CiB9 CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDY0eDJfdAogX19hdHRyaWJ1dGVf XyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQog dnN1YndfaGlnaF9zMzIgKGludDY0eDJfdCBfX2EsIGludDMyeDRfdCBfX2IpCiB7Ci0gIHJldHVy biAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9zc3VidzJ2NHNpIChfX2EsIF9fYik7Cisg IHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zc3VidzJ2NHNpIChfX2EsIF9fYik7CiB9CiAKIF9f ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVpbnQxNng4X3QKIF9fYXR0cmlidXRlX18gKChf X2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZzdWJ3 X2hpZ2hfdTggKHVpbnQxNng4X3QgX19hLCB1aW50OHgxNl90IF9fYikKIHsKLSAgcmV0dXJuICh1 aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3VidzJ2MTZxaSAoKGludDE2eDhfdCkgX19h LAotCQkJCQkJICAgICAoaW50OHgxNl90KSBfX2IpOworICByZXR1cm4gX19idWlsdGluX2FhcmNo NjRfdXN1YncydjE2cWlfdXV1IChfX2EsIF9fYik7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJu IF9faW5saW5lIHVpbnQzMng0X3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywg X19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZzdWJ3X2hpZ2hfdTE2ICh1aW50MzJ4 NF90IF9fYSwgdWludDE2eDhfdCBfX2IpCiB7Ci0gIHJldHVybiAodWludDMyeDRfdCkgX19idWls dGluX2FhcmNoNjRfdXN1YncydjhoaSAoKGludDMyeDRfdCkgX19hLAotCQkJCQkJICAgIChpbnQx Nng4X3QpIF9fYik7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF91c3VidzJ2OGhpX3V1dSAo X19hLCBfX2IpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1aW50NjR4Ml90 CiBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCiB2c3Vid19oaWdoX3UzMiAodWludDY0eDJfdCBfX2EsIHVpbnQzMng0X3Qg X19iKQogewotICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzdWJ3MnY0 c2kgKChpbnQ2NHgyX3QpIF9fYSwKLQkJCQkJCSAgICAoaW50MzJ4NF90KSBfX2IpOworICByZXR1 cm4gX19idWlsdGluX2FhcmNoNjRfdXN1YncydjRzaV91dXUgKF9fYSwgX19iKTsKIH0KIAogX19l eHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgaW50OHg4X3QK --_002_DB9PR08MB69591EA055BC25FA003A9ED8EB949DB9PR08MB6959eurp_--