From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17939 invoked by alias); 26 May 2011 07:52:41 -0000 Received: (qmail 17929 invoked by uid 22791); 26 May 2011 07:52:38 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,TW_TM X-Spam-Check-By: sourceware.org Received: from mail-yx0-f175.google.com (HELO mail-yx0-f175.google.com) (209.85.213.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 26 May 2011 07:52:23 +0000 Received: by yxn22 with SMTP id 22so198636yxn.20 for ; Thu, 26 May 2011 00:52:22 -0700 (PDT) MIME-Version: 1.0 Received: by 10.150.14.13 with SMTP id 13mr610901ybn.438.1306396342562; Thu, 26 May 2011 00:52:22 -0700 (PDT) Received: by 10.150.138.14 with HTTP; Thu, 26 May 2011 00:52:22 -0700 (PDT) Date: Thu, 26 May 2011 09:25:00 -0000 Message-ID: Subject: [patch] Fix PR tree-optimization/49038 From: Ira Rosen To: gcc-patches@gcc.gnu.org Cc: Patch Tracking Content-Type: multipart/mixed; boundary=000e0cd76268ef2eb204a4291992 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 X-SW-Source: 2011-05/txt/msg01973.txt.bz2 --000e0cd76268ef2eb204a4291992 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1268 Hi, The vectorizer supports strided loads with gaps, e.g., when only a[4i] and a[4i+2] are accessed, it generates a vector load a[4i:4i+3], i.e., creating an access to a[4i+3], which doesn't exist in the scalar code. This access maybe invalid as described in the PR. This patch creates an epilogue loop (with at least one iteration) for such cases. Bootstrapped and tested on powerpc64-suse-linux. Applied to trunk. I'll prepare patches for 4.5 and 4.6 next week. Ira ChangeLog: PR tree-optimization/49038 * tree-vect-loop-manip.c (vect_generate_tmps_on_preheader): Ensure at least one epilogue iteration if required by data accesses with gaps. * tree-vectorizer.h (struct _loop_vec_info): Add new field to mark loops that require peeling for gaps. * tree-vect-loop.c (new_loop_vec_info): Initialize new field. (vect_get_known_peeling_cost): Take peeling for gaps into account. (vect_transform_loop): Generate epilogue if required by data access with gaps. * tree-vect-data-refs.c (vect_analyze_group_access): Mark the loop as requiring an epilogue if there are gaps in the end of the strided group. testsuite/ChangeLog: PR tree-optimization/49038 * gcc.dg/vect/vect-strided-u8-i8-gap4-unknown.c: New test. * gcc.dg/vect/pr49038.c: New test. --000e0cd76268ef2eb204a4291992 Content-Type: text/plain; charset=US-ASCII; name="gaps.txt" Content-Disposition: attachment; filename="gaps.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_go5elhvd0 Content-length: 13957 SW5kZXg6IHRyZWUtdmVjdC1sb29wLW1hbmlwLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gdHJlZS12ZWN0LWxvb3AtbWFuaXAuYwkocmV2aXNpb24g MTc0MjY0KQorKysgdHJlZS12ZWN0LWxvb3AtbWFuaXAuYwkod29ya2luZyBj b3B5KQpAQCAtMTU1MSw3ICsxNTUxLDcgQEAgdmVjdF9nZW5lcmF0ZV90bXBz X29uX3ByZWhlYWRlciAobG9vcF92ZWNfaW5mbyBsb28KICAgZWRnZSBwZTsK ICAgYmFzaWNfYmxvY2sgbmV3X2JiOwogICBnaW1wbGVfc2VxIHN0bXRzOwot ICB0cmVlIG5pX25hbWU7CisgIHRyZWUgbmlfbmFtZSwgbmlfbWludXNfZ2Fw X25hbWU7CiAgIHRyZWUgdmFyOwogICB0cmVlIHJhdGlvX25hbWU7CiAgIHRy ZWUgcmF0aW9fbXVsdF92Zl9uYW1lOwpAQCAtMTU2OCw5ICsxNTY4LDM5IEBA IHZlY3RfZ2VuZXJhdGVfdG1wc19vbl9wcmVoZWFkZXIgKGxvb3BfdmVjX2lu Zm8gbG9vCiAgIG5pX25hbWUgPSB2ZWN0X2J1aWxkX2xvb3Bfbml0ZXJzIChs b29wX3ZpbmZvLCBjb25kX2V4cHJfc3RtdF9saXN0KTsKICAgbG9nX3ZmID0g YnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChuaSksIGV4YWN0X2xvZzIgKHZm KSk7CiAKKyAgLyogSWYgZXBpbG9ndWUgbG9vcCBpcyByZXF1aXJlZCBiZWNh dXNlIG9mIGRhdGEgYWNjZXNzZXMgd2l0aCBnYXBzLCB3ZQorICAgICBzdWJ0 cmFjdCBvbmUgaXRlcmF0aW9uIGZyb20gdGhlIHRvdGFsIG51bWJlciBvZiBp dGVyYXRpb25zIGhlcmUgZm9yCisgICAgIGNvcnJlY3QgY2FsY3VsYXRpb24g b2YgUkFUSU8uICAqLworICBpZiAoTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9H QVBTIChsb29wX3ZpbmZvKSkKKyAgICB7CisgICAgICBuaV9taW51c19nYXBf bmFtZSA9IGZvbGRfYnVpbGQyIChNSU5VU19FWFBSLCBUUkVFX1RZUEUgKG5p X25hbWUpLAorCQkJCSAgICAgICBuaV9uYW1lLAorCQkJICAgICAgICAgICAg ICAgYnVpbGRfb25lX2NzdCAoVFJFRV9UWVBFIChuaV9uYW1lKSkpOworICAg ICAgaWYgKCFpc19naW1wbGVfdmFsIChuaV9taW51c19nYXBfbmFtZSkpCisJ eworCSAgdmFyID0gY3JlYXRlX3RtcF92YXIgKFRSRUVfVFlQRSAobmkpLCAi bmlfZ2FwIik7CisgICAgICAgICAgYWRkX3JlZmVyZW5jZWRfdmFyICh2YXIp OworCisgICAgICAgICAgc3RtdHMgPSBOVUxMOworICAgICAgICAgIG5pX21p bnVzX2dhcF9uYW1lID0gZm9yY2VfZ2ltcGxlX29wZXJhbmQgKG5pX21pbnVz X2dhcF9uYW1lLCAmc3RtdHMsCisJCQkJCQkgICAgdHJ1ZSwgdmFyKTsKKyAg ICAgICAgICBpZiAoY29uZF9leHByX3N0bXRfbGlzdCkKKyAgICAgICAgICAg IGdpbXBsZV9zZXFfYWRkX3NlcSAoJmNvbmRfZXhwcl9zdG10X2xpc3QsIHN0 bXRzKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIHBlID0gbG9vcF9wcmVoZWFkZXJfZWRnZSAobG9vcCk7CisgICAg ICAgICAgICAgIG5ld19iYiA9IGdzaV9pbnNlcnRfc2VxX29uX2VkZ2VfaW1t ZWRpYXRlIChwZSwgc3RtdHMpOworICAgICAgICAgICAgICBnY2NfYXNzZXJ0 ICghbmV3X2JiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KyAgZWxzZQorICAgIG5pX21pbnVzX2dhcF9uYW1lID0gbmlfbmFtZTsKKwog ICAvKiBDcmVhdGU6IHJhdGlvID0gbmkgPj4gbG9nMih2ZikgKi8KIAotICBy YXRpb19uYW1lID0gZm9sZF9idWlsZDIgKFJTSElGVF9FWFBSLCBUUkVFX1RZ UEUgKG5pX25hbWUpLCBuaV9uYW1lLCBsb2dfdmYpOworICByYXRpb19uYW1l ID0gZm9sZF9idWlsZDIgKFJTSElGVF9FWFBSLCBUUkVFX1RZUEUgKG5pX21p bnVzX2dhcF9uYW1lKSwKKwkJCSAgICBuaV9taW51c19nYXBfbmFtZSwgbG9n X3ZmKTsKICAgaWYgKCFpc19naW1wbGVfdmFsIChyYXRpb19uYW1lKSkKICAg ICB7CiAgICAgICB2YXIgPSBjcmVhdGVfdG1wX3ZhciAoVFJFRV9UWVBFIChu aSksICJibmQiKTsKSW5kZXg6IHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0 LXN0cmlkZWQtdTgtaTgtZ2FwNC11bmtub3duLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qtc3RyaWRl ZC11OC1pOC1nYXA0LXVua25vd24uYwkocmV2aXNpb24gMCkKKysrIHRlc3Rz dWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXN0cmlkZWQtdTgtaTgtZ2FwNC11bmtu b3duLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAzIEBACisvKiB7IGRn LXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKKyNp bmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1 ZGUgInRyZWUtdmVjdC5oIgorCisjZGVmaW5lIE4gMTYwIAorCit0eXBlZGVm IHN0cnVjdCB7CisgICB1bnNpZ25lZCBjaGFyIGE7CisgICB1bnNpZ25lZCBj aGFyIGI7CisgICB1bnNpZ25lZCBjaGFyIGM7CisgICB1bnNpZ25lZCBjaGFy IGQ7CisgICB1bnNpZ25lZCBjaGFyIGU7CisgICB1bnNpZ25lZCBjaGFyIGY7 CisgICB1bnNpZ25lZCBjaGFyIGc7CisgICB1bnNpZ25lZCBjaGFyIGg7Cit9 IHM7CisKK19fYXR0cmlidXRlX18gKChub2lubGluZSkpIGludAorbWFpbjEg KHMgKmFyciwgaW50IG4pCit7CisgIGludCBpOworICBzICpwdHIgPSBhcnI7 CisgIHMgcmVzW05dOworICB1bnNpZ25lZCBjaGFyIHg7CisKKyAgLyogQ2hl Y2sgcGVlbGluZyBmb3IgZ2FwcyBmb3IgdW5rbm93biBsb29wIGJvdW5kLiAg Ki8KKyAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKKyAgICB7CisgICAgICBy ZXNbaV0uYyA9IHB0ci0+YiArIHB0ci0+YzsKKyAgICAgIHggPSBwdHItPmMg KyBwdHItPmY7CisgICAgICByZXNbaV0uYSA9IHggKyBwdHItPmI7CisgICAg ICByZXNbaV0uZCA9IHB0ci0+YiArIHB0ci0+YzsKKyAgICAgIHJlc1tpXS5i ID0gcHRyLT5jOworICAgICAgcmVzW2ldLmYgPSBwdHItPmYgKyBwdHItPmU7 CisgICAgICByZXNbaV0uZSA9IHB0ci0+YiArIHB0ci0+ZTsgCisgICAgICBy ZXNbaV0uaCA9IHB0ci0+YzsgICAKKyAgICAgIHJlc1tpXS5nID0gcHRyLT5i ICsgcHRyLT5jOworICAgICAgcHRyKys7IAorICAgIH0gCisgICAKKyAgLyog Y2hlY2sgcmVzdWx0czogICovCisgIGZvciAoaSA9IDA7IGkgPCBuOyBpKysp CisgICAgeyAKKyAgICAgIGlmIChyZXNbaV0uYyAhPSBhcnJbaV0uYiArIGFy cltpXS5jCisgICAgICAgICAgfHwgcmVzW2ldLmEgIT0gYXJyW2ldLmMgKyBh cnJbaV0uZiArIGFycltpXS5iCisgICAgICAgICAgfHwgcmVzW2ldLmQgIT0g YXJyW2ldLmIgKyBhcnJbaV0uYworICAgICAgICAgIHx8IHJlc1tpXS5iICE9 IGFycltpXS5jCisgICAgICAgICAgfHwgcmVzW2ldLmYgIT0gYXJyW2ldLmYg KyBhcnJbaV0uZQorICAgICAgICAgIHx8IHJlc1tpXS5lICE9IGFycltpXS5i ICsgYXJyW2ldLmUKKyAgICAgICAgICB8fCByZXNbaV0uaCAhPSBhcnJbaV0u YworICAgICAgICAgIHx8IHJlc1tpXS5nICE9IGFycltpXS5iICsgYXJyW2ld LmMpCisgICAgICAgIGFib3J0ICgpOworICAgfQorCisgIC8qIENoZWNrIGFs c28gdGhhdCB3ZSBkb24ndCBkbyBtb3JlIGl0ZXJhdGlvbnMgdGhhbiBuZWVk ZWQuICAqLworICBmb3IgKGkgPSBuOyBpIDwgTjsgaSsrKQorICAgIHsKKyAg ICAgIGlmIChyZXNbaV0uYyA9PSBhcnJbaV0uYiArIGFycltpXS5jCisgICAg ICAgICAgfHwgcmVzW2ldLmEgPT0gYXJyW2ldLmMgKyBhcnJbaV0uZiArIGFy cltpXS5iCisgICAgICAgICAgfHwgcmVzW2ldLmQgPT0gYXJyW2ldLmIgKyBh cnJbaV0uYworICAgICAgICAgIHx8IHJlc1tpXS5iID09IGFycltpXS5jCisg ICAgICAgICAgfHwgcmVzW2ldLmYgPT0gYXJyW2ldLmYgKyBhcnJbaV0uZQor ICAgICAgICAgIHx8IHJlc1tpXS5lID09IGFycltpXS5iICsgYXJyW2ldLmUK KyAgICAgICAgICB8fCByZXNbaV0uaCA9PSBhcnJbaV0uYworICAgICAgICAg IHx8IHJlc1tpXS5nID09IGFycltpXS5iICsgYXJyW2ldLmMpCisgICAgICAg IGFib3J0ICgpOworICAgfQorCisgIHJldHVybiAwOworfQorCisKK2ludCBt YWluICh2b2lkKQoreworICBpbnQgaTsKKyAgcyBhcnJbTl07CisgIAorICBj aGVja192ZWN0ICgpOworCisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisg ICAgeyAKKyAgICAgIGFycltpXS5hID0gNTsKKyAgICAgIGFycltpXS5iID0g NjsKKyAgICAgIGFycltpXS5jID0gMTc7CisgICAgICBhcnJbaV0uZCA9IDM7 CisgICAgICBhcnJbaV0uZSA9IDE2OworICAgICAgYXJyW2ldLmYgPSAxNjsK KyAgICAgIGFycltpXS5nID0gMzsKKyAgICAgIGFycltpXS5oID0gNTY7Cisg ICAgICBpZiAoYXJyW2ldLmEgPT0gMTc4KQorICAgICAgICAgYWJvcnQoKTsg CisgICAgfSAKKworICBtYWluMSAoYXJyLCBOLTIpOworCisgIHJldHVybiAw OworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMg InZlY3Rvcml6ZWQgMSBsb29wcyIgMSAidmVjdCIgeyB0YXJnZXQgdmVjdF9z dHJpZGVkOCB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IGNsZWFudXAtdHJl ZS1kdW1wICJ2ZWN0IiB9IH0gKi8KKyAgCkluZGV4OiB0ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvcHI0OTAzOC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC9wcjQ5MDM4LmMJKHJldmlzaW9uIDAp CisrKyB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvcHI0OTAzOC5jCShyZXZpc2lv biAwKQpAQCAtMCwwICsxLDM4IEBACisjaW5jbHVkZSA8c3lzL21tYW4uaD4K KyNpbmNsdWRlIDxzdGRpby5oPgorCisjZGVmaW5lIENPVU5UIDMyMAorI2Rl ZmluZSBNTUFQX1NJWkUgMHgxMDAwMAorI2RlZmluZSBBRERSRVNTIDB4MTEy MjAwMDAwMAorI2RlZmluZSBUWVBFIHVuc2lnbmVkIHNob3J0CisKK3ZvaWQg X19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQorZm9vIChUWVBFICpfX3Jlc3Ry aWN0IGEsIFRZUEUgKl9fcmVzdHJpY3QgYikKK3sKKyAgaW50IG47CisKKyAg Zm9yIChuID0gMDsgbiA8IENPVU5UOyBuKyspCisgICAgYVtuXSA9IGJbbiAq IDJdOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHZvaWQgKng7Cisg IHNpemVfdCBiX29mZnNldDsKKworICB4ID0gbW1hcCAoKHZvaWQgKikgQURE UkVTUywgTU1BUF9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorCSAg ICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKKyAgaWYg KHggPT0gTUFQX0ZBSUxFRCkKKyAgICB7CisgICAgICBwZXJyb3IgKCJtbWFw Iik7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgYl9vZmZzZXQgPSBN TUFQX1NJWkUgLSAoMiAqIENPVU5UIC0gMSkgKiBzaXplb2YgKFRZUEUpOwor ICBmb28gKCh1bnNpZ25lZCBzaG9ydCAqKSB4LAorICAgICAgICh1bnNpZ25l ZCBzaG9ydCAqKSAoKGNoYXIgKikgeCArIGJfb2Zmc2V0KSk7CisgIHJldHVy biAwOworfQorCisvKiB7IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAg InZlY3QiIH0gfSAqLwpJbmRleDogdHJlZS12ZWN0b3JpemVyLmgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gdHJlZS12ZWN0b3JpemVyLmgJKHJldmlz aW9uIDE3NDI2NCkKKysrIHRyZWUtdmVjdG9yaXplci5oCSh3b3JraW5nIGNv cHkpCkBAIC0yNTUsNiArMjU1LDExIEBAIHR5cGVkZWYgc3RydWN0IF9sb29w X3ZlY19pbmZvIHsKICAgLyogSGFzaCB0YWJsZSB1c2VkIHRvIGNob29zZSB0 aGUgYmVzdCBwZWVsaW5nIG9wdGlvbi4gICovCiAgIGh0YWJfdCBwZWVsaW5n X2h0YWI7CiAKKyAgLyogV2hlbiB3ZSBoYXZlIHN0cmlkZWQgZGF0YSBhY2Nl c3NlcyB3aXRoIGdhcHMsIHdlIG1heSBpbnRyb2R1Y2UgaW52YWxpZAorICAg ICBtZW1vcnkgYWNjZXNzZXMuICBXZSBwZWVsIHRoZSBsYXN0IGl0ZXJhdGlv biBvZiB0aGUgbG9vcCB0byBwcmV2ZW50CisgICAgIHRoaXMuICAqLworICBi b29sIHBlZWxpbmdfZm9yX2dhcHM7CisKIH0gKmxvb3BfdmVjX2luZm87CiAK IC8qIEFjY2VzcyBGdW5jdGlvbnMuICAqLwpAQCAtMjgzLDYgKzI4OCw3IEBA IHR5cGVkZWYgc3RydWN0IF9sb29wX3ZlY19pbmZvIHsKICNkZWZpbmUgTE9P UF9WSU5GT19SRURVQ1RJT05TKEwpICAgICAgICAgICAoTCktPnJlZHVjdGlv bnMKICNkZWZpbmUgTE9PUF9WSU5GT19SRURVQ1RJT05fQ0hBSU5TKEwpICAg ICAoTCktPnJlZHVjdGlvbl9jaGFpbnMKICNkZWZpbmUgTE9PUF9WSU5GT19Q RUVMSU5HX0hUQUIoTCkgICAgICAgICAoTCktPnBlZWxpbmdfaHRhYgorI2Rl ZmluZSBMT09QX1ZJTkZPX1BFRUxJTkdfRk9SX0dBUFMoTCkgICAgIChMKS0+ cGVlbGluZ19mb3JfZ2FwcwogCiAjZGVmaW5lIExPT1BfUkVRVUlSRVNfVkVS U0lPTklOR19GT1JfQUxJR05NRU5UKEwpIFwKIFZFQ19sZW5ndGggKGdpbXBs ZSwgKEwpLT5tYXlfbWlzYWxpZ25fc3RtdHMpID4gMApJbmRleDogdHJlZS12 ZWN0LWxvb3AuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0cmVlLXZl Y3QtbG9vcC5jCShyZXZpc2lvbiAxNzQyNjQpCisrKyB0cmVlLXZlY3QtbG9v cC5jCSh3b3JraW5nIGNvcHkpCkBAIC03NjEsNiArNzYxLDcgQEAgbmV3X2xv b3BfdmVjX2luZm8gKHN0cnVjdCBsb29wICpsb29wKQogICBMT09QX1ZJTkZP X1NMUF9JTlNUQU5DRVMgKHJlcykgPSBWRUNfYWxsb2MgKHNscF9pbnN0YW5j ZSwgaGVhcCwgMTApOwogICBMT09QX1ZJTkZPX1NMUF9VTlJPTExJTkdfRkFD VE9SIChyZXMpID0gMTsKICAgTE9PUF9WSU5GT19QRUVMSU5HX0hUQUIgKHJl cykgPSBOVUxMOworICBMT09QX1ZJTkZPX1BFRUxJTkdfRk9SX0dBUFMgKHJl cykgPSBmYWxzZTsKIAogICByZXR1cm4gcmVzOwogfQpAQCAtMjMzMyw2ICsy MzM0LDEwIEBAIHZlY3RfZ2V0X2tub3duX3BlZWxpbmdfY29zdCAobG9vcF92 ZWNfaW5mbyBsb29wX3ZpCiAgICAgICBwZWVsX2l0ZXJzX3Byb2xvZ3VlID0g bml0ZXJzIDwgcGVlbF9pdGVyc19wcm9sb2d1ZSA/CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbml0ZXJzIDogcGVlbF9pdGVyc19wcm9sb2d1ZTsK ICAgICAgICpwZWVsX2l0ZXJzX2VwaWxvZ3VlID0gKG5pdGVycyAtIHBlZWxf aXRlcnNfcHJvbG9ndWUpICUgdmY7CisgICAgICAvKiBJZiB3ZSBuZWVkIHRv IHBlZWwgZm9yIGdhcHMsIGJ1dCBubyBwZWVsaW5nIGlzIHJlcXVpcmVkLCB3 ZSBoYXZlIHRvCisJIHBlZWwgVkYgaXRlcmF0aW9ucy4gICovCisgICAgICBp ZiAoTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9HQVBTIChsb29wX3ZpbmZvKSAm JiAhKnBlZWxfaXRlcnNfZXBpbG9ndWUpCisgICAgICAgICpwZWVsX2l0ZXJz X2VwaWxvZ3VlID0gdmY7CiAgICAgfQogCiAgICByZXR1cm4gKHBlZWxfaXRl cnNfcHJvbG9ndWUgKiBzY2FsYXJfc2luZ2xlX2l0ZXJfY29zdCkKQEAgLTQ5 ODcsNyArNDk5Miw4IEBAIHZlY3RfdHJhbnNmb3JtX2xvb3AgKGxvb3BfdmVj X2luZm8gbG9vcF92aW5mbykKICAgZG9fcGVlbGluZ19mb3JfbG9vcF9ib3Vu ZAogICAgID0gKCFMT09QX1ZJTkZPX05JVEVSU19LTk9XTl9QIChsb29wX3Zp bmZvKQogICAgICAgIHx8IChMT09QX1ZJTkZPX05JVEVSU19LTk9XTl9QIChs b29wX3ZpbmZvKQotCSAgICYmIExPT1BfVklORk9fSU5UX05JVEVSUyAobG9v cF92aW5mbykgJSB2ZWN0b3JpemF0aW9uX2ZhY3RvciAhPSAwKSk7CisJICAg JiYgTE9PUF9WSU5GT19JTlRfTklURVJTIChsb29wX3ZpbmZvKSAlIHZlY3Rv cml6YXRpb25fZmFjdG9yICE9IDApCisgICAgICAgfHwgTE9PUF9WSU5GT19Q RUVMSU5HX0ZPUl9HQVBTIChsb29wX3ZpbmZvKSk7CiAKICAgaWYgKExPT1Bf UkVRVUlSRVNfVkVSU0lPTklOR19GT1JfQUxJR05NRU5UIChsb29wX3ZpbmZv KQogICAgICAgfHwgTE9PUF9SRVFVSVJFU19WRVJTSU9OSU5HX0ZPUl9BTElB UyAobG9vcF92aW5mbykpCkluZGV4OiB0cmVlLXZlY3QtZGF0YS1yZWZzLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gdHJlZS12ZWN0LWRhdGEtcmVm cy5jCShyZXZpc2lvbiAxNzQyNjQpCisrKyB0cmVlLXZlY3QtZGF0YS1yZWZz LmMJKHdvcmtpbmcgY29weSkKQEAgLTIwNDMsNyArMjA0Myw3IEBAIHZlY3Rf YW5hbHl6ZV9ncm91cF9hY2Nlc3MgKHN0cnVjdCBkYXRhX3JlZmVyZW5jZSAq CiAgIGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbyA9IFNUTVRfVklORk9fTE9P UF9WSU5GTyAoc3RtdF9pbmZvKTsKICAgYmJfdmVjX2luZm8gYmJfdmluZm8g PSBTVE1UX1ZJTkZPX0JCX1ZJTkZPIChzdG10X2luZm8pOwogICBIT1NUX1dJ REVfSU5UIGRyX3N0ZXAgPSBUUkVFX0lOVF9DU1RfTE9XIChzdGVwKTsKLSAg SE9TVF9XSURFX0lOVCBzdHJpZGU7CisgIEhPU1RfV0lERV9JTlQgc3RyaWRl LCBsYXN0X2FjY2Vzc2VkX2VsZW1lbnQgPSAxOwogICBib29sIHNscF9pbXBv c3NpYmxlID0gZmFsc2U7CiAKICAgLyogRm9yIGludGVybGVhdmluZywgU1RS SURFIGlzIFNURVAgY291bnRlZCBpbiBlbGVtZW50cywgaS5lLiwgdGhlIHNp emUgb2YgdGhlCkBAIC0yMDcyLDYgKzIwNzIsMTYgQEAgdmVjdF9hbmFseXpl X2dyb3VwX2FjY2VzcyAoc3RydWN0IGRhdGFfcmVmZXJlbmNlICoKIAkgICAg ICBmcHJpbnRmICh2ZWN0X2R1bXAsICIgc3RlcCAiKTsKIAkgICAgICBwcmlu dF9nZW5lcmljX2V4cHIgKHZlY3RfZHVtcCwgc3RlcCwgVERGX1NMSU0pOwog CSAgICB9CisKKwkgIGlmIChsb29wX3ZpbmZvKQorCSAgICB7CisJICAgICAg TE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9HQVBTIChsb29wX3ZpbmZvKSA9IHRy dWU7CisKKwkgICAgICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9S VF9ERVRBSUxTKSkKKwkJZnByaW50ZiAodmVjdF9kdW1wLCAiRGF0YSBhY2Nl c3Mgd2l0aCBnYXBzIHJlcXVpcmVzIHNjYWxhciAiCisJCQkJICAgICJlcGls b2d1ZSBsb29wIik7CisJICAgIH0KKwogCSAgcmV0dXJuIHRydWU7CiAJfQog CkBAIC0yMTM3LDYgKzIxNDcsNyBAQCB2ZWN0X2FuYWx5emVfZ3JvdXBfYWNj ZXNzIChzdHJ1Y3QgZGF0YV9yZWZlcmVuY2UgKgogICAgICAgICAgICAgICBu ZXh0ID0gR1JPVVBfTkVYVF9FTEVNRU5UICh2aW5mb19mb3Jfc3RtdCAobmV4 dCkpOwogICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K KwogICAgICAgICAgIHByZXYgPSBuZXh0OwogCiAgICAgICAgICAgLyogQ2hl Y2sgdGhhdCBhbGwgdGhlIGFjY2Vzc2VzIGhhdmUgdGhlIHNhbWUgU1RFUC4g ICovCkBAIC0yMTY3LDYgKzIxNzgsOCBAQCB2ZWN0X2FuYWx5emVfZ3JvdXBf YWNjZXNzIChzdHJ1Y3QgZGF0YV9yZWZlcmVuY2UgKgogICAgICAgICAgICAg ICBnYXBzICs9IGRpZmYgLSAxOwogCSAgICB9CiAKKwkgIGxhc3RfYWNjZXNz ZWRfZWxlbWVudCArPSBkaWZmOworCiAgICAgICAgICAgLyogU3RvcmUgdGhl IGdhcCBmcm9tIHRoZSBwcmV2aW91cyBtZW1iZXIgb2YgdGhlIGdyb3VwLiBJ ZiB0aGVyZSBpcyBubwogICAgICAgICAgICAgIGdhcCBpbiB0aGUgYWNjZXNz LCBHUk9VUF9HQVAgaXMgYWx3YXlzIDEuICAqLwogICAgICAgICAgIEdST1VQ X0dBUCAodmluZm9fZm9yX3N0bXQgKG5leHQpKSA9IGRpZmY7CkBAIC0yMjQ1 LDYgKzIyNTgsMTUgQEAgdmVjdF9hbmFseXplX2dyb3VwX2FjY2VzcyAoc3Ry dWN0IGRhdGFfcmVmZXJlbmNlICoKICAgICAgICAgICAgIFZFQ19zYWZlX3B1 c2ggKGdpbXBsZSwgaGVhcCwgQkJfVklORk9fU1RSSURFRF9TVE9SRVMgKGJi X3ZpbmZvKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0bXQpOwog ICAgICAgICB9CisKKyAgICAgIC8qIFRoZXJlIGlzIGEgZ2FwIGluIHRoZSBl bmQgb2YgdGhlIGdyb3VwLiAgKi8KKyAgICAgIGlmIChzdHJpZGUgLSBsYXN0 X2FjY2Vzc2VkX2VsZW1lbnQgPiAwICYmIGxvb3BfdmluZm8pCisJeworCSAg TE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9HQVBTIChsb29wX3ZpbmZvKSA9IHRy dWU7CisJICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9ERVRB SUxTKSkKKwkgICAgZnByaW50ZiAodmVjdF9kdW1wLCAiRGF0YSBhY2Nlc3Mg d2l0aCBnYXBzIHJlcXVpcmVzIHNjYWxhciAiCisJCQkJImVwaWxvZ3VlIGxv b3AiKTsKKwl9CiAgICAgfQogCiAgIHJldHVybiB0cnVlOwo= --000e0cd76268ef2eb204a4291992--