From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16546 invoked by alias); 19 Jun 2014 09:41:34 -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 16534 invoked by uid 89); 19 Jun 2014 09:41:34 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.1 required=5.0 tests=AWL,BAYES_00,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mailapp01.imgtec.com Received: from mailapp01.imgtec.com (HELO mailapp01.imgtec.com) (195.59.15.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 19 Jun 2014 09:41:33 +0000 Received: from KLMAIL01.kl.imgtec.org (unknown [192.168.5.35]) by Websense Email Security Gateway with ESMTPS id 1D043700E83E4; Thu, 19 Jun 2014 10:41:27 +0100 (IST) Received: from PUMAIL01.pu.imgtec.org (192.168.91.250) by KLMAIL01.kl.imgtec.org (192.168.5.35) with Microsoft SMTP Server (TLS) id 14.3.181.6; Thu, 19 Jun 2014 10:41:28 +0100 Received: from PUMAIL01.pu.imgtec.org ([::1]) by PUMAIL01.pu.imgtec.org ([::1]) with mapi id 14.02.0247.003; Thu, 19 Jun 2014 15:11:19 +0530 From: Sameera Deshpande To: "rdsandiford@googlemail.com" CC: Matthew Fortune , "gcc-patches@gcc.gnu.org" Subject: [PATCH][MIPS] Enable load-load/store-store bonding Date: Thu, 19 Jun 2014 09:41:00 -0000 Message-ID: <38C8F1E431EDD94A82971C543A11B4FEE0A5C8@PUMAIL01.pu.imgtec.org> Content-Type: multipart/mixed; boundary="_002_38C8F1E431EDD94A82971C543A11B4FEE0A5C8PUMAIL01puimgteco_" MIME-Version: 1.0 X-IsSubscribed: yes X-SW-Source: 2014-06/txt/msg01521.txt.bz2 --_002_38C8F1E431EDD94A82971C543A11B4FEE0A5C8PUMAIL01puimgteco_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 1335 Hi Richard, Please find attached the patch implementing load-load/store-store bonding s= upported by P5600. In P5600, 2 consecutive loads/stores of same type which access contiguous m= emory locations are bonded together by instruction issue unit to dispatch s= ingle load/store instruction which accesses both locations. This allows 2X = improvement in memory intensive code. This optimization can be performed fo= r LH, SH, LW, SW, LWC, SWC, LDC, SDC instructions. This patch adds peephole2 patterns to identify such loads/stores, and put t= hem in parallel, so that the scheduler will not split it - thereby guaranty= ing h/w level load/store bonding. The patch is tested with dejagnu for correctness. Local testing on hardware for perf is currently going on. Ok for trunk?=20 Changelog: gcc/ * config/mips/mips.md (JOINLDST1): New mode iterator. (insn_type): New mode attribute. (reg): Update mode attribute. (join2_load_Store): New pattern. (join2_loadhi): Likewise. (join2_storehi): Likewise. (define_peehole2): Add peephole2 patterns to join 2 HI/SI/SF/DF-mode load-load and store-stores. * config/mips/mips.opt (mld-st-pairing): New option. * config/mips/mips.c (mips_option_override): New exception. *config/mips/mips.h (ENABLE_LD_ST_PAIRING): New macro. - Thanks and regards, Sameera D. --_002_38C8F1E431EDD94A82971C543A11B4FEE0A5C8PUMAIL01puimgteco_ Content-Type: application/octet-stream; name="load-store-pairing.patch" Content-Description: load-store-pairing.patch Content-Disposition: attachment; filename="load-store-pairing.patch"; size=8218; creation-date="Thu, 12 Jun 2014 09:44:47 GMT"; modification-date="Thu, 19 Jun 2014 08:47:48 GMT" Content-Transfer-Encoding: base64 Content-length: 11143 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbWlwcy9taXBzLmMgYi9nY2MvY29u ZmlnL21pcHMvbWlwcy5jCmluZGV4IGI1YjViYTcuLjk4MDRlZjIgMTAwNjQ0 Ci0tLSBhL2djYy9jb25maWcvbWlwcy9taXBzLmMKKysrIGIvZ2NjL2NvbmZp Zy9taXBzL21pcHMuYwpAQCAtMTg4MTMsNiArMTg4MTMsOSBAQCBtaXBzX29w dGlvbl9vdmVycmlkZSAodm9pZCkKICAgaWYgKFRBUkdFVF9NSUNST01JUFMg JiYgVEFSR0VUX01JUFMxNikKICAgICBlcnJvciAoInVuc3VwcG9ydGVkIGNv bWJpbmF0aW9uOiAlcyIsICItbWlwczE2IC1tbWljcm9taXBzIik7CiAKKyAg aWYgKFRBUkdFVF9GSVhfMjRLICYmIFRVTkVfUDU2MDApCisgICAgZXJyb3Ig KCJ1bnN1cHBvcnRlZCBjb21iaW5hdGlvbjogJXMiLCAiLW10dW5lPXA1NjAw IC1tZml4LTI0ayIpOworCiAgIC8qIFNhdmUgdGhlIGJhc2UgY29tcHJlc3Np b24gc3RhdGUgYW5kIHByb2Nlc3MgZmxhZ3MgYXMgdGhvdWdoIHdlCiAgICAg IHdlcmUgZ2VuZXJhdGluZyB1bmNvbXByZXNzZWQgY29kZS4gICovCiAgIG1p cHNfYmFzZV9jb21wcmVzc2lvbl9mbGFncyA9IFRBUkdFVF9DT01QUkVTU0lP TjsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbWlwcy9taXBzLmggYi9nY2Mv Y29uZmlnL21pcHMvbWlwcy5oCmluZGV4IDg2Y2E0MTkuLjQ0NzhmODFlIDEw MDY0NAotLS0gYS9nY2MvY29uZmlnL21pcHMvbWlwcy5oCisrKyBiL2djYy9j b25maWcvbWlwcy9taXBzLmgKQEAgLTMxODQsMyArMzE4NCw2IEBAIGV4dGVy biBHVFkoKCkpIHN0cnVjdCB0YXJnZXRfZ2xvYmFscyAqbWlwczE2X2dsb2Jh bHM7CiAgICB3aXRoIGFyZ3VtZW50cyBBUkdTLiAgKi8KICNkZWZpbmUgUE1P REVfSU5TTihOQU1FLCBBUkdTKSBcCiAgIChQbW9kZSA9PSBTSW1vZGUgPyBO QU1FICMjIF9zaSBBUkdTIDogTkFNRSAjIyBfZGkgQVJHUykKKworI2RlZmlu ZSBFTkFCTEVfTERfU1RfUEFJUklORyBcCisgIChUQVJHRVRfRU5BQkxFX0xE X1NUX1BBSVJJTkcgJiYgVFVORV9QNTYwMCkKZGlmZiAtLWdpdCBhL2djYy9j b25maWcvbWlwcy9taXBzLm1kIGIvZ2NjL2NvbmZpZy9taXBzL21pcHMubWQK aW5kZXggNzIyOWU4Zi4uMDU2MDVjNSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9taXBzL21pcHMubWQKKysrIGIvZ2NjL2NvbmZpZy9taXBzL21pcHMubWQK QEAgLTc4MCw2ICs3ODAsNyBAQAogCiAoZGVmaW5lX21vZGVfaXRlcmF0b3Ig TU9WRVAxIFtTSSBTRl0pCiAoZGVmaW5lX21vZGVfaXRlcmF0b3IgTU9WRVAy IFtTSSBTRl0pCisoZGVmaW5lX21vZGVfaXRlcmF0b3IgSk9JTkxEU1QxIFtT SSBTRiBERl0pCiAKIDs7IFRoaXMgbW9kZSBpdGVyYXRvciBhbGxvd3MgOkhJ TE8gdG8gYmUgdXNlZCBhcyB0aGUgbW9kZSBvZiB0aGUKIDs7IGNvbmNhdGVu YXRlZCBISSBhbmQgTE8gcmVnaXN0ZXJzLgpAQCAtODgzLDYgKzg4NCw4IEBA CiAoZGVmaW5lX21vZGVfYXR0ciBsb2FkeCBbKFNGICJsd3hjMSIpIChERiAi bGR4YzEiKSAoVjJTRiAibGR4YzEiKV0pCiAoZGVmaW5lX21vZGVfYXR0ciBz dG9yZXggWyhTRiAic3d4YzEiKSAoREYgInNkeGMxIikgKFYyU0YgInNkeGMx IildKQogCisoZGVmaW5lX21vZGVfYXR0ciBpbnNuX3R5cGUgWyhTSSAiIikg KFNGICJmcCIpIChERiAiZnAiKV0pCisKIDs7IFRoZSB1bmV4dGVuZGVkIHJh bmdlcyBvZiB0aGUgTUlQUzE2IGFkZGl1IGFuZCBkYWRkaXUgaW5zdHJ1Y3Rp b25zCiA7OyBhcmUgZGlmZmVyZW50LiAgU29tZSBmb3JtcyBvZiB1bmV4dGVu ZGVkIGFkZGl1IGhhdmUgYW4gOC1iaXQgaW1tZWRpYXRlCiA7OyBmaWVsZCBi dXQgdGhlIGVxdWl2YWxlbnQgZGFkZGl1IGhhcyBvbmx5IGEgNS1iaXQgZmll bGQuCkBAIC04OTAsNyArODkzLDcgQEAKIAogOzsgVGhpcyBhdHRyaWJ1dGUg Z2l2ZXMgdGhlIGJlc3QgY29uc3RyYWludCB0byB1c2UgZm9yIHJlZ2lzdGVy cyBvZgogOzsgYSBnaXZlbiBtb2RlLgotKGRlZmluZV9tb2RlX2F0dHIgcmVn IFsoU0kgImQiKSAoREkgImQiKSAoQ0MgInoiKSAoQ0NGICJmIildKQorKGRl ZmluZV9tb2RlX2F0dHIgcmVnIFsoU0kgImQiKSAoREkgImQiKSAoQ0MgInoi KSAoQ0NGICJmIikgKFNGICJmIikgKERGICJmIildKQogCiA7OyBUaGlzIGF0 dHJpYnV0ZSBnaXZlcyB0aGUgZm9ybWF0IHN1ZmZpeCBmb3IgZmxvYXRpbmct cG9pbnQgb3BlcmF0aW9ucy4KIChkZWZpbmVfbW9kZV9hdHRyIGZtdCBbKFNG ICJzIikgKERGICJkIikgKFYyU0YgInBzIildKQpAQCAtNzQ0Miw2ICs3NDQ1 LDE1MyBAQAogICB7IHJldHVybiBNSVBTX0NBTEwgKCJqYWwiLCBvcGVyYW5k cywgMCwgLTEpOyB9CiAgIFsoc2V0X2F0dHIgInR5cGUiICJjYWxsIikKICAg IChzZXRfYXR0ciAiaW5zbl9jb3VudCIgIjMiKV0pCisKKyhkZWZpbmVfaW5z biAiKmpvaW4yX2xvYWRfc3RvcmU8Sk9JTkxEU1QxOm1vZGU+IgorICBbKHBh cmFsbGVsCisgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Sk9JTkxEU1QxIDAg Im5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiPTxyZWc+LG0iKQorCSAgKG1hdGNo X29wZXJhbmQ6Sk9JTkxEU1QxIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAi bSw8cmVnPiIpKQorICAgICAoc2V0IChtYXRjaF9vcGVyYW5kOkpPSU5MRFNU MSAyICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIj08cmVnPixtIikKKwkgICht YXRjaF9vcGVyYW5kOkpPSU5MRFNUMSAzICJub25pbW1lZGlhdGVfb3BlcmFu ZCIgIm0sPHJlZz4iKSldKV0KKyAgIkVOQUJMRV9MRF9TVF9QQUlSSU5HICYm IHJlbG9hZF9jb21wbGV0ZWQiCisgIHsKKyAgICBvdXRwdXRfYXNtX2luc24g KG1pcHNfb3V0cHV0X21vdmUgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSks IG9wZXJhbmRzKTsKKyAgICBvdXRwdXRfYXNtX2luc24gKG1pcHNfb3V0cHV0 X21vdmUgKG9wZXJhbmRzWzJdLCBvcGVyYW5kc1szXSksICZvcGVyYW5kc1sy XSk7CisgICAgcmV0dXJuICIiOworICB9CisgIFsoc2V0X2F0dHIgIm1vdmVf dHlwZSIgIjxpbnNuX3R5cGU+bG9hZCw8aW5zbl90eXBlPnN0b3JlIikKKyAg IChzZXRfYXR0cl9hbHRlcm5hdGl2ZSAiaW5zbl9jb3VudCIKKwlbKG11bHQg KHN5bWJvbF9yZWYgIm1pcHNfbG9hZF9zdG9yZV9pbnNucyAob3BlcmFuZHNb MV0sIGluc24pIikKKwkgICAgICAgKGNvbnN0X2ludCAyKSkKKwkgKG11bHQg KHN5bWJvbF9yZWYgIm1pcHNfbG9hZF9zdG9yZV9pbnNucyAob3BlcmFuZHNb MF0sIGluc24pIikKKwkgICAgICAgKGNvbnN0X2ludCAyKSldKV0pCisKKzs7 MiBTSS9TRi9ERiBsb2FkcyBhcmUgam9pbmVkLgorKGRlZmluZV9wZWVwaG9s ZTIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Sk9JTkxEU1QxIDAgInJlZ2lz dGVyX29wZXJhbmQiKQorCShtZW06Sk9JTkxEU1QxIChwbHVzOlNJIChtYXRj aF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiKQorCQkJCShtYXRj aF9vcGVyYW5kOlNJIDIgImNvbnN0X2ludF9vcGVyYW5kIikpKSkKKyAgIChz ZXQgKG1hdGNoX29wZXJhbmQ6Sk9JTkxEU1QxIDMgInJlZ2lzdGVyX29wZXJh bmQiKQorCShtZW06Sk9JTkxEU1QxIChwbHVzOlNJIChtYXRjaF9kdXAgMSkK KwkJCQkobWF0Y2hfb3BlcmFuZDpTSSA0ICJjb25zdF9pbnRfb3BlcmFuZCIp KSkpXQorICAiRU5BQkxFX0xEX1NUX1BBSVJJTkcgJiYKKyAgIFJFR05PX1JF R19DTEFTUyAoUkVHTk8gKG9wZXJhbmRzWzBdKSkKKwk9PSBSRUdOT19SRUdf Q0xBU1MgKFJFR05PIChvcGVyYW5kc1szXSkpICYmCisgICAoYWJzIChJTlRW QUwgKG9wZXJhbmRzWzJdKSAtIElOVFZBTCAob3BlcmFuZHNbNF0pKQorCT09 IEdFVF9NT0RFX1NJWkUgKDxKT0lOTERTVDE6TU9ERT5tb2RlKSkiCisKKyAg WyhwYXJhbGxlbCBbKHNldCAobWF0Y2hfZHVwIDApCisJCSAgIChtYXRjaF9k dXAgMikpCisJICAgICAgKHNldCAobWF0Y2hfZHVwIDMpCisJCSAgIChtYXRj aF9kdXAgNCkpXSldCisgIHsKKyAgICBvcGVyYW5kc1s0XSA9IFNFVF9TUkMg KFBBVFRFUk4gKG5leHRfYWN0aXZlX2luc24gKGN1cnJfaW5zbikpKTsKKyAg ICBvcGVyYW5kc1syXSA9IFNFVF9TUkMgKFBBVFRFUk4gKGN1cnJfaW5zbikp OworICB9KQorCis7OyAyIFNJL1NGL0RGIHN0b3JlcyBhcmUgam9pbmVkLgor KGRlZmluZV9wZWVwaG9sZTIKKyAgWyhzZXQgKG1lbTpKT0lOTERTVDEgKHBs dXM6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIp CisJCQkJKG1hdGNoX29wZXJhbmQ6U0kgMSAiY29uc3RfaW50X29wZXJhbmQi KSkpCisJKG1hdGNoX29wZXJhbmQ6Sk9JTkxEU1QxIDIgInJlZ2lzdGVyX29w ZXJhbmQiKSkKKyAgIChzZXQgKG1lbTpKT0lOTERTVDEgKHBsdXM6U0kgKG1h dGNoX2R1cCAwKQorCQkJCShtYXRjaF9vcGVyYW5kOlNJIDMgImNvbnN0X2lu dF9vcGVyYW5kIikpKQorCShtYXRjaF9vcGVyYW5kOkpPSU5MRFNUMSA0ICJy ZWdpc3Rlcl9vcGVyYW5kIikpXQorICAiRU5BQkxFX0xEX1NUX1BBSVJJTkcg JiYKKyAgIFJFR05PX1JFR19DTEFTUyAoUkVHTk8gKG9wZXJhbmRzWzJdKSkK Kwk9PSBSRUdOT19SRUdfQ0xBU1MgKFJFR05PIChvcGVyYW5kc1s0XSkpICYm CisgICAoYWJzIChJTlRWQUwgKG9wZXJhbmRzWzFdKSAtIElOVFZBTCAob3Bl cmFuZHNbM10pKQorCT09IEdFVF9NT0RFX1NJWkUgKDxKT0lOTERTVDE6TU9E RT5tb2RlKSkiCisgIFsocGFyYWxsZWwgWyhzZXQgKG1hdGNoX2R1cCAxKQor CQkgICAobWF0Y2hfZHVwIDIpKQorCSAgICAgIChzZXQgKG1hdGNoX2R1cCAz KQorCQkgICAobWF0Y2hfZHVwIDQpKV0pXQorICB7CisgICAgb3BlcmFuZHNb M10gPSBTRVRfREVTVCAoUEFUVEVSTiAobmV4dF9hY3RpdmVfaW5zbiAoY3Vy cl9pbnNuKSkpOworICAgIG9wZXJhbmRzWzFdID0gU0VUX0RFU1QgKFBBVFRF Uk4gKGN1cnJfaW5zbikpOworICB9KQorCisoZGVmaW5lX2luc24gIipqb2lu Ml9zdG9yZWhpIgorICBbKHBhcmFsbGVsCisgICAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6SEkgMCAibWVtb3J5X29wZXJhbmQiICI9bSIpCisJICAobWF0Y2hf b3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQorICAgICAo c2V0IChtYXRjaF9vcGVyYW5kOkhJIDIgIm1lbW9yeV9vcGVyYW5kIiAiPW0i KQorCSAgKG1hdGNoX29wZXJhbmQ6SEkgMyAicmVnaXN0ZXJfb3BlcmFuZCIg InIiKSldKV0KKyAgIkVOQUJMRV9MRF9TVF9QQUlSSU5HICYmIHJlbG9hZF9j b21wbGV0ZWQiCisgIHsKKyAgICBvdXRwdXRfYXNtX2luc24gKG1pcHNfb3V0 cHV0X21vdmUgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSksIG9wZXJhbmRz KTsKKyAgICBvdXRwdXRfYXNtX2luc24gKG1pcHNfb3V0cHV0X21vdmUgKG9w ZXJhbmRzWzJdLCBvcGVyYW5kc1szXSksICZvcGVyYW5kc1syXSk7CisgICAg cmV0dXJuICIiOworICB9CisgIFsoc2V0X2F0dHIgIm1vdmVfdHlwZSIgInN0 b3JlIikKKyAgIChzZXRfYXR0cl9hbHRlcm5hdGl2ZSAiaW5zbl9jb3VudCIK KwlbKG11bHQJKHN5bWJvbF9yZWYgIm1pcHNfbG9hZF9zdG9yZV9pbnNucyAo b3BlcmFuZHNbMF0sIGluc24pIikKKwkJKGNvbnN0X2ludCAyKSldKV0pCisK KyhkZWZpbmVfaW5zbiAiKmpvaW4yX2xvYWRoaSIKKyAgWyhwYXJhbGxlbAor ICAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJh bmQiICI9ciIpCisJICAoYW55X2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpI SSAxICJtZW1vcnlfb3BlcmFuZCIgIm0iKSkpCisgICAgIChzZXQgKG1hdGNo X29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkgIChh bnlfZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDMgIm1lbW9yeV9vcGVy YW5kIiAibSIpKSldKV0KKyAgIkVOQUJMRV9MRF9TVF9QQUlSSU5HICYmIHJl bG9hZF9jb21wbGV0ZWQiCisgIHsKKyAgICBvdXRwdXRfYXNtX2luc24gKCJs aDx1Plx0JTAsJTEiLCBvcGVyYW5kcyk7CisgICAgb3V0cHV0X2FzbV9pbnNu ICgibGg8dT5cdCUyLCUzIiwgb3BlcmFuZHMpOworICAgIHJldHVybiAiIjsK KyAgfQorICBbKHNldF9hdHRyICJtb3ZlX3R5cGUiICJsb2FkIikKKyAgIChz ZXRfYXR0cl9hbHRlcm5hdGl2ZSAiaW5zbl9jb3VudCIKKwlbKG11bHQJKHN5 bWJvbF9yZWYgIm1pcHNfbG9hZF9zdG9yZV9pbnNucyAob3BlcmFuZHNbMV0s IGluc24pIikKKwkJKGNvbnN0X2ludCAyKSldKV0pCisKKworOzsgMiAxNiBi aXQgaW50ZWdlciBsb2FkcyBhcmUgam9pbmVkLgorKGRlZmluZV9wZWVwaG9s ZTIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3Bl cmFuZCIpCisJKGFueV9leHRlbmQ6U0kgKG1lbTpISSAocGx1czpTSQorCQkJ CSAgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIpCisJ CQkJICAobWF0Y2hfb3BlcmFuZDpTSSAyICJjb25zdF9pbnRfb3BlcmFuZCIp KSkpKQorICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9v cGVyYW5kIikKKwkoYW55X2V4dGVuZDpTSSAobWVtOkhJIChwbHVzOlNJCisJ CQkJICAobWF0Y2hfZHVwIDEpCisJCQkJICAobWF0Y2hfb3BlcmFuZDpTSSA0 ICJjb25zdF9pbnRfb3BlcmFuZCIpKSkpKV0KKyAgIkVOQUJMRV9MRF9TVF9Q QUlSSU5HICYmCisgICBSRUdOT19SRUdfQ0xBU1MgKFJFR05PIChvcGVyYW5k c1swXSkpCisJPT0gUkVHTk9fUkVHX0NMQVNTIChSRUdOTyAob3BlcmFuZHNb M10pKSAmJgorICAgKGFicyAoSU5UVkFMIChvcGVyYW5kc1syXSkgLSBJTlRW QUwgKG9wZXJhbmRzWzRdKSkKKwk9PSBHRVRfTU9ERV9TSVpFIChISW1vZGUp KSIKKworICBbKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9kdXAgMCkKKwkJICAg KG1hdGNoX2R1cCAyKSkKKwkgICAgICAoc2V0IChtYXRjaF9kdXAgMykKKwkJ ICAgKG1hdGNoX2R1cCA0KSldKV0KKyAgeworICAgIG9wZXJhbmRzWzRdID0g U0VUX1NSQyAoUEFUVEVSTiAobmV4dF9hY3RpdmVfaW5zbiAoY3Vycl9pbnNu KSkpOworICAgIG9wZXJhbmRzWzJdID0gU0VUX1NSQyAoUEFUVEVSTiAoY3Vy cl9pbnNuKSk7CisgIH0pCisKKzs7IDIgMTYgYml0IGludGVnZXIgc3RvcmVz IGFyZSBqb2luZWQuCisoZGVmaW5lX3BlZXBob2xlMgorICBbKHNldCAobWVt OkhJIChwbHVzOlNJIChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29w ZXJhbmQiKQorCQkJIChtYXRjaF9vcGVyYW5kOlNJIDEgImNvbnN0X2ludF9v cGVyYW5kIikpKQorCShtYXRjaF9vcGVyYW5kOkhJIDIgInJlZ2lzdGVyX29w ZXJhbmQiKSkKKyAgIChzZXQgKG1lbTpISSAocGx1czpTSSAobWF0Y2hfZHVw IDApCisJCQkgKG1hdGNoX29wZXJhbmQ6U0kgMyAiY29uc3RfaW50X29wZXJh bmQiKSkpCisJKG1hdGNoX29wZXJhbmQ6SEkgNCAicmVnaXN0ZXJfb3BlcmFu ZCIpKV0KKyAgIkVOQUJMRV9MRF9TVF9QQUlSSU5HICYmCisgICBSRUdOT19S RUdfQ0xBU1MgKFJFR05PIChvcGVyYW5kc1syXSkpCisJPT0gUkVHTk9fUkVH X0NMQVNTIChSRUdOTyAob3BlcmFuZHNbNF0pKSAmJgorICAgKGFicyAoSU5U VkFMIChvcGVyYW5kc1sxXSkgLSBJTlRWQUwgKG9wZXJhbmRzWzNdKSkKKwk9 PSBHRVRfTU9ERV9TSVpFIChISW1vZGUpKSIKKyAgWyhwYXJhbGxlbCBbKHNl dCAobWF0Y2hfZHVwIDEpCisJCSAgIChtYXRjaF9kdXAgMikpCisJICAgICAg KHNldCAobWF0Y2hfZHVwIDMpCisJCSAgIChtYXRjaF9kdXAgNCkpXSldCisg IHsKKyAgICBvcGVyYW5kc1szXSA9IFNFVF9ERVNUIChQQVRURVJOIChuZXh0 X2FjdGl2ZV9pbnNuIChjdXJyX2luc24pKSk7CisgICAgb3BlcmFuZHNbMV0g PSBTRVRfREVTVCAoUEFUVEVSTiAoY3Vycl9pbnNuKSk7CisgIH0pCisKIAwK IDs7IFN5bmNocm9uaXphdGlvbiBpbnN0cnVjdGlvbnMuCiAKZGlmZiAtLWdp dCBhL2djYy9jb25maWcvbWlwcy9taXBzLm9wdCBiL2djYy9jb25maWcvbWlw cy9taXBzLm9wdAppbmRleCBiOWNmZDYyLi5kNDEzNWNmIDEwMDY0NAotLS0g YS9nY2MvY29uZmlnL21pcHMvbWlwcy5vcHQKKysrIGIvZ2NjL2NvbmZpZy9t aXBzL21pcHMub3B0CkBAIC00NDUsMyArNDQ1LDcgQEAgRW51bShtaXBzX2xp Yl9zZXR0aW5nKSBTdHJpbmcodGlueSkgVmFsdWUoTUlQU19MSUJfVElOWSkK IAogbXNjaGVkLXdlaWdodAogVGFyZ2V0IFJlcG9ydCBWYXIoVEFSR0VUX1ND SEVEX1dFSUdIVCkgVW5kb2N1bWVudGVkCisKK21sZC1zdC1wYWlyaW5nCitU YXJnZXQgUmVwb3J0IFZhcihUQVJHRVRfRU5BQkxFX0xEX1NUX1BBSVJJTkcp CitFbmFibGUgbG9hZC9zdG9yZSBwYWlyaW5nCg== --_002_38C8F1E431EDD94A82971C543A11B4FEE0A5C8PUMAIL01puimgteco_--