From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2078.outbound.protection.outlook.com [40.107.22.78]) by sourceware.org (Postfix) with ESMTPS id 63F873857C66 for ; Tue, 7 Nov 2023 09:25:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 63F873857C66 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 63F873857C66 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.22.78 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1699349142; cv=pass; b=WBIQkVwIKSCU+z7yiEVcG5ojopMVc9sGUb1lBVVnhmdmTQ4u9nCsB6oHkOHqwlFIeviEaEpOlHiIpY3prLbYybNNI5a527HPsvF2QMaJ4WW1z3uyQrf8WzcZZ7XTfIrgS7uJ22ComMjK1JXM6AgVIWlnVZRRDF/EGljHNBkGxfc= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1699349142; c=relaxed/simple; bh=41vfbhQJQsdeno9E6WviZEkDelQ3vHiu+iXdKvB4C+k=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=ZGO8J1+RN4lcbRrYAfLACUDYmfirj7kPfUPI6q0Z++bdba3xmwZy2DiaRUMgzZqq3rIMdJBKZR9pFcw0uKN5WXfFdnt8MMNM/p8/z/duTstJODwZCoPXMN1cvpd0k6HGMlE6q2/7s5UM91X/bw4aE7TcQ6LFls9yPlwa/HrhQAo= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=ii7ZRIorjsyFrkf9Z/nnGF8nP/eXH6iTiyzyIKVc5uM6P3f6FU8T23XxTg1mY6jlHQwxM+26ja97INSQJcb98HHaqwRuDa3xHHsTNEZNRZfz+LKZX0keqm+euossRbt00aYAqDxuFVSr39sFUTjY+gxTRvjHg0poGXWSwgbDzyuAoHU7x00Eiic95gwpLrbtADgMdDNBbTFoofY+zB4Oi2p72m3DexF5ozZMvFWaN/fzl5MxsIG2LtZJt86xXLk1kMB2EGDYIDUbP0StCEXohFvp6iXPRhtW12pMugz3igNJqNNZXhs3bUqqnC0q66Ty6X4zrfg0c6SrpwhBss8nYQ== ARC-Message-Signature: i=2; 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=OB56KS/x7AF/M+stZXZsslg2ikHnJJFmOqUXPngX5AA=; b=Gm2Ijo5veiDXlk/VrEJ95lE63g0VafXiY7w0ZX6eJzxdcR6IJMnLWZOxHzKiUE9p7xu3Vo2Ih15cSeccVV1AHh585G3x/pLVVYzEpgDxFkG8MYwRB0Wws1Pq63Mk9AQQZJxDafBqENUcZ6qd1TI7ah+7i8Rk+9oRxWKPo1X2Ldf1lzW+Sk1b106jynhM8XpoVsSQHHT1xpTBC0a9XdYx7ca1fqlieO37POnFdZMi7SzUN+6VzNhS245wrGUSAAdjoLG56hA9AuIb2ZTt9S8dSfdll3XuCtL+z6hY+JBJWjuHQBntjuCwCXwYlOuZ6lkzqLakshyfGWTAv710jmzFxw== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=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=OB56KS/x7AF/M+stZXZsslg2ikHnJJFmOqUXPngX5AA=; b=1HA+lPPSTXpERXBQQTuFuBzXW4pGnQpWPlM8iwEhaN96hNfQPWg37jG1ms/rSetRZ6nncs12ESCUTfMphxKPz355GcGTJH0zSPWZNlMj+t5/DQeAneeXzH8V6/Xnq8JM9Ev860+nudKtJ1BHhaGvjxsIWUUkp8okE5MFPW2wrIM= Received: from AS9PR06CA0285.eurprd06.prod.outlook.com (2603:10a6:20b:45a::31) by AM8PR08MB5697.eurprd08.prod.outlook.com (2603:10a6:20b:1d7::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Tue, 7 Nov 2023 09:25:34 +0000 Received: from AMS1EPF00000043.eurprd04.prod.outlook.com (2603:10a6:20b:45a:cafe::89) by AS9PR06CA0285.outlook.office365.com (2603:10a6:20b:45a::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29 via Frontend Transport; Tue, 7 Nov 2023 09:25:34 +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 AMS1EPF00000043.mail.protection.outlook.com (10.167.16.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.17 via Frontend Transport; Tue, 7 Nov 2023 09:25:34 +0000 Received: ("Tessian outbound 7c4ecdadb9e7:v228"); Tue, 07 Nov 2023 09:25:34 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 51b177a4d9803758 X-CR-MTA-TID: 64aa7808 Received: from 06f1fcc8ff89.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id B5EBBEC7-7690-433C-A326-50133EBE9D7B.1; Tue, 07 Nov 2023 09:25:27 +0000 Received: from EUR02-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 06f1fcc8ff89.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 07 Nov 2023 09:25:27 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oCSKc2h4XcvD4UUxTFtpoZ2Zf4r8SUXj1/Jlp9NFlsGpwMaKpPB+LZed04B9V90Rpnh+w3XJlxcppNhiKTfE9cMQEo5dxzApnF0FHBbA4UwMlus/7P0gHCF4hXBq0g1A2dyxUodTEiuGm6Jqk38XNCMYjMH2iCYQR7MqE/R3NGhPWJs8Ju4Zl3loYHx15Y0kScCcKonrc2Q4Zx/pmEEBGG3rl+HLzcxjRb1w5Vu2K+eYn4TFCupA1yrw/6NfrO/oeQN/65IHSxPv3kcAltgya7qPAhLUjVhfllRnjzIV0JmXjLK7LgNLlrKwXeFEoC+vLo5H6TgtBiXdefmi2fgoTg== 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=OB56KS/x7AF/M+stZXZsslg2ikHnJJFmOqUXPngX5AA=; b=eed8/dBa1jqpQ/th2G2q5e2rjfyxDnTQlI+n9C/hEAoVRW1Qr9r3bAIUJ5YF/lJ8153rFlzQgk7/rKCd61wOcM9dSt5b3sXIxRjnGHmQ7ImiyqMnzYb2z33lIQa8KVFyR7F/mhlrqlAPKeDp4o5wuS4iDhE2PjXQUKRnPD5Di59FECI+X4jB60hKWwco+ubn4Ha4uTlnjZsY+VWXiJkJSrr7q63Du1M5+3Om7nRxGtupsQuRWgOBNXZ9r1vyF0Ykrkw/jsJr/uEAXn80dA070sQ6H8BnQHUZo2+J+KOyYHHtuSH+oRENX7YFwJg5yQ+PFmeaDDfj+bQ/P85BRkteWQ== 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=OB56KS/x7AF/M+stZXZsslg2ikHnJJFmOqUXPngX5AA=; b=1HA+lPPSTXpERXBQQTuFuBzXW4pGnQpWPlM8iwEhaN96hNfQPWg37jG1ms/rSetRZ6nncs12ESCUTfMphxKPz355GcGTJH0zSPWZNlMj+t5/DQeAneeXzH8V6/Xnq8JM9Ev860+nudKtJ1BHhaGvjxsIWUUkp8okE5MFPW2wrIM= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by DB5PR08MB10310.eurprd08.prod.outlook.com (2603:10a6:10:4a1::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.28; Tue, 7 Nov 2023 09:25:25 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::26aa:efdd:a74a:27d0]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::26aa:efdd:a74a:27d0%5]) with mapi id 15.20.6954.028; Tue, 7 Nov 2023 09:25:24 +0000 From: Tamar Christina To: Richard Biener CC: "gcc-patches@gcc.gnu.org" , nd , "jlaw@ventanamicro.com" Subject: RE: [PATCH v3 2/2]middle-end match.pd: optimize fneg (fabs (x)) to copysign (x, -1) [PR109154] Thread-Topic: [PATCH v3 2/2]middle-end match.pd: optimize fneg (fabs (x)) to copysign (x, -1) [PR109154] Thread-Index: AQHaEJrXJVCVv0EqjUyeiaxap480xrBtQl6AgAFUmvA= Date: Tue, 7 Nov 2023 09:25:24 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|DB5PR08MB10310:EE_|AMS1EPF00000043:EE_|AM8PR08MB5697:EE_ X-MS-Office365-Filtering-Correlation-Id: 2ed765e2-d762-4f11-1047-08dbdf737ed4 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: LEO9ex95ZPOZKohcDIpqjaJplmErdiWUxouWxEnbWPF6ecRRqMyu0AGmeBta3rFvzq0DMsnER7VIkxKqBYlXbhKbsZsEdjZeTn6oLPHsa2Jlpp0wd7+BylAVA6W35aGximMvU5DoMY1jpoYNA8pyjp3vg9xAq8cNwLoZHJt+jCB6L9aPGTNkJjrSCtJZY4K9iXhv2YqqrZVe83tj4m8vLhmEh6ePpy5FjtvivHMmtI1KXrsbU6xkaF20QWmBKaDhZA9Gm9HTK3tuL5Xd4tK6h91MJhC2GlbXifclwCH01mTjA5quRcx39GbgNcii7gWhMuH7ZtR3tiCDfsmM3o71NqUohfanmLYruL/geEhy+jAncMwvqCPCb7Igk9tpXw+cQjKwVWD8fD4r8Wdzq/8pNNsr6B35OB6CkNmrO11937yV3Pa58lqFklOzOWln9mqrtg7DgJN+9Ya7cuSv8Bv9y3LjsWGASI3r1wxyEDCHPoI1Ycms+fWlwGJVyYxfYSVLUHs9ccujkhMSF04E3GbSJfUASeJpV5qKemiS+qJEZYlEZeYl3Bwoq+4yR+eHo1AtJELD+qFzH+CgcgKv6uU5y6m7JQ1iS5gLpK22qKB5XAZ2zCKFSCxrCRmggDUZVv9zo8YrMYkazLmn9lqZwy8Y+aPe5gHkSqMhDlESLyQHNrk= 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:(13230031)(39860400002)(346002)(376002)(396003)(366004)(136003)(230922051799003)(451199024)(64100799003)(186009)(1800799009)(55016003)(84970400001)(41300700001)(26005)(6506007)(9686003)(7696005)(38100700002)(33656002)(122000001)(99936003)(86362001)(2906002)(52536014)(30864003)(5660300002)(8936002)(83380400001)(8676002)(4326008)(71200400001)(38070700009)(66946007)(64756008)(6916009)(66556008)(76116006)(66446008)(66476007)(478600001)(316002)(54906003)(357404004);DIR:OUT;SFP:1101; Content-Type: multipart/mixed; boundary="_002_VI1PR08MB532592D09B4E95B0A2CBFE28FFA9AVI1PR08MB5325eurp_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR08MB10310 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: AMS1EPF00000043.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: a6a1c881-6c59-45a1-0d90-08dbdf73790c X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: AQZVrMHqoBt9QXfiitZtoQTPowiBNDJa4VRRNXI4PUdzBXVROCllZuRcERrcFWDnvJ/LCGpFPkjeryNKmAhZRNVMibLTy1X8GSULlCu2ReM3D0DGhcnD6bj/C7n+uz9UP/B7nHsjdZXJH2kcd/ylrf8cNpOm1vhQ9HVspifGmaT928EEbuT/6d+Eos50xqW0Gt9BH5Wv9izRp2ubSxkuLi/acksn6RM9PnAOiXFQkJVwiUekTUq/Q0EkoPJWhMEOnu7fMkXemsgpD0d0qhUgng07z2xyYHAGGBJt19u5EHP7NRJv0tkV22z3WopKMFuh9pRog0oB9tOJKW50HmSFGQ+kZ5r7oLqnsJe+Q2EmNB9YGxb2cSs7b80TjJsF2i+ywrFD2kwpqZXdQVqtn8SS6Vbf/YqnJn2CpyhOWsn0LERKaNbmh0P3/+q5UweNhkeyXiYgEo41BdncMwoCPTYMba1YsX3kyq5iGiVwS+EAfEjgtTJNijgy8ufDKMcXrDSxQRvNgQZ1js/6VJ6cna3JR3oyud405d1Mx5OU61E4q4EvfyNw0jYfOJM/xPAMFFa1pj+lkVhlKmoSeC2ktZYIXugV5PKcwJA3AMsHJ3v5djSWp8/KWJ1gf9Wu9qr+Nfsbhdp5kRagZ6wWw2GkAVHul4HYSBSTNvMVhOtEFDhOE++kcK6xCrWPKvUN0xRye1724A9a3wWKH3jyt284GLym0DZAMvTFnNaZYU6FZ17EfGqADEwS8EVaZ2s52LspXqY0+DNAee88RDarcN7NxtOoWv+31wP6yWNx69ZgFyH65Vg= 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:(13230031)(4636009)(136003)(376002)(39860400002)(346002)(396003)(230922051799003)(451199024)(82310400011)(64100799003)(186009)(1800799009)(36840700001)(46966006)(40470700004)(55016003)(40460700003)(40480700001)(84970400001)(478600001)(316002)(36860700001)(47076005)(33656002)(86362001)(82740400003)(83380400001)(99936003)(81166007)(356005)(7696005)(6506007)(336012)(9686003)(70586007)(70206006)(54906003)(26005)(107886003)(235185007)(2906002)(30864003)(41300700001)(5660300002)(4326008)(6862004)(52536014)(8936002)(8676002)(357404004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Nov 2023 09:25:34.4335 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2ed765e2-d762-4f11-1047-08dbdf737ed4 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: AMS1EPF00000043.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB5697 X-Spam-Status: No, score=-12.0 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,T_SCC_BODY_TEXT_LINE,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_VI1PR08MB532592D09B4E95B0A2CBFE28FFA9AVI1PR08MB5325eurp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable >=20 > You also drop (copysign, x, CST) -> abx (x) when x is not negative - I th= ink that's > still worthwhile as it has one less argument? >=20 > Keeping that might also need less testsuite adjustments? Done but still needed the testsuite updates. Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. Ok for master? Thanks, Tamar gcc/ChangeLog: PR tree-optimization/109154 * match.pd: Add new neg+abs rule, remove inverse copysign rule. gcc/testsuite/ChangeLog: PR tree-optimization/109154 * gcc.dg/fold-copysign-1.c: Updated. * gcc.dg/pr55152-2.c: Updated. * gcc.dg/tree-ssa/abs-4.c: Updated. * gcc.dg/tree-ssa/backprop-6.c: Updated. * gcc.dg/tree-ssa/copy-sign-2.c: Updated. * gcc.dg/tree-ssa/mult-abs-2.c: Updated. * gcc.target/aarch64/fneg-abs_1.c: New test. * gcc.target/aarch64/fneg-abs_2.c: New test. * gcc.target/aarch64/fneg-abs_3.c: New test. * gcc.target/aarch64/fneg-abs_4.c: New test. * gcc.target/aarch64/sve/fneg-abs_1.c: New test. * gcc.target/aarch64/sve/fneg-abs_2.c: New test. * gcc.target/aarch64/sve/fneg-abs_3.c: New test. * gcc.target/aarch64/sve/fneg-abs_4.c: New test. --- inline copy of the patch --- diff --git a/gcc/match.pd b/gcc/match.pd index 68a1587ea2465a890875448993e140425ef6a68f..5928acbb14e2a18addff38000bf= 30dd273d4b1a6 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -1118,14 +1118,18 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (hypots @0 (copysigns @1 @2)) (hypots @0 @1)))) =20 -/* copysign(x, CST) -> [-]abs (x). */ +/* copysign(x, CST) -> abs (x). */ (for copysigns (COPYSIGN_ALL) (simplify (copysigns @0 REAL_CST@1) - (if (REAL_VALUE_NEGATIVE (TREE_REAL_CST (@1))) - (negate (abs @0)) + (if (!REAL_VALUE_NEGATIVE (TREE_REAL_CST (@1))) (abs @0)))) =20 +/* Transform fneg (fabs (X)) -> copysign (X, -1). */ +(simplify + (negate (abs @0)) + (IFN_COPYSIGN @0 { build_minus_one_cst (type); })) + /* copysign(copysign(x, y), z) -> copysign(x, z). */ (for copysigns (COPYSIGN_ALL) (simplify diff --git a/gcc/testsuite/gcc.dg/fold-copysign-1.c b/gcc/testsuite/gcc.dg/= fold-copysign-1.c index f17d65c24ee4dca9867827d040fe0a404c515e7b..f9cafd14ab05f5e8ab2f6f68e62= 801d21c2df6a6 100644 --- a/gcc/testsuite/gcc.dg/fold-copysign-1.c +++ b/gcc/testsuite/gcc.dg/fold-copysign-1.c @@ -12,5 +12,5 @@ double bar (double x) return __builtin_copysign (x, minuszero); } =20 -/* { dg-final { scan-tree-dump-times "=3D -" 1 "cddce1" } } */ -/* { dg-final { scan-tree-dump-times "=3D ABS_EXPR" 2 "cddce1" } } */ +/* { dg-final { scan-tree-dump-times "__builtin_copysign" 1 "cddce1" } } *= / +/* { dg-final { scan-tree-dump-times "=3D ABS_EXPR" 1 "cddce1" } } */ diff --git a/gcc/testsuite/gcc.dg/pr55152-2.c b/gcc/testsuite/gcc.dg/pr5515= 2-2.c index 54db0f2062da105a829d6690ac8ed9891fe2b588..605f202ed6bc7aa8fe921457b02= ff0b88cc63ce6 100644 --- a/gcc/testsuite/gcc.dg/pr55152-2.c +++ b/gcc/testsuite/gcc.dg/pr55152-2.c @@ -10,4 +10,5 @@ int f(int a) return (a<-a)?a:-a; } =20 -/* { dg-final { scan-tree-dump-times "ABS_EXPR" 2 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "\.COPYSIGN" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "ABS_EXPR" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/abs-4.c b/gcc/testsuite/gcc.dg/t= ree-ssa/abs-4.c index 6197519faf7b55aed7bc162cd0a14dd2145210ca..e1b825f37f69ac3c4666b3a52d7= 33368805ad31d 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/abs-4.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/abs-4.c @@ -9,5 +9,6 @@ long double abs_ld(long double x) { return __builtin_signbi= t(x) ? x : -x; } =20 /* __builtin_signbit(x) ? x : -x. Should be convert into - ABS_EXP */ /* { dg-final { scan-tree-dump-not "signbit" "optimized"} } */ -/* { dg-final { scan-tree-dump-times "=3D ABS_EXPR" 3 "optimized"} } */ -/* { dg-final { scan-tree-dump-times "=3D -" 3 "optimized"} } */ +/* { dg-final { scan-tree-dump-times "=3D ABS_EXPR" 1 "optimized"} } */ +/* { dg-final { scan-tree-dump-times "=3D -" 1 "optimized"} } */ +/* { dg-final { scan-tree-dump-times "=3D \.COPYSIGN" 2 "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/backprop-6.c b/gcc/testsuite/gcc= .dg/tree-ssa/backprop-6.c index 31f05716f1498dc709cac95fa20fb5796642c77e..c3a138642d6ff7be984e91fa134= 3cb2718db7ae1 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/backprop-6.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/backprop-6.c @@ -26,5 +26,6 @@ TEST_FUNCTION (float, f) TEST_FUNCTION (double, ) TEST_FUNCTION (long double, l) =20 -/* { dg-final { scan-tree-dump-times {Deleting[^\n]* =3D -} 6 "backprop" }= } */ -/* { dg-final { scan-tree-dump-times {Deleting[^\n]* =3D ABS_EXPR <} 3 "ba= ckprop" } } */ +/* { dg-final { scan-tree-dump-times {Deleting[^\n]* =3D -} 4 "backprop" }= } */ +/* { dg-final { scan-tree-dump-times {Deleting[^\n]* =3D \.COPYSIGN} 2 "ba= ckprop" } } */ +/* { dg-final { scan-tree-dump-times {Deleting[^\n]* =3D ABS_EXPR <} 1 "ba= ckprop" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/copy-sign-2.c b/gcc/testsuite/gc= c.dg/tree-ssa/copy-sign-2.c index de52c5f7c8062958353d91f5031193defc9f3f91..e5d565c4b9832c00106588ef411= fbd8c292a5cad 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/copy-sign-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/copy-sign-2.c @@ -10,4 +10,5 @@ float f1(float x) float t =3D __builtin_copysignf (1.0f, -x); return x * t; } -/* { dg-final { scan-tree-dump-times "ABS" 2 "optimized"} } */ +/* { dg-final { scan-tree-dump-times "ABS" 1 "optimized"} } */ +/* { dg-final { scan-tree-dump-times ".COPYSIGN" 1 "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/mult-abs-2.c b/gcc/testsuite/gcc= .dg/tree-ssa/mult-abs-2.c index a41f1baf25669a4fd301a586a49ba5e3c5b966ab..a22896b21c8b5a4d5d8e28bd8ae= 0db896e63ade0 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/mult-abs-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/mult-abs-2.c @@ -34,4 +34,5 @@ float i1(float x) { return x * (x <=3D 0.f ? 1.f : -1.f); } -/* { dg-final { scan-tree-dump-times "ABS" 8 "gimple"} } */ +/* { dg-final { scan-tree-dump-times "ABS" 4 "gimple"} } */ +/* { dg-final { scan-tree-dump-times "\.COPYSIGN" 4 "gimple"} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/fneg-abs_1.c b/gcc/testsuite/= gcc.target/aarch64/fneg-abs_1.c new file mode 100644 index 0000000000000000000000000000000000000000..f823013c3ddf6b3a266c3abfcbf= 2642fc2a75fa6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/fneg-abs_1.c @@ -0,0 +1,39 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +/* { dg-final { check-function-bodies "**" "" "" { target lp64 } } } */ + +#pragma GCC target "+nosve" + +#include + +/* +** t1: +** orr v[0-9]+.2s, #128, lsl #24 +** ret +*/ +float32x2_t t1 (float32x2_t a) +{ + return vneg_f32 (vabs_f32 (a)); +} + +/* +** t2: +** orr v[0-9]+.4s, #128, lsl #24 +** ret +*/ +float32x4_t t2 (float32x4_t a) +{ + return vnegq_f32 (vabsq_f32 (a)); +} + +/* +** t3: +** adrp x0, .LC[0-9]+ +** ldr q[0-9]+, \[x0, #:lo12:.LC0\] +** orr v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b +** ret +*/ +float64x2_t t3 (float64x2_t a) +{ + return vnegq_f64 (vabsq_f64 (a)); +} diff --git a/gcc/testsuite/gcc.target/aarch64/fneg-abs_2.c b/gcc/testsuite/= gcc.target/aarch64/fneg-abs_2.c new file mode 100644 index 0000000000000000000000000000000000000000..141121176b309e4b2aa413dc552= 71a6e3c93d5e1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/fneg-abs_2.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +/* { dg-final { check-function-bodies "**" "" "" { target lp64 } } } */ + +#pragma GCC target "+nosve" + +#include +#include + +/* +** f1: +** movi v[0-9]+.2s, 0x80, lsl 24 +** orr v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b +** ret +*/ +float32_t f1 (float32_t a) +{ + return -fabsf (a); +} + +/* +** f2: +** mov x0, -9223372036854775808 +** fmov d[0-9]+, x0 +** orr v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b +** ret +*/ +float64_t f2 (float64_t a) +{ + return -fabs (a); +} diff --git a/gcc/testsuite/gcc.target/aarch64/fneg-abs_3.c b/gcc/testsuite/= gcc.target/aarch64/fneg-abs_3.c new file mode 100644 index 0000000000000000000000000000000000000000..b4652173a95d104ddfa70c497f0= 627a61ea89d3b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/fneg-abs_3.c @@ -0,0 +1,36 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +/* { dg-final { check-function-bodies "**" "" "" { target lp64 } } } */ + +#pragma GCC target "+nosve" + +#include +#include + +/* +** f1: +** ... +** ldr q[0-9]+, \[x0\] +** orr v[0-9]+.4s, #128, lsl #24 +** str q[0-9]+, \[x0\], 16 +** ... +*/ +void f1 (float32_t *a, int n) +{ + for (int i =3D 0; i < (n & -8); i++) + a[i] =3D -fabsf (a[i]); +} + +/* +** f2: +** ... +** ldr q[0-9]+, \[x0\] +** orr v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b +** str q[0-9]+, \[x0\], 16 +** ... +*/ +void f2 (float64_t *a, int n) +{ + for (int i =3D 0; i < (n & -8); i++) + a[i] =3D -fabs (a[i]); +} diff --git a/gcc/testsuite/gcc.target/aarch64/fneg-abs_4.c b/gcc/testsuite/= gcc.target/aarch64/fneg-abs_4.c new file mode 100644 index 0000000000000000000000000000000000000000..10879dea74462d34b26160eeb0b= d54ead063166b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/fneg-abs_4.c @@ -0,0 +1,39 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +/* { dg-final { check-function-bodies "**" "" "" { target lp64 } } } */ + +#pragma GCC target "+nosve" + +#include + +/* +** negabs: +** mov x0, -9223372036854775808 +** fmov d[0-9]+, x0 +** orr v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b +** ret +*/ +double negabs (double x) +{ + unsigned long long y; + memcpy (&y, &x, sizeof(double)); + y =3D y | (1UL << 63); + memcpy (&x, &y, sizeof(double)); + return x; +} + +/* +** negabsf: +** movi v[0-9]+.2s, 0x80, lsl 24 +** orr v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b +** ret +*/ +float negabsf (float x) +{ + unsigned int y; + memcpy (&y, &x, sizeof(float)); + y =3D y | (1U << 31); + memcpy (&x, &y, sizeof(float)); + return x; +} + diff --git a/gcc/testsuite/gcc.target/aarch64/sve/fneg-abs_1.c b/gcc/testsu= ite/gcc.target/aarch64/sve/fneg-abs_1.c new file mode 100644 index 0000000000000000000000000000000000000000..0c7664e6de77a497682952653ff= d417453854d52 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/fneg-abs_1.c @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +/* { dg-final { check-function-bodies "**" "" "" { target lp64 } } } */ + +#include + +/* +** t1: +** orr v[0-9]+.2s, #128, lsl #24 +** ret +*/ +float32x2_t t1 (float32x2_t a) +{ + return vneg_f32 (vabs_f32 (a)); +} + +/* +** t2: +** orr v[0-9]+.4s, #128, lsl #24 +** ret +*/ +float32x4_t t2 (float32x4_t a) +{ + return vnegq_f32 (vabsq_f32 (a)); +} + +/* +** t3: +** adrp x0, .LC[0-9]+ +** ldr q[0-9]+, \[x0, #:lo12:.LC0\] +** orr v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b +** ret +*/ +float64x2_t t3 (float64x2_t a) +{ + return vnegq_f64 (vabsq_f64 (a)); +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/fneg-abs_2.c b/gcc/testsu= ite/gcc.target/aarch64/sve/fneg-abs_2.c new file mode 100644 index 0000000000000000000000000000000000000000..a60cd31b9294af2dac69eed1c93= f899bd5c78fca --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/fneg-abs_2.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +/* { dg-final { check-function-bodies "**" "" "" { target lp64 } } } */ + +#include +#include + +/* +** f1: +** movi v[0-9]+.2s, 0x80, lsl 24 +** orr v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b +** ret +*/ +float32_t f1 (float32_t a) +{ + return -fabsf (a); +} + +/* +** f2: +** mov x0, -9223372036854775808 +** fmov d[0-9]+, x0 +** orr v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b +** ret +*/ +float64_t f2 (float64_t a) +{ + return -fabs (a); +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/fneg-abs_3.c b/gcc/testsu= ite/gcc.target/aarch64/sve/fneg-abs_3.c new file mode 100644 index 0000000000000000000000000000000000000000..1bf34328d8841de8e6b0a545856= 2a9f00e31c275 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/fneg-abs_3.c @@ -0,0 +1,34 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +/* { dg-final { check-function-bodies "**" "" "" { target lp64 } } } */ + +#include +#include + +/* +** f1: +** ... +** ld1w z[0-9]+.s, p[0-9]+/z, \[x0, x2, lsl 2\] +** orr z[0-9]+.s, z[0-9]+.s, #0x80000000 +** st1w z[0-9]+.s, p[0-9]+, \[x0, x2, lsl 2\] +** ... +*/ +void f1 (float32_t *a, int n) +{ + for (int i =3D 0; i < (n & -8); i++) + a[i] =3D -fabsf (a[i]); +} + +/* +** f2: +** ... +** ld1d z[0-9]+.d, p[0-9]+/z, \[x0, x2, lsl 3\] +** orr z[0-9]+.d, z[0-9]+.d, #0x8000000000000000 +** st1d z[0-9]+.d, p[0-9]+, \[x0, x2, lsl 3\] +** ... +*/ +void f2 (float64_t *a, int n) +{ + for (int i =3D 0; i < (n & -8); i++) + a[i] =3D -fabs (a[i]); +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/fneg-abs_4.c b/gcc/testsu= ite/gcc.target/aarch64/sve/fneg-abs_4.c new file mode 100644 index 0000000000000000000000000000000000000000..21f2a8da2a5d44e3d01f6604ca7= be87e3744d494 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/fneg-abs_4.c @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +/* { dg-final { check-function-bodies "**" "" "" { target lp64 } } } */ + +#include + +/* +** negabs: +** mov x0, -9223372036854775808 +** fmov d[0-9]+, x0 +** orr v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b +** ret +*/ +double negabs (double x) +{ + unsigned long long y; + memcpy (&y, &x, sizeof(double)); + y =3D y | (1UL << 63); + memcpy (&x, &y, sizeof(double)); + return x; +} + +/* +** negabsf: +** movi v[0-9]+.2s, 0x80, lsl 24 +** orr v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b +** ret +*/ +float negabsf (float x) +{ + unsigned int y; + memcpy (&y, &x, sizeof(float)); + y =3D y | (1U << 31); + memcpy (&x, &y, sizeof(float)); + return x; +} + --_002_VI1PR08MB532592D09B4E95B0A2CBFE28FFA9AVI1PR08MB5325eurp_ Content-Type: application/octet-stream; name="rb17718.patch" Content-Description: rb17718.patch Content-Disposition: attachment; filename="rb17718.patch"; size=12449; creation-date="Tue, 07 Nov 2023 09:24:20 GMT"; modification-date="Tue, 07 Nov 2023 09:25:24 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9tYXRjaC5wZCBiL2djYy9tYXRjaC5wZAppbmRleCA2OGExNTg3ZWEy NDY1YTg5MDg3NTQ0ODk5M2UxNDA0MjVlZjZhNjhmLi41OTI4YWNiYjE0ZTJhMThhZGRmZjM4MDAw YmYzMGRkMjczZDRiMWE2IDEwMDY0NAotLS0gYS9nY2MvbWF0Y2gucGQKKysrIGIvZ2NjL21hdGNo LnBkCkBAIC0xMTE4LDE0ICsxMTE4LDE4IEBAIERFRklORV9JTlRfQU5EX0ZMT0FUX1JPVU5EX0ZO IChSSU5UKQogICAgKGh5cG90cyBAMCAoY29weXNpZ25zIEAxIEAyKSkKICAgIChoeXBvdHMgQDAg QDEpKSkpCiAKLS8qIGNvcHlzaWduKHgsIENTVCkgLT4gWy1dYWJzICh4KS4gICovCisvKiBjb3B5 c2lnbih4LCBDU1QpIC0+IGFicyAoeCkuICAqLwogKGZvciBjb3B5c2lnbnMgKENPUFlTSUdOX0FM TCkKICAoc2ltcGxpZnkKICAgKGNvcHlzaWducyBAMCBSRUFMX0NTVEAxKQotICAoaWYgKFJFQUxf VkFMVUVfTkVHQVRJVkUgKFRSRUVfUkVBTF9DU1QgKEAxKSkpCi0gICAobmVnYXRlIChhYnMgQDAp KQorICAoaWYgKCFSRUFMX1ZBTFVFX05FR0FUSVZFIChUUkVFX1JFQUxfQ1NUIChAMSkpKQogICAg KGFicyBAMCkpKSkKIAorLyogVHJhbnNmb3JtIGZuZWcgKGZhYnMgKFgpKSAtPiBjb3B5c2lnbiAo WCwgLTEpLiAgKi8KKyhzaW1wbGlmeQorIChuZWdhdGUgKGFicyBAMCkpCisgKElGTl9DT1BZU0lH TiBAMCB7IGJ1aWxkX21pbnVzX29uZV9jc3QgKHR5cGUpOyB9KSkKKwogLyogY29weXNpZ24oY29w eXNpZ24oeCwgeSksIHopIC0+IGNvcHlzaWduKHgsIHopLiAgKi8KIChmb3IgY29weXNpZ25zIChD T1BZU0lHTl9BTEwpCiAgKHNpbXBsaWZ5CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5k Zy9mb2xkLWNvcHlzaWduLTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2ZvbGQtY29weXNpZ24t MS5jCmluZGV4IGYxN2Q2NWMyNGVlNGRjYTk4Njc4MjdkMDQwZmUwYTQwNGM1MTVlN2IuLmY5Y2Fm ZDE0YWIwNWY1ZThhYjJmNmY2OGU2MjgwMWQyMWMyZGY2YTYgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL2ZvbGQtY29weXNpZ24tMS5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L2ZvbGQtY29weXNpZ24tMS5jCkBAIC0xMiw1ICsxMiw1IEBAIGRvdWJsZSBiYXIgKGRvdWJsZSB4 KQogICByZXR1cm4gX19idWlsdGluX2NvcHlzaWduICh4LCBtaW51c3plcm8pOwogfQogCi0vKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIj0gLSIgMSAiY2RkY2UxIiB9IH0gKi8K LS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiPSBBQlNfRVhQUiIgMiAiY2Rk Y2UxIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiX19idWls dGluX2NvcHlzaWduIiAxICJjZGRjZTEiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICI9IEFCU19FWFBSIiAxICJjZGRjZTEiIH0gfSAqLwpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1NTE1Mi0yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9w cjU1MTUyLTIuYwppbmRleCA1NGRiMGYyMDYyZGExMDVhODI5ZDY2OTBhYzhlZDk4OTFmZTJiNTg4 Li42MDVmMjAyZWQ2YmM3YWE4ZmU5MjE0NTdiMDJmZjBiODhjYzYzY2U2IDEwMDY0NAotLS0gYS9n Y2MvdGVzdHN1aXRlL2djYy5kZy9wcjU1MTUyLTIuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy9wcjU1MTUyLTIuYwpAQCAtMTAsNCArMTAsNSBAQCBpbnQgZihpbnQgYSkKICAgcmV0dXJuIChh PC1hKT9hOi1hOwogfQogCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIkFC U19FWFBSIiAyICJvcHRpbWl6ZWQiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wLXRpbWVzICJcLkNPUFlTSUdOIiAxICJvcHRpbWl6ZWQiIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJBQlNfRVhQUiIgMSAib3B0aW1pemVkIiB9IH0gKi8K ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL2Ficy00LmMgYi9nY2Mv dGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9hYnMtNC5jCmluZGV4IDYxOTc1MTlmYWY3YjU1YWVk N2JjMTYyY2QwYTE0ZGQyMTQ1MjEwY2EuLmUxYjgyNWYzN2Y2OWFjM2M0NjY2YjNhNTJkNzMzMzY4 ODA1YWQzMWQgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL2Ficy00 LmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvYWJzLTQuYwpAQCAtOSw1ICs5 LDYgQEAgbG9uZyBkb3VibGUgYWJzX2xkKGxvbmcgZG91YmxlIHgpIHsgcmV0dXJuIF9fYnVpbHRp bl9zaWduYml0KHgpID8geCA6IC14OyB9CiAKIC8qIF9fYnVpbHRpbl9zaWduYml0KHgpID8geCA6 IC14LiBTaG91bGQgYmUgY29udmVydCBpbnRvIC0gQUJTX0VYUDx4PiAqLwogLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAic2lnbmJpdCIgIm9wdGltaXplZCJ9IH0gKi8KLS8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiPSBBQlNfRVhQUiIgMyAib3B0aW1pemVk In0gfSAqLwotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICI9IC0iIDMgIm9w dGltaXplZCJ9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiPSBB QlNfRVhQUiIgMSAib3B0aW1pemVkIn0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wLXRpbWVzICI9IC0iIDEgIm9wdGltaXplZCJ9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcC10aW1lcyAiPSBcLkNPUFlTSUdOIiAyICJvcHRpbWl6ZWQifSB9ICovCmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9iYWNrcHJvcC02LmMgYi9nY2Mv dGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9iYWNrcHJvcC02LmMKaW5kZXggMzFmMDU3MTZmMTQ5 OGRjNzA5Y2FjOTVmYTIwZmI1Nzk2NjQyYzc3ZS4uYzNhMTM4NjQyZDZmZjdiZTk4NGU5MWZhMTM0 M2NiMjcxOGRiN2FlMSAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Ev YmFja3Byb3AtNi5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL2JhY2twcm9w LTYuYwpAQCAtMjYsNSArMjYsNiBAQCBURVNUX0ZVTkNUSU9OIChmbG9hdCwgZikKIFRFU1RfRlVO Q1RJT04gKGRvdWJsZSwgKQogVEVTVF9GVU5DVElPTiAobG9uZyBkb3VibGUsIGwpCiAKLS8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyB7RGVsZXRpbmdbXlxuXSogPSAtfSA2ICJi YWNrcHJvcCIgfSB9ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMge0Rl bGV0aW5nW15cbl0qID0gQUJTX0VYUFIgPH0gMyAiYmFja3Byb3AiIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzIHtEZWxldGluZ1teXG5dKiA9IC19IDQgImJhY2tw cm9wIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyB7RGVsZXRp bmdbXlxuXSogPSBcLkNPUFlTSUdOfSAyICJiYWNrcHJvcCIgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMge0RlbGV0aW5nW15cbl0qID0gQUJTX0VYUFIgPH0gMSAi YmFja3Byb3AiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1z c2EvY29weS1zaWduLTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL2NvcHktc2ln bi0yLmMKaW5kZXggZGU1MmM1ZjdjODA2Mjk1ODM1M2Q5MWY1MDMxMTkzZGVmYzlmM2Y5MS4uZTVk NTY1YzRiOTgzMmMwMDEwNjU4OGVmNDExZmJkOGMyOTJhNWNhZCAxMDA2NDQKLS0tIGEvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvY29weS1zaWduLTIuYworKysgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy90cmVlLXNzYS9jb3B5LXNpZ24tMi5jCkBAIC0xMCw0ICsxMCw1IEBAIGZsb2F0IGYx KGZsb2F0IHgpCiAgIGZsb2F0IHQgPSBfX2J1aWx0aW5fY29weXNpZ25mICgxLjBmLCAteCk7CiAg IHJldHVybiB4ICogdDsKIH0KLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi QUJTIiAyICJvcHRpbWl6ZWQifSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgIkFCUyIgMSAib3B0aW1pemVkIn0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICIuQ09QWVNJR04iIDEgIm9wdGltaXplZCJ9IH0gKi8KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL211bHQtYWJzLTIuYyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3RyZWUtc3NhL211bHQtYWJzLTIuYwppbmRleCBhNDFmMWJhZjI1NjY5YTRmZDMw MWE1ODZhNDliYTVlM2M1Yjk2NmFiLi5hMjI4OTZiMjFjOGI1YTRkNWQ4ZTI4YmQ4YWUwZGI4OTZl NjNhZGUwIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9tdWx0LWFi cy0yLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvbXVsdC1hYnMtMi5jCkBA IC0zNCw0ICszNCw1IEBAIGZsb2F0IGkxKGZsb2F0IHgpCiB7CiAgIHJldHVybiB4ICogKHggPD0g MC5mID8gMS5mIDogLTEuZik7CiB9Ci0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgIkFCUyIgOCAiZ2ltcGxlIn0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICJBQlMiIDQgImdpbXBsZSJ9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAiXC5DT1BZU0lHTiIgNCAiZ2ltcGxlIn0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvZm5lZy1hYnNfMS5jIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2FhcmNoNjQvZm5lZy1hYnNfMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4MjMwMTNjM2Rk ZjZiM2EyNjZjM2FiZmNiZjI2NDJmYzJhNzVmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9mbmVnLWFic18xLmMKQEAgLTAsMCArMSwzOSBAQAor LyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8zIiB9ICovCisvKiB7 IGRnLWZpbmFsIHsgY2hlY2stZnVuY3Rpb24tYm9kaWVzICIqKiIgIiIgIiIgeyB0YXJnZXQgbHA2 NCB9IH0gfSAqLworCisjcHJhZ21hIEdDQyB0YXJnZXQgIitub3N2ZSIKKworI2luY2x1ZGUgPGFy bV9uZW9uLmg+CisKKy8qCisqKiB0MToKKyoqCW9ycgl2WzAtOV0rLjJzLCAjMTI4LCBsc2wgIzI0 CisqKglyZXQKKyovCitmbG9hdDMyeDJfdCB0MSAoZmxvYXQzMngyX3QgYSkKK3sKKyAgcmV0dXJu IHZuZWdfZjMyICh2YWJzX2YzMiAoYSkpOworfQorCisvKgorKiogdDI6CisqKglvcnIJdlswLTld Ky40cywgIzEyOCwgbHNsICMyNAorKioJcmV0CisqLworZmxvYXQzMng0X3QgdDIgKGZsb2F0MzJ4 NF90IGEpCit7CisgIHJldHVybiB2bmVncV9mMzIgKHZhYnNxX2YzMiAoYSkpOworfQorCisvKgor KiogdDM6CisqKglhZHJwCXgwLCAuTENbMC05XSsKKyoqCWxkcglxWzAtOV0rLCBcW3gwLCAjOmxv MTI6LkxDMFxdCisqKglvcnIJdlswLTldKy4xNmIsIHZbMC05XSsuMTZiLCB2WzAtOV0rLjE2Ygor KioJcmV0CisqLworZmxvYXQ2NHgyX3QgdDMgKGZsb2F0NjR4Ml90IGEpCit7CisgIHJldHVybiB2 bmVncV9mNjQgKHZhYnNxX2Y2NCAoYSkpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2FhcmNoNjQvZm5lZy1hYnNfMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2FhcmNoNjQvZm5lZy1hYnNfMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0MTEyMTE3NmIzMDllNGIyYWE0MTNk YzU1MjcxYTZlM2M5M2Q1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvYWFyY2g2NC9mbmVnLWFic18yLmMKQEAgLTAsMCArMSwzMSBAQAorLyogeyBkZy1kbyBj b21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8zIiB9ICovCisvKiB7IGRnLWZpbmFsIHsg Y2hlY2stZnVuY3Rpb24tYm9kaWVzICIqKiIgIiIgIiIgeyB0YXJnZXQgbHA2NCB9IH0gfSAqLwor CisjcHJhZ21hIEdDQyB0YXJnZXQgIitub3N2ZSIKKworI2luY2x1ZGUgPGFybV9uZW9uLmg+Cisj aW5jbHVkZSA8bWF0aC5oPgorCisvKgorKiogZjE6CisqKgltb3ZpCXZbMC05XSsuMnMsIDB4ODAs IGxzbCAyNAorKioJb3JyCXZbMC05XSsuOGIsIHZbMC05XSsuOGIsIHZbMC05XSsuOGIKKyoqCXJl dAorKi8KK2Zsb2F0MzJfdCBmMSAoZmxvYXQzMl90IGEpCit7CisgIHJldHVybiAtZmFic2YgKGEp OworfQorCisvKgorKiogZjI6CisqKgltb3YJeDAsIC05MjIzMzcyMDM2ODU0Nzc1ODA4CisqKglm bW92CWRbMC05XSssIHgwCisqKglvcnIJdlswLTldKy44YiwgdlswLTldKy44YiwgdlswLTldKy44 YgorKioJcmV0CisqLworZmxvYXQ2NF90IGYyIChmbG9hdDY0X3QgYSkKK3sKKyAgcmV0dXJuIC1m YWJzIChhKTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0 L2ZuZWctYWJzXzMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2ZuZWctYWJz XzMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwLi5iNDY1MjE3M2E5NWQxMDRkZGZhNzBjNDk3ZjA2MjdhNjFlYTg5ZDNi Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvZm5l Zy1hYnNfMy5jCkBAIC0wLDAgKzEsMzYgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1PMyIgfSAqLworLyogeyBkZy1maW5hbCB7IGNoZWNrLWZ1bmN0aW9uLWJv ZGllcyAiKioiICIiICIiIHsgdGFyZ2V0IGxwNjQgfSB9IH0gKi8KKworI3ByYWdtYSBHQ0MgdGFy Z2V0ICIrbm9zdmUiCisKKyNpbmNsdWRlIDxhcm1fbmVvbi5oPgorI2luY2x1ZGUgPG1hdGguaD4K KworLyoKKyoqIGYxOgorKioJLi4uCisqKglsZHIJcVswLTldKywgXFt4MFxdCisqKglvcnIJdlsw LTldKy40cywgIzEyOCwgbHNsICMyNAorKioJc3RyCXFbMC05XSssIFxbeDBcXSwgMTYKKyoqCS4u LgorKi8KK3ZvaWQgZjEgKGZsb2F0MzJfdCAqYSwgaW50IG4pCit7CisgIGZvciAoaW50IGkgPSAw OyBpIDwgKG4gJiAtOCk7IGkrKykKKyAgIGFbaV0gPSAtZmFic2YgKGFbaV0pOworfQorCisvKgor KiogZjI6CisqKgkuLi4KKyoqCWxkcglxWzAtOV0rLCBcW3gwXF0KKyoqCW9ycgl2WzAtOV0rLjE2 YiwgdlswLTldKy4xNmIsIHZbMC05XSsuMTZiCisqKglzdHIJcVswLTldKywgXFt4MFxdLCAxNgor KioJLi4uCisqLwordm9pZCBmMiAoZmxvYXQ2NF90ICphLCBpbnQgbikKK3sKKyAgZm9yIChpbnQg aSA9IDA7IGkgPCAobiAmIC04KTsgaSsrKQorICAgYVtpXSA9IC1mYWJzIChhW2ldKTsKK30KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2ZuZWctYWJzXzQuYyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2ZuZWctYWJzXzQuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li4xMDg3OWRlYTc0NDYyZDM0YjI2MTYwZWViMGJkNTRlYWQwNjMxNjZiCi0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvZm5lZy1hYnNfNC5jCkBAIC0w LDAgKzEsMzkgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1P MyIgfSAqLworLyogeyBkZy1maW5hbCB7IGNoZWNrLWZ1bmN0aW9uLWJvZGllcyAiKioiICIiICIi IHsgdGFyZ2V0IGxwNjQgfSB9IH0gKi8KKworI3ByYWdtYSBHQ0MgdGFyZ2V0ICIrbm9zdmUiCisK KyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyoqIG5lZ2FiczoKKyoqCW1vdgl4MCwgLTkyMjMz NzIwMzY4NTQ3NzU4MDgKKyoqCWZtb3YJZFswLTldKywgeDAKKyoqCW9ycgl2WzAtOV0rLjhiLCB2 WzAtOV0rLjhiLCB2WzAtOV0rLjhiCisqKglyZXQKKyovCitkb3VibGUgbmVnYWJzIChkb3VibGUg eCkKK3sKKyAgIHVuc2lnbmVkIGxvbmcgbG9uZyB5OworICAgbWVtY3B5ICgmeSwgJngsIHNpemVv Zihkb3VibGUpKTsKKyAgIHkgPSB5IHwgKDFVTCA8PCA2Myk7CisgICBtZW1jcHkgKCZ4LCAmeSwg c2l6ZW9mKGRvdWJsZSkpOworICAgcmV0dXJuIHg7Cit9CisKKy8qCisqKiBuZWdhYnNmOgorKioJ bW92aQl2WzAtOV0rLjJzLCAweDgwLCBsc2wgMjQKKyoqCW9ycgl2WzAtOV0rLjhiLCB2WzAtOV0r LjhiLCB2WzAtOV0rLjhiCisqKglyZXQKKyovCitmbG9hdCBuZWdhYnNmIChmbG9hdCB4KQorewor ICAgdW5zaWduZWQgaW50IHk7CisgICBtZW1jcHkgKCZ5LCAmeCwgc2l6ZW9mKGZsb2F0KSk7Cisg ICB5ID0geSB8ICgxVSA8PCAzMSk7CisgICBtZW1jcHkgKCZ4LCAmeSwgc2l6ZW9mKGZsb2F0KSk7 CisgICByZXR1cm4geDsKK30KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2FhcmNoNjQvc3ZlL2ZuZWctYWJzXzEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJj aDY0L3N2ZS9mbmVnLWFic18xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGM3NjY0ZTZkZTc3YTQ5NzY4Mjk1MjY1 M2ZmZDQxNzQ1Mzg1NGQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9hYXJjaDY0L3N2ZS9mbmVnLWFic18xLmMKQEAgLTAsMCArMSwzNyBAQAorLyogeyBkZy1k byBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8zIiB9ICovCisvKiB7IGRnLWZpbmFs IHsgY2hlY2stZnVuY3Rpb24tYm9kaWVzICIqKiIgIiIgIiIgeyB0YXJnZXQgbHA2NCB9IH0gfSAq LworCisjaW5jbHVkZSA8YXJtX25lb24uaD4KKworLyoKKyoqIHQxOgorKioJb3JyCXZbMC05XSsu MnMsICMxMjgsIGxzbCAjMjQKKyoqCXJldAorKi8KK2Zsb2F0MzJ4Ml90IHQxIChmbG9hdDMyeDJf dCBhKQoreworICByZXR1cm4gdm5lZ19mMzIgKHZhYnNfZjMyIChhKSk7Cit9CisKKy8qCisqKiB0 MjoKKyoqCW9ycgl2WzAtOV0rLjRzLCAjMTI4LCBsc2wgIzI0CisqKglyZXQKKyovCitmbG9hdDMy eDRfdCB0MiAoZmxvYXQzMng0X3QgYSkKK3sKKyAgcmV0dXJuIHZuZWdxX2YzMiAodmFic3FfZjMy IChhKSk7Cit9CisKKy8qCisqKiB0MzoKKyoqCWFkcnAJeDAsIC5MQ1swLTldKworKioJbGRyCXFb MC05XSssIFxbeDAsICM6bG8xMjouTEMwXF0KKyoqCW9ycgl2WzAtOV0rLjE2YiwgdlswLTldKy4x NmIsIHZbMC05XSsuMTZiCisqKglyZXQKKyovCitmbG9hdDY0eDJfdCB0MyAoZmxvYXQ2NHgyX3Qg YSkKK3sKKyAgcmV0dXJuIHZuZWdxX2Y2NCAodmFic3FfZjY0IChhKSk7Cit9CmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9zdmUvZm5lZy1hYnNfMi5jIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2ZuZWctYWJzXzIuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li5hNjBjZDMxYjkyOTRhZjJkYWM2OWVlZDFjOTNmODk5YmQ1Yzc4ZmNhCi0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2ZuZWctYWJzXzIuYwpA QCAtMCwwICsxLDI5IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25z ICItTzMiIH0gKi8KKy8qIHsgZGctZmluYWwgeyBjaGVjay1mdW5jdGlvbi1ib2RpZXMgIioqIiAi IiAiIiB7IHRhcmdldCBscDY0IH0gfSB9ICovCisKKyNpbmNsdWRlIDxhcm1fbmVvbi5oPgorI2lu Y2x1ZGUgPG1hdGguaD4KKworLyoKKyoqIGYxOgorKioJbW92aQl2WzAtOV0rLjJzLCAweDgwLCBs c2wgMjQKKyoqCW9ycgl2WzAtOV0rLjhiLCB2WzAtOV0rLjhiLCB2WzAtOV0rLjhiCisqKglyZXQK KyovCitmbG9hdDMyX3QgZjEgKGZsb2F0MzJfdCBhKQoreworICByZXR1cm4gLWZhYnNmIChhKTsK K30KKworLyoKKyoqIGYyOgorKioJbW92CXgwLCAtOTIyMzM3MjAzNjg1NDc3NTgwOAorKioJZm1v dglkWzAtOV0rLCB4MAorKioJb3JyCXZbMC05XSsuOGIsIHZbMC05XSsuOGIsIHZbMC05XSsuOGIK KyoqCXJldAorKi8KK2Zsb2F0NjRfdCBmMiAoZmxvYXQ2NF90IGEpCit7CisgIHJldHVybiAtZmFi cyAoYSk7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9z dmUvZm5lZy1hYnNfMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2Zu ZWctYWJzXzMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmYzNDMyOGQ4ODQxZGU4ZTZiMGE1NDU4NTYyYTlmMDBl MzFjMjc1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNo NjQvc3ZlL2ZuZWctYWJzXzMuYwpAQCAtMCwwICsxLDM0IEBACisvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLworLyogeyBkZy1vcHRpb25zICItTzMiIH0gKi8KKy8qIHsgZGctZmluYWwgeyBjaGVjay1m dW5jdGlvbi1ib2RpZXMgIioqIiAiIiAiIiB7IHRhcmdldCBscDY0IH0gfSB9ICovCisKKyNpbmNs dWRlIDxhcm1fbmVvbi5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworLyoKKyoqIGYxOgorKioJLi4u CisqKglsZDF3CXpbMC05XSsucywgcFswLTldKy96LCBcW3gwLCB4MiwgbHNsIDJcXQorKioJb3Jy CXpbMC05XSsucywgelswLTldKy5zLCAjMHg4MDAwMDAwMAorKioJc3Qxdwl6WzAtOV0rLnMsIHBb MC05XSssIFxbeDAsIHgyLCBsc2wgMlxdCisqKgkuLi4KKyovCit2b2lkIGYxIChmbG9hdDMyX3Qg KmEsIGludCBuKQoreworICBmb3IgKGludCBpID0gMDsgaSA8IChuICYgLTgpOyBpKyspCisgICBh W2ldID0gLWZhYnNmIChhW2ldKTsKK30KKworLyoKKyoqIGYyOgorKioJLi4uCisqKglsZDFkCXpb MC05XSsuZCwgcFswLTldKy96LCBcW3gwLCB4MiwgbHNsIDNcXQorKioJb3JyCXpbMC05XSsuZCwg elswLTldKy5kLCAjMHg4MDAwMDAwMDAwMDAwMDAwCisqKglzdDFkCXpbMC05XSsuZCwgcFswLTld KywgXFt4MCwgeDIsIGxzbCAzXF0KKyoqCS4uLgorKi8KK3ZvaWQgZjIgKGZsb2F0NjRfdCAqYSwg aW50IG4pCit7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgKG4gJiAtOCk7IGkrKykKKyAgIGFbaV0g PSAtZmFicyAoYVtpXSk7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv YWFyY2g2NC9zdmUvZm5lZy1hYnNfNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNo NjQvc3ZlL2ZuZWctYWJzXzQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMWYyYThkYTJhNWQ0NGUzZDAxZjY2MDRj YTdiZTg3ZTM3NDRkNDk0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2FhcmNoNjQvc3ZlL2ZuZWctYWJzXzQuYwpAQCAtMCwwICsxLDM3IEBACisvKiB7IGRnLWRv IGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzMiIH0gKi8KKy8qIHsgZGctZmluYWwg eyBjaGVjay1mdW5jdGlvbi1ib2RpZXMgIioqIiAiIiAiIiB7IHRhcmdldCBscDY0IH0gfSB9ICov CisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyoqIG5lZ2FiczoKKyoqCW1vdgl4MCwgLTky MjMzNzIwMzY4NTQ3NzU4MDgKKyoqCWZtb3YJZFswLTldKywgeDAKKyoqCW9ycgl2WzAtOV0rLjhi LCB2WzAtOV0rLjhiLCB2WzAtOV0rLjhiCisqKglyZXQKKyovCitkb3VibGUgbmVnYWJzIChkb3Vi bGUgeCkKK3sKKyAgIHVuc2lnbmVkIGxvbmcgbG9uZyB5OworICAgbWVtY3B5ICgmeSwgJngsIHNp emVvZihkb3VibGUpKTsKKyAgIHkgPSB5IHwgKDFVTCA8PCA2Myk7CisgICBtZW1jcHkgKCZ4LCAm eSwgc2l6ZW9mKGRvdWJsZSkpOworICAgcmV0dXJuIHg7Cit9CisKKy8qCisqKiBuZWdhYnNmOgor KioJbW92aQl2WzAtOV0rLjJzLCAweDgwLCBsc2wgMjQKKyoqCW9ycgl2WzAtOV0rLjhiLCB2WzAt OV0rLjhiLCB2WzAtOV0rLjhiCisqKglyZXQKKyovCitmbG9hdCBuZWdhYnNmIChmbG9hdCB4KQor eworICAgdW5zaWduZWQgaW50IHk7CisgICBtZW1jcHkgKCZ5LCAmeCwgc2l6ZW9mKGZsb2F0KSk7 CisgICB5ID0geSB8ICgxVSA8PCAzMSk7CisgICBtZW1jcHkgKCZ4LCAmeSwgc2l6ZW9mKGZsb2F0 KSk7CisgICByZXR1cm4geDsKK30KKwo= --_002_VI1PR08MB532592D09B4E95B0A2CBFE28FFA9AVI1PR08MB5325eurp_--