From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 120734 invoked by alias); 26 Jan 2016 15:18:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 119735 invoked by uid 89); 26 Jan 2016 15:18:07 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.6 required=5.0 tests=AWL,BAYES_50,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 spammy=4157, ii, 415,7, rt X-HELO: mail-qg0-f53.google.com Received: from mail-qg0-f53.google.com (HELO mail-qg0-f53.google.com) (209.85.192.53) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 26 Jan 2016 15:18:03 +0000 Received: by mail-qg0-f53.google.com with SMTP id b35so140524912qge.0 for ; Tue, 26 Jan 2016 07:18:02 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=6o9/rGtu5xe3Utg5ERTU1iST2/LaYfwiIRxduGRv1W8=; b=LD/KMu69ixZn2dop4Ofic7V6s5kZ6bhwS7qXtjJOvOuURVEHAlP3YbUkXKaA0LbVhm LrDr1RdzsNuV2FvzB6OoZUDoQKo5YDaIBQEzs62JNrZDrec1IiZNAnK4ZnVmKNZPLG0b cPKjzk3kip025TBUFarEHys3IQ+6W7YsMHPd5sXL/RwfGp9zFNUdDg53TprmQk2VdUDL SGiAVmHqRnsTs3noOCxznHBQEbDZcYTT+X9EPIp+GvveVt3uF6R6oGvTUYU3io4Jby+z mi6vqqfVyX9fNWhjR0QBDe+wfxObu8bcyAdeJBZbbvlA1Ky8xvTxB+7Ytb+ey6YLH//d YKlg== X-Gm-Message-State: AG10YOTQq7B6+hgj3anR+qooNFpIGPwcytm6kQ7oEyS0w/u2K9HO6Yu2WVJ6pXJs23hsukZ2LRDuwBPnffy3WvF8 MIME-Version: 1.0 X-Received: by 10.140.171.5 with SMTP id r5mr31182001qhr.51.1453821480532; Tue, 26 Jan 2016 07:18:00 -0800 (PST) Received: by 10.140.90.84 with HTTP; Tue, 26 Jan 2016 07:18:00 -0800 (PST) In-Reply-To: <56A77289.30308@foss.arm.com> References: <1453143711-21320-1-git-send-email-alan.lawrence@arm.com> <569E4D77.6000809@foss.arm.com> <56A77289.30308@foss.arm.com> Date: Tue, 26 Jan 2016 15:18:00 -0000 Message-ID: Subject: Re: [PATCH] ARM PR68620 (ICE with FP16 on armeb) From: Christophe Lyon To: Kyrill Tkachov Cc: Alan Lawrence , "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary=001a1139b6f4ea5b9a052a3e30f5 X-IsSubscribed: yes X-SW-Source: 2016-01/txt/msg01991.txt.bz2 --001a1139b6f4ea5b9a052a3e30f5 Content-Type: text/plain; charset=UTF-8 Content-length: 4181 On 26 January 2016 at 14:20, Kyrill Tkachov wrote: > Hi Christophe, > > On 20/01/16 21:10, Christophe Lyon wrote: >> >> On 19 January 2016 at 15:51, Alan Lawrence >> wrote: >>> >>> On 19/01/16 11:15, Christophe Lyon wrote: >>> >>>>>> For neon_vdupn, I chose to implement neon_vdup_nv4hf and >>>>>> neon_vdup_nv8hf instead of updating the VX iterator because I thought >>>>>> it was not desirable to impact neon_vrev32. >>>>> >>>>> >>>>> Well, the same instruction will suffice for vrev32'ing vectors of HF >>>>> just >>>>> as >>>>> well as vectors of HI, so I think I'd argue that's harmless enough. To >>>>> gain the >>>>> benefit, we'd need to update arm_evpc_neon_vrev with a few new cases, >>>>> though. >>>>> >>>> Since this is more intrusive, I'd rather leave that part for later. OK? >>> >>> >>> Sure. >>> >>>>>> +#ifdef __ARM_BIG_ENDIAN >>>>>> + /* Here, 3 is (4-1) where 4 is the number of lanes. This is also >>>>>> the >>>>>> + right value for vectors with 8 lanes. */ >>>>>> +#define __arm_lane(__vec, __idx) (__idx ^ 3) >>>>>> +#else >>>>>> +#define __arm_lane(__vec, __idx) __idx >>>>>> +#endif >>>>>> + >>>>> >>>>> >>>>> Looks right, but sounds... my concern here is that I'm hoping at some >>>>> point we >>>>> will move the *other* vget/set_lane intrinsics to use GCC vector >>>>> extensions >>>>> too. At which time (unlike __aarch64_lane which can be used everywhere) >>>>> this >>>>> will be the wrong formula. Can we name (and/or comment) it to avoid >>>>> misleading >>>>> anyone? The key characteristic seems to be that it is for vectors of >>>>> 16-bit >>>>> elements only. >>>>> >>>> I'm not to follow, here. Looking at the patterns for >>>> neon_vget_lane_*internal in neon.md, >>>> I can see 2 flavours: one for VD, one for VQ2. The latter uses >>>> "halfelts". >>>> >>>> Do you prefer that I create 2 macros (say __arm_lane and __arm_laneq), >>>> that would be similar to the aarch64 ones (by computing the number of >>>> lanes of the input vector), but the "q" one would use half the total >>>> number of lanes instead? >>> >>> >>> That works for me! Sthg like: >>> >>> #define __arm_lane(__vec, __idx) NUM_LANES(__vec) - __idx >>> #define __arm_laneq(__vec, __idx) (__idx & (NUM_LANES(__vec)/2)) + >>> (NUM_LANES(__vec)/2 - __idx) >>> //or similarly >>> #define __arm_laneq(__vec, __idx) (__idx ^ (NUM_LANES(__vec)/2 - 1)) >>> >>> Alternatively I'd been thinking >>> >>> #define __arm_lane_32xN(__idx) __idx ^ 1 >>> #define __arm_lane_16xN(__idx) __idx ^ 3 >>> #define __arm_lane_8xN(__idx) __idx ^ 7 >>> >>> Bear in mind PR64893 that we had on AArch64 :-( >>> >> Here is a new version, based on the comments above. >> I've also removed the addition of arm_fp_ok effective target since I >> added that in my other testsuite patch. >> >> OK now? >> >> Thanks, >> >> Christophe >> > > diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c > index 3588b83..b1f408c 100644 > --- a/gcc/config/arm/arm.c > +++ b/gcc/config/arm/arm.c > @@ -12370,6 +12370,10 @@ neon_valid_immediate (rtx op, machine_mode mode, > int inverse, > if (!vfp3_const_double_rtx (el0) && el0 != CONST0_RTX (GET_MODE > (el0))) > return -1; > + /* FP16 vectors cannot be represented. */ > + if (innersize == 2) > + return -1; > + > r0 = CONST_DOUBLE_REAL_VALUE (el0); > > > I think it'd be clearer to write "if (GET_MODE_INNER (mode) == HFmode)" > > +(define_expand "movv4hf" > + [(set (match_operand:V4HF 0 "s_register_operand") > + (match_operand:V4HF 1 "s_register_operand"))] > + "TARGET_NEON && TARGET_FP16" > +{ > + if (can_create_pseudo_p ()) > + { > + if (!REG_P (operands[0])) > + operands[1] = force_reg (V4HFmode, operands[1]); > + } > +}) > > Can you please add a comment saying why you need the force_reg here? > IIRC it's because of CANNOT_CHANGE_MODE_CLASS on big-endian that causes an > ICE during expand with subregs. > > I've tried this patch out and it does indeed fix the ICE on armeb. > So ok for trunk with the changes above. > Thanks, > Kyrill > > OK thanks, here is what I have committed (r232832). Christophe. --001a1139b6f4ea5b9a052a3e30f5 Content-Type: text/plain; charset=US-ASCII; name="pr68620.final.txt" Content-Disposition: attachment; filename="pr68620.final.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ijvjrngp0 Content-length: 13583 SW5kZXg6IGdjYy9jb25maWcvYXJtL2FybS5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGdjYy9jb25maWcvYXJtL2FybS5jCShyZXZpc2lvbiAyMzI4 MzEpCisrKyBnY2MvY29uZmlnL2FybS9hcm0uYwkod29ya2luZyBjb3B5KQpA QCAtMTIzODEsNiArMTIzODEsMTAgQEAKICAgICAgIGlmICghdmZwM19jb25z dF9kb3VibGVfcnR4IChlbDApICYmIGVsMCAhPSBDT05TVDBfUlRYIChHRVRf TU9ERSAoZWwwKSkpCiAgICAgICAgIHJldHVybiAtMTsKIAorICAgICAgLyog RlAxNiB2ZWN0b3JzIGNhbm5vdCBiZSByZXByZXNlbnRlZC4gICovCisgICAg ICBpZiAoR0VUX01PREVfSU5ORVIgKG1vZGUpID09IEhGbW9kZSkKKwlyZXR1 cm4gLTE7CisKICAgICAgIHIwID0gQ09OU1RfRE9VQkxFX1JFQUxfVkFMVUUg KGVsMCk7CiAKICAgICAgIGZvciAoaSA9IDE7IGkgPCBuX2VsdHM7IGkrKykK SW5kZXg6IGdjYy9jb25maWcvYXJtL2FybV9uZW9uLmgKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gZ2NjL2NvbmZpZy9hcm0vYXJtX25lb24uaAkocmV2 aXNpb24gMjMyODMxKQorKysgZ2NjL2NvbmZpZy9hcm0vYXJtX25lb24uaAko d29ya2luZyBjb3B5KQpAQCAtNTMwMiwxNiArNTMwMiwyOCBAQAogICAgd2Vy ZSBtYXJrZWQgYWx3YXlzLWlubGluZSBzbyB0aGVyZSB3ZXJlIG5vIGNhbGwg c2l0ZXMsIHRoZSBkZWNsYXJhdGlvbgogICAgd291bGQgbm9uZXRoZWxlc3Mg cmFpc2UgYW4gZXJyb3IuICBIZW5jZSwgd2UgbXVzdCB1c2UgYSBtYWNybyBp bnN0ZWFkLiAgKi8KIAotI2RlZmluZSB2Z2V0X2xhbmVfZjE2KF9fdiwgX19p ZHgpCQlcCi0gIF9fZXh0ZW5zaW9uX18JCQkJCVwKLSAgICAoewkJCQkJCVwK LSAgICAgIGZsb2F0MTZ4NF90IF9fdmVjID0gKF9fdik7CQlcCi0gICAgICBf X2J1aWx0aW5fYXJtX2xhbmVfY2hlY2sgKDQsIF9faWR4KTsJXAotICAgICAg ZmxvYXQxNl90IF9fcmVzID0gX192ZWNbX19pZHhdOwkJXAotICAgICAgX19y ZXM7CQkJCQlcCi0gICAgfSkKKyAgLyogRm9yIGJpZy1lbmRpYW4sIEdDQydz IHZlY3RvciBpbmRpY2VzIGFyZSByZXZlcnNlZCB3aXRoaW4gZWFjaCA2NAor ICAgICBiaXRzIGNvbXBhcmVkIHRvIHRoZSBhcmNoaXRlY3R1cmFsIGxhbmUg aW5kaWNlcyB1c2VkIGJ5IE5lb24KKyAgICAgaW50cmluc2ljcy4gICovCisj aWZkZWYgX19BUk1fQklHX0VORElBTgorI2RlZmluZSBfX0FSTV9OVU1fTEFO RVMoX192KSAoc2l6ZW9mIChfX3YpIC8gc2l6ZW9mIChfX3ZbMF0pKQorI2Rl ZmluZSBfX2FybV9sYW5lKF9fdmVjLCBfX2lkeCkgKF9faWR4IF4gKF9fQVJN X05VTV9MQU5FUyhfX3ZlYykgLSAxKSkKKyNkZWZpbmUgX19hcm1fbGFuZXEo X192ZWMsIF9faWR4KSAoX19pZHggXiAoX19BUk1fTlVNX0xBTkVTKF9fdmVj KS8yIC0gMSkpCisjZWxzZQorI2RlZmluZSBfX2FybV9sYW5lKF9fdmVjLCBf X2lkeCkgX19pZHgKKyNkZWZpbmUgX19hcm1fbGFuZXEoX192ZWMsIF9faWR4 KSBfX2lkeAogI2VuZGlmCiAKKyNkZWZpbmUgdmdldF9sYW5lX2YxNihfX3Ys IF9faWR4KQkJCVwKKyAgX19leHRlbnNpb25fXwkJCQkJCVwKKyAgKHsJCQkJ CQkJXAorICAgIGZsb2F0MTZ4NF90IF9fdmVjID0gKF9fdik7CQkJCVwKKyAg ICBfX2J1aWx0aW5fYXJtX2xhbmVfY2hlY2sgKDQsIF9faWR4KTsJCVwKKyAg ICBmbG9hdDE2X3QgX19yZXMgPSBfX3ZlY1tfX2FybV9sYW5lKF9fdmVjLCBf X2lkeCldOwlcCisgICAgX19yZXM7CQkJCQkJXAorICB9KQorI2VuZGlmCisK IF9fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJfdCBfX2F0 dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQogdmdldF9sYW5lX2Yz MiAoZmxvYXQzMngyX3QgX19hLCBjb25zdCBpbnQgX19iKQogewpAQCAtNTM3 OSwxNCArNTM5MSwxNCBAQAogfQogCiAjaWYgZGVmaW5lZCAoX19BUk1fRlAx Nl9GT1JNQVRfSUVFRSkgfHwgZGVmaW5lZCAoX19BUk1fRlAxNl9GT1JNQVRf QUxURVJOQVRJVkUpCi0jZGVmaW5lIHZnZXRxX2xhbmVfZjE2KF9fdiwgX19p ZHgpCQlcCi0gIF9fZXh0ZW5zaW9uX18JCQkJCVwKLSAgICAoewkJCQkJCVwK LSAgICAgIGZsb2F0MTZ4OF90IF9fdmVjID0gKF9fdik7CQlcCi0gICAgICBf X2J1aWx0aW5fYXJtX2xhbmVfY2hlY2sgKDgsIF9faWR4KTsJXAotICAgICAg ZmxvYXQxNl90IF9fcmVzID0gX192ZWNbX19pZHhdOwkJXAotICAgICAgX19y ZXM7CQkJCQlcCi0gICAgfSkKKyNkZWZpbmUgdmdldHFfbGFuZV9mMTYoX192 LCBfX2lkeCkJCQlcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQlcCisgICh7CQkJ CQkJCVwKKyAgICBmbG9hdDE2eDhfdCBfX3ZlYyA9IChfX3YpOwkJCQlcCisg ICAgX19idWlsdGluX2FybV9sYW5lX2NoZWNrICg4LCBfX2lkeCk7CQlcCisg ICAgZmxvYXQxNl90IF9fcmVzID0gX192ZWNbX19hcm1fbGFuZXEoX192ZWMs IF9faWR4KV07CVwKKyAgICBfX3JlczsJCQkJCQlcCisgIH0pCiAjZW5kaWYK IAogX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMl90IF9f YXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCkBAIC01NDU4LDEz ICs1NDcwLDEzIEBACiAjaWYgZGVmaW5lZCAoX19BUk1fRlAxNl9GT1JNQVRf SUVFRSkgfHwgZGVmaW5lZCAoX19BUk1fRlAxNl9GT1JNQVRfQUxURVJOQVRJ VkUpCiAjZGVmaW5lIHZzZXRfbGFuZV9mMTYoX19lLCBfX3YsIF9faWR4KQkJ XAogICBfX2V4dGVuc2lvbl9fCQkJCQlcCi0gICAgKHsJCQkJCQlcCi0gICAg ICBmbG9hdDE2X3QgX19lbGVtID0gKF9fZSk7CQkJXAotICAgICAgZmxvYXQx Nng0X3QgX192ZWMgPSAoX192KTsJCVwKLSAgICAgIF9fYnVpbHRpbl9hcm1f bGFuZV9jaGVjayAoNCwgX19pZHgpOwlcCi0gICAgICBfX3ZlY1tfX2lkeF0g PSBfX2VsZW07CQkJXAotICAgICAgX192ZWM7CQkJCQlcCi0gICAgfSkKKyAg KHsJCQkJCQlcCisgICAgZmxvYXQxNl90IF9fZWxlbSA9IChfX2UpOwkJCVwK KyAgICBmbG9hdDE2eDRfdCBfX3ZlYyA9IChfX3YpOwkJCVwKKyAgICBfX2J1 aWx0aW5fYXJtX2xhbmVfY2hlY2sgKDQsIF9faWR4KTsJXAorICAgIF9fdmVj W19fYXJtX2xhbmUgKF9fdmVjLCBfX2lkeCldID0gX19lbGVtOwlcCisgICAg X192ZWM7CQkJCQlcCisgIH0pCiAjZW5kaWYKIAogX19leHRlbnNpb25fXyBz dGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9f YWx3YXlzX2lubGluZV9fKSkKQEAgLTU1MzYsMTMgKzU1NDgsMTMgQEAKICNp ZiBkZWZpbmVkIChfX0FSTV9GUDE2X0ZPUk1BVF9JRUVFKSB8fCBkZWZpbmVk IChfX0FSTV9GUDE2X0ZPUk1BVF9BTFRFUk5BVElWRSkKICNkZWZpbmUgdnNl dHFfbGFuZV9mMTYoX19lLCBfX3YsIF9faWR4KQkJXAogICBfX2V4dGVuc2lv bl9fCQkJCQlcCi0gICAgKHsJCQkJCQlcCi0gICAgICBmbG9hdDE2X3QgX19l bGVtID0gKF9fZSk7CQkJXAotICAgICAgZmxvYXQxNng4X3QgX192ZWMgPSAo X192KTsJCVwKLSAgICAgIF9fYnVpbHRpbl9hcm1fbGFuZV9jaGVjayAoOCwg X19pZHgpOwlcCi0gICAgICBfX3ZlY1tfX2lkeF0gPSBfX2VsZW07CQkJXAot ICAgICAgX192ZWM7CQkJCQlcCi0gICAgfSkKKyAgKHsJCQkJCQlcCisgICAg ZmxvYXQxNl90IF9fZWxlbSA9IChfX2UpOwkJCVwKKyAgICBmbG9hdDE2eDhf dCBfX3ZlYyA9IChfX3YpOwkJCVwKKyAgICBfX2J1aWx0aW5fYXJtX2xhbmVf Y2hlY2sgKDgsIF9faWR4KTsJXAorICAgIF9fdmVjW19fYXJtX2xhbmVxIChf X3ZlYywgX19pZHgpXSA9IF9fZWxlbTsJXAorICAgIF9fdmVjOwkJCQkJXAor ICB9KQogI2VuZGlmCiAKIF9fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5l IGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVf XykpCkluZGV4OiBnY2MvY29uZmlnL2FybS9pdGVyYXRvcnMubWQKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjL2NvbmZpZy9hcm0vaXRlcmF0b3Jz Lm1kCShyZXZpc2lvbiAyMzI4MzEpCisrKyBnY2MvY29uZmlnL2FybS9pdGVy YXRvcnMubWQJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAKIChk ZWZpbmVfbW9kZV9pdGVyYXRvciBWUUkgW1YxNlFJIFY4SEkgVjRTSV0pCiAK IDs7IFF1YWQtd2lkdGggdmVjdG9yIG1vZGVzLCB3aXRoIFRJbW9kZSBhZGRl ZCwgZm9yIG1vdmVzLgotKGRlZmluZV9tb2RlX2l0ZXJhdG9yIFZRWE1PViBb VjE2UUkgVjhISSBWNFNJIFY0U0YgVjJESSBUSV0pCisoZGVmaW5lX21vZGVf aXRlcmF0b3IgVlFYTU9WIFtWMTZRSSBWOEhJIFY4SEYgVjRTSSBWNFNGIFYy REkgVEldKQogCiA7OyBPcGFxdWUgc3RydWN0dXJlIHR5cGVzIHdpZGVyIHRo YW4gVEltb2RlLgogKGRlZmluZV9tb2RlX2l0ZXJhdG9yIFZTVFJVQ1QgW0VJ IE9JIENJIFhJXSkKQEAgLTExNCw3ICsxMTQsNyBAQAogKGRlZmluZV9tb2Rl X2l0ZXJhdG9yIFZOIFtWOEhJIFY0U0kgVjJESV0pCiAKIDs7IEFsbCBzdXBw b3J0ZWQgdmVjdG9yIG1vZGVzIChleGNlcHQgc2luZ2xldG9uIERJbW9kZSku Ci0oZGVmaW5lX21vZGVfaXRlcmF0b3IgVkRRIFtWOFFJIFYxNlFJIFY0SEkg VjhISSBWMlNJIFY0U0kgVjJTRiBWNFNGIFYyREldKQorKGRlZmluZV9tb2Rl X2l0ZXJhdG9yIFZEUSBbVjhRSSBWMTZRSSBWNEhJIFY4SEkgVjJTSSBWNFNJ IFY0SEYgVjhIRiBWMlNGIFY0U0YgVjJESV0pCiAKIDs7IEFsbCBzdXBwb3J0 ZWQgdmVjdG9yIG1vZGVzIChleGNlcHQgdGhvc2Ugd2l0aCA2NC1iaXQgaW50 ZWdlciBlbGVtZW50cykuCiAoZGVmaW5lX21vZGVfaXRlcmF0b3IgVkRRVyBb VjhRSSBWMTZRSSBWNEhJIFY4SEkgVjJTSSBWNFNJIFYyU0YgVjRTRl0pCkBA IC00MjgsNiArNDI4LDcgQEAKIDs7IFJlZ2lzdGVyIHdpZHRoIGZyb20gZWxl bWVudCBtb2RlCiAoZGVmaW5lX21vZGVfYXR0ciBWX3JlZyBbKFY4UUkgIlAi KSAoVjE2UUkgInEiKQogICAgICAgICAgICAgICAgICAgICAgICAgIChWNEhJ ICJQIikgKFY4SEkgICJxIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAo VjRIRiAiUCIpIChWOEhGICAicSIpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgKFYyU0kgIlAiKSAoVjRTSSAgInEiKQogICAgICAgICAgICAgICAgICAg ICAgICAgIChWMlNGICJQIikgKFY0U0YgICJxIikKICAgICAgICAgICAgICAg ICAgICAgICAgICAoREkgICAiUCIpIChWMkRJICAicSIpCkBAIC01NzYsNiAr NTc3LDcgQEAKIChkZWZpbmVfbW9kZV9hdHRyIElzX2Zsb2F0X21vZGUgWyhW OFFJICJmYWxzZSIpIChWMTZRSSAiZmFsc2UiKQogICAgICAgICAgICAgICAg ICAoVjRISSAiZmFsc2UiKSAoVjhISSAiZmFsc2UiKQogICAgICAgICAgICAg ICAgICAoVjJTSSAiZmFsc2UiKSAoVjRTSSAiZmFsc2UiKQorICAgICAgICAg ICAgICAgICAoVjRIRiAidHJ1ZSIpIChWOEhGICJ0cnVlIikKICAgICAgICAg ICAgICAgICAgKFYyU0YgInRydWUiKSAoVjRTRiAidHJ1ZSIpCiAgICAgICAg ICAgICAgICAgIChESSAiZmFsc2UiKSAoVjJESSAiZmFsc2UiKV0pCiAKSW5k ZXg6IGdjYy9jb25maWcvYXJtL25lb24ubWQKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZ2NjL2NvbmZpZy9hcm0vbmVvbi5tZAkocmV2aXNpb24gMjMy ODMxKQorKysgZ2NjL2NvbmZpZy9hcm0vbmVvbi5tZAkod29ya2luZyBjb3B5 KQpAQCAtMTM3LDYgKzEzNywzNiBAQAogICAgIH0KIH0pCiAKKyhkZWZpbmVf ZXhwYW5kICJtb3Z2NGhmIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWNEhG IDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIpCisJKG1hdGNoX29wZXJhbmQ6VjRI RiAxICJzX3JlZ2lzdGVyX29wZXJhbmQiKSldCisgICJUQVJHRVRfTkVPTiAm JiBUQVJHRVRfRlAxNiIKK3sKKyAgLyogV2UgbmVlZCB0byB1c2UgZm9yY2Vf cmVnIHRvIGF2b2lkIENBTk5PVF9DSEFOR0VfTU9ERV9DTEFTUworICAgICBj YXVzaW5nIGFuIElDRSBvbiBiaWctZW5kaWFuIGJlY2F1c2UgaXQgY2Fubm90 IGV4dHJhY3Qgc3VicmVncyBpbgorICAgICB0aGlzIGNhc2UuICAqLworICBp ZiAoY2FuX2NyZWF0ZV9wc2V1ZG9fcCAoKSkKKyAgICB7CisgICAgICBpZiAo IVJFR19QIChvcGVyYW5kc1swXSkpCisJb3BlcmFuZHNbMV0gPSBmb3JjZV9y ZWcgKFY0SEZtb2RlLCBvcGVyYW5kc1sxXSk7CisgICAgfQorfSkKKworKGRl ZmluZV9leHBhbmQgIm1vdnY4aGYiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5k OlY4SEYgMCAiIikKKwkobWF0Y2hfb3BlcmFuZDpWOEhGIDEgIiIpKV0KKyAg IlRBUkdFVF9ORU9OICYmIFRBUkdFVF9GUDE2IgoreyAKKyAgLyogV2UgbmVl ZCB0byB1c2UgZm9yY2VfcmVnIHRvIGF2b2lkIENBTk5PVF9DSEFOR0VfTU9E RV9DTEFTUworICAgICBjYXVzaW5nIGFuIElDRSBvbiBiaWctZW5kaWFuIGJl Y2F1c2UgaXQgY2Fubm90IGV4dHJhY3Qgc3VicmVncyBpbgorICAgICB0aGlz IGNhc2UuICAqLworICBpZiAoY2FuX2NyZWF0ZV9wc2V1ZG9fcCAoKSkKKyAg ICB7CisgICAgICBpZiAoIVJFR19QIChvcGVyYW5kc1swXSkpCisJb3BlcmFu ZHNbMV0gPSBmb3JjZV9yZWcgKFY4SEZtb2RlLCBvcGVyYW5kc1sxXSk7Cisg ICAgfQorfSkKKwogKGRlZmluZV9pbnNuICIqbmVvbl9tb3Y8bW9kZT4iCiAg IFsoc2V0IChtYXRjaF9vcGVyYW5kOlZTVFJVQ1QgMCAibm9uaW1tZWRpYXRl X29wZXJhbmQiCSI9dyxVdCx3IikKIAkobWF0Y2hfb3BlcmFuZDpWU1RSVUNU IDEgImdlbmVyYWxfb3BlcmFuZCIJIiB3LHcsIFV0IikpXQpAQCAtMjk5LDEx ICszMjksMTEgQEAKICAgWyhzZXRfYXR0ciAidHlwZSIgIm5lb25fbG9hZDFf MXJlZzxxPiIpXSkKIAogKGRlZmluZV9pbnNuICJ2ZWNfc2V0PG1vZGU+X2lu dGVybmFsIgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWRCAwICJzX3JlZ2lz dGVyX29wZXJhbmQiICI9dyx3IikKLSAgICAgICAgKHZlY19tZXJnZTpWRAot ICAgICAgICAgICh2ZWNfZHVwbGljYXRlOlZECisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOlZEX0xBTkUgMCAic19yZWdpc3Rlcl9vcGVyYW5kIiAiPXcsdyIp CisgICAgICAgICh2ZWNfbWVyZ2U6VkRfTEFORQorICAgICAgICAgICh2ZWNf ZHVwbGljYXRlOlZEX0xBTkUKICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5k OjxWX2VsZW0+IDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiVW0sciIpKQot ICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlZEIDMgInNfcmVnaXN0ZXJfb3Bl cmFuZCIgIjAsMCIpCisgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6VkRfTEFO RSAzICJzX3JlZ2lzdGVyX29wZXJhbmQiICIwLDAiKQogICAgICAgICAgICht YXRjaF9vcGVyYW5kOlNJIDIgImltbWVkaWF0ZV9vcGVyYW5kIiAiaSxpIikp KV0KICAgIlRBUkdFVF9ORU9OIgogewpAQCAtMzg1LDcgKzQxNSw3IEBACiAo ZGVmaW5lX2luc24gInZlY19leHRyYWN0PG1vZGU+IgogICBbKHNldCAobWF0 Y2hfb3BlcmFuZDo8Vl9lbGVtPiAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIg Ij1VbSxyIikKICAgICAgICAgKHZlY19zZWxlY3Q6PFZfZWxlbT4KLSAgICAg ICAgICAobWF0Y2hfb3BlcmFuZDpWRCAxICJzX3JlZ2lzdGVyX29wZXJhbmQi ICJ3LHciKQorICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlZEX0xBTkUgMSAi c19yZWdpc3Rlcl9vcGVyYW5kIiAidyx3IikKICAgICAgICAgICAocGFyYWxs ZWwgWyhtYXRjaF9vcGVyYW5kOlNJIDIgImltbWVkaWF0ZV9vcGVyYW5kIiAi aSxpIildKSkpXQogICAiVEFSR0VUX05FT04iCiB7CkBAIC0yODI5LDYgKzI4 NTksMjIgQEAKICAgWyhzZXRfYXR0ciAidHlwZSIgIm5lb25fZnJvbV9ncDxx PiIpXQogKQogCisoZGVmaW5lX2luc24gIm5lb25fdmR1cF9udjRoZiIKKyAg WyhzZXQgKG1hdGNoX29wZXJhbmQ6VjRIRiAwICJzX3JlZ2lzdGVyX29wZXJh bmQiICI9dyIpCisgICAgICAgICh2ZWNfZHVwbGljYXRlOlY0SEYgKG1hdGNo X29wZXJhbmQ6SEYgMSAic19yZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSldCisg ICJUQVJHRVRfTkVPTiIKKyAgInZkdXAuMTZcdCVQMCwgJTEiCisgIFsoc2V0 X2F0dHIgInR5cGUiICJuZW9uX2Zyb21fZ3AiKV0KKykKKworKGRlZmluZV9p bnNuICJuZW9uX3ZkdXBfbnY4aGYiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5k OlY4SEYgMCAic19yZWdpc3Rlcl9vcGVyYW5kIiAiPXciKQorICAgICAgICAo dmVjX2R1cGxpY2F0ZTpWOEhGIChtYXRjaF9vcGVyYW5kOkhGIDEgInNfcmVn aXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorICAiVEFSR0VUX05FT04iCisgICJ2 ZHVwLjE2XHQlcTAsICUxIgorICBbKHNldF9hdHRyICJ0eXBlIiAibmVvbl9m cm9tX2dwX3EiKV0KKykKKwogKGRlZmluZV9pbnNuICJuZW9uX3ZkdXBfbjxt b2RlPiIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjMyIDAgInNfcmVnaXN0 ZXJfb3BlcmFuZCIgIj13LHciKQogICAgICAgICAodmVjX2R1cGxpY2F0ZTpW MzIgKG1hdGNoX29wZXJhbmQ6PFZfZWxlbT4gMSAic19yZWdpc3Rlcl9vcGVy YW5kIiAicix0IikpKV0KQEAgLTQzNjEsOCArNDQwNyw4IEBACiApCiAKIChk ZWZpbmVfaW5zbiAibmVvbl92bGQxX2R1cDxtb2RlPiIKLSAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6VkQgMCAic19yZWdpc3Rlcl9vcGVyYW5kIiAiPXciKQot ICAgICAgICAodmVjX2R1cGxpY2F0ZTpWRCAobWF0Y2hfb3BlcmFuZDo8Vl9l bGVtPiAxICJuZW9uX3N0cnVjdF9vcGVyYW5kIiAiVW0iKSkpXQorICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpWRF9MQU5FIDAgInNfcmVnaXN0ZXJfb3BlcmFu ZCIgIj13IikKKyAgICAgICAgKHZlY19kdXBsaWNhdGU6VkRfTEFORSAobWF0 Y2hfb3BlcmFuZDo8Vl9lbGVtPiAxICJuZW9uX3N0cnVjdF9vcGVyYW5kIiAi VW0iKSkpXQogICAiVEFSR0VUX05FT04iCiAgICJ2bGQxLjxWX3N6X2VsZW0+ XHR7JVAwW119LCAlQTEiCiAgIFsoc2V0X2F0dHIgInR5cGUiICJuZW9uX2xv YWQxX2FsbF9sYW5lczxxPiIpXQpAQCAtNDM3OCw4ICs0NDI0LDggQEAKICkK IAogKGRlZmluZV9pbnNuICJuZW9uX3ZsZDFfZHVwPG1vZGU+IgotICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpWUSAwICJzX3JlZ2lzdGVyX29wZXJhbmQiICI9 dyIpCi0gICAgICAgICh2ZWNfZHVwbGljYXRlOlZRIChtYXRjaF9vcGVyYW5k OjxWX2VsZW0+IDEgIm5lb25fc3RydWN0X29wZXJhbmQiICJVbSIpKSldCisg IFsoc2V0IChtYXRjaF9vcGVyYW5kOlZRMiAwICJzX3JlZ2lzdGVyX29wZXJh bmQiICI9dyIpCisgICAgICAgICh2ZWNfZHVwbGljYXRlOlZRMiAobWF0Y2hf b3BlcmFuZDo8Vl9lbGVtPiAxICJuZW9uX3N0cnVjdF9vcGVyYW5kIiAiVW0i KSkpXQogICAiVEFSR0VUX05FT04iCiB7CiAgIHJldHVybiAidmxkMS48Vl9z el9lbGVtPlx0eyVlMFtdLCAlZjBbXX0sICVBMSI7CkluZGV4OiBnY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvYXJtL3ByNjg2MjAuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL3By Njg2MjAuYwkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9hcm0vcHI2ODYyMC5jCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs MTIgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCBhcm1fZnBfb2sgfSAqLworLyogeyBkZy1v cHRpb25zICItbWZwMTYtZm9ybWF0PWllZWUiIH0gKi8KKy8qIHsgZGctYWRk LW9wdGlvbnMgYXJtX2ZwIH0gKi8KKworI2luY2x1ZGUgImFybV9uZW9uLmgi CisKK2Zsb2F0MTZ4NF90IF9fYXR0cmlidXRlX18oKHRhcmdldCgiZnB1PW5l b24tZnAxNiIpKSkKK2ZvbyAoZmxvYXQzMng0X3QgYXJnKQoreworICAgIHJl dHVybiB2Y3Z0X2YxNl9mMzIgKGFyZyk7Cit9Cg== --001a1139b6f4ea5b9a052a3e30f5--