From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10281 invoked by alias); 29 Jan 2015 14:30:42 -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 10215 invoked by uid 89); 29 Jan 2015 14:30:38 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Thu, 29 Jan 2015 14:30:33 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t0TEUVAZ024255 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Thu, 29 Jan 2015 09:30:32 -0500 Received: from [10.3.113.3] ([10.3.113.3]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t0TEUVnw005050 for ; Thu, 29 Jan 2015 09:30:31 -0500 Message-ID: <54CA4407.5050905@redhat.com> Date: Thu, 29 Jan 2015 15:21:00 -0000 From: Jeff Law User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org >> gcc-patches" Subject: [PATCH][PR target/15184] Fix for direct byte access on x86 Content-Type: multipart/mixed; boundary="------------060502000207070900010708" X-IsSubscribed: yes X-SW-Source: 2015-01/txt/msg02617.txt.bz2 This is a multi-part message in MIME format. --------------060502000207070900010708 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1307 So here's the updated patch which handles all 4 testcases from the PR as well as a couple of my own. As discussed earlier this week, we have to twiddle the heuristic for when to enable 4 insn combinations to make 4-insn combos where the first insn is a load and the last a store profitable. And we still need to handle the MEMs being different modes. The new part of the patch is extending make_field_assignment to handle cases where SUBREGs appear in the source of the potential field assignment. In particular make_field_assignment has some nice code to detect a field assignment that looks like (set (x) (ior (and (x) (const_int C)) y))) There's obviously a variety of tests, but that's the overall structure of the RTL. To handle the cases in PR 15184, we just need to be able to handle a couple annoying SUBREGs: (set (x) (subreg (ior (and (subreg (x)) (const_int C) y) The outer subreg is going to be a narrowing subreg to narrow the logicals to whatever mode the destination uses. The inner subreg widens the source to whatever mode is needed for the logicals. Once the subregs are handled, the everything "just works" as I outlined in my earlier message. Bootstrapped & regression tested on x86_64-unknown-linux and powerpc64-unknown-linux. Applying to the trunk. Jeff --------------060502000207070900010708 Content-Type: text/plain; charset=us-ascii; name="P" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="P" Content-length: 10314 Y29tbWl0IDkwZTUwNTZkNTNkNjgwZmNjNDc2OTNhMTE4YmZkNzVmN2FmMGI0 MzUKQXV0aG9yOiBKZWZmIExhdyA8bGF3QHJlZGhhdC5jb20+CkRhdGU6ICAg VHVlIEphbiAyNyAxNjozMjowNiAyMDE1IC0wNzAwCgogICAgCVBSIHRhcmdl dC8xNTE4NAogICAgCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IElmIEkw IGlzIGEgbWVtb3J5IGxvYWQgYW5kIEkzIGEgc3RvcmUKICAgIAl0byBhIHJl bGF0ZWQgYWRkcmVzcywgaW5jcmVhc2UgdGhlICJnb29kbmVzcyIgb2YgZG9p bmcgYSA0LWluc24KICAgIAljb21iaW5hdGlvbiB3aXRoIEkwLUkzLgogICAg CShtYWtlX2ZpZWxkX2Fzc2lnbm1lbnQpOiBIYW5kbGUgU1VCUkVHcyBpbiB0 aGUgaW9yK2FuZCBjYXNlLgogICAgCiAgICAJUFIgdGFyZ2V0LzE1MTg0CiAg ICAJKiBnY2MudGFyZ2V0L2kzODYvcHIxNTE4NC0xLmM6IE5ldyB0ZXN0Lgog ICAgCSogZ2NjLnRhcmdldC9pMzg2L3ByMTUxODQtMi5jOiBOZXcgdGVzdC4K CmRpZmYgLS1naXQgYS9nY2MvQ2hhbmdlTG9nIGIvZ2NjL0NoYW5nZUxvZwpp bmRleCA3NDI0ZDlmLi4wYzAyZDQzIDEwMDY0NAotLS0gYS9nY2MvQ2hhbmdl TG9nCisrKyBiL2djYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMSBAQAorMjAx NS0wMS0yOSAgSmVmZiBMYXcgIDxsYXdAcmVkaGF0LmNvbT4KKworCVBSIHRh cmdldC8xNTE4NCAKKwkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBJZiBJ MCBpcyBhIG1lbW9yeSBsb2FkIGFuZCBJMyBhIHN0b3JlCisJdG8gYSByZWxh dGVkIGFkZHJlc3MsIGluY3JlYXNlIHRoZSAiZ29vZG5lc3MiIG9mIGRvaW5n IGEgNC1pbnNuCisJY29tYmluYXRpb24gd2l0aCBJMC1JMy4KKwkobWFrZV9m aWVsZF9hc3NpZ25tZW50KTogSGFuZGxlIFNVQlJFR3MgaW4gdGhlIGlvcith bmQgY2FzZS4KKwogMjAxNS0wMS0yOSAgWXVyaSBSdW15YW50c2V2ICA8eXNy dW15YW5AZ21haWwuY29tPgogCiAJUFIgdHJlZS1vcHRpbWl6YXRpb24vNjQ3 NDYKZGlmZiAtLWdpdCBhL2djYy9jb21iaW5lLmMgYi9nY2MvY29tYmluZS5j CmluZGV4IDVjNzYzYjQuLjI0NDE4ZGYgMTAwNjQ0Ci0tLSBhL2djYy9jb21i aW5lLmMKKysrIGIvZ2NjL2NvbWJpbmUuYwpAQCAtMjYyMCw2ICsyNjIwLDcg QEAgdHJ5X2NvbWJpbmUgKHJ0eF9pbnNuICppMywgcnR4X2luc24gKmkyLCBy dHhfaW5zbiAqaTEsIHJ0eF9pbnNuICppMCwKICAgICAgIGludCBpOwogICAg ICAgaW50IG5nb29kID0gMDsKICAgICAgIGludCBuc2hpZnQgPSAwOworICAg ICAgcnR4IHNldDAsIHNldDM7CiAKICAgICAgIGlmICghZmxhZ19leHBlbnNp dmVfb3B0aW1pemF0aW9ucykKIAlyZXR1cm4gMDsKQEAgLTI2NDMsNiArMjY0 NCwzNCBAQCB0cnlfY29tYmluZSAocnR4X2luc24gKmkzLCBydHhfaW5zbiAq aTIsIHJ0eF9pbnNuICppMSwgcnR4X2luc24gKmkwLAogCQkgICB8fCBHRVRf Q09ERSAoc3JjKSA9PSBMU0hJRlRSVCkKIAkgICAgbnNoaWZ0Kys7CiAJfQor CisgICAgICAvKiBJZiBJMCBsb2FkcyBhIG1lbW9yeSBhbmQgSTMgc2V0cyB0 aGUgc2FtZSBtZW1vcnksIHRoZW4gSTIgYW5kIEkzCisJIGFyZSBsaWtlbHkg bWFuaXB1bGF0aW5nIGl0cyB2YWx1ZS4gIElkZWFsbHkgd2UnbGwgYmUgYWJs ZSB0byBjb21iaW5lCisJIGFsbCBmb3VyIGluc25zIGludG8gYSBiaXRmaWVs ZCBpbnNlcnRpb24gb2Ygc29tZSBraW5kLiAKKworCSBOb3RlIHRoZSBzb3Vy Y2UgaW4gSTAgbWlnaHQgYmUgaW5zaWRlIGEgc2lnbi96ZXJvIGV4dGVuc2lv biBhbmQgdGhlCisJIG1lbW9yeSBtb2RlcyBpbiBJMCBhbmQgSTMgbWlnaHQg YmUgZGlmZmVyZW50LiAgU28gZXh0cmFjdCB0aGUgYWRkcmVzcworCSBmcm9t IHRoZSBkZXN0aW5hdGlvbiBvZiBJMyBhbmQgc2VhcmNoIGZvciBpdCBpbiB0 aGUgc291cmNlIG9mIEkwLgorCisJIEluIHRoZSBldmVudCB0aGF0IHRoZXJl J3MgYSBtYXRjaCBidXQgdGhlIHNvdXJjZS9kZXN0IGRvIG5vdCBhY3R1YWxs eQorCSByZWZlciB0byB0aGUgc2FtZSBtZW1vcnksIHRoZSB3b3JzdCB0aGF0 IGhhcHBlbnMgaXMgd2UgdHJ5IHNvbWUKKwkgY29tYmluYXRpb25zIHRoYXQg d2Ugd291bGRuJ3QgaGF2ZSBvdGhlcndpc2UuICAqLworICAgICAgaWYgKChz ZXQwID0gc2luZ2xlX3NldCAoaTApKQorCSAgLyogRW5zdXJlIHRoZSBzb3Vy Y2Ugb2YgU0VUMCBpcyBhIE1FTSwgcG9zc2libHkgYnVyaWVkIGluc2lkZQor CSAgICAgYW4gZXh0ZW5zaW9uLiAgKi8KKwkgICYmIChHRVRfQ09ERSAoU0VU X1NSQyAoc2V0MCkpID09IE1FTQorCSAgICAgIHx8ICgoR0VUX0NPREUgKFNF VF9TUkMgKHNldDApKSA9PSBaRVJPX0VYVEVORAorCQkgICB8fCBHRVRfQ09E RSAoU0VUX1NSQyAoc2V0MCkpID09IFNJR05fRVhURU5EKQorCQkgICYmIEdF VF9DT0RFIChYRVhQIChTRVRfU1JDIChzZXQwKSwgMCkpID09IE1FTSkpCisJ ICAmJiAoc2V0MyA9IHNpbmdsZV9zZXQgKGkzKSkKKwkgIC8qIEVuc3VyZSB0 aGUgZGVzdGluYXRpb24gb2YgU0VUMyBpcyBhIE1FTS4gICovCisJICAmJiBH RVRfQ09ERSAoU0VUX0RFU1QgKHNldDMpKSA9PSBNRU0KKwkgIC8qIFdvdWxk IGl0IGJlIGJldHRlciB0byBleHRyYWN0IHRoZSBiYXNlIGFkZHJlc3MgZm9y IHRoZSBNRU0KKwkgICAgIGluIFNFVDMgYW5kIGxvb2sgZm9yIHRoYXQ/ICBJ IGRvbid0IGhhdmUgY2FzZXMgd2hlcmUgaXQgbWF0dGVycworCSAgICAgYnV0 IEkgY291bGQgZW52aXNpb24gc3VjaCBjYXNlcy4gICovCisJICAmJiBydHhf cmVmZXJlbmNlZF9wIChYRVhQIChTRVRfREVTVCAoc2V0MyksIDApLCBTRVRf U1JDIChzZXQwKSkpCisJbmdvb2QgKz0gMjsKKwogICAgICAgaWYgKG5nb29k IDwgMiAmJiBuc2hpZnQgPCAyKQogCXJldHVybiAwOwogICAgIH0KQEAgLTky NzIsNiArOTMwMSwxMyBAQCBtYWtlX2ZpZWxkX2Fzc2lnbm1lbnQgKHJ0eCB4 KQogICAgICB0byB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb24sIGZvcmNlIGl0 IHRvIHRoZSByZXF1aXJlZCBtb2RlLCBhbmQKICAgICAgbWFrZSB0aGUgZXh0 cmFjdGlvbi4gIENoZWNrIGZvciB0aGUgQU5EIGluIGJvdGggb3BlcmFuZHMu ICAqLwogCisgIC8qIE9uZSBvciBtb3JlIFNVQlJFR3MgbWlnaHQgb2JzY3Vy ZSB0aGUgY29uc3RhbnQtcG9zaXRpb24gZmllbGQKKyAgICAgYXNzaWdubWVu dC4gIFRoZSBmaXJzdCBvbmUgd2UgYXJlIGxpa2VseSB0byBlbmNvdW50ZXIg aXMgYW4gb3V0ZXIKKyAgICAgbmFycm93aW5nIFNVQlJFRywgd2hpY2ggd2Ug Y2FuIGp1c3Qgc3RyaXAgZm9yIHRoZSBwdXJwb3NlcyBvZgorICAgICBpZGVu dGlmeWluZyB0aGUgY29uc3RhbnQtZmllbGQgYXNzaWdubWVudC4gICovCisg IGlmIChHRVRfQ09ERSAoc3JjKSA9PSBTVUJSRUcgJiYgc3VicmVnX2xvd3Bh cnRfcCAoc3JjKSkKKyAgICBzcmMgPSBTVUJSRUdfUkVHIChzcmMpOworCiAg IGlmIChHRVRfQ09ERSAoc3JjKSAhPSBJT1IgJiYgR0VUX0NPREUgKHNyYykg IT0gWE9SKQogICAgIHJldHVybiB4OwogCkBAIC05MjgyLDEwICs5MzE4LDM4 IEBAIG1ha2VfZmllbGRfYXNzaWdubWVudCAocnR4IHgpCiAgICAgICAmJiBD T05TVF9JTlRfUCAoWEVYUCAocmhzLCAxKSkKICAgICAgICYmIHJ0eF9lcXVh bF9mb3JfZmllbGRfYXNzaWdubWVudF9wIChYRVhQIChyaHMsIDApLCBkZXN0 KSkKICAgICBjMSA9IElOVFZBTCAoWEVYUCAocmhzLCAxKSksIG90aGVyID0g bGhzOworICAvKiBUaGUgc2Vjb25kIFNVQlJFRyB0aGF0IG1pZ2h0IGdldCBp biB0aGUgd2F5IGlzIGEgcGFyYWRveGljYWwKKyAgICAgU1VCUkVHIGFyb3Vu ZCB0aGUgZmlyc3Qgb3BlcmFuZCBvZiB0aGUgQU5ELiAgV2Ugd2FudCB0byAK KyAgICAgcHJldGVuZCB0aGUgb3BlcmFuZCBpcyBhcyB3aWRlIGFzIHRoZSBk ZXN0aW5hdGlvbiBoZXJlLiAgIFdlCisgICAgIGRvIHRoaXMgYnkgY3JlYXRp bmcgYSBuZXcgTUVNIGluIHRoZSB3aWRlciBtb2RlIGZvciB0aGUgc29sZQor ICAgICBwdXJwb3NlIG9mIHRoZSBjYWxsIHRvIHJ0eF9lcXVhbF9mb3JfZmll bGRfYXNzaWdubWVudF9wLiAgIEFsc28KKyAgICAgbm90ZSB0aGlzIHRyaWNr IG9ubHkgd29ya3MgZm9yIE1FTXMuICAqLworICBlbHNlIGlmIChHRVRfQ09E RSAocmhzKSA9PSBBTkQKKwkgICAmJiBwYXJhZG94aWNhbF9zdWJyZWdfcCAo WEVYUCAocmhzLCAwKSkKKwkgICAmJiBHRVRfQ09ERSAoU1VCUkVHX1JFRyAo WEVYUCAocmhzLCAwKSkpID09IE1FTQorCSAgICYmIENPTlNUX0lOVF9QIChY RVhQIChyaHMsIDEpKQorCSAgICYmIHJ0eF9lcXVhbF9mb3JfZmllbGRfYXNz aWdubWVudF9wIChnZW5fcnR4X01FTSAoR0VUX01PREUgKGRlc3QpLAorCQkJ CQkJCSAgICAgWEVYUCAoU1VCUkVHX1JFRyAoWEVYUCAocmhzLCAwKSksIDAp KSwKKwkJCQkJCWRlc3QpKQorICAgIGMxID0gSU5UVkFMIChYRVhQIChyaHMs IDEpKSwgb3RoZXIgPSBsaHM7CiAgIGVsc2UgaWYgKEdFVF9DT0RFIChsaHMp ID09IEFORAogCSAgICYmIENPTlNUX0lOVF9QIChYRVhQIChsaHMsIDEpKQog CSAgICYmIHJ0eF9lcXVhbF9mb3JfZmllbGRfYXNzaWdubWVudF9wIChYRVhQ IChsaHMsIDApLCBkZXN0KSkKICAgICBjMSA9IElOVFZBTCAoWEVYUCAobGhz LCAxKSksIG90aGVyID0gcmhzOworICAvKiBUaGUgc2Vjb25kIFNVQlJFRyB0 aGF0IG1pZ2h0IGdldCBpbiB0aGUgd2F5IGlzIGEgcGFyYWRveGljYWwKKyAg ICAgU1VCUkVHIGFyb3VuZCB0aGUgZmlyc3Qgb3BlcmFuZCBvZiB0aGUgQU5E LiAgV2Ugd2FudCB0byAKKyAgICAgcHJldGVuZCB0aGUgb3BlcmFuZCBpcyBh cyB3aWRlIGFzIHRoZSBkZXN0aW5hdGlvbiBoZXJlLiAgIFdlCisgICAgIGRv IHRoaXMgYnkgY3JlYXRpbmcgYSBuZXcgTUVNIGluIHRoZSB3aWRlciBtb2Rl IGZvciB0aGUgc29sZQorICAgICBwdXJwb3NlIG9mIHRoZSBjYWxsIHRvIHJ0 eF9lcXVhbF9mb3JfZmllbGRfYXNzaWdubWVudF9wLiAgIEFsc28KKyAgICAg bm90ZSB0aGlzIHRyaWNrIG9ubHkgd29ya3MgZm9yIE1FTXMuICAqLworICBl bHNlIGlmIChHRVRfQ09ERSAobGhzKSA9PSBBTkQKKwkgICAmJiBwYXJhZG94 aWNhbF9zdWJyZWdfcCAoWEVYUCAobGhzLCAwKSkKKwkgICAmJiBHRVRfQ09E RSAoU1VCUkVHX1JFRyAoWEVYUCAobGhzLCAwKSkpID09IE1FTQorCSAgICYm IENPTlNUX0lOVF9QIChYRVhQIChsaHMsIDEpKQorCSAgICYmIHJ0eF9lcXVh bF9mb3JfZmllbGRfYXNzaWdubWVudF9wIChnZW5fcnR4X01FTSAoR0VUX01P REUgKGRlc3QpLAorCQkJCQkJCSAgICAgWEVYUCAoU1VCUkVHX1JFRyAoWEVY UCAobGhzLCAwKSksIDApKSwKKwkJCQkJCWRlc3QpKQorICAgIGMxID0gSU5U VkFMIChYRVhQIChsaHMsIDEpKSwgb3RoZXIgPSByaHM7CiAgIGVsc2UKICAg ICByZXR1cm4geDsKIApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9DaGFu Z2VMb2cgYi9nY2MvdGVzdHN1aXRlL0NoYW5nZUxvZwppbmRleCA2OTQ4OGVj Li5jNjAyMzBmIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL0NoYW5nZUxv ZworKysgYi9nY2MvdGVzdHN1aXRlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkg QEAKKzIwMTUtMDEtMjkgIEplZmYgTGF3ICA8bGF3QHJlZGhhdC5jb20+CisK KwlQUiB0YXJnZXQvMTUxODQKKwkqIGdjYy50YXJnZXQvaTM4Ni9wcjE1MTg0 LTEuYzogTmV3IHRlc3QuCisJKiBnY2MudGFyZ2V0L2kzODYvcHIxNTE4NC0y LmM6IE5ldyB0ZXN0LgorCiAyMDE1LTAxLTI5ICBZdXJpIFJ1bXlhbnRzZXYg IDx5c3J1bXlhbkBnbWFpbC5jb20+CiAKIAlQUiB0cmVlLW9wdGltaXphdGlv bi82NDc0NgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvcHIxNTE4NC0xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjE1MTg0LTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi45ZWI1NDRjCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvcHIxNTE4NC0xLmMKQEAgLTAsMCArMSwz MyBAQAorLyogUFIgMTUxODQgZmlyc3QgdHdvIHRlc3RzLCBwbHVzIHR3byBh ZGRpdGlvbiBvbmVzLiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisv KiB7IGRnLW9wdGlvbnMgIi1PMiAtbTMyIC1tYXJjaD1wZW50aXVtcHJvIiB9 ICovCisKKyNkZWZpbmUgcmVncGFybSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bh cm1fXygzKSkpCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgeDsKK2V4dGVybiB1 bnNpZ25lZCBzaG9ydCB5OworCit2b2lkIHJlZ3Bhcm0gZjAodW5zaWduZWQg Y2hhciBjKQoreworICAgICAgIHggPSAoeCAmIDB4RkZGRkZGMDApIHwgKHVu c2lnbmVkIGludCljOworfQorCit2b2lkIHJlZ3Bhcm0gZjEodW5zaWduZWQg Y2hhciBjKQoreworICAgICB4ID0gKHggJiAweEZGRkYwMEZGKSB8ICgodW5z aWduZWQgaW50KWMgPDwgOCk7Cit9CisKK3ZvaWQgcmVncGFybSBmMih1bnNp Z25lZCBjaGFyIGMpCit7CisgICAgIHggPSAoeCAmIDB4RkYwMEZGRkYpIHwg KCh1bnNpZ25lZCBpbnQpYyA8PCAxNik7Cit9Cit2b2lkIHJlZ3Bhcm0gZjMo dW5zaWduZWQgY2hhciBjKQoreworICAgICB4ID0gKHggJiAweDAwRkZGRkZG KSB8ICgodW5zaWduZWQgaW50KWMgPDwgMjQpOworfQorCisKKy8qIEVhY2gg ZnVuY3Rpb24gc2hvdWxkIGNvbXBpbGUgZG93biB0byBhIGJ5dGUgbW92ZSBm cm9tCisgICB0aGUgaW5wdXQgcmVnaXN0ZXIgaW50byB4LCBwb3NzaWJseSBh dCBhbiBvZmZzZXQgd2l0aGluIHguICAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLXRpbWVzICJcdG1vdmJcdCVhbCwgeCIgNCB9IH0gKi8K KwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv cHIxNTE4NC0yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9w cjE1MTg0LTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li45OWZkYmM4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvcHIxNTE4NC0yLmMKQEAgLTAsMCArMSwyMyBAQAor LyogUFIgMTUxODQgc2Vjb25kIHR3byB0ZXN0cworLyogeyBkZy1kbyBjb21w aWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tMzIgLW1hcmNoPXBl bnRpdW1wcm8iIH0gKi8KKworI2RlZmluZSByZWdwYXJtIF9fYXR0cmlidXRl X18oKF9fcmVncGFybV9fKDMpKSkKKworZXh0ZXJuIHVuc2lnbmVkIGludCB4 OworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHk7CisKK3ZvaWQgcmVncGFybSBn MCh1bnNpZ25lZCBjaGFyIGMpCit7CisgICAgICAgIHkgPSAoeSAmIDB4RkYw MCkgfCAodW5zaWduZWQgc2hvcnQpYzsKK30KKwordm9pZCByZWdwYXJtIGcx KHVuc2lnbmVkIGNoYXIgYykKK3sKKyAgICAgICAgeSA9ICh5ICYgMHgwMEZG KSB8ICgodW5zaWduZWQgc2hvcnQpYyA8PCA4KTsKK30KKworLyogRWFjaCBm dW5jdGlvbiBzaG91bGQgY29tcGlsZSBkb3duIHRvIGEgYnl0ZSBtb3ZlIGZy b20KKyAgIHRoZSBpbnB1dCByZWdpc3RlciBpbnRvIHgsIHBvc3NpYmx5IGF0 IGFuIG9mZnNldCB3aXRoaW4geC4gICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMgIlx0bW92Ylx0JWFsLCB5IiAyIH0gfSAqLwor Cg== --------------060502000207070900010708--