From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19062 invoked by alias); 30 Oct 2014 21:41:48 -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 19052 invoked by uid 89); 30 Oct 2014 21:41:47 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-vc0-f170.google.com Received: from mail-vc0-f170.google.com (HELO mail-vc0-f170.google.com) (209.85.220.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Thu, 30 Oct 2014 21:41:45 +0000 Received: by mail-vc0-f170.google.com with SMTP id la4so2305894vcb.15 for ; Thu, 30 Oct 2014 14:41:42 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.52.65.202 with SMTP id z10mr9414287vds.35.1414705302274; Thu, 30 Oct 2014 14:41:42 -0700 (PDT) Received: by 10.31.179.147 with HTTP; Thu, 30 Oct 2014 14:41:42 -0700 (PDT) In-Reply-To: References: Date: Thu, 30 Oct 2014 22:02:00 -0000 Message-ID: Subject: Re: [PATCH] Add zero-overhead looping for xtensa backend From: "augustine.sterling@gmail.com" To: "Yangfei (Felix)" Cc: "gcc-patches@gcc.gnu.org" , Andrew Pinski , Felix Yang Content-Type: multipart/mixed; boundary=20cf307f3a720209920506aabfee X-SW-Source: 2014-10/txt/msg03239.txt.bz2 --20cf307f3a720209920506aabfee Content-Type: text/plain; charset=UTF-8 Content-length: 1395 On Tue, Oct 28, 2014 at 5:22 AM, Yangfei (Felix) wrote: > Hi Sterling, > How do you think about this issue? > As c6x/bfin port handles this the same way, is it OK for the patch to be applied? > Thanks. I have committed this patch as attached. I made a couple of minor cleanups, plus some small fixes to the ChangeLog entry. The new code generated is better than the old code, but I'm not particularly happy with the result. In particular, it is way too conservative around spilling the trip count, and it still maintains the trip count inside the loop, in spite of the trip count being dead at that point. It won't always be dead, but when it is, it should be eliminated. So there is quite a bit of performance that could still be gained here. Thanks for the patch Felix. Sterling 2014-10-10 Felix Yang * config/xtensa/xtensa.h (TARGET_LOOPS): New Macro. * config/xtensa/xtensa.c: Include dumpfile.h and hw-doloop.h. (xtensa_reorg, xtensa_reorg_loops): New. (xtensa_can_use_doloop_p, xtensa_invalid_within_doloop): New. (hwloop_optimize, hwloop_fail, hwloop_pattern_reg): New. (xtensa_emit_loop_end): Emit the zero-overhead loop end label. (xtensa_doloop_hooks): Define. * config/xtensa/xtensa.md (doloop_end, loop_end): New (zero_cost_loop_start): Rewritten. (zero_cost_loop_end): Likewise. --20cf307f3a720209920506aabfee Content-Type: text/plain; charset=US-ASCII; name="loop-patch.diff" Content-Disposition: attachment; filename="loop-patch.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i1wmx0p40 Content-length: 18016 SW5kZXg6IGdjYy9jb25maWcveHRlbnNhL3h0ZW5zYS5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGdjYy9jb25maWcveHRlbnNhL3h0ZW5zYS5jCShy ZXZpc2lvbiAyMTY5NDMpCisrKyBnY2MvY29uZmlnL3h0ZW5zYS94dGVuc2Eu Ywkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsOCBAQAogI2luY2x1ZGUg ImdpbXBsaWZ5LmgiCiAjaW5jbHVkZSAiZGYuaCIKICNpbmNsdWRlICJidWls dGlucy5oIgorI2luY2x1ZGUgImR1bXBmaWxlLmgiCisjaW5jbHVkZSAiaHct ZG9sb29wLmgiCiAjaW5jbHVkZSAicnRsLWl0ZXIuaCIKIAogCkBAIC0yMDAs NiArMjAyLDEwIEBACiAKIHN0YXRpYyBib29sIGNvbnN0YW50cG9vbF9hZGRy ZXNzX3AgKGNvbnN0X3J0eCBhZGRyKTsKIHN0YXRpYyBib29sIHh0ZW5zYV9s ZWdpdGltYXRlX2NvbnN0YW50X3AgKG1hY2hpbmVfbW9kZSwgcnR4KTsKK3N0 YXRpYyB2b2lkIHh0ZW5zYV9yZW9yZyAodm9pZCk7CitzdGF0aWMgYm9vbCB4 dGVuc2FfY2FuX3VzZV9kb2xvb3BfcCAoY29uc3Qgd2lkZXN0X2ludCAmLCBj b25zdCB3aWRlc3RfaW50ICYsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50LCBib29sKTsKK3N0YXRpYyBjb25z dCBjaGFyICp4dGVuc2FfaW52YWxpZF93aXRoaW5fZG9sb29wIChjb25zdCBy dHhfaW5zbiAqKTsKIAogc3RhdGljIGJvb2wgeHRlbnNhX21lbWJlcl90eXBl X2ZvcmNlc19ibGsgKGNvbnN0X3RyZWUsCiAJCQkJCSAgIG1hY2hpbmVfbW9k ZSBtb2RlKTsKQEAgLTMyNiw2ICszMzIsMTUgQEAKICN1bmRlZiBUQVJHRVRf TEVHSVRJTUFURV9DT05TVEFOVF9QCiAjZGVmaW5lIFRBUkdFVF9MRUdJVElN QVRFX0NPTlNUQU5UX1AgeHRlbnNhX2xlZ2l0aW1hdGVfY29uc3RhbnRfcAog CisjdW5kZWYgVEFSR0VUX01BQ0hJTkVfREVQRU5ERU5UX1JFT1JHCisjZGVm aW5lIFRBUkdFVF9NQUNISU5FX0RFUEVOREVOVF9SRU9SRyB4dGVuc2FfcmVv cmcKKworI3VuZGVmIFRBUkdFVF9DQU5fVVNFX0RPTE9PUF9QCisjZGVmaW5l IFRBUkdFVF9DQU5fVVNFX0RPTE9PUF9QIHh0ZW5zYV9jYW5fdXNlX2RvbG9v cF9wCisKKyN1bmRlZiBUQVJHRVRfSU5WQUxJRF9XSVRISU5fRE9MT09QCisj ZGVmaW5lIFRBUkdFVF9JTlZBTElEX1dJVEhJTl9ET0xPT1AgeHRlbnNhX2lu dmFsaWRfd2l0aGluX2RvbG9vcAorCiBzdHJ1Y3QgZ2NjX3RhcmdldCB0YXJn ZXRtID0gVEFSR0VUX0lOSVRJQUxJWkVSOwogCiAMCkBAIC0xNjkwLDcgKzE3 MDUsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gIG91dHB1dF9hc21faW5z biAoIiMgbG9vcCBlbmQgZm9yICUwIiwgb3BlcmFuZHMpOworICBvdXRwdXRf YXNtX2luc24gKCIlMV9MRU5EOiIsIG9wZXJhbmRzKTsKIH0KIAogCkBAIC0z NzIwLDQgKzM3MzUsMjM2IEBACiAgIHJldHVybiAheHRlbnNhX3Rsc19yZWZl cmVuY2VkX3AgKHgpOwogfQogCisvKiBJbXBsZW1lbnQgVEFSR0VUX0NBTl9V U0VfRE9MT09QX1AuICAqLworCitzdGF0aWMgYm9vbAoreHRlbnNhX2Nhbl91 c2VfZG9sb29wX3AgKGNvbnN0IHdpZGVzdF9pbnQgJiwgY29uc3Qgd2lkZXN0 X2ludCAmLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBsb29wX2RlcHRoLCBib29sIGVudGVyZWRfYXRfdG9wKQoreworICAvKiBD b25zaWRlcmluZyBsaW1pdGF0aW9ucyBpbiB0aGUgaGFyZHdhcmUsIG9ubHkg dXNlIGRvbG9vcAorICAgICBmb3IgaW5uZXJtb3N0IGxvb3BzIHdoaWNoIG11 c3QgYmUgZW50ZXJlZCBmcm9tIHRoZSB0b3AuICAqLworICBpZiAobG9vcF9k ZXB0aCA+IDEgfHwgIWVudGVyZWRfYXRfdG9wKQorICAgIHJldHVybiBmYWxz ZTsKKworICByZXR1cm4gdHJ1ZTsKK30KKworLyogTlVMTCBpZiBJTlNOIGlu c24gaXMgdmFsaWQgd2l0aGluIGEgbG93LW92ZXJoZWFkIGxvb3AuCisgICBP dGhlcndpc2UgcmV0dXJuIHdoeSBkb2xvb3AgY2Fubm90IGJlIGFwcGxpZWQu ICAqLworCitzdGF0aWMgY29uc3QgY2hhciAqCit4dGVuc2FfaW52YWxpZF93 aXRoaW5fZG9sb29wIChjb25zdCBydHhfaW5zbiAqaW5zbikKK3sKKyAgaWYg KENBTExfUCAoaW5zbikpCisgICAgcmV0dXJuICJGdW5jdGlvbiBjYWxsIGlu IHRoZSBsb29wLiI7CisKKyAgaWYgKEpVTVBfUCAoaW5zbikgJiYgSU5TTl9D T0RFIChpbnNuKSA9PSBDT0RFX0ZPUl9yZXR1cm4pCisgICAgcmV0dXJuICJS ZXR1cm4gZnJvbSBhIGNhbGwgaW5zdHJ1Y3Rpb24gaW4gdGhlIGxvb3AuIjsK KworICByZXR1cm4gTlVMTDsKK30KKworLyogT3B0aW1pemUgTE9PUC4gICov CisKK3N0YXRpYyBib29sCitod2xvb3Bfb3B0aW1pemUgKGh3bG9vcF9pbmZv IGxvb3ApCit7CisgIGludCBpOworICBlZGdlIGVudHJ5X2VkZ2U7CisgIGJh c2ljX2Jsb2NrIGVudHJ5X2JiOworICBydHggaXRlcl9yZWc7CisgIHJ0eF9p bnNuICppbnNuLCAqc2VxLCAqZW50cnlfYWZ0ZXI7CisKKyAgaWYgKGxvb3At PmRlcHRoID4gMSkKKyAgICB7CisgICAgICBpZiAoZHVtcF9maWxlKQorICAg ICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICI7OyBsb29wICVkIGlzIG5vdCBp bm5lcm1vc3RcbiIsCisgICAgICAgICAgICAgICAgIGxvb3AtPmxvb3Bfbm8p OworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBpZiAoIWxvb3At PmluY29taW5nX2Rlc3QpCisgICAgeworICAgICAgaWYgKGR1bXBfZmlsZSkK KyAgICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiOzsgbG9vcCAlZCBoYXMg bW9yZSB0aGFuIG9uZSBlbnRyeVxuIiwKKyAgICAgICAgICAgICAgICAgbG9v cC0+bG9vcF9ubyk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg IGlmIChsb29wLT5pbmNvbWluZ19kZXN0ICE9IGxvb3AtPmhlYWQpCisgICAg eworICAgICAgaWYgKGR1bXBfZmlsZSkKKyAgICAgICAgZnByaW50ZiAoZHVt cF9maWxlLCAiOzsgbG9vcCAlZCBpcyBub3QgZW50ZXJlZCBmcm9tIGhlYWRc biIsCisgICAgICAgICAgICAgICAgIGxvb3AtPmxvb3Bfbm8pOworICAgICAg cmV0dXJuIGZhbHNlOworICAgIH0KKworICBpZiAobG9vcC0+aGFzX2NhbGwg fHwgbG9vcC0+aGFzX2FzbSkKKyAgICB7CisgICAgICBpZiAoZHVtcF9maWxl KQorICAgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICI7OyBsb29wICVkIGhh cyBpbnZhbGlkIGluc25cbiIsCisgICAgICAgICAgICAgICAgIGxvb3AtPmxv b3Bfbm8pOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAvKiBT Y2FuIGFsbCB0aGUgYmxvY2tzIHRvIG1ha2Ugc3VyZSB0aGV5IGRvbid0IHVz ZSBpdGVyX3JlZy4gICovCisgIGlmIChsb29wLT5pdGVyX3JlZ191c2VkIHx8 IGxvb3AtPml0ZXJfcmVnX3VzZWRfb3V0c2lkZSkKKyAgICB7CisgICAgICBp ZiAoZHVtcF9maWxlKQorICAgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICI7 OyBsb29wICVkIHVzZXMgaXRlcmF0b3JcbiIsCisgICAgICAgICAgICAgICAg IGxvb3AtPmxvb3Bfbm8pOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K KworICAvKiBDaGVjayBpZiBzdGFydF9sYWJlbCBhcHBlYXJzIGJlZm9yZSBk b2xvb3BfZW5kLiAgKi8KKyAgaW5zbiA9IGxvb3AtPnN0YXJ0X2xhYmVsOwor ICB3aGlsZSAoaW5zbiAmJiBpbnNuICE9IGxvb3AtPmxvb3BfZW5kKQorICAg IGluc24gPSBORVhUX0lOU04gKGluc24pOworCisgIGlmICghaW5zbikKKyAg ICB7CisgICAgICBpZiAoZHVtcF9maWxlKQorICAgICAgICBmcHJpbnRmIChk dW1wX2ZpbGUsICI7OyBsb29wICVkIHN0YXJ0X2xhYmVsIG5vdCBiZWZvcmUg bG9vcF9lbmRcbiIsCisgICAgICAgICAgICAgICAgIGxvb3AtPmxvb3Bfbm8p OworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAvKiBHZXQgdGhl IGxvb3AgaXRlcmF0aW9uIHJlZ2lzdGVyLiAgKi8KKyAgaXRlcl9yZWcgPSBs b29wLT5pdGVyX3JlZzsKKworICBnY2NfYXNzZXJ0IChSRUdfUCAoaXRlcl9y ZWcpKTsKKworICBlbnRyeV9lZGdlID0gTlVMTDsKKworICBGT1JfRUFDSF9W RUNfU0FGRV9FTFQgKGxvb3AtPmluY29taW5nLCBpLCBlbnRyeV9lZGdlKQor ICAgIGlmIChlbnRyeV9lZGdlLT5mbGFncyAmIEVER0VfRkFMTFRIUlUpCisg ICAgICBicmVhazsKKworICBpZiAoZW50cnlfZWRnZSA9PSBOVUxMKQorICAg IHJldHVybiBmYWxzZTsKKworICAvKiBQbGFjZSB0aGUgemVyb19jb3N0X2xv b3Bfc3RhcnQgaW5zdHJ1Y3Rpb24gYmVmb3JlIHRoZSBsb29wLiAgKi8KKyAg ZW50cnlfYmIgPSBlbnRyeV9lZGdlLT5zcmM7CisKKyAgc3RhcnRfc2VxdWVu Y2UgKCk7CisKKyAgaW5zbiA9IGVtaXRfaW5zbiAoZ2VuX3plcm9fY29zdF9s b29wX3N0YXJ0IChsb29wLT5pdGVyX3JlZywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wLT5zdGFydF9sYWJl bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsb29wLT5pdGVyX3JlZykpOworCisgIHNlcSA9IGdldF9pbnNucyAo KTsKKworICBpZiAoIXNpbmdsZV9zdWNjX3AgKGVudHJ5X2JiKSB8fCB2ZWNf c2FmZV9sZW5ndGggKGxvb3AtPmluY29taW5nKSA+IDEpCisgICAgeworICAg ICAgYmFzaWNfYmxvY2sgbmV3X2JiOworICAgICAgZWRnZSBlOworICAgICAg ZWRnZV9pdGVyYXRvciBlaTsKKworICAgICAgZW1pdF9pbnNuX2JlZm9yZSAo c2VxLCBCQl9IRUFEIChsb29wLT5oZWFkKSk7CisgICAgICBzZXEgPSBlbWl0 X2xhYmVsX2JlZm9yZSAoZ2VuX2xhYmVsX3J0eCAoKSwgc2VxKTsKKyAgICAg IG5ld19iYiA9IGNyZWF0ZV9iYXNpY19ibG9jayAoc2VxLCBpbnNuLCBlbnRy eV9iYik7CisgICAgICBGT1JfRUFDSF9FREdFIChlLCBlaSwgbG9vcC0+aW5j b21pbmcpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIShlLT5mbGFncyAm IEVER0VfRkFMTFRIUlUpKQorICAgICAgICAgICAgcmVkaXJlY3RfZWRnZV9h bmRfYnJhbmNoX2ZvcmNlIChlLCBuZXdfYmIpOworICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgIHJlZGlyZWN0X2VkZ2Vfc3VjYyAoZSwgbmV3X2JiKTsK KyAgICAgICAgfQorCisgICAgICBtYWtlX2VkZ2UgKG5ld19iYiwgbG9vcC0+ aGVhZCwgMCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZW50cnlf YWZ0ZXIgPSBCQl9FTkQgKGVudHJ5X2JiKTsKKyAgICAgIHdoaWxlIChERUJV R19JTlNOX1AgKGVudHJ5X2FmdGVyKQorICAgICAgICAgICAgIHx8IChOT1RF X1AgKGVudHJ5X2FmdGVyKQorICAgICAgICAgICAgICAgICAmJiBOT1RFX0tJ TkQgKGVudHJ5X2FmdGVyKSAhPSBOT1RFX0lOU05fQkFTSUNfQkxPQ0spKQor ICAgICAgICBlbnRyeV9hZnRlciA9IFBSRVZfSU5TTiAoZW50cnlfYWZ0ZXIp OworCisgICAgICBlbWl0X2luc25fYWZ0ZXIgKHNlcSwgZW50cnlfYWZ0ZXIp OworICAgIH0KKworICBlbmRfc2VxdWVuY2UgKCk7CisKKyAgcmV0dXJuIHRy dWU7Cit9CisKKy8qIEEgY2FsbGJhY2sgZm9yIHRoZSBody1kb2xvb3AgcGFz cy4gIENhbGxlZCB3aGVuIGEgbG9vcCB3ZSBoYXZlIGRpc2NvdmVyZWQKKyAg IHR1cm5zIG91dCBub3QgdG8gYmUgb3B0aW1pemFibGU7IHdlIGhhdmUgdG8g c3BsaXQgdGhlIGxvb3BfZW5kIHBhdHRlcm4gaW50bworICAgYSBzdWJ0cmFj dCBhbmQgYSB0ZXN0LiAgKi8KKworc3RhdGljIHZvaWQKK2h3bG9vcF9mYWls IChod2xvb3BfaW5mbyBsb29wKQoreworICBydHggdGVzdDsKKyAgcnR4X2lu c24gKmluc24gPSBsb29wLT5sb29wX2VuZDsKKworICBlbWl0X2luc25fYmVm b3JlIChnZW5fYWRkc2kzIChsb29wLT5pdGVyX3JlZywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbG9vcC0+aXRlcl9yZWcsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0bTFfcnR4KSwKKyAgICAg ICAgICAgICAgICAgICAgbG9vcC0+bG9vcF9lbmQpOworCisgIHRlc3QgPSBn ZW5fcnR4X05FIChWT0lEbW9kZSwgbG9vcC0+aXRlcl9yZWcsIGNvbnN0MF9y dHgpOworICBpbnNuID0gZW1pdF9qdW1wX2luc25fYmVmb3JlIChnZW5fY2Jy YW5jaHNpNCAodGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxvb3AtPml0ZXJfcmVnLCBjb25zdDBfcnR4 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbG9vcC0+c3RhcnRfbGFiZWwpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsb29wLT5sb29wX2VuZCk7CisKKyAgSlVNUF9MQUJF TCAoaW5zbikgPSBsb29wLT5zdGFydF9sYWJlbDsKKyAgTEFCRUxfTlVTRVMg KGxvb3AtPnN0YXJ0X2xhYmVsKSsrOworICBkZWxldGVfaW5zbiAobG9vcC0+ bG9vcF9lbmQpOworfQorCisvKiBBIGNhbGxiYWNrIGZvciB0aGUgaHctZG9s b29wIHBhc3MuICBUaGlzIGZ1bmN0aW9uIGV4YW1pbmVzIElOU047IGlmCisg ICBpdCBpcyBhIGRvbG9vcF9lbmQgcGF0dGVybiB3ZSByZWNvZ25pemUsIHJl dHVybiB0aGUgcmVnIHJ0eCBmb3IgdGhlCisgICBsb29wIGNvdW50ZXIuICBP dGhlcndpc2UsIHJldHVybiBOVUxMX1JUWC4gICovCisKK3N0YXRpYyBydHgK K2h3bG9vcF9wYXR0ZXJuX3JlZyAocnR4X2luc24gKmluc24pCit7CisgIHJ0 eCByZWc7CisKKyAgaWYgKCFKVU1QX1AgKGluc24pIHx8IHJlY29nX21lbW9p emVkIChpbnNuKSAhPSBDT0RFX0ZPUl9sb29wX2VuZCkKKyAgICByZXR1cm4g TlVMTF9SVFg7CisKKyAgcmVnID0gU0VUX0RFU1QgKFhWRUNFWFAgKFBBVFRF Uk4gKGluc24pLCAwLCAxKSk7CisgIGlmICghUkVHX1AgKHJlZykpCisgICAg cmV0dXJuIE5VTExfUlRYOworCisgIHJldHVybiByZWc7Cit9CisKKworc3Rh dGljIHN0cnVjdCBod19kb2xvb3BfaG9va3MgeHRlbnNhX2RvbG9vcF9ob29r cyA9Cit7CisgIGh3bG9vcF9wYXR0ZXJuX3JlZywKKyAgaHdsb29wX29wdGlt aXplLAorICBod2xvb3BfZmFpbAorfTsKKworLyogUnVuIGZyb20gbWFjaGlu ZV9kZXBlbmRlbnRfcmVvcmcsIHRoaXMgcGFzcyBsb29rcyBmb3IgZG9sb29w X2VuZCBpbnNucworICAgYW5kIHRyaWVzIHRvIHJld3JpdGUgdGhlIFJUTCBv ZiB0aGVzZSBsb29wcyBzbyB0aGF0IHByb3BlciBYdGVuc2EKKyAgIGhhcmR3 YXJlIGxvb3BzIGFyZSBnZW5lcmF0ZWQuICAqLworCitzdGF0aWMgdm9pZAor eHRlbnNhX3Jlb3JnX2xvb3BzICh2b2lkKQoreworICByZW9yZ19sb29wcyAo ZmFsc2UsICZ4dGVuc2FfZG9sb29wX2hvb2tzKTsKK30KKworLyogSW1wbGVt ZW50IHRoZSBUQVJHRVRfTUFDSElORV9ERVBFTkRFTlRfUkVPUkcgcGFzcy4g ICovCisKK3N0YXRpYyB2b2lkCit4dGVuc2FfcmVvcmcgKHZvaWQpCit7Cisg IC8qIFdlIGFyZSBmcmVlaW5nIGJsb2NrX2Zvcl9pbnNuIGluIHRoZSB0b3Bs ZXYgdG8ga2VlcCBjb21wYXRpYmlsaXR5CisgICAgIHdpdGggb2xkIE1ERVBf UkVPUkdTIHRoYXQgYXJlIG5vdCBDRkcgYmFzZWQuICBSZWNvbXB1dGUgaXQg bm93LiAgKi8KKyAgY29tcHV0ZV9iYl9mb3JfaW5zbiAoKTsKKworICBkZl9h bmFseXplICgpOworCisgIC8qIERvbG9vcCBvcHRpbWl6YXRpb24uICAqLwor ICB4dGVuc2FfcmVvcmdfbG9vcHMgKCk7Cit9CisKICNpbmNsdWRlICJndC14 dGVuc2EuaCIKSW5kZXg6IGdjYy9jb25maWcveHRlbnNhL3h0ZW5zYS5oCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jb25maWcveHRlbnNhL3h0 ZW5zYS5oCShyZXZpc2lvbiAyMTY5NDMpCisrKyBnY2MvY29uZmlnL3h0ZW5z YS94dGVuc2EuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQAog I2RlZmluZSBUQVJHRVRfUzMyQzFJCQlYQ0hBTF9IQVZFX1MzMkMxSQogI2Rl ZmluZSBUQVJHRVRfQUJTT0xVVEVfTElURVJBTFMgWFNIQUxfVVNFX0FCU09M VVRFX0xJVEVSQUxTCiAjZGVmaW5lIFRBUkdFVF9USFJFQURQVFIJWENIQUxf SEFWRV9USFJFQURQVFIKKyNkZWZpbmUgVEFSR0VUX0xPT1BTCSAgICAgICAg WENIQUxfSEFWRV9MT09QUwogCiAjZGVmaW5lIFRBUkdFVF9ERUZBVUxUIFwK ICAgKChYQ0hBTF9IQVZFX0wzMlIJPyAwIDogTUFTS19DT05TVDE2KSB8CQkJ CVwKSW5kZXg6IGdjYy9jb25maWcveHRlbnNhL3h0ZW5zYS5tZAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBnY2MvY29uZmlnL3h0ZW5zYS94dGVuc2Eu bWQJKHJldmlzaW9uIDIxNjk0MykKKysrIGdjYy9jb25maWcveHRlbnNhL3h0 ZW5zYS5tZAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQAogICAo VU5TUEVDX1RMU19DQUxMCTkpCiAgIChVTlNQRUNfVFAJCTEwKQogICAoVU5T UEVDX01FTVcJCTExKQorICAoVU5TUEVDX0xTRVRVUF9TVEFSVCAgMTIpCisg IChVTlNQRUNfTFNFVFVQX0VORCAgICAxMykKIAogICAoVU5TUEVDVl9TRVRf RlAJMSkKICAgKFVOU1BFQ1ZfRU5UUlkJMikKQEAgLTEyNzksMjEgKzEyODEs MjUgQEAKICAgIChzZXRfYXR0ciAibGVuZ3RoIgkiMyIpXSkKIAogCis7OyBa ZXJvLW92ZXJoZWFkIGxvb3Bpbmcgc3VwcG9ydC4KKwogOzsgRGVmaW5lIHRo ZSBsb29wIGluc25zIHVzZWQgYnkgYmN0IG9wdGltaXphdGlvbiB0byByZXBy ZXNlbnQgdGhlCi07OyBzdGFydCBhbmQgZW5kIG9mIGEgemVyby1vdmVyaGVh ZCBsb29wIChpbiBsb29wLmMpLiAgVGhpcyBzdGFydAotOzsgdGVtcGxhdGUg Z2VuZXJhdGVzIHRoZSBsb29wIGluc247IHRoZSBlbmQgdGVtcGxhdGUgZG9l c24ndCBnZW5lcmF0ZQotOzsgYW55IGluc3RydWN0aW9ucyBzaW5jZSBsb29w IGVuZCBpcyBoYW5kbGVkIGluIGhhcmR3YXJlLgorOzsgc3RhcnQgYW5kIGVu ZCBvZiBhIHplcm8tb3ZlcmhlYWQgbG9vcC4gIFRoaXMgc3RhcnQgdGVtcGxh dGUgZ2VuZXJhdGVzCis7OyB0aGUgbG9vcCBpbnNuOyB0aGUgZW5kIHRlbXBs YXRlIGRvZXNuJ3QgZ2VuZXJhdGUgYW55IGluc3RydWN0aW9ucyBzaW5jZQor OzsgbG9vcCBlbmQgaXMgaGFuZGxlZCBpbiBoYXJkd2FyZS4KIAogKGRlZmlu ZV9pbnNuICJ6ZXJvX2Nvc3RfbG9vcF9zdGFydCIKICAgWyhzZXQgKHBjKQot CShpZl90aGVuX2Vsc2UgKGVxIChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lz dGVyX29wZXJhbmQiICJhIikKLQkJCSAgKGNvbnN0X2ludCAwKSkKLQkJICAg ICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkKLQkJICAg ICAgKHBjKSkpCi0gICAoc2V0IChyZWc6U0kgMTkpCi0JKHBsdXM6U0kgKG1h dGNoX2R1cCAwKSAoY29uc3RfaW50IC0xKSkpXQotICAiIgotICAibG9vcG5l elx0JTAsICVsMSIKKyAgICAgICAgKGlmX3RoZW5fZWxzZSAobmUgKG1hdGNo X29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIjIiKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDEpKQorICAgICAgICAg ICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMSAiIiAi IikpCisgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCisgICAoc2V0ICht YXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICI9YSIpCisg ICAgICAgIChwbHVzIChtYXRjaF9kdXAgMCkKKyAgICAgICAgICAgICAgKGNv bnN0X2ludCAtMSkpKQorICAgKHVuc3BlYyBbKGNvbnN0X2ludCAwKV0gVU5T UEVDX0xTRVRVUF9TVEFSVCldCisgICJUQVJHRVRfTE9PUFMgJiYgb3B0aW1p emUiCisgICJsb29wXHQlMCwgJWwxX0xFTkQiCiAgIFsoc2V0X2F0dHIgInR5 cGUiCSJqdW1wIikKICAgIChzZXRfYXR0ciAibW9kZSIJIm5vbmUiKQogICAg KHNldF9hdHRyICJsZW5ndGgiCSIzIildKQpAQCAtMTMwMCwyMCArMTMwNiw5 NSBAQAogCiAoZGVmaW5lX2luc24gInplcm9fY29zdF9sb29wX2VuZCIKICAg WyhzZXQgKHBjKQotCShpZl90aGVuX2Vsc2UgKG5lIChyZWc6U0kgMTkpIChj b25zdF9pbnQgMCkpCi0JCSAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJh bmQgMCAiIiAiIikpCi0JCSAgICAgIChwYykpKQotICAgKHNldCAocmVnOlNJ IDE5KQotCShwbHVzOlNJIChyZWc6U0kgMTkpIChjb25zdF9pbnQgLTEpKSld Ci0gICIiCisgICAgICAgIChpZl90aGVuX2Vsc2UgKG5lIChtYXRjaF9vcGVy YW5kOlNJIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiMiwyIikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAxKSkKKyAgICAgICAg ICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDEgIiIg IiIpKQorICAgICAgICAgICAgICAgICAgICAgIChwYykpKQorICAgKHNldCAo bWF0Y2hfb3BlcmFuZDpTSSAyICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIj1h LG0iKQorICAgICAgICAocGx1cyAobWF0Y2hfZHVwIDApCisgICAgICAgICAg ICAgIChjb25zdF9pbnQgLTEpKSkKKyAgICh1bnNwZWMgWyhjb25zdF9pbnQg MCldIFVOU1BFQ19MU0VUVVBfRU5EKQorICAgKGNsb2JiZXIgKG1hdGNoX3Nj cmF0Y2g6U0kgMyAiPVgsJnIiKSldCisgICJUQVJHRVRfTE9PUFMgJiYgb3B0 aW1pemUiCisgICIjIgorICBbKHNldF9hdHRyICJ0eXBlIgkianVtcCIpCisg ICAoc2V0X2F0dHIgIm1vZGUiCSJub25lIikKKyAgIChzZXRfYXR0ciAibGVu Z3RoIgkiMCIpXSkKKworKGRlZmluZV9pbnNuICJsb29wX2VuZCIKKyAgWyhz ZXQgKHBjKQorICAgICAgICAoaWZfdGhlbl9lbHNlIChuZSAobWF0Y2hfb3Bl cmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiMiIpCisgICAgICAgICAg ICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMSkpCisgICAgICAgICAgICAg ICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkK KyAgICAgICAgICAgICAgICAgICAgICAocGMpKSkKKyAgIChzZXQgKG1hdGNo X29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIj1hIikKKyAgICAg ICAgKHBsdXMgKG1hdGNoX2R1cCAwKQorICAgICAgICAgICAgICAoY29uc3Rf aW50IC0xKSkpCisgICAodW5zcGVjIFsoY29uc3RfaW50IDApXSBVTlNQRUNf TFNFVFVQX0VORCldCisgICJUQVJHRVRfTE9PUFMgJiYgb3B0aW1pemUiCiB7 Ci0gICAgeHRlbnNhX2VtaXRfbG9vcF9lbmQgKGluc24sIG9wZXJhbmRzKTsK LSAgICByZXR1cm4gIiI7CisgIHh0ZW5zYV9lbWl0X2xvb3BfZW5kIChpbnNu LCBvcGVyYW5kcyk7CisgIHJldHVybiAiIjsKIH0KICAgWyhzZXRfYXR0ciAi dHlwZSIJImp1bXAiKQogICAgKHNldF9hdHRyICJtb2RlIgkibm9uZSIpCiAg ICAoc2V0X2F0dHIgImxlbmd0aCIJIjAiKV0pCiAKKyhkZWZpbmVfc3BsaXQK KyAgWyhzZXQgKHBjKQorICAgICAgICAoaWZfdGhlbl9lbHNlIChuZSAobWF0 Y2hfb3BlcmFuZDpTSSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiIpCisg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMSkpCisgICAg ICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAx ICIiICIiKSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSkKKyAgIChz ZXQgKG1hdGNoX29wZXJhbmQ6U0kgMiAibm9uaW1tZWRpYXRlX29wZXJhbmQi ICIiKQorICAgICAgICAocGx1czpTSSAobWF0Y2hfZHVwIDApCisgICAgICAg ICAgICAgICAgIChjb25zdF9pbnQgLTEpKSkKKyAgICh1bnNwZWMgWyhjb25z dF9pbnQgMCldIFVOU1BFQ19MU0VUVVBfRU5EKQorICAgKGNsb2JiZXIgKG1h dGNoX3NjcmF0Y2ggMykpXQorICAiVEFSR0VUX0xPT1BTICYmIG9wdGltaXpl ICYmIHJlbG9hZF9jb21wbGV0ZWQiCisgIFsoY29uc3RfaW50IDApXQorewor ICBpZiAoIVJFR19QIChvcGVyYW5kc1swXSkpCisgICAgeworICAgICAgcnR4 IHRlc3Q7CisKKyAgICAgIC8qIEZhbGxiYWNrIGludG8gYSBub3JtYWwgY29u ZGl0aW9uYWwgYnJhbmNoIGluc24uICAqLworICAgICAgZW1pdF9tb3ZlX2lu c24gKG9wZXJhbmRzWzNdLCBvcGVyYW5kc1swXSk7CisgICAgICBlbWl0X2lu c24gKGdlbl9hZGRzaTMgKG9wZXJhbmRzWzNdLCBvcGVyYW5kc1szXSwgY29u c3RtMV9ydHgpKTsKKyAgICAgIGVtaXRfbW92ZV9pbnNuIChvcGVyYW5kc1sw XSwgb3BlcmFuZHNbM10pOworICAgICAgdGVzdCA9IGdlbl9ydHhfTkUgKFZP SURtb2RlLCBvcGVyYW5kc1szXSwgY29uc3QwX3J0eCk7CisgICAgICBlbWl0 X2p1bXBfaW5zbiAoZ2VuX2NicmFuY2hzaTQgKHRlc3QsIG9wZXJhbmRzWzNd LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dDBfcnR4LCBvcGVyYW5kc1sxXSkpOworICAgIH0KKyAgZWxzZQorICAgIHsK KyAgICAgIGVtaXRfanVtcF9pbnNuIChnZW5fbG9vcF9lbmQgKG9wZXJhbmRz WzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pKTsKKyAgICB9CisKKyAg RE9ORTsKK30pCisKKzsgb3BlcmFuZCAwIGlzIHRoZSBsb29wIGNvdW50IHBz ZXVkbyByZWdpc3RlcgorOyBvcGVyYW5kIDEgaXMgdGhlIGxhYmVsIHRvIGp1 bXAgdG8gYXQgdGhlIHRvcCBvZiB0aGUgbG9vcAorKGRlZmluZV9leHBhbmQg ImRvbG9vcF9lbmQiCisgIFsocGFyYWxsZWwgWyhzZXQgKHBjKSAoaWZfdGhl bl9lbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChuZSAobWF0Y2hf b3BlcmFuZDpTSSAwICIiICIiKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNvbnN0X2ludCAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCisgICAgICAgICAgICAgIChz ZXQgKG1hdGNoX2R1cCAwKQorICAgICAgICAgICAgICAgICAgIChwbHVzOlNJ IChtYXRjaF9kdXAgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uc3RfaW50IC0xKSkpCisgICAgICAgICAgICAgICh1bnNwZWMgWyhjb25z dF9pbnQgMCldIFVOU1BFQ19MU0VUVVBfRU5EKQorICAgICAgICAgICAgICAo Y2xvYmJlciAobWF0Y2hfZHVwIDIpKV0pXSA7IG1hdGNoX3NjcmF0Y2gKKyAg IlRBUkdFVF9MT09QUyAmJiBvcHRpbWl6ZSIKK3sKKyAgLyogVGhlIGxvb3Ag b3B0aW1pemVyIGRvZXNuJ3QgY2hlY2sgdGhlIHByZWRpY2F0ZXMuLi4gKi8K KyAgaWYgKEdFVF9NT0RFIChvcGVyYW5kc1swXSkgIT0gU0ltb2RlKQorICAg IEZBSUw7CisgIG9wZXJhbmRzWzJdID0gZ2VuX3J0eF9TQ1JBVENIIChTSW1v ZGUpOworfSkKKwogDAogOzsgU2V0dGluZyBhIHJlZ2lzdGVyIGZyb20gYSBj b21wYXJpc29uLgogCg== --20cf307f3a720209920506aabfee--