From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on2048.outbound.protection.outlook.com [40.107.13.48]) by sourceware.org (Postfix) with ESMTPS id 9FB0D385773E for ; Wed, 3 May 2023 12:19:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9FB0D385773E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=suubf1zpJFqmFspKBFCHV5RhhhByMkyHs2pqb8uqFQs=; b=WqBgAfoglEbRRQ+n0rm6rvd9ojZ9wA35nSQvPoTygqxJGpk7qIfa34kB5qRBry5nw9DUTRyQVq+CiJ2X0ypuYU9Oun6PAV6EWaAlXpPwgqdZLwcXaq8QgDgP7hRXnbjC/1L08yCKKL1m0B8CtUuTIgEpV6HINr17iIXpiX6HYTc= Received: from AM6P193CA0054.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:8e::31) by DB9PR08MB8201.eurprd08.prod.outlook.com (2603:10a6:10:39c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6340.33; Wed, 3 May 2023 12:19:46 +0000 Received: from AM7EUR03FT006.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:8e:cafe::f1) by AM6P193CA0054.outlook.office365.com (2603:10a6:209:8e::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.22 via Frontend Transport; Wed, 3 May 2023 12:19:45 +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 AM7EUR03FT006.mail.protection.outlook.com (100.127.141.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.22 via Frontend Transport; Wed, 3 May 2023 12:19:45 +0000 Received: ("Tessian outbound 5bb4c51d5a1f:v136"); Wed, 03 May 2023 12:19:44 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: ab6e6fa8393ab207 X-CR-MTA-TID: 64aa7808 Received: from b14dd5eb7531.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 2576F26D-5311-4876-B852-385645FD339F.1; Wed, 03 May 2023 12:19:33 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id b14dd5eb7531.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 03 May 2023 12:19:33 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dwMDXwIlMfVNlvc1mISdHAKasKVf3hLh9eUhyJGUYdMvjZzqh1+N6fG4JxcKBsHE1tAsBmu/XTn4P4oWn7lwZz6ZE5XcLvYEOg9htPE//y/aDFyTwX0afnJJXcWIoQVR+tovFE7Hkg/QLru0xxoSF4U+EmSIUOhpoDMWTjFFt7XK/QbJgsFq/8yi0rqdDWN3WgNhv/EtEn7EmiCaygN2Wpp/u3YFPPuEjt4XvGQ5oOv1yez46dti4c2a67tcCh5Cq6g4gu1j1vq/l3GShPGYnLjKF56263Xlguz3vfBqcDscHORNJOXqD5u3L6Wa5zee2u9E1lKwOZOd2SkmNfh31w== 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=suubf1zpJFqmFspKBFCHV5RhhhByMkyHs2pqb8uqFQs=; b=NjJqKp5fijf5GivXE9TfyUuaINrNYIW5/HMv5Mc5APSSbn/dlCQ8ph6RGMRilERG0tup7xmxezvJDqfDOODOfjqIkGTyy2HbJi7oREsaelamNBjXhAGsHk4rPlSuYrA9QAwRsy5JoM2dZ8tmEedBj249CC8eLm8xZCkaULzaNUYpspVSAfb2T1MvAZFCAggGEhqdX3ba1hhx6NQ3F3F4Zr3rzLw+F/II0nKsP6SwqV5CckvIAUe92klwuRFsL5/F4MPTX2sAvv3DcZgPoodHsrxUWp11beppG75QHeNhswY+XiNhDy3HrWqaxnTCXQYd9M0rI3m8xiH8DeF1aeVnkw== 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=suubf1zpJFqmFspKBFCHV5RhhhByMkyHs2pqb8uqFQs=; b=WqBgAfoglEbRRQ+n0rm6rvd9ojZ9wA35nSQvPoTygqxJGpk7qIfa34kB5qRBry5nw9DUTRyQVq+CiJ2X0ypuYU9Oun6PAV6EWaAlXpPwgqdZLwcXaq8QgDgP7hRXnbjC/1L08yCKKL1m0B8CtUuTIgEpV6HINr17iIXpiX6HYTc= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from DB9PR08MB6507.eurprd08.prod.outlook.com (2603:10a6:10:25a::6) by DU0PR08MB9774.eurprd08.prod.outlook.com (2603:10a6:10:445::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6340.30; Wed, 3 May 2023 12:19:32 +0000 Received: from DB9PR08MB6507.eurprd08.prod.outlook.com ([fe80::9f9c:a12a:8291:5530]) by DB9PR08MB6507.eurprd08.prod.outlook.com ([fe80::9f9c:a12a:8291:5530%5]) with mapi id 15.20.6363.021; Wed, 3 May 2023 12:19:32 +0000 Content-Type: multipart/mixed; boundary="------------6KBHaBnwU5nfa0k1A2rUmAyt" Message-ID: <2390a355-f7ec-58b5-1faf-a95652a9aef5@arm.com> Date: Wed, 3 May 2023 13:19:03 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [PATCH 04/10] arm: Stop vadcq, vsbcq intrinsics from overwriting the FPSCR NZ flags Content-Language: en-US To: Kyrylo Tkachov , Andrea Corallo , "gcc-patches@gcc.gnu.org" Cc: Richard Earnshaw References: <20230428113002.482343-1-andrea.corallo@arm.com> <20230428113002.482343-4-andrea.corallo@arm.com> From: Stamatis Markianos-Wright In-Reply-To: X-ClientProxiedBy: LO4P123CA0556.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:33b::6) To DB9PR08MB6507.eurprd08.prod.outlook.com (2603:10a6:10:25a::6) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: DB9PR08MB6507:EE_|DU0PR08MB9774:EE_|AM7EUR03FT006:EE_|DB9PR08MB8201:EE_ X-MS-Office365-Filtering-Correlation-Id: 87a50f6f-c7b6-4d2f-075a-08db4bd0ae4e 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: nIlLgVcHI89QB2ikabws7V6yY04iGta3d/VdtB4p+nlkEWivxKMI1IulkGcJcWpAUnf0PIH1EPSIqJv2lPCStdPEEJBMw70y966KKyc8OjeUROa9lPWXQlGTruZFqLXCTWcD+gy5xLQsQhbxOkfCdnLOm1pldA4+OplMkEZGXmEYagCfPBypJvKK8Qsmvm7ZO7PHKwoib/1uMm4bxRO5RV9Curqk9xH2TcYpXP3dw7EMFssphGDEBjm1ZQTrYNdhEoU91kvTn4joujwLXDymnBuzMtaBUuDEBgSo56BqI7PSP+t5CIuqLDqEZXh2ZYaPA21QmTZDcCzbeGghNGETtFE6K+aekn3Sse2bqzVXMtFr+I+dM/2d5xiwmFd+eVsMmGNQGOz1P9zSsOQ6WxLCg8vEcU+1l6m5yr18XTwgqniny7EyfNtl2uaJxZxn5EHv0LJjZISYn9S/fcR1wdMb016YdsCvaVbtabkB2VmLqUp9sDRXBqQ1xah+Zz9P+/1Zr/ku9Zq7DLO1AzEoYfFSCv6tOAmNNXsQ5oleI7PDMqapx8lSV508gwe+lOSM/5d1s0FXstyL2Ct9H9JOiWfR2UJx0r1rkJ4LMrmFpTfP5Lq9NPuTZ3BRpOdZTzd1WlLGmq940NpUnNFQRFBuWnKyiQ== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR08MB6507.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(366004)(346002)(376002)(39860400002)(396003)(136003)(451199021)(4326008)(66476007)(66946007)(66556008)(186003)(316002)(33964004)(478600001)(6486002)(110136005)(31696002)(36756003)(86362001)(6666004)(53546011)(6512007)(6506007)(2906002)(38100700002)(26005)(5660300002)(31686004)(83380400001)(235185007)(8676002)(2616005)(8936002)(41300700001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB9774 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: AM7EUR03FT006.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 1d8043f3-2167-4221-9f12-08db4bd0a5fe X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Ae0Dm8MIvV6cfmXd5dtvv76kaytJ3k83oTpo1DioG9HRH2rb/pFUVsD5EI2e4eQzZ77ZJkybcr6730cOTFj3kKyka+jkyMcj/76nFayAHjCVgMjqt/+wpCPSh+gXacUSwEZS8RPMYBd6Fa5wROiA5OkutdmxMTIcG8l5lq5jx4AkklLOobZXSfcbW5kRI68UGgMFYZsgcYP2Wj0vV9UQD6HL9ZDvD6G28XB7en1vO9GkSdeMr5ad/lIW/goMIde98kQdeudt5Dl88wvMoTCeGOlBsA3lrbfQZ+vkMgbjomRiWn+d24RK1QA4i/RyN4BG5WWR9ICBXYln6DLefPBQsCiRP/u9NK1B/ENpUJ4hoGrdiXz0FroYB5wtvPJAI98LgApESRCR8kSENjYx0Yy5flrlhyeUfbCpQA09kUhScjTpM4w5LkryTq524Vcl7+CzT6p6pb0WX0WCjXACzb+j/JJW5BVnBpQbsIsqXsarxO+F6kMqVMfBFpDf+etQtfTT1iYC8SbhMxj27EnnOO5RDJkS8Epn8/JdtZbCKLi5l8x3VkWmigjs0BJaLdGgAQRBbwTNKRW1iwyEYN3uF/va36bU8wWxR60tZkZrWsKJlvpFL//527CLdcPkmhrt4ly5sCqahrf/l5Lp0OI4H8baq1VV2fF27CL4ovvlaEJj+Ie4Dsga44zEwKRqs7kCqCR7sqbUStGG2sm4PICVYArSV/81Pd7lQH7CP62KHgfqSpCtWpQUn7DJTYmecO4zYe9uBn+qnkQd7GE2FuHW5xyMVQ== 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:(13230028)(4636009)(396003)(136003)(39860400002)(346002)(376002)(451199021)(40470700004)(36840700001)(46966006)(336012)(478600001)(2616005)(110136005)(82310400005)(83380400001)(86362001)(36860700001)(2906002)(31686004)(47076005)(82740400003)(235185007)(40460700003)(8936002)(8676002)(33964004)(31696002)(5660300002)(6512007)(6506007)(53546011)(26005)(186003)(41300700001)(40480700001)(36756003)(6666004)(6486002)(356005)(81166007)(70206006)(70586007)(316002)(4326008)(34020700004)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 May 2023 12:19:45.1906 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 87a50f6f-c7b6-4d2f-075a-08db4bd0ae4e 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: AM7EUR03FT006.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB8201 X-Spam-Status: No, score=-14.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_SHORT,NICE_REPLY_A,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: --------------6KBHaBnwU5nfa0k1A2rUmAyt Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 28/04/2023 17:45, Kyrylo Tkachov wrote: > Hi Andrea, Stam, > >> -----Original Message----- >> From: Andrea Corallo >> Sent: Friday, April 28, 2023 12:30 PM >> To: gcc-patches@gcc.gnu.org >> Cc: Kyrylo Tkachov ; Richard Earnshaw >> ; Stam Markianos-Wright > Wright@arm.com> >> Subject: [PATCH 04/10] arm: Stop vadcq, vsbcq intrinsics from overwriting the >> FPSCR NZ flags >> >> From: Stam Markianos-Wright >> >> Hi all, >> >> We noticed that calls to the vadcq and vsbcq intrinsics, both of >> which use __builtin_arm_set_fpscr_nzcvqc to set the Carry flag in >> the FPSCR, would produce the following code: >> >> ``` >> < r2 is the *carry input > >> vmrs r3, FPSCR_nzcvqc >> bic r3, r3, #536870912 >> orr r3, r3, r2, lsl #29 >> vmsr FPSCR_nzcvqc, r3 >> ``` >> >> when the MVE ACLE instead gives a different instruction sequence of: >> ``` >> < Rt is the *carry input > >> VMRS Rs,FPSCR_nzcvqc >> BFI Rs,Rt,#29,#1 >> VMSR FPSCR_nzcvqc,Rs >> ``` >> >> the bic + orr pair is slower and it's also wrong, because, if the >> *carry input is greater than 1, then we risk overwriting the top two >> bits of the FPSCR register (the N and Z flags). >> >> This turned out to be a problem in the header file and the solution was >> to simply add a `& 1x0u` to the `*carry` input: then the compiler knows >> that we only care about the lowest bit and can optimise to a BFI. >> >> Ok for trunk? > Ok, but I think this needs testsuite coverage for the bug? > Thanks, > Kyrill So this can be seen in the new vadcq* , vsbcq* tests: **    ... **    vmrs    (?:ip|fp|r[0-9]+), FPSCR_nzcvqc(?:    @.*|) **    ... **    bfi    (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), #29, #1(?: @.*|) **    ... **    vmsr    FPSCR_nzcvqc, (?:ip|fp|r[0-9]+)(?:    @.*|) **    ... The fact that there's a BFI there rather than the BIC + ORR shows that this has now been optimised by the compiler and the bug isn't present in those intrinsics any longer... Sorry, I should have linked that in better in our patch series! Added a runtest, also, as it was fairly trivial to write it out :) Thanks, Stam > >> Thanks, >> Stam Markianos-Wright >> >> gcc/ChangeLog: >> >> * config/arm/arm_mve.h (__arm_vadcq_s32): Fix arithmetic. >> (__arm_vadcq_u32): Likewise. >> (__arm_vadcq_m_s32): Likewise. >> (__arm_vadcq_m_u32): Likewise. >> (__arm_vsbcq_s32): Likewise. >> (__arm_vsbcq_u32): Likewise. >> (__arm_vsbcq_m_s32): Likewise. >> (__arm_vsbcq_m_u32): Likewise. >> --- >> gcc/config/arm/arm_mve.h | 16 ++++++++-------- >> 1 file changed, 8 insertions(+), 8 deletions(-) >> >> diff --git a/gcc/config/arm/arm_mve.h b/gcc/config/arm/arm_mve.h >> index 1262d668121..8778216304b 100644 >> --- a/gcc/config/arm/arm_mve.h >> +++ b/gcc/config/arm/arm_mve.h >> @@ -16055,7 +16055,7 @@ __extension__ extern __inline int32x4_t >> __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) >> __arm_vadcq_s32 (int32x4_t __a, int32x4_t __b, unsigned * __carry) >> { >> - __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | (*__carry << 29)); >> + __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | ((*__carry & 0x1u) << 29)); >> int32x4_t __res = __builtin_mve_vadcq_sv4si (__a, __b); >> *__carry = (__builtin_arm_get_fpscr_nzcvqc () >> 29) & 0x1u; >> return __res; >> @@ -16065,7 +16065,7 @@ __extension__ extern __inline uint32x4_t >> __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) >> __arm_vadcq_u32 (uint32x4_t __a, uint32x4_t __b, unsigned * __carry) >> { >> - __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | (*__carry << 29)); >> + __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | ((*__carry & 0x1u) << 29)); >> uint32x4_t __res = __builtin_mve_vadcq_uv4si (__a, __b); >> *__carry = (__builtin_arm_get_fpscr_nzcvqc () >> 29) & 0x1u; >> return __res; >> @@ -16075,7 +16075,7 @@ __extension__ extern __inline int32x4_t >> __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) >> __arm_vadcq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, >> unsigned * __carry, mve_pred16_t __p) >> { >> - __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | (*__carry << 29)); >> + __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | ((*__carry & 0x1u) << 29)); >> int32x4_t __res = __builtin_mve_vadcq_m_sv4si (__inactive, __a, __b, __p); >> *__carry = (__builtin_arm_get_fpscr_nzcvqc () >> 29) & 0x1u; >> return __res; >> @@ -16085,7 +16085,7 @@ __extension__ extern __inline uint32x4_t >> __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) >> __arm_vadcq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, >> unsigned * __carry, mve_pred16_t __p) >> { >> - __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | (*__carry << 29)); >> + __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | ((*__carry & 0x1u) << 29)); >> uint32x4_t __res = __builtin_mve_vadcq_m_uv4si (__inactive, __a, __b, >> __p); >> *__carry = (__builtin_arm_get_fpscr_nzcvqc () >> 29) & 0x1u; >> return __res; >> @@ -16131,7 +16131,7 @@ __extension__ extern __inline int32x4_t >> __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) >> __arm_vsbcq_s32 (int32x4_t __a, int32x4_t __b, unsigned * __carry) >> { >> - __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | (*__carry << 29)); >> + __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | ((*__carry & 0x1u) << 29)); >> int32x4_t __res = __builtin_mve_vsbcq_sv4si (__a, __b); >> *__carry = (__builtin_arm_get_fpscr_nzcvqc () >> 29) & 0x1u; >> return __res; >> @@ -16141,7 +16141,7 @@ __extension__ extern __inline uint32x4_t >> __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) >> __arm_vsbcq_u32 (uint32x4_t __a, uint32x4_t __b, unsigned * __carry) >> { >> - __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | (*__carry << 29)); >> + __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | ((*__carry & 0x1u) << 29)); >> uint32x4_t __res = __builtin_mve_vsbcq_uv4si (__a, __b); >> *__carry = (__builtin_arm_get_fpscr_nzcvqc () >> 29) & 0x1u; >> return __res; >> @@ -16151,7 +16151,7 @@ __extension__ extern __inline int32x4_t >> __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) >> __arm_vsbcq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, >> unsigned * __carry, mve_pred16_t __p) >> { >> - __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | (*__carry << 29)); >> + __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | ((*__carry & 0x1u) << 29)); >> int32x4_t __res = __builtin_mve_vsbcq_m_sv4si (__inactive, __a, __b, __p); >> *__carry = (__builtin_arm_get_fpscr_nzcvqc () >> 29) & 0x1u; >> return __res; >> @@ -16161,7 +16161,7 @@ __extension__ extern __inline uint32x4_t >> __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) >> __arm_vsbcq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, >> unsigned * __carry, mve_pred16_t __p) >> { >> - __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | (*__carry << 29)); >> + __builtin_arm_set_fpscr_nzcvqc((__builtin_arm_get_fpscr_nzcvqc () & >> ~0x20000000u) | ((*__carry & 0x1u) << 29)); >> uint32x4_t __res = __builtin_mve_vsbcq_m_uv4si (__inactive, __a, __b, >> __p); >> *__carry = (__builtin_arm_get_fpscr_nzcvqc () >> 29) & 0x1u; >> return __res; >> -- >> 2.25.1 --------------6KBHaBnwU5nfa0k1A2rUmAyt Content-Type: text/x-patch; charset=UTF-8; name="rb16695.patch" Content-Disposition: attachment; filename="rb16695.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FybV9tdmUuaCBiL2djYy9jb25maWcvYXJtL2Fy bV9tdmUuaAppbmRleCAxMjYyZDY2ODEyMTAyZTFkNDdkNTkxY2NjY2FlMGMyNDAwOGRhZDYwLi44 Nzc4MjE2MzA0Yjk4ZmUyNmMwYWE3ODY3YjZjZWE0YTU3MDNiOGQ3IDEwMDY0NAotLS0gYS9nY2Mv Y29uZmlnL2FybS9hcm1fbXZlLmgKKysrIGIvZ2NjL2NvbmZpZy9hcm0vYXJtX212ZS5oCkBAIC0x NjA1NSw3ICsxNjA1NSw3IEBAIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDMyeDRf dAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQogX19hcm1fdmFkY3FfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3Qg X19iLCB1bnNpZ25lZCAqIF9fY2FycnkpCiB7Ci0gIF9fYnVpbHRpbl9hcm1fc2V0X2Zwc2NyX256 Y3ZxYygoX19idWlsdGluX2FybV9nZXRfZnBzY3JfbnpjdnFjICgpICYgfjB4MjAwMDAwMDB1KSB8 ICgqX19jYXJyeSA8PCAyOSkpOworICBfX2J1aWx0aW5fYXJtX3NldF9mcHNjcl9uemN2cWMoKF9f YnVpbHRpbl9hcm1fZ2V0X2Zwc2NyX256Y3ZxYyAoKSAmIH4weDIwMDAwMDAwdSkgfCAoKCpfX2Nh cnJ5ICYgMHgxdSkgPDwgMjkpKTsKICAgaW50MzJ4NF90IF9fcmVzID0gX19idWlsdGluX212ZV92 YWRjcV9zdjRzaSAoX19hLCBfX2IpOwogICAqX19jYXJyeSA9IChfX2J1aWx0aW5fYXJtX2dldF9m cHNjcl9uemN2cWMgKCkgPj4gMjkpICYgMHgxdTsKICAgcmV0dXJuIF9fcmVzOwpAQCAtMTYwNjUs NyArMTYwNjUsNyBAQCBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1aW50MzJ4NF90CiBf X2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCiBfX2FybV92YWRjcV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9f YiwgdW5zaWduZWQgKiBfX2NhcnJ5KQogewotICBfX2J1aWx0aW5fYXJtX3NldF9mcHNjcl9uemN2 cWMoKF9fYnVpbHRpbl9hcm1fZ2V0X2Zwc2NyX256Y3ZxYyAoKSAmIH4weDIwMDAwMDAwdSkgfCAo Kl9fY2FycnkgPDwgMjkpKTsKKyAgX19idWlsdGluX2FybV9zZXRfZnBzY3JfbnpjdnFjKChfX2J1 aWx0aW5fYXJtX2dldF9mcHNjcl9uemN2cWMgKCkgJiB+MHgyMDAwMDAwMHUpIHwgKCgqX19jYXJy eSAmIDB4MXUpIDw8IDI5KSk7CiAgIHVpbnQzMng0X3QgX19yZXMgPSBfX2J1aWx0aW5fbXZlX3Zh ZGNxX3V2NHNpIChfX2EsIF9fYik7CiAgICpfX2NhcnJ5ID0gKF9fYnVpbHRpbl9hcm1fZ2V0X2Zw c2NyX256Y3ZxYyAoKSA+PiAyOSkgJiAweDF1OwogICByZXR1cm4gX19yZXM7CkBAIC0xNjA3NSw3 ICsxNjA3NSw3IEBAIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDMyeDRfdAogX19h dHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQogX19hcm1fdmFkY3FfbV9zMzIgKGludDMyeDRfdCBfX2luYWN0aXZlLCBpbnQzMng0 X3QgX19hLCBpbnQzMng0X3QgX19iLCB1bnNpZ25lZCAqIF9fY2FycnksIG12ZV9wcmVkMTZfdCBf X3ApCiB7Ci0gIF9fYnVpbHRpbl9hcm1fc2V0X2Zwc2NyX256Y3ZxYygoX19idWlsdGluX2FybV9n ZXRfZnBzY3JfbnpjdnFjICgpICYgfjB4MjAwMDAwMDB1KSB8ICgqX19jYXJyeSA8PCAyOSkpOwor ICBfX2J1aWx0aW5fYXJtX3NldF9mcHNjcl9uemN2cWMoKF9fYnVpbHRpbl9hcm1fZ2V0X2Zwc2Ny X256Y3ZxYyAoKSAmIH4weDIwMDAwMDAwdSkgfCAoKCpfX2NhcnJ5ICYgMHgxdSkgPDwgMjkpKTsK ICAgaW50MzJ4NF90IF9fcmVzID0gX19idWlsdGluX212ZV92YWRjcV9tX3N2NHNpIChfX2luYWN0 aXZlLCBfX2EsIF9fYiwgX19wKTsKICAgKl9fY2FycnkgPSAoX19idWlsdGluX2FybV9nZXRfZnBz Y3JfbnpjdnFjICgpID4+IDI5KSAmIDB4MXU7CiAgIHJldHVybiBfX3JlczsKQEAgLTE2MDg1LDcg KzE2MDg1LDcgQEAgX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDMyeDRfdAogX19h dHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQogX19hcm1fdmFkY3FfbV91MzIgKHVpbnQzMng0X3QgX19pbmFjdGl2ZSwgdWludDMy eDRfdCBfX2EsIHVpbnQzMng0X3QgX19iLCB1bnNpZ25lZCAqIF9fY2FycnksIG12ZV9wcmVkMTZf dCBfX3ApCiB7Ci0gIF9fYnVpbHRpbl9hcm1fc2V0X2Zwc2NyX256Y3ZxYygoX19idWlsdGluX2Fy bV9nZXRfZnBzY3JfbnpjdnFjICgpICYgfjB4MjAwMDAwMDB1KSB8ICgqX19jYXJyeSA8PCAyOSkp OworICBfX2J1aWx0aW5fYXJtX3NldF9mcHNjcl9uemN2cWMoKF9fYnVpbHRpbl9hcm1fZ2V0X2Zw c2NyX256Y3ZxYyAoKSAmIH4weDIwMDAwMDAwdSkgfCAoKCpfX2NhcnJ5ICYgMHgxdSkgPDwgMjkp KTsKICAgdWludDMyeDRfdCBfX3JlcyA9ICBfX2J1aWx0aW5fbXZlX3ZhZGNxX21fdXY0c2kgKF9f aW5hY3RpdmUsIF9fYSwgX19iLCBfX3ApOwogICAqX19jYXJyeSA9IChfX2J1aWx0aW5fYXJtX2dl dF9mcHNjcl9uemN2cWMgKCkgPj4gMjkpICYgMHgxdTsKICAgcmV0dXJuIF9fcmVzOwpAQCAtMTYx MzEsNyArMTYxMzEsNyBAQCBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBpbnQzMng0X3QK IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0 aWZpY2lhbF9fKSkKIF9fYXJtX3ZzYmNxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9f YiwgdW5zaWduZWQgKiBfX2NhcnJ5KQogewotICBfX2J1aWx0aW5fYXJtX3NldF9mcHNjcl9uemN2 cWMoKF9fYnVpbHRpbl9hcm1fZ2V0X2Zwc2NyX256Y3ZxYyAoKSAmIH4weDIwMDAwMDAwdSkgfCAo Kl9fY2FycnkgPDwgMjkpKTsKKyAgX19idWlsdGluX2FybV9zZXRfZnBzY3JfbnpjdnFjKChfX2J1 aWx0aW5fYXJtX2dldF9mcHNjcl9uemN2cWMgKCkgJiB+MHgyMDAwMDAwMHUpIHwgKCgqX19jYXJy eSAmIDB4MXUpIDw8IDI5KSk7CiAgIGludDMyeDRfdCBfX3JlcyA9IF9fYnVpbHRpbl9tdmVfdnNi Y3Ffc3Y0c2kgKF9fYSwgX19iKTsKICAgKl9fY2FycnkgPSAoX19idWlsdGluX2FybV9nZXRfZnBz Y3JfbnpjdnFjICgpID4+IDI5KSAmIDB4MXU7CiAgIHJldHVybiBfX3JlczsKQEAgLTE2MTQxLDcg KzE2MTQxLDcgQEAgX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDMyeDRfdAogX19h dHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQogX19hcm1fdnNiY3FfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2Is IHVuc2lnbmVkICogX19jYXJyeSkKIHsKLSAgX19idWlsdGluX2FybV9zZXRfZnBzY3JfbnpjdnFj KChfX2J1aWx0aW5fYXJtX2dldF9mcHNjcl9uemN2cWMgKCkgJiB+MHgyMDAwMDAwMHUpIHwgKCpf X2NhcnJ5IDw8IDI5KSk7CisgIF9fYnVpbHRpbl9hcm1fc2V0X2Zwc2NyX256Y3ZxYygoX19idWls dGluX2FybV9nZXRfZnBzY3JfbnpjdnFjICgpICYgfjB4MjAwMDAwMDB1KSB8ICgoKl9fY2Fycnkg JiAweDF1KSA8PCAyOSkpOwogICB1aW50MzJ4NF90IF9fcmVzID0gIF9fYnVpbHRpbl9tdmVfdnNi Y3FfdXY0c2kgKF9fYSwgX19iKTsKICAgKl9fY2FycnkgPSAoX19idWlsdGluX2FybV9nZXRfZnBz Y3JfbnpjdnFjICgpID4+IDI5KSAmIDB4MXU7CiAgIHJldHVybiBfX3JlczsKQEAgLTE2MTUxLDcg KzE2MTUxLDcgQEAgX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgaW50MzJ4NF90CiBfX2F0 dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCiBfX2FybV92c2JjcV9tX3MzMiAoaW50MzJ4NF90IF9faW5hY3RpdmUsIGludDMyeDRf dCBfX2EsIGludDMyeDRfdCBfX2IsIHVuc2lnbmVkICogX19jYXJyeSwgbXZlX3ByZWQxNl90IF9f cCkKIHsKLSAgX19idWlsdGluX2FybV9zZXRfZnBzY3JfbnpjdnFjKChfX2J1aWx0aW5fYXJtX2dl dF9mcHNjcl9uemN2cWMgKCkgJiB+MHgyMDAwMDAwMHUpIHwgKCpfX2NhcnJ5IDw8IDI5KSk7Cisg IF9fYnVpbHRpbl9hcm1fc2V0X2Zwc2NyX256Y3ZxYygoX19idWlsdGluX2FybV9nZXRfZnBzY3Jf bnpjdnFjICgpICYgfjB4MjAwMDAwMDB1KSB8ICgoKl9fY2FycnkgJiAweDF1KSA8PCAyOSkpOwog ICBpbnQzMng0X3QgX19yZXMgPSBfX2J1aWx0aW5fbXZlX3ZzYmNxX21fc3Y0c2kgKF9faW5hY3Rp dmUsIF9fYSwgX19iLCBfX3ApOwogICAqX19jYXJyeSA9IChfX2J1aWx0aW5fYXJtX2dldF9mcHNj cl9uemN2cWMgKCkgPj4gMjkpICYgMHgxdTsKICAgcmV0dXJuIF9fcmVzOwpAQCAtMTYxNjEsNyAr MTYxNjEsNyBAQCBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1aW50MzJ4NF90CiBfX2F0 dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCiBfX2FybV92c2JjcV9tX3UzMiAodWludDMyeDRfdCBfX2luYWN0aXZlLCB1aW50MzJ4 NF90IF9fYSwgdWludDMyeDRfdCBfX2IsIHVuc2lnbmVkICogX19jYXJyeSwgbXZlX3ByZWQxNl90 IF9fcCkKIHsKLSAgX19idWlsdGluX2FybV9zZXRfZnBzY3JfbnpjdnFjKChfX2J1aWx0aW5fYXJt X2dldF9mcHNjcl9uemN2cWMgKCkgJiB+MHgyMDAwMDAwMHUpIHwgKCpfX2NhcnJ5IDw8IDI5KSk7 CisgIF9fYnVpbHRpbl9hcm1fc2V0X2Zwc2NyX256Y3ZxYygoX19idWlsdGluX2FybV9nZXRfZnBz Y3JfbnpjdnFjICgpICYgfjB4MjAwMDAwMDB1KSB8ICgoKl9fY2FycnkgJiAweDF1KSA8PCAyOSkp OwogICB1aW50MzJ4NF90IF9fcmVzID0gX19idWlsdGluX212ZV92c2JjcV9tX3V2NHNpIChfX2lu YWN0aXZlLCBfX2EsIF9fYiwgX19wKTsKICAgKl9fY2FycnkgPSAoX19idWlsdGluX2FybV9nZXRf ZnBzY3JfbnpjdnFjICgpID4+IDI5KSAmIDB4MXU7CiAgIHJldHVybiBfX3JlczsKZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbXZlL212ZV92YWRjcV92c2JjcV9mcHNj cl9vdmVyd3JpdGUuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbXZlL212ZV92YWRj cV92c2JjcV9mcHNjcl9vdmVyd3JpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YmFiNjg0MDQ3ZjUyN2FiODgx MGQ2MzcyYjVkNDFjMzBiNjAxZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2FybS9tdmUvbXZlX3ZhZGNxX3ZzYmNxX2Zwc2NyX292ZXJ3cml0ZS5jCkBAIC0w LDAgKzEsNjcgQEAKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3Rp dmUtdGFyZ2V0IGFybV9tdmVfaHcgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIiIH0gKi8KKy8q IHsgZGctYWRkLW9wdGlvbnMgYXJtX3Y4XzFtX212ZSB9ICovCisKKyNpbmNsdWRlIDxhcm1fbXZl Lmg+CisKK3ZvbGF0aWxlIGludDMyeDRfdCBjMTsKK3ZvbGF0aWxlIHVpbnQzMng0X3QgYzI7Citp bnQgKmNhcnJ5OworCitpbnQKK21haW4gKCkKK3sKKyAgaW50MzJ4NF90IGExID0gdmNyZWF0ZXFf czMyICgwLCAwKTsKKyAgaW50MzJ4NF90IGIxID0gdmNyZWF0ZXFfczMyICgwLCAwKTsKKyAgaW50 MzJ4NF90IGluYWN0aXZlMSA9IHZjcmVhdGVxX3MzMiAoMCwgMCk7CisKKyAgdWludDMyeDRfdCBh MiA9IHZjcmVhdGVxX3UzMiAoMCwgMCk7CisgIHVpbnQzMng0X3QgYjIgPSB2Y3JlYXRlcV91MzIg KDAsIDApOworICB1aW50MzJ4NF90IGluYWN0aXZlMiA9IHZjcmVhdGVxX3UzMiAoMCwgMCk7CisK KyAgbXZlX3ByZWQxNl90IHAgPSAweEZGRkY7CisgICgqY2FycnkpID0gMHhGRkZGRkZGRjsKKwor ICBfX2J1aWx0aW5fYXJtX3NldF9mcHNjcl9uemN2cWMgKDApOworICBjMSA9IHZhZGNxIChhMSwg YjEsIGNhcnJ5KTsKKyAgaWYgKF9fYnVpbHRpbl9hcm1fZ2V0X2Zwc2NyX256Y3ZxYyAoKSkKKyAg ICBfX2J1aWx0aW5fYWJvcnQgKCk7CisKKyAgX19idWlsdGluX2FybV9zZXRfZnBzY3JfbnpjdnFj ICgwKTsKKyAgYzIgPSB2YWRjcSAoYTIsIGIyLCBjYXJyeSk7CisgIGlmIChfX2J1aWx0aW5fYXJt X2dldF9mcHNjcl9uemN2cWMgKCkpCisgICAgX19idWlsdGluX2Fib3J0ICgpOworCisgIF9fYnVp bHRpbl9hcm1fc2V0X2Zwc2NyX256Y3ZxYyAoMCk7CisgIGMxID0gdnNiY3EgKGExLCBiMSwgY2Fy cnkpOworICBpZiAoX19idWlsdGluX2FybV9nZXRfZnBzY3JfbnpjdnFjICgpKQorICAgIF9fYnVp bHRpbl9hYm9ydCAoKTsKKworICBfX2J1aWx0aW5fYXJtX3NldF9mcHNjcl9uemN2cWMgKDApOwor ICBjMiA9IHZzYmNxIChhMiwgYjIsIGNhcnJ5KTsKKyAgaWYgKF9fYnVpbHRpbl9hcm1fZ2V0X2Zw c2NyX256Y3ZxYyAoKSkKKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisKKyAgX19idWlsdGluX2Fy bV9zZXRfZnBzY3JfbnpjdnFjICgwKTsKKyAgYzEgPSB2YWRjcV9tIChpbmFjdGl2ZTEsIGExLCBi MSwgY2FycnksIHApOworICBpZiAoX19idWlsdGluX2FybV9nZXRfZnBzY3JfbnpjdnFjICgpKQor ICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKworICBfX2J1aWx0aW5fYXJtX3NldF9mcHNjcl9uemN2 cWMgKDApOworICBjMiA9IHZhZGNxX20gKGluYWN0aXZlMiwgYTIsIGIyLCBjYXJyeSwgcCk7Cisg IGlmIChfX2J1aWx0aW5fYXJtX2dldF9mcHNjcl9uemN2cWMgKCkpCisgICAgX19idWlsdGluX2Fi b3J0ICgpOworCisgIF9fYnVpbHRpbl9hcm1fc2V0X2Zwc2NyX256Y3ZxYyAoMCk7CisgIGMxID0g dnNiY3FfbSAoaW5hY3RpdmUxLCBhMSwgYjEsIGNhcnJ5LCBwKTsKKyAgaWYgKF9fYnVpbHRpbl9h cm1fZ2V0X2Zwc2NyX256Y3ZxYyAoKSkKKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisKKyAgX19i dWlsdGluX2FybV9zZXRfZnBzY3JfbnpjdnFjICgwKTsKKyAgYzIgPSB2c2JjcV9tIChpbmFjdGl2 ZTIsIGEyLCBiMiwgY2FycnksIHApOworICBpZiAoX19idWlsdGluX2FybV9nZXRfZnBzY3Jfbnpj dnFjICgpKQorICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKworICByZXR1cm4gMDsKK30K --------------6KBHaBnwU5nfa0k1A2rUmAyt--