From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 44813 invoked by alias); 2 Aug 2019 08:59:56 -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 44804 invoked by uid 89); 2 Aug 2019 08:59:56 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-19.3 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.1 spammy=rotation, exploit X-HELO: mx0a-001b2d01.pphosted.com Received: from mx0a-001b2d01.pphosted.com (HELO mx0a-001b2d01.pphosted.com) (148.163.156.1) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 02 Aug 2019 08:59:54 +0000 Received: from pps.filterd (m0098396.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x728uXb6113429 for ; Fri, 2 Aug 2019 04:59:53 -0400 Received: from e06smtp01.uk.ibm.com (e06smtp01.uk.ibm.com [195.75.94.97]) by mx0a-001b2d01.pphosted.com with ESMTP id 2u4gfmc572-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 02 Aug 2019 04:59:52 -0400 Received: from localhost by e06smtp01.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 2 Aug 2019 09:59:50 +0100 Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198) by e06smtp01.uk.ibm.com (192.168.101.131) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Fri, 2 Aug 2019 09:59:48 +0100 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x728xlDm44236854 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 2 Aug 2019 08:59:47 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9BA2652054; Fri, 2 Aug 2019 08:59:47 +0000 (GMT) Received: from kewenlins-mbp.cn.ibm.com (unknown [9.200.146.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id 7F81A52050; Fri, 2 Aug 2019 08:59:45 +0000 (GMT) Subject: [PATCH V5, rs6000] Support vrotr3 for int vector types To: Segher Boessenkool Cc: GCC Patches , Jakub Jelinek , Richard Biener , richard.sandiford@arm.com, Bill Schmidt References: <32f89c4f-cd2d-a7bd-16d2-26fed6bb5f56@linux.ibm.com> <27be90e6-4beb-5c4c-a163-9b136490d783@linux.ibm.com> <20190717134025.GJ20882@gate.crashing.org> <83f8448e-3c59-8991-2176-729d87e08a86@linux.ibm.com> <20190718194818.GT20882@gate.crashing.org> <20190719150647.GZ20882@gate.crashing.org> <20190725134958.GR20882@gate.crashing.org> <20190726141004.GA31406@gate.crashing.org> From: "Kewen.Lin" Date: Fri, 02 Aug 2019 08:59:00 -0000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <20190726141004.GA31406@gate.crashing.org> Content-Type: multipart/mixed; boundary="------------CDF73B6A09C52C2B3F146B69" x-cbid: 19080208-4275-0000-0000-000003531A5E X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 19080208-4276-0000-0000-000038640F6A Message-Id: <85937573-94ae-8a13-2cf6-5d4b9edf97e2@linux.ibm.com> X-IsSubscribed: yes X-SW-Source: 2019-08/txt/msg00119.txt.bz2 This is a multi-part message in MIME format. --------------CDF73B6A09C52C2B3F146B69 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-length: 1228 Hi Segher, Sorry for the late, I've addressed your comments in the attached patch. Some points: 1) Remove explict AND part. 2) Rename predicate name to vint_reg_or_vint_const. 3) Split test cases into altivec and power8. As to the predicate name and usage, I checked the current vector shifts, they don't need to check const_vector specially (like right to left conversion), excepting for the one "vec_shr_", but it checks for scalar const int. Btw, I've changed the + rtx imm_vec = + simplify_const_unary_operation back to + rtx imm_vec + = simplify_const_unary_operation Otherwise check_GNU_style will report "Trailing operator" error. :( Bootstrapped and regtested on powerpc64le-unknown-linux-gnu. Thanks, Kewen ------------ gcc/ChangeLog 2019-08-02 Kewen Lin * config/rs6000/predicates.md (vint_reg_or_vint_const): New predicate. * config/rs6000/vector.md (vrotr3): New define_expand. gcc/testsuite/ChangeLog 2019-08-02 Kewen Lin * gcc.target/powerpc/vec_rotate-1.c: New test. * gcc.target/powerpc/vec_rotate-2.c: New test. * gcc.target/powerpc/vec_rotate-3.c: New test. * gcc.target/powerpc/vec_rotate-4.c: New test. --------------CDF73B6A09C52C2B3F146B69 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="expand_v5.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="expand_v5.diff" Content-length: 8654 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcnM2MDAwL3ByZWRpY2F0ZXMubWQg Yi9nY2MvY29uZmlnL3JzNjAwMC9wcmVkaWNhdGVzLm1kCmluZGV4IDhjYTk4 Mjk5OTUwLi5mYWYwNTc0MjVhOCAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9y czYwMDAvcHJlZGljYXRlcy5tZAorKysgYi9nY2MvY29uZmlnL3JzNjAwMC9w cmVkaWNhdGVzLm1kCkBAIC0xNjMsNiArMTYzLDE3IEBACiAgIHJldHVybiBW SU5UX1JFR05PX1AgKFJFR05PIChvcCkpOwogfSkKIAorOzsgUmV0dXJuIDEg aWYgb3AgaXMgYSB2ZWN0b3IgcmVnaXN0ZXIgdGhhdCBvcGVyYXRlcyBvbiBp bnRlZ2VyIHZlY3RvcnMKKzs7IG9yIGlmIG9wIGlzIGEgY29uc3QgdmVjdG9y IHdpdGggaW50ZWdlciB2ZWN0b3IgbW9kZXMuCisoZGVmaW5lX3ByZWRpY2F0 ZSAidmludF9yZWdfb3JfdmludF9jb25zdCIKKyAgKG1hdGNoX2NvZGUgInJl ZyxzdWJyZWcsY29uc3RfdmVjdG9yIikKK3sKKyAgaWYgKEdFVF9DT0RFIChv cCkgPT0gQ09OU1RfVkVDVE9SICYmIEdFVF9NT0RFX0NMQVNTIChtb2RlKSA9 PSBNT0RFX1ZFQ1RPUl9JTlQpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJu IHZpbnRfb3BlcmFuZCAob3AsIG1vZGUpOworfSkKKwogOzsgUmV0dXJuIDEg aWYgb3AgaXMgYSB2ZWN0b3IgcmVnaXN0ZXIgdG8gZG8gbG9naWNhbCBvcGVy YXRpb25zIG9uIChhbmQsIG9yLAogOzsgeG9yLCBldGMuKQogKGRlZmluZV9w cmVkaWNhdGUgInZsb2dpY2FsX29wZXJhbmQiCmRpZmYgLS1naXQgYS9nY2Mv Y29uZmlnL3JzNjAwMC92ZWN0b3IubWQgYi9nY2MvY29uZmlnL3JzNjAwMC92 ZWN0b3IubWQKaW5kZXggNzBiY2ZlMDJlMjIuLjMxMTFjYTkwMjlmIDEwMDY0 NAotLS0gYS9nY2MvY29uZmlnL3JzNjAwMC92ZWN0b3IubWQKKysrIGIvZ2Nj L2NvbmZpZy9yczYwMDAvdmVjdG9yLm1kCkBAIC0xMjYwLDYgKzEyNjAsMzMg QEAKICAgIlZFQ1RPUl9VTklUX0FMVElWRUNfT1JfVlNYX1AgKDxNT0RFPm1v ZGUpIgogICAiIikKIAorOzsgRXhwYW5kZXJzIGZvciByb3RhdGVydCB0byBt YWtlIHVzZSBvZiB2cm90bAorKGRlZmluZV9leHBhbmQgInZyb3RyPG1vZGU+ MyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VkVDX0kgMCAidmludF9vcGVy YW5kIikKKwkocm90YXRlcnQ6VkVDX0kgKG1hdGNoX29wZXJhbmQ6VkVDX0kg MSAidmludF9vcGVyYW5kIikKKwkJKG1hdGNoX29wZXJhbmQ6VkVDX0kgMiAi dmludF9yZWdfb3JfdmludF9jb25zdCIpKSldCisgICJWRUNUT1JfVU5JVF9B TFRJVkVDX09SX1ZTWF9QICg8TU9ERT5tb2RlKSIKK3sKKyAgcnR4IHJvdF9j b3VudCA9IGdlbl9yZWdfcnR4ICg8TU9ERT5tb2RlKTsKKyAgaWYgKEdFVF9D T0RFIChvcGVyYW5kc1syXSkgPT0gQ09OU1RfVkVDVE9SKQorICAgIHsKKyAg ICAgIG1hY2hpbmVfbW9kZSBpbm5lcl9tb2RlID0gR0VUX01PREVfSU5ORVIg KDxNT0RFPm1vZGUpOworICAgICAgdW5zaWduZWQgaW50IGJpdHMgPSBHRVRf TU9ERV9QUkVDSVNJT04gKGlubmVyX21vZGUpOworICAgICAgcnR4IG1hc2tf dmVjID0gZ2VuX2NvbnN0X3ZlY19kdXBsaWNhdGUgKDxNT0RFPm1vZGUsIEdF Tl9JTlQgKGJpdHMgLSAxKSk7CisgICAgICBydHggaW1tX3ZlYworCT0gc2lt cGxpZnlfY29uc3RfdW5hcnlfb3BlcmF0aW9uIChORUcsIDxNT0RFPm1vZGUs IG9wZXJhbmRzWzJdLAorCQkJCQkgIEdFVF9NT0RFIChvcGVyYW5kc1syXSkp OworICAgICAgaW1tX3ZlYworCT0gc2ltcGxpZnlfY29uc3RfYmluYXJ5X29w ZXJhdGlvbiAoQU5ELCA8TU9ERT5tb2RlLCBpbW1fdmVjLCBtYXNrX3ZlYyk7 CisgICAgICByb3RfY291bnQgPSBmb3JjZV9yZWcgKDxNT0RFPm1vZGUsIGlt bV92ZWMpOworICAgIH0KKyAgZWxzZQorICAgIGVtaXRfaW5zbiAoZ2VuX25l Zzxtb2RlPjIgKHJvdF9jb3VudCwgb3BlcmFuZHNbMl0pKTsKKworICBlbWl0 X2luc24gKGdlbl92cm90bDxtb2RlPjMgKG9wZXJhbmRzWzBdLCBvcGVyYW5k c1sxXSwgcm90X2NvdW50KSk7CisgIERPTkU7Cit9KQorCiA7OyBFeHBhbmRl cnMgZm9yIGFyaXRobWV0aWMgc2hpZnQgbGVmdCBvbiBlYWNoIHZlY3RvciBl bGVtZW50CiAoZGVmaW5lX2V4cGFuZCAidmFzaGw8bW9kZT4zIgogICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpWRUNfSSAwICJ2aW50X29wZXJhbmQiKQpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Bvd2VycGMvdmVj X3JvdGF0ZS0xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcG93ZXJw Yy92ZWNfcm90YXRlLTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZjAzNWE1NzgyOTIKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcG93ZXJwYy92ZWNfcm90YXRlLTEu YwpAQCAtMCwwICsxLDM5IEBACisvKiB7IGRnLW9wdGlvbnMgIi1PMyIgfSAq LworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgcG93ZXJwY19h bHRpdmVjX29rIH0gKi8KKworLyogQ2hlY2sgdmVjdG9yaXplciBjYW4gZXhw bG9pdCB2ZWN0b3Igcm90YXRpb24gaW5zdHJ1Y3Rpb25zIG9uIFBvd2VyLCBt YWlubHkKKyAgIGZvciB0aGUgY2FzZSByb3RhdGlvbiBjb3VudCBpcyBjb25z dCBudW1iZXIuCisKKyAgIENoZWNrIGZvciBpbnN0cnVjdGlvbnMgdnJsYi92 cmxoL3ZybHcgb25seSBhdmFpbGFibGUgaWYgYWx0aXZlYyBzdXBwb3J0ZWQu ICovCisKKyNkZWZpbmUgTiAyNTYKK3Vuc2lnbmVkIGludCBzdXdbTl0sIHJ1 d1tOXTsKK3Vuc2lnbmVkIHNob3J0IHN1aFtOXSwgcnVoW05dOwordW5zaWdu ZWQgY2hhciBzdWJbTl0sIHJ1YltOXTsKKwordm9pZAordGVzdFVXICgpCit7 CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyArK2kpCisgICAgcnV3W2ld ID0gKHN1d1tpXSA+PiA4KSB8IChzdXdbaV0gPDwgKHNpemVvZiAoc3V3WzBd KSAqIDggLSA4KSk7Cit9CisKK3ZvaWQKK3Rlc3RVSCAoKQoreworICBmb3Ig KGludCBpID0gMDsgaSA8IDI1NjsgKytpKQorICAgIHJ1aFtpXSA9ICh1bnNp Z25lZCBzaG9ydCkgKHN1aFtpXSA+PiA5KQorCSAgICAgfCAodW5zaWduZWQg c2hvcnQpIChzdWhbaV0gPDwgKHNpemVvZiAoc3VoWzBdKSAqIDggLSA5KSk7 Cit9CisKK3ZvaWQKK3Rlc3RVQiAoKQoreworICBmb3IgKGludCBpID0gMDsg aSA8IDI1NjsgKytpKQorICAgIHJ1YltpXSA9ICh1bnNpZ25lZCBjaGFyKSAo c3ViW2ldID4+IDUpCisJICAgICB8ICh1bnNpZ25lZCBjaGFyKSAoc3ViW2ld IDw8IChzaXplb2YgKHN1YlswXSkgKiA4IC0gNSkpOworfQorCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIge1xtdnJsd1xNfSB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciB7XG12cmxoXE19IH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyIHtcbXZybGJcTX0g fSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv cG93ZXJwYy92ZWNfcm90YXRlLTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9wb3dlcnBjL3ZlY19yb3RhdGUtMi5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wYTJhOTY1ZGRjYgotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9wb3dlcnBjL3Zl Y19yb3RhdGUtMi5jCkBAIC0wLDAgKzEsMTkgQEAKKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IHBvd2VycGNfcDh2ZWN0b3Jfb2sgfSAqLwor LyogeyBkZy1vcHRpb25zICItTzMgLW1kZWphZ251LWNwdT1wb3dlcjgiIH0g Ki8KKworLyogQ2hlY2sgdmVjdG9yaXplciBjYW4gZXhwbG9pdCB2ZWN0b3Ig cm90YXRpb24gaW5zdHJ1Y3Rpb25zIG9uIFBvd2VyOCwgbWFpbmx5CisgICBm b3IgdGhlIGNhc2Ugcm90YXRpb24gY291bnQgaXMgY29uc3QgbnVtYmVyLgor CisgICBDaGVjayBmb3IgdnJsZCB3aGljaCBpcyBhdmFpbGFibGUgb24gUG93 ZXI4IGFuZCBhYm92ZS4gICovCisKKyNkZWZpbmUgTiAyNTYKK3Vuc2lnbmVk IGxvbmcgbG9uZyBzdWRbTl0sIHJ1ZFtOXTsKKwordm9pZAordGVzdFVMTCAo KQoreworICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgKytpKQorICAgIHJ1 ZFtpXSA9IChzdWRbaV0gPj4gOCkgfCAoc3VkW2ldIDw8IChzaXplb2YgKHN1 ZFswXSkgKiA4IC0gOCkpOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXIge1xtdnJsZFxNfSB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9wb3dlcnBjL3ZlY19yb3RhdGUtMy5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Bvd2VycGMvdmVjX3JvdGF0ZS0z LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVl OTBhZTZmZDYzCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L3Bvd2VycGMvdmVjX3JvdGF0ZS0zLmMKQEAgLTAsMCArMSw0 MCBAQAorLyogeyBkZy1vcHRpb25zICItTzMiIH0gKi8KKy8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHBvd2VycGNfYWx0aXZlY19vayB9ICov CisKKy8qIENoZWNrIHZlY3Rvcml6ZXIgY2FuIGV4cGxvaXQgdmVjdG9yIHJv dGF0aW9uIGluc3RydWN0aW9ucyBvbiBQb3dlciwgbWFpbmx5CisgICBmb3Ig dGhlIGNhc2Ugcm90YXRpb24gY291bnQgaXNuJ3QgY29uc3QgbnVtYmVyLgor CisgICBDaGVjayBmb3IgaW5zdHJ1Y3Rpb25zIHZybGIvdnJsaC92cmx3IG9u bHkgYXZhaWxhYmxlIGlmIGFsdGl2ZWMgc3VwcG9ydGVkLiAqLworCisjZGVm aW5lIE4gMjU2Cit1bnNpZ25lZCBpbnQgc3V3W05dLCBydXdbTl07Cit1bnNp Z25lZCBzaG9ydCBzdWhbTl0sIHJ1aFtOXTsKK3Vuc2lnbmVkIGNoYXIgc3Vi W05dLCBydWJbTl07CitleHRlcm4gdW5zaWduZWQgY2hhciByb3RfY250Owor Cit2b2lkCit0ZXN0VVcgKCkKK3sKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAy NTY7ICsraSkKKyAgICBydXdbaV0gPSAoc3V3W2ldID4+IHJvdF9jbnQpIHwg KHN1d1tpXSA8PCAoc2l6ZW9mIChzdXdbMF0pICogOCAtIHJvdF9jbnQpKTsK K30KKwordm9pZAordGVzdFVIICgpCit7CisgIGZvciAoaW50IGkgPSAwOyBp IDwgMjU2OyArK2kpCisgICAgcnVoW2ldID0gKHVuc2lnbmVkIHNob3J0KSAo c3VoW2ldID4+IHJvdF9jbnQpCisJICAgICB8ICh1bnNpZ25lZCBzaG9ydCkg KHN1aFtpXSA8PCAoc2l6ZW9mIChzdWhbMF0pICogOCAtIHJvdF9jbnQpKTsK K30KKwordm9pZAordGVzdFVCICgpCit7CisgIGZvciAoaW50IGkgPSAwOyBp IDwgMjU2OyArK2kpCisgICAgcnViW2ldID0gKHVuc2lnbmVkIGNoYXIpIChz dWJbaV0gPj4gcm90X2NudCkKKwkgICAgIHwgKHVuc2lnbmVkIGNoYXIpIChz dWJbaV0gPDwgKHNpemVvZiAoc3ViWzBdKSAqIDggLSByb3RfY250KSk7Cit9 CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciB7XG12cmx3XE19 IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyIHtcbXZy bGhcTX0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIg e1xtdnJsYlxNfSB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9wb3dlcnBjL3ZlY19yb3RhdGUtNC5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L3Bvd2VycGMvdmVjX3JvdGF0ZS00LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBkM2U4Mzc4ZWQ2 Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L3Bvd2VycGMvdmVjX3JvdGF0ZS00LmMKQEAgLTAsMCArMSwyMCBAQAorLyog eyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgcG93ZXJwY19wOHZlY3Rv cl9vayB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMyAtbWRlamFnbnUtY3B1 PXBvd2VyOCIgfSAqLworCisvKiBDaGVjayB2ZWN0b3JpemVyIGNhbiBleHBs b2l0IHZlY3RvciByb3RhdGlvbiBpbnN0cnVjdGlvbnMgb24gUG93ZXI4LCBt YWlubHkKKyAgIGZvciB0aGUgY2FzZSByb3RhdGlvbiBjb3VudCBpc24ndCBj b25zdCBudW1iZXIuCisKKyAgIENoZWNrIGZvciB2cmxkIHdoaWNoIGlzIGF2 YWlsYWJsZSBvbiBQb3dlcjggYW5kIGFib3ZlLiAgKi8KKworI2RlZmluZSBO IDI1NgordW5zaWduZWQgbG9uZyBsb25nIHN1ZFtOXSwgcnVkW05dOworZXh0 ZXJuIHVuc2lnbmVkIGNoYXIgcm90X2NudDsKKwordm9pZAordGVzdFVMTCAo KQoreworICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgKytpKQorICAgIHJ1 ZFtpXSA9IChzdWRbaV0gPj4gcm90X2NudCkgfCAoc3VkW2ldIDw8IChzaXpl b2YgKHN1ZFswXSkgKiA4IC0gcm90X2NudCkpOworfQorCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXIge1xtdnJsZFxNfSB9IH0gKi8K --------------CDF73B6A09C52C2B3F146B69--