From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24287 invoked by alias); 30 Aug 2017 16:32:31 -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 24277 invoked by uid 89); 30 Aug 2017 16:32:30 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.7 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,KAM_LOTSOFHASH,RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy= X-HELO: foss.arm.com Received: from usa-sjc-mx-foss1.foss.arm.com (HELO foss.arm.com) (217.140.101.70) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 30 Aug 2017 16:32:27 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id AC85980D; Wed, 30 Aug 2017 09:32:25 -0700 (PDT) Received: from [10.2.206.195] (e112997-lin.cambridge.arm.com [10.2.206.195]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 947A93F483; Wed, 30 Aug 2017 09:32:24 -0700 (PDT) Subject: Re: [PATCH] Factor out division by squares and remove division around comparisons (2/2) To: Richard Biener Cc: wilco.dijkstra@arm.com, kyrylo.tkachov@foss.arm.com, "Joseph S. Myers" , GCC Patches References: From: Jackson Woodruff Message-ID: Date: Wed, 30 Aug 2017 17:08:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------7F27C08589C72ADF6B44F50F" X-IsSubscribed: yes X-SW-Source: 2017-08/txt/msg01740.txt.bz2 This is a multi-part message in MIME format. --------------7F27C08589C72ADF6B44F50F Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 2461 Hi all, I've attached a new version of the patch in response to a few of Wilco's comments in person. The end product of the pass is still the same, but I have fixed several bugs. Now tested independently of the other patches. On 08/15/2017 03:07 PM, Richard Biener wrote: > On Thu, Aug 10, 2017 at 4:10 PM, Jackson Woodruff > wrote: >> Hi all, >> >> The patch implements the some of the division optimizations discussed in >> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71026 . >> >> We now reassociate (as discussed in the bug report): >> >> x / (y * y) -> x * (1 / y) * (1 / y) >> >> If it is reasonable to do so. This is done with >> -funsafe-math-optimizations. >> >> Bootstrapped and regtested with part (1/2). OK for trunk? > > I believe your enhancement shows the inherent weakness of > CSE of reciprocals in that it works from the defs. It will > handle x / (y * y) but not x / (y * y * y). > > I think a rewrite of this mini-pass is warranted. I suspect that there might be more to gain by of handling the case of x / (y * z) rather than the case of x / (y**n), but I agree that this pass could do more. > > Richard. > >> Jackson >> >> gcc/ >> >> 2017-08-03 Jackson Woodruff >> >> PR 71026/tree-optimization >> * tree-ssa-math-opts (is_division_by_square, >> is_square_of, insert_sqaure_reciprocals): New. >> (insert_reciprocals): Change to insert reciprocals >> before a division by a square. >> (execute_cse_reciprocals_1): Change to consider >> division by a square. >> >> >> gcc/testsuite >> >> 2017-08-03 Jackson Woodruff >> >> PR 71026/tree-optimization >> * gcc.dg/associate_division_1.c: New. >> Thanks, Jackson. Updated ChangeLog: gcc/ 2017-08-30 Jackson Woodruff PR 71026/tree-optimization * tree-ssa-math-opts (is_division_by_square, is_square_of): New. (insert_reciprocals): Change to insert reciprocals before a division by a square and to insert the square of a reciprocal. (execute_cse_reciprocals_1): Change to consider division by a square. (register_division_in): Add importance parameter. gcc/testsuite 2017-08-30 Jackson Woodruff PR 71026/tree-optimization * gcc.dg/extract_recip_3.c: New. * gcc.dg/extract_recip_4.c: New. * gfortran.dg/extract_recip_1.f: New. --------------7F27C08589C72ADF6B44F50F Content-Type: text/plain; charset=UTF-8; name="patchfile-2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patchfile-2" Content-length: 19236 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2V4dHJhY3RfcmVj aXBfMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZXh0cmFjdF9yZWNpcF8z LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGVhM2ZkZjVjY2EwNmEwODA2 YTU1MTg1ZTAwMDBmOGIwYTRiMDUwNwotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL2V4dHJhY3RfcmVjaXBfMy5jCkBAIC0wLDAg KzEsMjkgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9w dGlvbnMgIi1PZmFzdCAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8KKwor ZmxvYXQKK2V4dHJhY3Rfc3F1YXJlIChmbG9hdCB4LCBmbG9hdCB5LCBmbG9h dCAqYSwgZmxvYXQgKmIpCit7CisgICphID0gMyAvICh5ICogeSk7CisgICpi ID0gNSAvICh5ICogeSk7CisKKyAgcmV0dXJuIHggLyAoeSAqIHkpOworfQor CisvKiBEb24ndCBleHBlY3QgdGhlICdwb3dtdWx0JyAoY2FsY3VsYXRpb24g b2YgeSAqIHkpCisgICB0byBiZSBkZWxldGVkIHVudGlsIGEgbGF0ZXIgcGFz cywgc28gbG9vayBmb3Igb25lCisgICBtb3JlIG11bHRpcGxpY2F0aW9uIHRo YW4gc3RyaWN0bHkgbmVjZXNzYXJ5LiAgKi8KK2Zsb2F0CitleHRyYWN0X3Jl Y2lwIChmbG9hdCAqdywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikKK3sK KyAgKncgPSA3IC8geTsKKworICByZXR1cm4geCAvICh5ICogeSkgKyB6IC8g eTsKK30KKworLyogMyBGb3IgdGhlIHBvaW50ZXJzIHRvIGEsIGIgYW5kIHcs IDQgbXVsdGlwbGljYXRpb25zIGluICdleHRyYWN0X3NxdWFyZScsCisgICA1 IG11bHRpcGxpY2F0aW9ucyBpbiAnZXh0cmFjdF9yZWNpcCcgZXhwZWN0ZWQu ICAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIg XFwqICIgMTIgIm9wdGltaXplZCIgfSB9ICovCisKKy8qIDEgZGl2aXNpb24g aW4gJ2V4dHJhY3Rfc3F1YXJlJywgMSBkaXZpc2lvbiBpbiAnZXh0cmFjdF9y ZWNpcCcuICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgIiAvICIgMiAib3B0aW1pemVkIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL2V4dHJhY3RfcmVjaXBfNC5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvZXh0cmFjdF9yZWNpcF80LmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uNWEzMWQ0MGVkOTEwY2RkMTkxNGNjMWU4MjM1ODQ5M2Jl NDI4OTQ2YQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL2V4dHJhY3RfcmVjaXBfNC5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qIHsg ZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PZmFzdCAt ZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8KKworLyogRG9uJ3QgZXhwZWN0 IGFueSBvZiB0aGVzZSBkaXZpc2lvbnMgdG8gYmUgZXh0cmFjdGVkLiAgKi8K K2RvdWJsZSBmIChkb3VibGUgeCwgaW50IHApCit7CisgIGlmIChwID4gMCkK KyAgICB7CisgICAgICByZXR1cm4gMS4wLyh4ICogeCk7CisgICAgfQorCisg IGlmIChwID4gLTEpCisgICAgeworICAgICAgcmV0dXJuIHggKiB4ICogeDsK KyAgICB9CisgIHJldHVybiAgMS4wIC8oeCk7Cit9CisKKy8qIEV4cGVjdCBh IHJlY2lwcm9jYWwgdG8gYmUgZXh0cmFjdGVkIGhlcmUuICAqLworZG91Ymxl IGcgKGRvdWJsZSB4LCBkb3VibGUgeSkKK3sKKyAgZG91YmxlIGsgPSB4IC8g KHkgKiB5KTsKKworICBpZiAoeSAqIHkgPT0gMi4wKQorICAgIHJldHVybiBr ICsgMSAvIHk7CisgIGVsc2UKKyAgICByZXR1cm4gayAtIDEgLyB5OworfQor CisvKiBFeHBlY3QgMiBkaXZpc2lvbnMgaW4gJ2YnIGFuZCAxIGluICdnJy4g ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIiAv ICIgMyAib3B0aW1pemVkIiB9IH0gKi8KKy8qIEV4cGVjdCAzIG11bHRpcGxp Y2F0aW9ucyBpbiAnZicgYW5kIDMgaW4gJ2cnLiAgKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiIFxcKiAiIDYgIm9wdGltaXpl ZCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFu LmRnL2V4dHJhY3RfcmVjaXBfMS5mIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJh bi5kZy9leHRyYWN0X3JlY2lwXzEuZgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li5lY2YwNTE4OTc3M2I2YzJmNDYyMjI4NTdmZDg4ZmQwMTBiZmRmMzQ4Ci0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9l eHRyYWN0X3JlY2lwXzEuZgpAQCAtMCwwICsxLDE5IEBACishIHsgZGctZG8g Y29tcGlsZSB9CishIHsgZGctb3B0aW9ucyAiLU9mYXN0IC1mZHVtcC10cmVl LW9wdGltaXplZCIgfQorCisgICAgICBTVUJST1VUSU5FIEYoTixYLFksWixB LEIpCisgICAgICAgICAgRElNRU5TSU9OIFgoMCw0KSwgWSg0KSwgWig0KQor ICAgICAgICAgIFJFQUwsIElOVEVOVChJTk9VVCkgOjogQSwgQgorCisgICAg ICAgICAgQSA9IDEgLyBZKE4pKlkoTikKKworICAgICAgICAgIERPIEkgPSAx LCBOVgorICAgICAgICAgIFgoSSwgSSkgPSAxICsgWChJLCBJKQorICAgICAg ICAgIEVORERPCisKKyAgICAgICAgICBaKDEpID0gIEIgLyBZKE4pCisgICAg ICAgICAgWigyKSA9ICBOIC8gWShOKQorICAgICAgICAgIFJFVFVSTgorICAg ICAgRU5ECisKKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICIgLyAiIDEgIm9wdGltaXplZCIgfSB9CmRpZmYgLS1naXQgYS9nY2MvdHJl ZS1zc2EtbWF0aC1vcHRzLmMgYi9nY2MvdHJlZS1zc2EtbWF0aC1vcHRzLmMK aW5kZXggZGYwYmNkNmQ0NTkxMTkyNDNhNjlmYzY1MmU3NjFmOTBkNTc0Y2E3 OC4uZjJlMzA4YWVlOTcwMTQ3YjA1YjVlMGQ4ZTVhYTE5NDk5YWZhNDFjNyAx MDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLW1hdGgtb3B0cy5jCisrKyBiL2dj Yy90cmVlLXNzYS1tYXRoLW9wdHMuYwpAQCAtMTI3LDYgKzEyNywxMCBAQCBz dHJ1Y3Qgb2NjdXJyZW5jZSB7CiAgICAgIGluc2VydGVkIGluIEJCLiAgKi8K ICAgdHJlZSByZWNpcF9kZWY7CiAKKyAgLyogSWYgbm9uLU5VTEwsIHRoZSBT U0FfTkFNRSBob2xkaW5nIHRoZSBkZWZpbml0aW9uIGZvciBhIHNxdWFyZWQK KyAgICAgcmVjaXByb2NhbCBpbnNlcnRlZCBpbiBCQi4gICovCisgIHRyZWUg c3F1YXJlX3JlY2lwX2RlZjsKKwogICAvKiBJZiBub24tTlVMTCwgdGhlIEdJ TVBMRV9BU1NJR04gZm9yIGEgcmVjaXByb2NhbCBjb21wdXRhdGlvbiB0aGF0 CiAgICAgIHdhcyBpbnNlcnRlZCBpbiBCQi4gICovCiAgIGdpbXBsZSAqcmVj aXBfZGVmX3N0bXQ7CkBAIC0yODIsMTAgKzI4NiwxNCBAQCBpbnNlcnRfYmIg KHN0cnVjdCBvY2N1cnJlbmNlICpuZXdfb2NjLCBiYXNpY19ibG9jayBpZG9t LAogICAqcF9oZWFkID0gbmV3X29jYzsKIH0KIAotLyogUmVnaXN0ZXIgdGhh dCB3ZSBmb3VuZCBhIGRpdmlzaW9uIGluIEJCLiAgKi8KKy8qIFJlZ2lzdGVy IHRoYXQgd2UgZm91bmQgYSBkaXZpc2lvbiBpbiBCQi4KKyAgIElNUE9SVEFO Q0UgaXMgYSBtZWFzdXJlIG9mIGhvdyBtdWNoIHdlaWdodGluZyB0byBnaXZl CisgICB0aGF0IGRpdmlzaW9uLiAgVXNlIElNUE9SVEFOQ0UgPSAyIHRvIHJl Z2lzdGVyIGEgc2luZ2xlCisgICBkaXZpc2lvbi4gIElmIHRoZSBkaXZpc2lv biBpcyBnb2luZyB0byBiZSBmb3VuZCBtdWx0aXBsZQorICAgdGltZXMgdXNl IDEgKGFzIGl0IGlzIHdpdGggc3F1YXJlcykuICAqLwogCiBzdGF0aWMgaW5s aW5lIHZvaWQKLXJlZ2lzdGVyX2RpdmlzaW9uX2luIChiYXNpY19ibG9jayBi YikKK3JlZ2lzdGVyX2RpdmlzaW9uX2luIChiYXNpY19ibG9jayBiYiwgaW50 IGltcG9ydGFuY2UpCiB7CiAgIHN0cnVjdCBvY2N1cnJlbmNlICpvY2M7CiAK QEAgLTI5Nyw3ICszMDUsNyBAQCByZWdpc3Rlcl9kaXZpc2lvbl9pbiAoYmFz aWNfYmxvY2sgYmIpCiAgICAgfQogCiAgIG9jYy0+YmJfaGFzX2RpdmlzaW9u ID0gdHJ1ZTsKLSAgb2NjLT5udW1fZGl2aXNpb25zKys7CisgIG9jYy0+bnVt X2RpdmlzaW9ucyArPSBpbXBvcnRhbmNlOwogfQogCiAKQEAgLTM0MCw2ICsz NDgsMzkgQEAgaXNfZGl2aXNpb25fYnkgKGdpbXBsZSAqdXNlX3N0bXQsIHRy ZWUgZGVmKQogCSAmJiBnaW1wbGVfYXNzaWduX3JoczEgKHVzZV9zdG10KSAh PSBkZWY7CiB9CiAKKy8qIFJldHVybiB3aGV0aGVyIFVTRV9TVE1UIGlzIERF RiAqIERFRi4gICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2lzX3NxdWFyZV9v ZiAoZ2ltcGxlICp1c2Vfc3RtdCwgdHJlZSBkZWYpCit7CisgIGlmIChnaW1w bGVfY29kZSAodXNlX3N0bXQpID09IEdJTVBMRV9BU1NJR04KKyAgICAgICYm IGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKHVzZV9zdG10KSA9PSBNVUxUX0VY UFIpCisgICAgeworICAgICAgdHJlZSBvcDAgPSBnaW1wbGVfYXNzaWduX3Jo czEgKHVzZV9zdG10KTsKKyAgICAgIHRyZWUgb3AxID0gZ2ltcGxlX2Fzc2ln bl9yaHMyICh1c2Vfc3RtdCk7CisKKyAgICAgIHJldHVybiBvcDAgPT0gb3Ax ICYmIG9wMCA9PSBkZWY7CisgICAgfQorICByZXR1cm4gMDsKK30KKworLyog UmV0dXJuIHdoZXRoZXIgVVNFX1NUTVQgaXMgYSBmbG9hdGluZy1wb2ludCBk aXZpc2lvbiBieQorICAgREVGICogREVGLiAgKi8KK3N0YXRpYyBpbmxpbmUg Ym9vbAoraXNfZGl2aXNpb25fYnlfc3F1YXJlIChnaW1wbGUgKnVzZV9zdG10 LCB0cmVlIGRlZikKK3sKKyAgaWYgKGdpbXBsZV9jb2RlICh1c2Vfc3RtdCkg PT0gR0lNUExFX0FTU0lHTgorICAgICAgJiYgZ2ltcGxlX2Fzc2lnbl9yaHNf Y29kZSAodXNlX3N0bXQpID09IFJESVZfRVhQUgorICAgICAgJiYgZ2ltcGxl X2Fzc2lnbl9yaHMxICh1c2Vfc3RtdCkgIT0gZ2ltcGxlX2Fzc2lnbl9yaHMy ICh1c2Vfc3RtdCkpCisgICAgeworICAgICAgdHJlZSBkZW5vbWluYXRvciA9 IGdpbXBsZV9hc3NpZ25fcmhzMiAodXNlX3N0bXQpOworICAgICAgaWYgKFRS RUVfQ09ERSAoZGVub21pbmF0b3IpID09IFNTQV9OQU1FKQorCXsKKwkgIHJl dHVybiBpc19zcXVhcmVfb2YgKFNTQV9OQU1FX0RFRl9TVE1UIChkZW5vbWlu YXRvciksIGRlZik7CisJfQorICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKIC8q IFdhbGsgdGhlIHN1YnNldCBvZiB0aGUgZG9taW5hdG9yIHRyZWUgcm9vdGVk IGF0IE9DQywgc2V0dGluZyB0aGUKICAgIFJFQ0lQX0RFRiBmaWVsZCB0byBh IGRlZmluaXRpb24gb2YgMS4wIC8gREVGIHRoYXQgY2FuIGJlIHVzZWQgaW4K ICAgIHRoZSBnaXZlbiBiYXNpYyBibG9jay4gIFRoZSBmaWVsZCBtYXkgYmUg bGVmdCBOVUxMLCBvZiBjb3Vyc2UsCkBAIC0zNDcsMjAgKzM4OCwyNyBAQCBp c19kaXZpc2lvbl9ieSAoZ2ltcGxlICp1c2Vfc3RtdCwgdHJlZSBkZWYpCiAK ICAgIERFRl9CU0kgaXMgYW4gaXRlcmF0b3IgcG9pbnRpbmcgYXQgdGhlIHN0 YXRlbWVudCBkZWZpbmluZyBERUYuCiAgICBJZiBSRUNJUF9ERUYgaXMgc2V0 LCBhIGRvbWluYXRvciBhbHJlYWR5IGhhcyBhIGNvbXB1dGF0aW9uIHRoYXQg Y2FuCi0gICBiZSB1c2VkLiAgKi8KKyAgIGJlIHVzZWQuCisKKyAgIElmIHNo b3VsZF9pbnNlcnRfc3F1YXJlX3JlY2lwIGlzIHNldCwgdGhlbiB0aGlzIGFs c28gaW5zZXJ0cworICAgdGhlIHNxdWFyZSBvZiB0aGUgcmVjaXByb2NhbCBp bW1lZGlhdGVseSBhZnRlciB0aGUgZGVmaW5pdGlvbgorICAgb2YgdGhlIHJl Y2lwcm9jYWwuICAqLwogCiBzdGF0aWMgdm9pZAogaW5zZXJ0X3JlY2lwcm9j YWxzIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZGVmX2dzaSwgc3RydWN0IG9j Y3VycmVuY2UgKm9jYywKLQkJICAgIHRyZWUgZGVmLCB0cmVlIHJlY2lwX2Rl ZiwgaW50IHRocmVzaG9sZCkKKwkJICAgIHRyZWUgZGVmLCB0cmVlIHJlY2lw X2RlZiwgdHJlZSBzcXVhcmVfcmVjaXBfZGVmLAorCQkgICAgaW50IHNob3Vs ZF9pbnNlcnRfc3F1YXJlX3JlY2lwLCBpbnQgdGhyZXNob2xkKQogewogICB0 cmVlIHR5cGU7Ci0gIGdhc3NpZ24gKm5ld19zdG10OworICBnYXNzaWduICpu ZXdfc3RtdCwgKm5ld19zcXVhcmVfc3RtdDsKICAgZ2ltcGxlX3N0bXRfaXRl cmF0b3IgZ3NpOwogICBzdHJ1Y3Qgb2NjdXJyZW5jZSAqb2NjX2NoaWxkOwog CiAgIGlmICghcmVjaXBfZGVmCiAgICAgICAmJiAob2NjLT5iYl9oYXNfZGl2 aXNpb24gfHwgIWZsYWdfdHJhcHBpbmdfbWF0aCkKLSAgICAgICYmIG9jYy0+ bnVtX2RpdmlzaW9ucyA+PSB0aHJlc2hvbGQpCisgICAgICAvKiBEaXZpZGUg YnkgdHdvIGFzIGFsbCBkaXZpc2lvbnMgYXJlIGNvdW50ZWQgdHdpY2UgaW4K KwkgdGhlIGNvc3RpbmcgbG9vcC4gICovCisgICAgICAmJiBvY2MtPm51bV9k aXZpc2lvbnMgLyAyID49IHRocmVzaG9sZCkKICAgICB7CiAgICAgICAvKiBN YWtlIGEgdmFyaWFibGUgd2l0aCB0aGUgcmVwbGFjZW1lbnQgYW5kIHN1YnN0 aXR1dGUgaXQuICAqLwogICAgICAgdHlwZSA9IFRSRUVfVFlQRSAoZGVmKTsK QEAgLTM2OCwyOSArNDE2LDQ0IEBAIGluc2VydF9yZWNpcHJvY2FscyAoZ2lt cGxlX3N0bXRfaXRlcmF0b3IgKmRlZl9nc2ksIHN0cnVjdCBvY2N1cnJlbmNl ICpvY2MsCiAgICAgICBuZXdfc3RtdCA9IGdpbXBsZV9idWlsZF9hc3NpZ24g KHJlY2lwX2RlZiwgUkRJVl9FWFBSLAogCQkJCSAgICAgIGJ1aWxkX29uZV9j c3QgKHR5cGUpLCBkZWYpOwogCisgICAgICBpZiAoc2hvdWxkX2luc2VydF9z cXVhcmVfcmVjaXApCisJeworCSAgc3F1YXJlX3JlY2lwX2RlZiA9IGNyZWF0 ZV90bXBfcmVnICh0eXBlLCAicG93bXVsdF9yZWNpcHRtcCIpOworCSAgbmV3 X3NxdWFyZV9zdG10ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAoc3F1YXJlX3Jl Y2lwX2RlZiwgTVVMVF9FWFBSLAorCQkJCQkJIHJlY2lwX2RlZiwgcmVjaXBf ZGVmKTsKKwl9CisKICAgICAgIGlmIChvY2MtPmJiX2hhc19kaXZpc2lvbikK LSAgICAgICAgewotICAgICAgICAgIC8qIENhc2UgMTogaW5zZXJ0IGJlZm9y ZSBhbiBleGlzdGluZyBkaXZpc2lvbi4gICovCi0gICAgICAgICAgZ3NpID0g Z3NpX2FmdGVyX2xhYmVscyAob2NjLT5iYik7Ci0gICAgICAgICAgd2hpbGUg KCFnc2lfZW5kX3AgKGdzaSkgJiYgIWlzX2RpdmlzaW9uX2J5IChnc2lfc3Rt dCAoZ3NpKSwgZGVmKSkKKwl7CisJICAvKiBDYXNlIDE6IGluc2VydCBiZWZv cmUgYW4gZXhpc3RpbmcgZGl2aXNpb24uICAqLworCSAgZ3NpID0gZ3NpX2Fm dGVyX2xhYmVscyAob2NjLT5iYik7CisJICB3aGlsZSAoIWdzaV9lbmRfcCAo Z3NpKQorCQkgJiYgKCFpc19kaXZpc2lvbl9ieSAoZ3NpX3N0bXQgKGdzaSks IGRlZikpCisJCSAmJiAoIWlzX2RpdmlzaW9uX2J5X3NxdWFyZSAoZ3NpX3N0 bXQgKGdzaSksIGRlZikpKQogCSAgICBnc2lfbmV4dCAoJmdzaSk7CiAKLSAg ICAgICAgICBnc2lfaW5zZXJ0X2JlZm9yZSAoJmdzaSwgbmV3X3N0bXQsIEdT SV9TQU1FX1NUTVQpOwotICAgICAgICB9CisJICBnc2lfaW5zZXJ0X2JlZm9y ZSAoJmdzaSwgbmV3X3N0bXQsIEdTSV9TQU1FX1NUTVQpOworCX0KICAgICAg IGVsc2UgaWYgKGRlZl9nc2kgJiYgb2NjLT5iYiA9PSBkZWZfZ3NpLT5iYikK LSAgICAgICAgewotICAgICAgICAgIC8qIENhc2UgMjogaW5zZXJ0IHJpZ2h0 IGFmdGVyIHRoZSBkZWZpbml0aW9uLiAgTm90ZSB0aGF0IHRoaXMgd2lsbAor CXsKKwkgIC8qIENhc2UgMjogaW5zZXJ0IHJpZ2h0IGFmdGVyIHRoZSBkZWZp bml0aW9uLiAgTm90ZSB0aGF0IHRoaXMgd2lsbAogCSAgICAgbmV2ZXIgaGFw cGVuIGlmIHRoZSBkZWZpbml0aW9uIHN0YXRlbWVudCBjYW4gdGhyb3csIGJl Y2F1c2UgaW4KIAkgICAgIHRoYXQgY2FzZSB0aGUgc29sZSBzdWNjZXNzb3Ig b2YgdGhlIHN0YXRlbWVudCdzIGJhc2ljIGJsb2NrIHdpbGwKIAkgICAgIGRv bWluYXRlIGFsbCB0aGUgdXNlcyBhcyB3ZWxsLiAgKi8KLSAgICAgICAgICBn c2lfaW5zZXJ0X2FmdGVyIChkZWZfZ3NpLCBuZXdfc3RtdCwgR1NJX05FV19T VE1UKTsKLSAgICAgICAgfQorCSAgZ3NpID0gKmRlZl9nc2k7CisJICBnc2lf aW5zZXJ0X2FmdGVyIChkZWZfZ3NpLCBuZXdfc3RtdCwgR1NJX05FV19TVE1U KTsKKwl9CiAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvKiBD YXNlIDM6IGluc2VydCBpbiBhIGJhc2ljIGJsb2NrIG5vdCBjb250YWluaW5n IGRlZnMvdXNlcy4gICovCi0gICAgICAgICAgZ3NpID0gZ3NpX2FmdGVyX2xh YmVscyAob2NjLT5iYik7Ci0gICAgICAgICAgZ3NpX2luc2VydF9iZWZvcmUg KCZnc2ksIG5ld19zdG10LCBHU0lfU0FNRV9TVE1UKTsKLSAgICAgICAgfQor CXsKKwkgIC8qIENhc2UgMzogaW5zZXJ0IGluIGEgYmFzaWMgYmxvY2sgbm90 IGNvbnRhaW5pbmcgZGVmcy91c2VzLiAgKi8KKwkgIGdzaSA9IGdzaV9hZnRl cl9sYWJlbHMgKG9jYy0+YmIpOworCSAgZ3NpX2luc2VydF9iZWZvcmUgKCZn c2ksIG5ld19zdG10LCBHU0lfU0FNRV9TVE1UKTsKKwl9CisKKyAgICAgIC8q IFJlZ2FyZGxlc3Mgb2Ygd2hpY2ggY2FzZSB0aGUgcmVjaXByb2NhbCBhcyBp bnNlcnRlZCBpbiwKKwkgd2UgaW5zZXJ0IHRoZSBzcXVhcmUgaW1tZWRpYXRl bHkgYWZ0ZXIgdGhlIHJlY2lwcm9jYWwuICAqLworICAgICAgaWYgKHNob3Vs ZF9pbnNlcnRfc3F1YXJlX3JlY2lwKQorCWdzaV9pbnNlcnRfYmVmb3JlICgm Z3NpLCBuZXdfc3F1YXJlX3N0bXQsIEdTSV9TQU1FX1NUTVQpOwogCiAgICAg ICByZWNpcHJvY2FsX3N0YXRzLnJkaXZzX2luc2VydGVkKys7CiAKQEAgLTM5 OCw4ICs0NjEsMzIgQEAgaW5zZXJ0X3JlY2lwcm9jYWxzIChnaW1wbGVfc3Rt dF9pdGVyYXRvciAqZGVmX2dzaSwgc3RydWN0IG9jY3VycmVuY2UgKm9jYywK ICAgICB9CiAKICAgb2NjLT5yZWNpcF9kZWYgPSByZWNpcF9kZWY7CisgIG9j Yy0+c3F1YXJlX3JlY2lwX2RlZiA9IHNxdWFyZV9yZWNpcF9kZWY7CiAgIGZv ciAob2NjX2NoaWxkID0gb2NjLT5jaGlsZHJlbjsgb2NjX2NoaWxkOyBvY2Nf Y2hpbGQgPSBvY2NfY2hpbGQtPm5leHQpCi0gICAgaW5zZXJ0X3JlY2lwcm9j YWxzIChkZWZfZ3NpLCBvY2NfY2hpbGQsIGRlZiwgcmVjaXBfZGVmLCB0aHJl c2hvbGQpOworICAgIGluc2VydF9yZWNpcHJvY2FscyAoZGVmX2dzaSwgb2Nj X2NoaWxkLCBkZWYsIHJlY2lwX2RlZiwKKwkJCXNxdWFyZV9yZWNpcF9kZWYs IHNob3VsZF9pbnNlcnRfc3F1YXJlX3JlY2lwLAorCQkJdGhyZXNob2xkKTsK K30KKworLyogUmVwbGFjZSBvY2N1cnJlbmNlcyBvZiBleHByIC8gKHggKiB4 KSB3aXRoIGV4cHIgKiAoKDEgLyB4KSAqICgxIC8geCkpLgorICAgVGFrZSBh cyBhcmd1bWVudCB0aGUgdXNlIGZvciAoeCAqIHgpLiAgKi8KK3N0YXRpYyBp bmxpbmUgdm9pZAorcmVwbGFjZV9yZWNpcHJvY2FsX3NxdWFyZXMgKHVzZV9v cGVyYW5kX3AgdXNlX3ApCit7CisgIGdpbXBsZSAqdXNlX3N0bXQgPSBVU0Vf U1RNVCAodXNlX3ApOworICBiYXNpY19ibG9jayBiYiA9IGdpbXBsZV9iYiAo dXNlX3N0bXQpOworICBzdHJ1Y3Qgb2NjdXJyZW5jZSAqb2NjID0gKHN0cnVj dCBvY2N1cnJlbmNlICopIGJiLT5hdXg7CisKKyAgaWYgKG9wdGltaXplX2Ji X2Zvcl9zcGVlZF9wIChiYikgJiYgb2NjLT5zcXVhcmVfcmVjaXBfZGVmCisg ICAgICAmJiBvY2MtPnJlY2lwX2RlZikKKyAgICB7CisgICAgICBnaW1wbGVf c3RtdF9pdGVyYXRvciBnc2kgPSBnc2lfZm9yX3N0bXQgKHVzZV9zdG10KTsK KyAgICAgIGdpbXBsZV9hc3NpZ25fc2V0X3Joc19jb2RlICh1c2Vfc3RtdCwg TVVMVF9FWFBSKTsKKyAgICAgIGdpbXBsZV9hc3NpZ25fc2V0X3JoczIgKHVz ZV9zdG10LCBvY2MtPnNxdWFyZV9yZWNpcF9kZWYpOworICAgICAgU0VUX1VT RSAodXNlX3AsIG9jYy0+c3F1YXJlX3JlY2lwX2RlZik7CisgICAgICBmb2xk X3N0bXRfaW5wbGFjZSAoJmdzaSk7CisgICAgICB1cGRhdGVfc3RtdCAodXNl X3N0bXQpOworICAgIH0KIH0KIAogCkBAIC00NjAsMzIgKzU0Nyw4NSBAQCBm cmVlX2JiIChzdHJ1Y3Qgb2NjdXJyZW5jZSAqb2NjKQogc3RhdGljIHZvaWQK IGV4ZWN1dGVfY3NlX3JlY2lwcm9jYWxzXzEgKGdpbXBsZV9zdG10X2l0ZXJh dG9yICpkZWZfZ3NpLCB0cmVlIGRlZikKIHsKLSAgdXNlX29wZXJhbmRfcCB1 c2VfcDsKLSAgaW1tX3VzZV9pdGVyYXRvciB1c2VfaXRlcjsKKyAgdXNlX29w ZXJhbmRfcCB1c2VfcCwgc3F1YXJlX3VzZV9wOworICBpbW1fdXNlX2l0ZXJh dG9yIHVzZV9pdGVyLCBzcXVhcmVfdXNlX2l0ZXI7CisgIHRyZWUgc3F1YXJl X2RlZjsKICAgc3RydWN0IG9jY3VycmVuY2UgKm9jYzsKLSAgaW50IGNvdW50 ID0gMCwgdGhyZXNob2xkOworICBpbnQgY291bnQgPSAwOworICBpbnQgdGhy ZXNob2xkOworICBpbnQgc3F1YXJlX3JlY2lwX2NvdW50ID0gMDsKKyAgaW50 IHNxcnRfcmVjaXBfY291bnQgPSAwOwogCiAgIGdjY19hc3NlcnQgKEZMT0FU X1RZUEVfUCAoVFJFRV9UWVBFIChkZWYpKSAmJiBpc19naW1wbGVfcmVnIChk ZWYpKTsKKyAgdGhyZXNob2xkID0gdGFyZ2V0bS5taW5fZGl2aXNpb25zX2Zv cl9yZWNpcF9tdWwgKFRZUEVfTU9ERSAoVFJFRV9UWVBFIChkZWYpKSk7CisK KyAgLyogSWYgdGhpcyBpcyBhIHNxdWFyZSAoeCAqIHgpLCB3ZSBzaG91bGQg Y2hlY2sgd2hldGhlciB0aGVyZSBhcmUgYW55CisgICAgIGVub3VnaCBkaXZp c2lvbnMgYnkgeCBvbiBpdCdzIG93biB0byB3YXJyYW50IHdhaXRpbmcgZm9y IHRoYXQgcGFzcy4gICovCisgIGlmIChUUkVFX0NPREUgKGRlZikgPT0gU1NB X05BTUUpCisgICAgeworICAgICAgZ2ltcGxlICpkZWZfc3RtdCA9IFNTQV9O QU1FX0RFRl9TVE1UIChkZWYpOworCisgICAgICBpZiAoaXNfZ2ltcGxlX2Fz c2lnbiAoZGVmX3N0bXQpCisJICAmJiBnaW1wbGVfYXNzaWduX3Joc19jb2Rl IChkZWZfc3RtdCkgPT0gTVVMVF9FWFBSCisJICAmJiBnaW1wbGVfYXNzaWdu X3JoczEgKGRlZl9zdG10KSA9PSBnaW1wbGVfYXNzaWduX3JoczIgKGRlZl9z dG10KSkKKwl7CisJICAvKiBUaGlzIHN0YXRlbWVudCBpcyBhIHNxdWFyZSBv ZiBzb21ldGhpbmcuICBXZSBzaG91bGQgdGFrZSB0aGlzCisJICAgICBpbiB0 byBhY2NvdW50LCBhcyBpdCBtYXkgYmUgbW9yZSBwcm9maXRhYmxlIHRvIG5v dCBleHRyYWN0CisJICAgICB0aGUgcmVjaXByb2NhbCBoZXJlLiAgKi8KKwkg IHRyZWUgb3AwID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChkZWZfc3RtdCk7CisJ ICBGT1JfRUFDSF9JTU1fVVNFX0ZBU1QgKHVzZV9wLCB1c2VfaXRlciwgb3Aw KQorCSAgICB7CisJICAgICAgZ2ltcGxlICp1c2Vfc3RtdCA9IFVTRV9TVE1U ICh1c2VfcCk7CisJICAgICAgaWYgKGlzX2RpdmlzaW9uX2J5ICh1c2Vfc3Rt dCwgb3AwKSkKKwkJc3FydF9yZWNpcF9jb3VudCArKzsKKwkgICAgfQorCX0K KyAgICB9CiAKICAgRk9SX0VBQ0hfSU1NX1VTRV9GQVNUICh1c2VfcCwgdXNl X2l0ZXIsIGRlZikKICAgICB7CiAgICAgICBnaW1wbGUgKnVzZV9zdG10ID0g VVNFX1NUTVQgKHVzZV9wKTsKICAgICAgIGlmIChpc19kaXZpc2lvbl9ieSAo dXNlX3N0bXQsIGRlZikpCiAJewotCSAgcmVnaXN0ZXJfZGl2aXNpb25faW4g KGdpbXBsZV9iYiAodXNlX3N0bXQpKTsKKwkgIHJlZ2lzdGVyX2RpdmlzaW9u X2luIChnaW1wbGVfYmIgKHVzZV9zdG10KSwgMik7CiAJICBjb3VudCsrOwog CX0KKworICAgICAgaWYgKGlzX3NxdWFyZV9vZiAodXNlX3N0bXQsIGRlZikp CisJeworCSAgc3F1YXJlX2RlZiA9IGdpbXBsZV9hc3NpZ25fbGhzICh1c2Vf c3RtdCk7CisJICBGT1JfRUFDSF9JTU1fVVNFX0ZBU1QgKHNxdWFyZV91c2Vf cCwgc3F1YXJlX3VzZV9pdGVyLCBzcXVhcmVfZGVmKQorCSAgICB7CisJICAg ICAgZ2ltcGxlICpzcXVhcmVfdXNlX3N0bXQgPSBVU0VfU1RNVCAoc3F1YXJl X3VzZV9wKTsKKwkgICAgICBpZiAoaXNfZGl2aXNpb25fYnkgKHNxdWFyZV91 c2Vfc3RtdCwgc3F1YXJlX2RlZikpCisJCXsKKwkJICAvKiBIYWx2ZSB0aGUg cmVsYXRpdmUgaW1wb3J0YW5jZSBhcyB0aGlzIGlzIGNhbGxlZCB0d2ljZQor CQkgICAgIGZvciBlYWNoIGRpdmlzaW9uIGJ5IGEgc3F1YXJlLiAgKi8KKwkJ ICByZWdpc3Rlcl9kaXZpc2lvbl9pbiAoZ2ltcGxlX2JiIChzcXVhcmVfdXNl X3N0bXQpLCAxKTsKKwkJICBzcXVhcmVfcmVjaXBfY291bnQgKys7CisJCX0K KwkgICAgfQorCX0KICAgICB9CiAKKyAgLyogU3F1YXJlIHJlY2lwcm9jYWxz IHdpbGwgaGF2ZSBiZWVuIGNvdW50ZWQgdHdpY2UuICAqLworICBzcXVhcmVf cmVjaXBfY291bnQgLz0gMjsKKworICBpZiAoc3FydF9yZWNpcF9jb3VudCA+ IHNxdWFyZV9yZWNpcF9jb3VudCkKKyAgICAvKiBJdCB3aWxsIGJlIG1vcmUg cHJvZml0YWJsZSB0byBleHRyYWN0IGEgMSAvIHggZXhwcmVzc2lvbiBsYXRl ciwKKyAgICAgICBzbyBpdCBpcyBub3Qgd29ydGggYXR0ZW1wdGluZyB0byBl eHRyYWN0IDEgLyAoeCAqIHgpIG5vdy4gICovCisgICAgcmV0dXJuOworCiAg IC8qIERvIHRoZSBleHBlbnNpdmUgcGFydCBvbmx5IGlmIHdlIGNhbiBob3Bl IHRvIG9wdGltaXplIHNvbWV0aGluZy4gICovCi0gIHRocmVzaG9sZCA9IHRh cmdldG0ubWluX2RpdmlzaW9uc19mb3JfcmVjaXBfbXVsIChUWVBFX01PREUg KFRSRUVfVFlQRSAoZGVmKSkpOwotICBpZiAoY291bnQgPj0gdGhyZXNob2xk KQorICBpZiAoY291bnQgKyBzcXVhcmVfcmVjaXBfY291bnQgPj0gdGhyZXNo b2xkCisgICAgICAmJiBjb3VudCA+PSAxKQogICAgIHsKICAgICAgIGdpbXBs ZSAqdXNlX3N0bXQ7CiAgICAgICBmb3IgKG9jYyA9IG9jY19oZWFkOyBvY2M7 IG9jYyA9IG9jYy0+bmV4dCkKIAl7CiAJICBjb21wdXRlX21lcml0IChvY2Mp OwotCSAgaW5zZXJ0X3JlY2lwcm9jYWxzIChkZWZfZ3NpLCBvY2MsIGRlZiwg TlVMTCwgdGhyZXNob2xkKTsKKwkgIGluc2VydF9yZWNpcHJvY2FscyAoZGVm X2dzaSwgb2NjLCBkZWYsIE5VTEwsIE5VTEwsCisJCQkgICAgICBzcXVhcmVf cmVjaXBfY291bnQsIHRocmVzaG9sZCk7CiAJfQogCiAgICAgICBGT1JfRUFD SF9JTU1fVVNFX1NUTVQgKHVzZV9zdG10LCB1c2VfaXRlciwgZGVmKQpAQCAt NDk1LDYgKzYzNSwzMSBAQCBleGVjdXRlX2NzZV9yZWNpcHJvY2Fsc18xIChn aW1wbGVfc3RtdF9pdGVyYXRvciAqZGVmX2dzaSwgdHJlZSBkZWYpCiAJICAg ICAgRk9SX0VBQ0hfSU1NX1VTRV9PTl9TVE1UICh1c2VfcCwgdXNlX2l0ZXIp CiAJCXJlcGxhY2VfcmVjaXByb2NhbCAodXNlX3ApOwogCSAgICB9CisJICBl bHNlIGlmIChzcXVhcmVfcmVjaXBfY291bnQgPiAwCisJCSAgICYmIGlzX3Nx dWFyZV9vZiAodXNlX3N0bXQsIGRlZikpCisJICAgIHsKKwkgICAgICBGT1Jf RUFDSF9JTU1fVVNFX09OX1NUTVQgKHVzZV9wLCB1c2VfaXRlcikKKwkJewor CQkgIC8qIEZpbmQgYWxsIHVzZXMgb2YgdGhlIHNxdWFyZSB0aGF0IGFyZSBk aXZpc2lvbnMgYW5kCisJCSAgICogcmVwbGFjZSB0aGVtIGJ5IG11bHRpcGxp Y2F0aW9ucyB3aXRoIHRoZSBpbnZlcnNlLiAgKi8KKwkJICBpbW1fdXNlX2l0 ZXJhdG9yIHNxdWFyZV9pdGVyYXRvcjsKKwkJICBnaW1wbGUgKnBvd211bHRf dXNlX3N0bXQgPSBVU0VfU1RNVCAodXNlX3ApOworCQkgIHRyZWUgcG93bXVs dF9kZWZfbmFtZSA9IGdpbXBsZV9hc3NpZ25fbGhzIChwb3dtdWx0X3VzZV9z dG10KTsKKworCQkgIEZPUl9FQUNIX0lNTV9VU0VfU1RNVCAocG93bXVsdF91 c2Vfc3RtdCwKKwkJCQkJIHNxdWFyZV9pdGVyYXRvciwgcG93bXVsdF9kZWZf bmFtZSkKKwkJICAgIEZPUl9FQUNIX0lNTV9VU0VfT05fU1RNVCAoc3F1YXJl X3VzZV9wLCBzcXVhcmVfaXRlcmF0b3IpCisJCSAgICAgIHsKKwkJCWdpbXBs ZSAqcG93bXVsdF91c2Vfc3RtdCA9IFVTRV9TVE1UIChzcXVhcmVfdXNlX3Ap OworCQkJaWYgKGlzX2dpbXBsZV9hc3NpZ24gKHBvd211bHRfdXNlX3N0bXQp CisJCQkgICAgJiYgZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAocG93bXVsdF91 c2Vfc3RtdCkKKwkJCSAgICA9PSBSRElWX0VYUFIKKwkJCSAgICAmJiBnaW1w bGVfYXNzaWduX3JoczIgKHBvd211bHRfdXNlX3N0bXQpCisJCQkgICAgPT0g cG93bXVsdF9kZWZfbmFtZSkKKwkJCSAgcmVwbGFjZV9yZWNpcHJvY2FsX3Nx dWFyZXMgKHNxdWFyZV91c2VfcCk7CisJCSAgICAgIH0KKwkJfQorCSAgICB9 CiAJfQogICAgIH0KIAo= --------------7F27C08589C72ADF6B44F50F--