From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 707CC383F84B for ; Wed, 22 Jul 2020 01:26:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 707CC383F84B Received: from pps.filterd (m0098417.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 06M17KkY096380; Tue, 21 Jul 2020 21:26:48 -0400 Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 32e1vr8uj3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 21 Jul 2020 21:26:47 -0400 Received: from m0098417.ppops.net (m0098417.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 06M1It40135961; Tue, 21 Jul 2020 21:26:47 -0400 Received: from ppma02fra.de.ibm.com (47.49.7a9f.ip4.static.sl-reverse.com [159.122.73.71]) by mx0a-001b2d01.pphosted.com with ESMTP id 32e1vr8uhq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 21 Jul 2020 21:26:47 -0400 Received: from pps.filterd (ppma02fra.de.ibm.com [127.0.0.1]) by ppma02fra.de.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 06M1QdO7013350; Wed, 22 Jul 2020 01:26:45 GMT Received: from b06avi18626390.portsmouth.uk.ibm.com (b06avi18626390.portsmouth.uk.ibm.com [9.149.26.192]) by ppma02fra.de.ibm.com with ESMTP id 32brq7vf4t-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Jul 2020 01:26:45 +0000 Received: from b06wcsmtp001.portsmouth.uk.ibm.com (b06wcsmtp001.portsmouth.uk.ibm.com [9.149.105.160]) by b06avi18626390.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 06M1PJ2761210930 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Jul 2020 01:25:19 GMT Received: from b06wcsmtp001.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 25E12A405C; Wed, 22 Jul 2020 01:26:43 +0000 (GMT) Received: from b06wcsmtp001.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A669EA4054; Wed, 22 Jul 2020 01:26:40 +0000 (GMT) Received: from KewenLins-MacBook-Pro.local (unknown [9.197.238.225]) by b06wcsmtp001.portsmouth.uk.ibm.com (Postfix) with ESMTP; Wed, 22 Jul 2020 01:26:40 +0000 (GMT) Subject: [PATCH v2] vect/rs6000: Support vector with length cost modeling To: Richard Biener Cc: GCC Patches , Bill Schmidt , Segher Boessenkool , Richard Sandiford References: <419f1fad-05be-115c-1a53-cb710ae7b2dc@linux.ibm.com> From: "Kewen.Lin" Message-ID: Date: Wed, 22 Jul 2020 09:26:39 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:68.0) Gecko/20100101 Thunderbird/68.9.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------B7494EA4499F961BEFCE1566" Content-Language: en-US X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.235, 18.0.687 definitions=2020-07-21_15:2020-07-21, 2020-07-21 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 mlxlogscore=999 malwarescore=0 priorityscore=1501 adultscore=0 mlxscore=0 impostorscore=0 bulkscore=0 phishscore=0 lowpriorityscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2006250000 definitions=main-2007220001 X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Jul 2020 01:26:52 -0000 This is a multi-part message in MIME format. --------------B7494EA4499F961BEFCE1566 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hi Richard, on 2020/7/21 下午3:57, Richard Biener wrote: > On Tue, Jul 21, 2020 at 7:52 AM Kewen.Lin wrote: >> >> Hi, >> >> This patch is to add the cost modeling for vector with length, >> it mainly follows what we generate for vector with length in >> functions vect_set_loop_controls_directly and vect_gen_len >> at the worst case. >> >> For Power, the length is expected to be in bits 0-7 (high bits), >> we have to model the cost of shifting bits. To allow other targets >> not suffer this, I used one target hook to describe this extra cost, >> I'm not sure if it's a correct way. >> >> Bootstrapped/regtested on powerpc64le-linux-gnu (P9) with explicit >> param vect-partial-vector-usage=1. >> >> Any comments/suggestions are highly appreciated! > > I don't like the introduction of an extra target hook for this. All > vectorizer cost modeling should ideally go through > init_cost/add_stmt_cost/finish_cost. If the extra costing is > not per stmt then either init_cost or finish_cost is appropriate. > Currently init_cost only gets a struct loop while we should > probably give it a vec_info * parameter so targets can > check LOOP_VINFO_USING_PARTIAL_VECTORS_P and friends. > Thanks! Nice, your suggested way looks better. I've removed the hook and taken care of it in finish_cost. The updated v2 is attached. Bootstrapped/regtested again on powerpc64le-linux-gnu (P9) with explicit param vect-partial-vector-usage=1. BR, Kewen ----- gcc/ChangeLog: * config/rs6000/rs6000.c (adjust_vect_cost): New function. (rs6000_finish_cost): Call function adjust_vect_cost. * tree-vect-loop.c (vect_estimate_min_profitable_iters): Add cost modeling for vector with length. --------------B7494EA4499F961BEFCE1566 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="cost_v2.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="cost_v2.diff" ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jIGIvZ2NjL2NvbmZpZy9y czYwMDAvcnM2MDAwLmMKaW5kZXggNWE0ZjA3ZDU4MTAuLmYyNzI0ZTc5MmM5IDEwMDY0NAot LS0gYS9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYworKysgYi9nY2MvY29uZmlnL3JzNjAw MC9yczYwMDAuYwpAQCAtNTE3Nyw2ICs1MTc3LDM0IEBAIHJzNjAwMF9hZGRfc3RtdF9jb3N0 IChjbGFzcyB2ZWNfaW5mbyAqdmluZm8sIHZvaWQgKmRhdGEsIGludCBjb3VudCwKICAgcmV0 dXJuIHJldHZhbDsKIH0KIAorLyogRm9yIHNvbWUgdGFyZ2V0IHNwZWNpZmljIHZlY3Rvcml6 YXRpb24gY29zdCB3aGljaCBjYW4ndCBiZSBoYW5kbGVkIHBlciBzdG10LAorICAgd2UgY2hl Y2sgdGhlIHJlcXVpc2l0ZSBjb25kaXRpb25zIGFuZCBhZGp1c3QgdGhlIHZlY3Rvcml6YXRp b24gY29zdAorICAgYWNjb3JkaW5nbHkgaWYgc2F0aXNmaWVkLiAgT25lIHR5cGljYWwgZXhh bXBsZSBpcyB0byBtb2RlbCBzaGlmdCBjb3N0IGZvcgorICAgdmVjdG9yIHdpdGggbGVuZ3Ro IGJ5IGNvdW50aW5nIG51bWJlciBvZiByZXF1aXJlZCBsZW5ndGhzIHVuZGVyIGNvbmRpdGlv bgorICAgTE9PUF9WSU5GT19GVUxMWV9XSVRIX0xFTkdUSF9QLiAgKi8KKworc3RhdGljIHZv aWQKK2FkanVzdF92ZWN0X2Nvc3QgKHJzNjAwMF9jb3N0X2RhdGEgKmRhdGEpCit7CisgIHN0 cnVjdCBsb29wICpsb29wID0gZGF0YS0+bG9vcF9pbmZvOworICBnY2NfYXNzZXJ0IChsb29w KTsKKyAgbG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvID0gbG9vcF92ZWNfaW5mb19mb3JfbG9v cCAobG9vcCk7CisKKyAgaWYgKExPT1BfVklORk9fRlVMTFlfV0lUSF9MRU5HVEhfUCAobG9v cF92aW5mbykpCisgICAgeworICAgICAgcmdyb3VwX2NvbnRyb2xzICpyZ2M7CisgICAgICB1 bnNpZ25lZCBpbnQgbnVtX3ZlY3RvcnNfbTE7CisgICAgICB1bnNpZ25lZCBpbnQgc2hpZnRf Y250ID0gMDsKKyAgICAgIEZPUl9FQUNIX1ZFQ19FTFQgKExPT1BfVklORk9fTEVOUyAobG9v cF92aW5mbyksIG51bV92ZWN0b3JzX20xLCByZ2MpCisJaWYgKHJnYy0+dHlwZSkKKwkgIC8q IEVhY2ggbGVuZ3RoIG5lZWRzIG9uZSBzaGlmdCB0byBmaWxsIGludG8gYml0cyAwLTcuICAq LworCSAgc2hpZnRfY250ICs9IChudW1fdmVjdG9yc19tMSArIDEpOworCisgICAgICByczYw MDBfYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywgKHZvaWQgKikgZGF0YSwgc2hpZnRfY250 LCBzY2FsYXJfc3RtdCwKKwkJCSAgICBOVUxMLCBOVUxMX1RSRUUsIDAsIHZlY3RfYm9keSk7 CisgICAgfQorfQorCiAvKiBJbXBsZW1lbnQgdGFyZ2V0bS52ZWN0b3JpemUuZmluaXNoX2Nv c3QuICAqLwogCiBzdGF0aWMgdm9pZApAQCAtNTE4Niw3ICs1MjE0LDEwIEBAIHJzNjAwMF9m aW5pc2hfY29zdCAodm9pZCAqZGF0YSwgdW5zaWduZWQgKnByb2xvZ3VlX2Nvc3QsCiAgIHJz NjAwMF9jb3N0X2RhdGEgKmNvc3RfZGF0YSA9IChyczYwMDBfY29zdF9kYXRhKikgZGF0YTsK IAogICBpZiAoY29zdF9kYXRhLT5sb29wX2luZm8pCi0gICAgcnM2MDAwX2RlbnNpdHlfdGVz dCAoY29zdF9kYXRhKTsKKyAgICB7CisgICAgICBhZGp1c3RfdmVjdF9jb3N0IChjb3N0X2Rh dGEpOworICAgICAgcnM2MDAwX2RlbnNpdHlfdGVzdCAoY29zdF9kYXRhKTsKKyAgICB9CiAK ICAgLyogRG9uJ3QgdmVjdG9yaXplIG1pbmltdW0tdmVjdG9yaXphdGlvbi1mYWN0b3IsIHNp bXBsZSBjb3B5IGxvb3BzCiAgICAgIHRoYXQgcmVxdWlyZSB2ZXJzaW9uaW5nIGZvciBhbnkg cmVhc29uLiAgVGhlIHZlY3Rvcml6YXRpb24gaXMgYXQKZGlmZiAtLWdpdCBhL2djYy90cmVl LXZlY3QtbG9vcC5jIGIvZ2NjL3RyZWUtdmVjdC1sb29wLmMKaW5kZXggZTkzMzQ0MWI5MjIu Ljk5ZTFmZDdiZGQwIDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0LWxvb3AuYworKysgYi9n Y2MvdHJlZS12ZWN0LWxvb3AuYwpAQCAtMzY1Miw3ICszNjUyLDcgQEAgdmVjdF9lc3RpbWF0 ZV9taW5fcHJvZml0YWJsZV9pdGVycyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLAogICAg ICBUT0RPOiBCdWlsZCBhbiBleHByZXNzaW9uIHRoYXQgcmVwcmVzZW50cyBwZWVsX2l0ZXJz IGZvciBwcm9sb2d1ZSBhbmQKICAgICAgZXBpbG9ndWUgdG8gYmUgdXNlZCBpbiBhIHJ1bi10 aW1lIHRlc3QuICAqLwogCi0gIGlmIChMT09QX1ZJTkZPX0ZVTExZX01BU0tFRF9QIChsb29w X3ZpbmZvKSkKKyAgaWYgKExPT1BfVklORk9fVVNJTkdfUEFSVElBTF9WRUNUT1JTX1AgKGxv b3BfdmluZm8pKQogICAgIHsKICAgICAgIHBlZWxfaXRlcnNfcHJvbG9ndWUgPSAwOwogICAg ICAgcGVlbF9pdGVyc19lcGlsb2d1ZSA9IDA7CkBAIC0zNjYzLDQ1ICszNjYzLDE0NSBAQCB2 ZWN0X2VzdGltYXRlX21pbl9wcm9maXRhYmxlX2l0ZXJzIChsb29wX3ZlY19pbmZvIGxvb3Bf dmluZm8sCiAJICBwZWVsX2l0ZXJzX2VwaWxvZ3VlICs9IDE7CiAJICBzdG10X2luZm9fZm9y X2Nvc3QgKnNpOwogCSAgaW50IGo7Ci0JICBGT1JfRUFDSF9WRUNfRUxUIChMT09QX1ZJTkZP X1NDQUxBUl9JVEVSQVRJT05fQ09TVCAobG9vcF92aW5mbyksCi0JCQkgICAgaiwgc2kpCisJ ICBGT1JfRUFDSF9WRUNfRUxUIChMT09QX1ZJTkZPX1NDQUxBUl9JVEVSQVRJT05fQ09TVCAo bG9vcF92aW5mbyksIGosCisJCQkgICAgc2kpCiAJICAgICh2b2lkKSBhZGRfc3RtdF9jb3N0 IChsb29wX3ZpbmZvLCB0YXJnZXRfY29zdF9kYXRhLCBzaS0+Y291bnQsCiAJCQkJICBzaS0+ a2luZCwgc2ktPnN0bXRfaW5mbywgc2ktPnZlY3R5cGUsCiAJCQkJICBzaS0+bWlzYWxpZ24s IHZlY3RfZXBpbG9ndWUpOwogCX0KIAotICAgICAgLyogQ2FsY3VsYXRlIGhvdyBtYW55IG1h c2tzIHdlIG5lZWQgdG8gZ2VuZXJhdGUuICAqLwotICAgICAgdW5zaWduZWQgaW50IG51bV9t YXNrcyA9IDA7Ci0gICAgICByZ3JvdXBfY29udHJvbHMgKnJnbTsKLSAgICAgIHVuc2lnbmVk IGludCBudW1fdmVjdG9yc19tMTsKLSAgICAgIEZPUl9FQUNIX1ZFQ19FTFQgKExPT1BfVklO Rk9fTUFTS1MgKGxvb3BfdmluZm8pLCBudW1fdmVjdG9yc19tMSwgcmdtKQotCWlmIChyZ20t PnR5cGUpCi0JICBudW1fbWFza3MgKz0gbnVtX3ZlY3RvcnNfbTEgKyAxOwotICAgICAgZ2Nj X2Fzc2VydCAobnVtX21hc2tzID4gMCk7Ci0KLSAgICAgIC8qIEluIHRoZSB3b3JzdCBjYXNl LCB3ZSBuZWVkIHRvIGdlbmVyYXRlIGVhY2ggbWFzayBpbiB0aGUgcHJvbG9ndWUKLQkgYW5k IGluIHRoZSBsb29wIGJvZHkuICBPbmUgb2YgdGhlIGxvb3AgYm9keSBtYXNrIGluc3RydWN0 aW9ucwotCSByZXBsYWNlcyB0aGUgY29tcGFyaXNvbiBpbiB0aGUgc2NhbGFyIGxvb3AsIGFu ZCBzaW5jZSB3ZSBkb24ndAotCSBjb3VudCB0aGUgc2NhbGFyIGNvbXBhcmlzb24gYWdhaW5z dCB0aGUgc2NhbGFyIGJvZHksIHdlIHNob3VsZG4ndAotCSBjb3VudCB0aGF0IHZlY3RvciBp bnN0cnVjdGlvbiBhZ2FpbnN0IHRoZSB2ZWN0b3IgYm9keSBlaXRoZXIuCi0KLQkgU29tZXRp bWVzIHdlIGNhbiB1c2UgdW5wYWNrcyBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgcHJvbG9ndWUK LQkgbWFza3MgYW5kIHNvbWV0aW1lcyB0aGUgcHJvbG9ndWUgbWFzayB3aWxsIGZvbGQgdG8g YSBjb25zdGFudCwKLQkgc28gdGhlIGFjdHVhbCBwcm9sb2d1ZSBjb3N0IG1pZ2h0IGJlIHNt YWxsZXIuICBIb3dldmVyLCBpdCdzCi0JIHNpbXBsZXIgYW5kIHNhZmVyIHRvIHVzZSB0aGUg d29yc3QtY2FzZSBjb3N0OyBpZiB0aGlzIGVuZHMgdXAKLQkgYmVpbmcgdGhlIHRpZS1icmVh a2VyIGJldHdlZW4gdmVjdG9yaXppbmcgb3Igbm90LCB0aGVuIGl0J3MKLQkgcHJvYmFibHkg YmV0dGVyIG5vdCB0byB2ZWN0b3JpemUuICAqLwotICAgICAgKHZvaWQpIGFkZF9zdG10X2Nv c3QgKGxvb3BfdmluZm8sCi0JCQkgICAgdGFyZ2V0X2Nvc3RfZGF0YSwgbnVtX21hc2tzLCB2 ZWN0b3Jfc3RtdCwKLQkJCSAgICBOVUxMLCBOVUxMX1RSRUUsIDAsIHZlY3RfcHJvbG9ndWUp OwotICAgICAgKHZvaWQpIGFkZF9zdG10X2Nvc3QgKGxvb3BfdmluZm8sCi0JCQkgICAgdGFy Z2V0X2Nvc3RfZGF0YSwgbnVtX21hc2tzIC0gMSwgdmVjdG9yX3N0bXQsCi0JCQkgICAgTlVM TCwgTlVMTF9UUkVFLCAwLCB2ZWN0X2JvZHkpOwotICAgIH0KLSAgZWxzZSBpZiAoTE9PUF9W SU5GT19GVUxMWV9XSVRIX0xFTkdUSF9QIChsb29wX3ZpbmZvKSkKLSAgICB7Ci0gICAgICBw ZWVsX2l0ZXJzX3Byb2xvZ3VlID0gMDsKLSAgICAgIHBlZWxfaXRlcnNfZXBpbG9ndWUgPSAw OworICAgICAgaWYgKExPT1BfVklORk9fRlVMTFlfTUFTS0VEX1AgKGxvb3BfdmluZm8pKQor CXsKKwkgIC8qIENhbGN1bGF0ZSBob3cgbWFueSBtYXNrcyB3ZSBuZWVkIHRvIGdlbmVyYXRl LiAgKi8KKwkgIHVuc2lnbmVkIGludCBudW1fbWFza3MgPSAwOworCSAgcmdyb3VwX2NvbnRy b2xzICpyZ207CisJICB1bnNpZ25lZCBpbnQgbnVtX3ZlY3RvcnNfbTE7CisJICBGT1JfRUFD SF9WRUNfRUxUIChMT09QX1ZJTkZPX01BU0tTIChsb29wX3ZpbmZvKSwgbnVtX3ZlY3RvcnNf bTEsIHJnbSkKKwkgICAgaWYgKHJnbS0+dHlwZSkKKwkgICAgICBudW1fbWFza3MgKz0gbnVt X3ZlY3RvcnNfbTEgKyAxOworCSAgZ2NjX2Fzc2VydCAobnVtX21hc2tzID4gMCk7CisKKwkg IC8qIEluIHRoZSB3b3JzdCBjYXNlLCB3ZSBuZWVkIHRvIGdlbmVyYXRlIGVhY2ggbWFzayBp biB0aGUgcHJvbG9ndWUKKwkgICAgIGFuZCBpbiB0aGUgbG9vcCBib2R5LiAgT25lIG9mIHRo ZSBsb29wIGJvZHkgbWFzayBpbnN0cnVjdGlvbnMKKwkgICAgIHJlcGxhY2VzIHRoZSBjb21w YXJpc29uIGluIHRoZSBzY2FsYXIgbG9vcCwgYW5kIHNpbmNlIHdlIGRvbid0CisJICAgICBj b3VudCB0aGUgc2NhbGFyIGNvbXBhcmlzb24gYWdhaW5zdCB0aGUgc2NhbGFyIGJvZHksIHdl IHNob3VsZG4ndAorCSAgICAgY291bnQgdGhhdCB2ZWN0b3IgaW5zdHJ1Y3Rpb24gYWdhaW5z dCB0aGUgdmVjdG9yIGJvZHkgZWl0aGVyLgorCisJICAgICBTb21ldGltZXMgd2UgY2FuIHVz ZSB1bnBhY2tzIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBwcm9sb2d1ZQorCSAgICAgbWFza3Mg YW5kIHNvbWV0aW1lcyB0aGUgcHJvbG9ndWUgbWFzayB3aWxsIGZvbGQgdG8gYSBjb25zdGFu dCwKKwkgICAgIHNvIHRoZSBhY3R1YWwgcHJvbG9ndWUgY29zdCBtaWdodCBiZSBzbWFsbGVy LiAgSG93ZXZlciwgaXQncworCSAgICAgc2ltcGxlciBhbmQgc2FmZXIgdG8gdXNlIHRoZSB3 b3JzdC1jYXNlIGNvc3Q7IGlmIHRoaXMgZW5kcyB1cAorCSAgICAgYmVpbmcgdGhlIHRpZS1i cmVha2VyIGJldHdlZW4gdmVjdG9yaXppbmcgb3Igbm90LCB0aGVuIGl0J3MKKwkgICAgIHBy b2JhYmx5IGJldHRlciBub3QgdG8gdmVjdG9yaXplLiAgKi8KKwkgICh2b2lkKSBhZGRfc3Rt dF9jb3N0IChsb29wX3ZpbmZvLCB0YXJnZXRfY29zdF9kYXRhLCBudW1fbWFza3MsCisJCQkJ dmVjdG9yX3N0bXQsIE5VTEwsIE5VTExfVFJFRSwgMCwgdmVjdF9wcm9sb2d1ZSk7CisJICAo dm9pZCkgYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywgdGFyZ2V0X2Nvc3RfZGF0YSwgbnVt X21hc2tzIC0gMSwKKwkJCQl2ZWN0b3Jfc3RtdCwgTlVMTCwgTlVMTF9UUkVFLCAwLCB2ZWN0 X2JvZHkpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBnY2NfYXNzZXJ0IChMT09QX1ZJTkZP X0ZVTExZX1dJVEhfTEVOR1RIX1AgKGxvb3BfdmluZm8pKTsKKworCSAgLyogQ29uc2lkZXIg Y29zdCBmb3IgTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9BTElHTk1FTlQuICAqLworCSAgaWYg KG5wZWVsIDwgMCkKKwkgICAgeworCSAgICAgIHBlZWxfaXRlcnNfcHJvbG9ndWUgPSBhc3N1 bWVkX3ZmIC8gMjsKKwkgICAgICAvKiBTZWUgYmVsb3csIGlmIHBlZWxlZCBpdGVyYXRpb25z IGFyZSB1bmtub3duLCBjb3VudCBhIHRha2VuCisJCSBicmFuY2ggYW5kIGEgbm90IHRha2Vu IGJyYW5jaCBwZXIgcGVlbGVkIGxvb3AuICAqLworCSAgICAgICh2b2lkKSBhZGRfc3RtdF9j b3N0IChsb29wX3ZpbmZvLCB0YXJnZXRfY29zdF9kYXRhLCAxLAorCQkJCSAgICBjb25kX2Jy YW5jaF90YWtlbiwgTlVMTCwgTlVMTF9UUkVFLCAwLAorCQkJCSAgICB2ZWN0X3Byb2xvZ3Vl KTsKKwkgICAgICAodm9pZCkgYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywgdGFyZ2V0X2Nv c3RfZGF0YSwgMSwKKwkJCQkgICAgY29uZF9icmFuY2hfbm90X3Rha2VuLCBOVUxMLCBOVUxM X1RSRUUsIDAsCisJCQkJICAgIHZlY3RfcHJvbG9ndWUpOworCSAgICB9CisJICBlbHNlCisJ ICAgIHsKKwkgICAgICBwZWVsX2l0ZXJzX3Byb2xvZ3VlID0gbnBlZWw7CisJICAgICAgaWYg KCFMT09QX1ZJTkZPX05JVEVSU19LTk9XTl9QIChsb29wX3ZpbmZvKSkKKwkJLyogU2VlIHZl Y3RfZ2V0X2tub3duX3BlZWxpbmdfY29zdCwgaWYgcGVlbGVkIGl0ZXJhdGlvbnMgYXJlCisJ CSAgIGtub3duIGJ1dCBudW1iZXIgb2Ygc2NhbGFyIGxvb3AgaXRlcmF0aW9ucyBhcmUgdW5r bm93biwgY291bnQKKwkJICAgYSB0YWtlbiBicmFuY2ggcGVyIHBlZWxlZCBsb29wLiAgKi8K KwkJKHZvaWQpIGFkZF9zdG10X2Nvc3QgKGxvb3BfdmluZm8sIHRhcmdldF9jb3N0X2RhdGEs IDEsCisJCQkJICAgICAgY29uZF9icmFuY2hfdGFrZW4sIE5VTEwsIE5VTExfVFJFRSwgMCwK KwkJCQkgICAgICB2ZWN0X3Byb2xvZ3VlKTsKKwkgICAgfQorCisJICBzdG10X2luZm9fZm9y X2Nvc3QgKnNpOworCSAgaW50IGo7CisJICBGT1JfRUFDSF9WRUNfRUxUIChMT09QX1ZJTkZP X1NDQUxBUl9JVEVSQVRJT05fQ09TVCAobG9vcF92aW5mbyksIGosCisJCQkgICAgc2kpCisJ ICAgICh2b2lkKSBhZGRfc3RtdF9jb3N0IChsb29wX3ZpbmZvLCB0YXJnZXRfY29zdF9kYXRh LAorCQkJCSAgc2ktPmNvdW50ICogcGVlbF9pdGVyc19wcm9sb2d1ZSwgc2ktPmtpbmQsCisJ CQkJICBzaS0+c3RtdF9pbmZvLCBzaS0+dmVjdHlwZSwgc2ktPm1pc2FsaWduLAorCQkJCSAg dmVjdF9wcm9sb2d1ZSk7CisKKwkgIC8qIFJlZmVyIHRvIHRoZSBmdW5jdGlvbnMgdmVjdF9z ZXRfbG9vcF9jb25kaXRpb25fcGFydGlhbF92ZWN0b3JzCisJICAgICBhbmQgdmVjdF9zZXRf bG9vcF9jb250cm9sc19kaXJlY3RseSwgd2UgbmVlZCB0byBnZW5lcmF0ZSBlYWNoCisJICAg ICBsZW5ndGggaW4gdGhlIHByb2xvZ3VlIGFuZCBpbiB0aGUgbG9vcCBib2R5IGlmIHJlcXVp cmVkLiAgQWx0aG91Z2gKKwkgICAgIHRoZXJlIGFyZSBzb21lIHBvc3NpYmxlIG9wdGltaXph dGlvbiwgd2UgY29uc2lkZXIgdGhlIHdvcnN0IGNhc2UKKwkgICAgIGhlcmUuICAqLworCisJ ICAvKiBGb3Igbm93IHdlIG9ubHkgb3BlcmF0ZSBsZW5ndGgtYmFzZWQgcGFydGlhbCB2ZWN0 b3JzIG9uIFBvd2VyLAorCSAgICAgd2hpY2ggaGFzIGNvbnN0YW50IFZGIGFsbCB0aGUgdGlt ZSwgd2UgbmVlZCBzb21lIHR3ZWFraW5ncyBiZWxvdworCSAgICAgaWYgaXQgZG9lc24ndCBo b2xkIGluIGZ1dHVyZS4gICovCisJICBnY2NfYXNzZXJ0IChMT09QX1ZJTkZPX1ZFQ1RfRkFD VE9SIChsb29wX3ZpbmZvKS5pc19jb25zdGFudCAoKSk7CisKKwkgIC8qIEZvciB3cmFwIGFy b3VuZCBjaGVja2luZy4gICovCisJICB0cmVlIGNvbXBhcmVfdHlwZSA9IExPT1BfVklORk9f UkdST1VQX0NPTVBBUkVfVFlQRSAobG9vcF92aW5mbyk7CisJICB1bnNpZ25lZCBpbnQgY29t cGFyZV9wcmVjaXNpb24gPSBUWVBFX1BSRUNJU0lPTiAoY29tcGFyZV90eXBlKTsKKwkgIHdp ZGVzdF9pbnQgaXZfbGltaXQgPSB2ZWN0X2l2X2xpbWl0X2Zvcl9wYXJ0aWFsX3ZlY3RvcnMg KGxvb3BfdmluZm8pOworCisJICBib29sIG5pdGVyc19rbm93bl9wID0gTE9PUF9WSU5GT19O SVRFUlNfS05PV05fUCAobG9vcF92aW5mbyk7CisJICBib29sIG5lZWRfaXRlcmF0ZV9wCisJ ICAgID0gKCFMT09QX1ZJTkZPX0VQSUxPR1VFX1AgKGxvb3BfdmluZm8pCisJICAgICAgICYm ICF2ZWN0X2tub3duX25pdGVyc19zbWFsbGVyX3RoYW5fdmYgKGxvb3BfdmluZm8pKTsKKwor CSAgLyogSW5pdCBtaW4vbWF4LCBzaGlmdCBhbmQgbWludXMgY29zdCByZWxhdGl2ZSB0byBz aW5nbGUgc2NhbGFyX3N0bXQuCisJICAgICBGb3Igbm93IHdlIG9ubHkgdXNlIGxlbmd0aC1i YXNlZCBwYXJ0aWFsIHZlY3RvcnMgb24gUG93ZXIsIHRhcmdldAorCSAgICAgc3BlY2lmaWMg Y29zdCB0d2Vha2luZyBtYXkgYmUgbmVlZGVkIGZvciBvdGhlciBwb3J0cyBpbiBmdXR1cmUu ICAqLworCSAgdW5zaWduZWQgaW50IG1pbl9tYXhfY29zdCA9IDI7CisJICB1bnNpZ25lZCBp bnQgc2hpZnRfY29zdCA9IDEsIG1pbnVzX2Nvc3QgPSAxOworCisJICAvKiBJbml0IGNvc3Qg cmVsYXRpdmUgdG8gc2luZ2xlIHNjYWxhcl9zdG10LiAgKi8KKwkgIHVuc2lnbmVkIGludCBw cm9sX2NudCA9IDA7CisJICB1bnNpZ25lZCBpbnQgYm9keV9jbnQgPSAwOworCisJICByZ3Jv dXBfY29udHJvbHMgKnJnYzsKKwkgIHVuc2lnbmVkIGludCBudW1fdmVjdG9yc19tMTsKKwkg IEZPUl9FQUNIX1ZFQ19FTFQgKExPT1BfVklORk9fTEVOUyAobG9vcF92aW5mbyksIG51bV92 ZWN0b3JzX20xLCByZ2MpCisJICAgIGlmIChyZ2MtPnR5cGUpCisJICAgICAgeworCQl1bnNp Z25lZCBuaXRlbXMgPSByZ2MtPm1heF9uc2NhbGFyc19wZXJfaXRlciAqIHJnYy0+ZmFjdG9y OworCisJCS8qIE5lZWQgb25lIHNoaWZ0IGZvciBuaXRlcnNfdG90YWwgY29tcHV0YXRpb24u ICAqLworCQlpZiAoIW5pdGVyc19rbm93bl9wICYmIG5pdGVtcyAhPSAxKQorCQkgIHByb2xf Y250ICs9IHNoaWZ0X2Nvc3Q7CisKKwkJLyogTmVlZCB0byBoYW5kbGUgd3JhcCBhcm91bmQu ICAqLworCQlpZiAoaXZfbGltaXQgPT0gLTEKKwkJICAgIHx8ICh3aTo6bWluX3ByZWNpc2lv biAoaXZfbGltaXQgKiBuaXRlbXMsIFVOU0lHTkVEKQorCQkJPiBjb21wYXJlX3ByZWNpc2lv bikpCisJCSAgcHJvbF9jbnQgKz0gKG1pbl9tYXhfY29zdCArIG1pbnVzX2Nvc3QpOworCisJ CS8qIE5lZWQgdG8gaGFuZGxlIGJhdGNoIGxpbWl0IGV4Y2VwdGluZyBmb3IgdGhlIDFzdCBv bmUuICAqLworCQlwcm9sX2NudCArPSAobWluX21heF9jb3N0ICsgbWludXNfY29zdCkgKiBu dW1fdmVjdG9yc19tMTsKKworCQl1bnNpZ25lZCBpbnQgbnVtX3ZlY3RvcnMgPSBudW1fdmVj dG9yc19tMSArIDE7CisJCS8qIE5lZWQgdG8gc2V0IHVwIGxlbmd0aHMgaW4gcHJvbG9ndWUs IG9ubHkgb25lIE1JTiByZXF1aXJlZAorCQkgICBzaW5jZSBzdGFydCBpbmRleCBpcyB6ZXJv LiAgKi8KKwkJcHJvbF9jbnQgKz0gbWluX21heF9jb3N0ICogbnVtX3ZlY3RvcnM7CisKKwkJ LyogTmVlZCB0byB1cGRhdGUgbGVuZ3RocyBpbiBib2R5IGZvciBuZXh0IGl0ZXJhdGlvbi4g ICovCisJCWlmIChuZWVkX2l0ZXJhdGVfcCkKKwkJICBib2R5X2NudCArPSAoMiAqIG1pbl9t YXhfY29zdCArIG1pbnVzX2Nvc3QpICogbnVtX3ZlY3RvcnM7CisJICAgICAgfQorCisJICAo dm9pZCkgYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywgdGFyZ2V0X2Nvc3RfZGF0YSwgcHJv bF9jbnQsCisJCQkJc2NhbGFyX3N0bXQsIE5VTEwsIE5VTExfVFJFRSwgMCwgdmVjdF9wcm9s b2d1ZSk7CisJICAodm9pZCkgYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywgdGFyZ2V0X2Nv c3RfZGF0YSwgYm9keV9jbnQsCisJCQkJc2NhbGFyX3N0bXQsIE5VTEwsIE5VTExfVFJFRSwg MCwgdmVjdF9ib2R5KTsKKwl9CiAgICAgfQogICBlbHNlIGlmIChucGVlbCA8IDApCiAgICAg ewpAQCAtMzkxMyw4ICs0MDEzLDggQEAgdmVjdF9lc3RpbWF0ZV9taW5fcHJvZml0YWJsZV9p dGVycyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLAogICAgIH0KIAogICAvKiA/Pz8gVGhl ICJpZiIgYXJtIGlzIHdyaXR0ZW4gdG8gaGFuZGxlIGFsbCBjYXNlczsgc2VlIGJlbG93IGZv ciB3aGF0Ci0gICAgIHdlIHdvdWxkIGRvIGZvciAhTE9PUF9WSU5GT19GVUxMWV9NQVNLRURf UC4gICovCi0gIGlmIChMT09QX1ZJTkZPX0ZVTExZX01BU0tFRF9QIChsb29wX3ZpbmZvKSkK KyAgICAgd2Ugd291bGQgZG8gZm9yICFMT09QX1ZJTkZPX1VTSU5HX1BBUlRJQUxfVkVDVE9S U19QLiAgKi8KKyAgaWYgKExPT1BfVklORk9fVVNJTkdfUEFSVElBTF9WRUNUT1JTX1AgKGxv b3BfdmluZm8pKQogICAgIHsKICAgICAgIC8qIFJld3JpdGluZyB0aGUgY29uZGl0aW9uIGFi b3ZlIGluIHRlcm1zIG9mIHRoZSBudW1iZXIgb2YKIAkgdmVjdG9yIGl0ZXJhdGlvbnMgKHZu aXRlcnMpIHJhdGhlciB0aGFuIHRoZSBudW1iZXIgb2YKQEAgLTM5NDEsNyArNDA0MSw3IEBA IHZlY3RfZXN0aW1hdGVfbWluX3Byb2ZpdGFibGVfaXRlcnMgKGxvb3BfdmVjX2luZm8gbG9v cF92aW5mbywKIAlkdW1wX3ByaW50ZiAoTVNHX05PVEUsICIgIE1pbmltdW0gbnVtYmVyIG9m IHZlY3RvciBpdGVyYXRpb25zOiAlZFxuIiwKIAkJICAgICBtaW5fdmVjX25pdGVycyk7CiAK LSAgICAgIGlmIChMT09QX1ZJTkZPX0ZVTExZX01BU0tFRF9QIChsb29wX3ZpbmZvKSkKKyAg ICAgIGlmIChMT09QX1ZJTkZPX1VTSU5HX1BBUlRJQUxfVkVDVE9SU19QIChsb29wX3ZpbmZv KSkKIAl7CiAJICAvKiBOb3cgdGhhdCB3ZSBrbm93IHRoZSBtaW5pbXVtIG51bWJlciBvZiB2 ZWN0b3IgaXRlcmF0aW9ucywKIAkgICAgIGZpbmQgdGhlIG1pbmltdW0gbml0ZXJzIGZvciB3 aGljaCB0aGUgc2NhbGFyIGNvc3QgaXMgbGFyZ2VyOgpAQCAtMzk5Niw2ICs0MDk2LDEwIEBA IHZlY3RfZXN0aW1hdGVfbWluX3Byb2ZpdGFibGVfaXRlcnMgKGxvb3BfdmVjX2luZm8gbG9v cF92aW5mbywKICAgICAgICYmIG1pbl9wcm9maXRhYmxlX2l0ZXJzIDwgKGFzc3VtZWRfdmYg KyBwZWVsX2l0ZXJzX3Byb2xvZ3VlKSkKICAgICAvKiBXZSB3YW50IHRoZSB2ZWN0b3JpemVk IGxvb3AgdG8gZXhlY3V0ZSBhdCBsZWFzdCBvbmNlLiAgKi8KICAgICBtaW5fcHJvZml0YWJs ZV9pdGVycyA9IGFzc3VtZWRfdmYgKyBwZWVsX2l0ZXJzX3Byb2xvZ3VlOworICBlbHNlIGlm IChtaW5fcHJvZml0YWJsZV9pdGVycyA8IHBlZWxfaXRlcnNfcHJvbG9ndWUpCisgICAgLyog Rm9yIExPT1BfVklORk9fVVNJTkdfUEFSVElBTF9WRUNUT1JTX1AsIHdlIG5lZWQgdG8gZW5z dXJlIHRoZQorICAgICAgIHZlY3Rvcml6ZWQgbG9vcCB0byBleGVjdXRlIGF0IGxlYXN0IG9u Y2UuICAqLworICAgIG1pbl9wcm9maXRhYmxlX2l0ZXJzID0gcGVlbF9pdGVyc19wcm9sb2d1 ZTsKIAogICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCiAgICAgZHVtcF9wcmludGZfbG9jIChN U0dfTk9URSwgdmVjdF9sb2NhdGlvbiwKQEAgLTQwMTMsNyArNDExNyw3IEBAIHZlY3RfZXN0 aW1hdGVfbWluX3Byb2ZpdGFibGVfaXRlcnMgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywK IAogICBpZiAodmVjX291dHNpZGVfY29zdCA8PSAwKQogICAgIG1pbl9wcm9maXRhYmxlX2Vz dGltYXRlID0gMDsKLSAgZWxzZSBpZiAoTE9PUF9WSU5GT19GVUxMWV9NQVNLRURfUCAobG9v cF92aW5mbykpCisgIGVsc2UgaWYgKExPT1BfVklORk9fVVNJTkdfUEFSVElBTF9WRUNUT1JT X1AgKGxvb3BfdmluZm8pKQogICAgIHsKICAgICAgIC8qIFRoaXMgaXMgYSByZXBlYXQgb2Yg dGhlIGNvZGUgYWJvdmUsIGJ1dCB3aXRoICsgU09DIHJhdGhlcgogCSB0aGFuIC0gU09DLiAg Ki8KQEAgLTQwMjUsNyArNDEyOSw3IEBAIHZlY3RfZXN0aW1hdGVfbWluX3Byb2ZpdGFibGVf aXRlcnMgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywKICAgICAgIGlmIChvdXRzaWRlX292 ZXJoZWFkID4gMCkKIAltaW5fdmVjX25pdGVycyA9IG91dHNpZGVfb3ZlcmhlYWQgLyBzYXZp bmdfcGVyX3ZpdGVyICsgMTsKIAotICAgICAgaWYgKExPT1BfVklORk9fRlVMTFlfTUFTS0VE X1AgKGxvb3BfdmluZm8pKQorICAgICAgaWYgKExPT1BfVklORk9fVVNJTkdfUEFSVElBTF9W RUNUT1JTX1AgKGxvb3BfdmluZm8pKQogCXsKIAkgIGludCB0aHJlc2hvbGQgPSAodmVjX2lu c2lkZV9jb3N0ICogbWluX3ZlY19uaXRlcnMKIAkJCSAgICsgdmVjX291dHNpZGVfY29zdAo= --------------B7494EA4499F961BEFCE1566--