From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id B0A873858C53 for ; Fri, 5 Aug 2022 12:55:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B0A873858C53 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B620B106F; Fri, 5 Aug 2022 05:55:09 -0700 (PDT) Received: from [10.57.14.36] (unknown [10.57.14.36]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 209933F73B; Fri, 5 Aug 2022 05:55:07 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------TZa4rr5x034jhBof9KCv00ni" Message-ID: <317d0d74-e7e1-05e8-45d3-98bbc929a922@arm.com> Date: Fri, 5 Aug 2022 13:55:02 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH 2/4]aarch64: Change aarch64_expand_vector_init to use rtx_vector_builder Content-Language: en-US To: gcc-patches@gcc.gnu.org References: <95d2de77-5b68-6d0b-ac99-ac1ca28835e2@arm.com> Cc: Richard Sandiford , Prathamesh Kulkarni From: "Andre Vieira (lists)" In-Reply-To: <95d2de77-5b68-6d0b-ac99-ac1ca28835e2@arm.com> X-Spam-Status: No, score=-22.1 required=5.0 tests=BAYES_00, BODY_8BITS, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_LOTSOFHASH, KAM_SHORT, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Aug 2022 12:55:11 -0000 This is a multi-part message in MIME format. --------------TZa4rr5x034jhBof9KCv00ni Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi, This patch changes aarch64_expand_vector_init to use rtx_vector_builder, exploiting it's internal pattern detection to find 'dup' patterns. Bootstrapped and regression tested on aarch64-none-linux-gnu. Is this OK for trunk or should we wait for the rest of the series? gcc/ChangeLog: 2022-08-05  Andre Vieira          * config/aarch64/aarch64.cc (aarch64_vec_duplicate): New.          (aarch64_expand_vector_init): Make the existing variant construct          a rtx_vector_builder from the list of elements and use this to detect          duplicate patterns. gcc/testesuite/ChangeLog: 2022-08-05  Andre Vieira          * gcc.target/aarch64/ldp_stp_16.c: Modify to reflect code change. --------------TZa4rr5x034jhBof9KCv00ni Content-Type: text/plain; charset=UTF-8; name="sve_const_dup_2.patch" Content-Disposition: attachment; filename="sve_const_dup_2.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmNjIGIvZ2NjL2NvbmZp Zy9hYXJjaDY0L2FhcmNoNjQuY2MKaW5kZXggNGI0ODZhZWVhOTBlYTJhZmI5Y2RkOTZhNGRi ZTE1YzViYjJhYmQ3YS4uYTA4MDQzZTE4ZDYwOWUyNThlYmZlMDMzODc1MjAxMTYzZDEyOWFi YSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuY2MKKysrIGIvZ2Nj L2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuY2MKQEAgLTMwNSw2ICszMDUsNyBAQCBzdGF0aWMg bWFjaGluZV9tb2RlIGFhcmNoNjRfc2ltZF9jb250YWluZXJfbW9kZSAoc2NhbGFyX21vZGUs IHBvbHlfaW50NjQpOwogc3RhdGljIGJvb2wgYWFyY2g2NF9wcmludF9hZGRyZXNzX2ludGVy bmFsIChGSUxFKiwgbWFjaGluZV9tb2RlLCBydHgsCiAJCQkJCSAgICBhYXJjaDY0X2FkZHJf cXVlcnlfdHlwZSk7CiBzdGF0aWMgSE9TVF9XSURFX0lOVCBhYXJjaDY0X2NsYW1wX3RvX3Vp bW0xMl9zaGlmdCAoSE9TVF9XSURFX0lOVCB2YWwpOworc3RhdGljIHZvaWQgYWFyY2g2NF9l eHBhbmRfdmVjdG9yX2luaXQgKHJ0eCwgcnR4X3ZlY3Rvcl9idWlsZGVyJik7CiAKIC8qIFRo ZSBwcm9jZXNzb3IgZm9yIHdoaWNoIGluc3RydWN0aW9ucyBzaG91bGQgYmUgc2NoZWR1bGVk LiAgKi8KIGVudW0gYWFyY2g2NF9wcm9jZXNzb3IgYWFyY2g2NF90dW5lID0gY29ydGV4YTUz OwpAQCAtMjE4MDQsNTUgKzIxODA1LDk2IEBAIGFhcmNoNjRfc2ltZF9tYWtlX2NvbnN0YW50 IChydHggdmFscykKICAgICByZXR1cm4gTlVMTF9SVFg7CiB9CiAKK3N0YXRpYyB2b2lkCith YXJjaDY0X3ZlY19kdXBsaWNhdGUgKHJ0eCB0YXJnZXQsIG1hY2hpbmVfbW9kZSBtb2RlLCBt YWNoaW5lX21vZGUgZWxlbWVudF9tb2RlLAorCQkgICAgICAgaW50IG5hcnJvd19uX2VsdHMp Cit7CisgIHBvbHlfdWludDY0IHNpemUgPSBuYXJyb3dfbl9lbHRzICogR0VUX01PREVfQklU U0laRSAoZWxlbWVudF9tb2RlKTsKKyAgc2NhbGFyX21vZGUgaV9tb2RlID0gaW50X21vZGVf Zm9yX3NpemUgKHNpemUsIDApLnJlcXVpcmUgKCk7CisgIG1hY2hpbmVfbW9kZSBvX21vZGU7 CisgIGlmIChhYXJjaDY0X3N2ZV9tb2RlX3AgKG1vZGUpKQorICAgIG9fbW9kZSA9IGFhcmNo NjRfZnVsbF9zdmVfbW9kZSAoaV9tb2RlKS5yZXF1aXJlICgpOworICBlbHNlCisgICAgb19t b2RlCisgICAgICA9IGFhcmNoNjRfc2ltZF9jb250YWluZXJfbW9kZSAoaV9tb2RlLAorCQkJ CSAgICAgR0VUX01PREVfQklUU0laRSAobW9kZSkpOworICBydHggaW5wdXQgPSBzaW1wbGlm eV9nZW5fc3VicmVnIChpX21vZGUsIHRhcmdldCwgbW9kZSwgMCk7CisgIHJ0eCBvdXRwdXQg PSBzaW1wbGlmeV9nZW5fc3VicmVnIChvX21vZGUsIHRhcmdldCwgbW9kZSwgMCk7CisgIGFh cmNoNjRfZW1pdF9tb3ZlIChvdXRwdXQsIGdlbl92ZWNfZHVwbGljYXRlIChvX21vZGUsIGlu cHV0KSk7Cit9CisKKwogLyogRXhwYW5kIGEgdmVjdG9yIGluaXRpYWxpc2F0aW9uIHNlcXVl bmNlLCBzdWNoIHRoYXQgVEFSR0VUIGlzCiAgICBpbml0aWFsaXNlZCB0byBjb250YWluIFZB TFMuICAqLwogCiB2b2lkCiBhYXJjaDY0X2V4cGFuZF92ZWN0b3JfaW5pdCAocnR4IHRhcmdl dCwgcnR4IHZhbHMpCiB7Ci0gIG1hY2hpbmVfbW9kZSBtb2RlID0gR0VUX01PREUgKHRhcmdl dCk7Ci0gIHNjYWxhcl9tb2RlIGlubmVyX21vZGUgPSBHRVRfTU9ERV9JTk5FUiAobW9kZSk7 CiAgIC8qIFRoZSBudW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzLiAgKi8KICAgaW50IG5fZWx0 cyA9IFhWRUNMRU4gKHZhbHMsIDApOwotICAvKiBUaGUgbnVtYmVyIG9mIHZlY3RvciBlbGVt ZW50cyB3aGljaCBhcmUgbm90IGNvbnN0YW50LiAgKi8KLSAgaW50IG5fdmFyID0gMDsKLSAg cnR4IGFueV9jb25zdCA9IE5VTExfUlRYOworICBtYWNoaW5lX21vZGUgbW9kZSA9IEdFVF9N T0RFICh0YXJnZXQpOworICBzY2FsYXJfbW9kZSBpbm5lcl9tb2RlID0gR0VUX01PREVfSU5O RVIgKG1vZGUpOwogICAvKiBUaGUgZmlyc3QgZWxlbWVudCBvZiB2YWxzLiAgKi8KICAgcnR4 IHYwID0gWFZFQ0VYUCAodmFscywgMCwgMCk7Ci0gIGJvb2wgYWxsX3NhbWUgPSB0cnVlOwog CiAgIC8qIFRoaXMgaXMgYSBzcGVjaWFsIHZlY19pbml0PE0+PE4+IHdoZXJlIE4gaXMgbm90 IGFuIGVsZW1lbnQgbW9kZSBidXQgYQogICAgICB2ZWN0b3IgbW9kZSB3aXRoIGhhbGYgdGhl IGVsZW1lbnRzIG9mIE0uICBXZSBleHBlY3QgdG8gZmluZCB0d28gZW50cmllcwogICAgICBv ZiBtb2RlIE4gaW4gVkFMUyBhbmQgd2UgbXVzdCBwdXQgdGhlaXIgY29uY2F0ZW50YXRpb24g aW50byBUQVJHRVQuICAqLwotICBpZiAoWFZFQ0xFTiAodmFscywgMCkgPT0gMiAmJiBWRUNU T1JfTU9ERV9QIChHRVRfTU9ERSAoWFZFQ0VYUCAodmFscywgMCwgMCkpKSkKKyAgaWYgKG5f ZWx0cyA9PSAyCisgICAgICAmJiBWRUNUT1JfTU9ERV9QIChHRVRfTU9ERSAodjApKSkKICAg ICB7Ci0gICAgICBtYWNoaW5lX21vZGUgbmFycm93X21vZGUgPSBHRVRfTU9ERSAoWFZFQ0VY UCAodmFscywgMCwgMCkpOworICAgICAgbWFjaGluZV9tb2RlIG5hcnJvd19tb2RlID0gR0VU X01PREUgKHYwKTsKICAgICAgIGdjY19hc3NlcnQgKEdFVF9NT0RFX0lOTkVSIChuYXJyb3df bW9kZSkgPT0gaW5uZXJfbW9kZQogCQkgICYmIGtub3duX2VxIChHRVRfTU9ERV9TSVpFICht b2RlKSwKIAkJCSAgICAgICAyICogR0VUX01PREVfU0laRSAobmFycm93X21vZGUpKSk7Ci0g ICAgICBlbWl0X2luc24gKGdlbl9hYXJjaDY0X3ZlY19jb25jYXQgKG5hcnJvd19tb2RlLCB0 YXJnZXQsCi0JCQkJCSBYVkVDRVhQICh2YWxzLCAwLCAwKSwKKyAgICAgIGVtaXRfaW5zbiAo Z2VuX2FhcmNoNjRfdmVjX2NvbmNhdCAobmFycm93X21vZGUsIHRhcmdldCwgdjAsCiAJCQkJ CSBYVkVDRVhQICh2YWxzLCAwLCAxKSkpOwogICAgICByZXR1cm47CiAgICB9CiAKLSAgLyog Q291bnQgdGhlIG51bWJlciBvZiB2YXJpYWJsZSBlbGVtZW50cyB0byBpbml0aWFsaXNlLiAg Ki8KKyAgcnR4X3ZlY3Rvcl9idWlsZGVyIGJ1aWxkZXIgKG1vZGUsIG5fZWx0cywgMSk7CiAg IGZvciAoaW50IGkgPSAwOyBpIDwgbl9lbHRzOyArK2kpCisgICAgYnVpbGRlci5xdWlja19w dXNoIChYVkVDRVhQICh2YWxzLCAwLCBpKSk7CisgIGJ1aWxkZXIuZmluYWxpemUgKCk7CisK KyAgYWFyY2g2NF9leHBhbmRfdmVjdG9yX2luaXQgKHRhcmdldCwgYnVpbGRlcik7Cit9CisK K3N0YXRpYyB2b2lkCithYXJjaDY0X2V4cGFuZF92ZWN0b3JfaW5pdCAocnR4IHRhcmdldCwg cnR4X3ZlY3Rvcl9idWlsZGVyICZ2KQoreworICBtYWNoaW5lX21vZGUgbW9kZSA9IEdFVF9N T0RFICh0YXJnZXQpOworICBzY2FsYXJfbW9kZSBpbm5lcl9tb2RlID0gR0VUX01PREVfSU5O RVIgKG1vZGUpOworICAvKiBUaGUgbnVtYmVyIG9mIHZlY3RvciBlbGVtZW50cyB3aGljaCBh cmUgbm90IGNvbnN0YW50LiAgKi8KKyAgdW5zaWduZWQgbl92YXIgPSAwOworICBydHggYW55 X2NvbnN0ID0gTlVMTF9SVFg7CisgIC8qIFRoZSBmaXJzdCBlbGVtZW50IG9mIHZhbHMuICAq LworICBydHggdjAgPSB2LmVsdCAoMCk7CisgIC8qIEdldCB0aGUgbnVtYmVyIG9mIGVsZW1l bnRzIHRvIGluc2VydCBpbnRvIGFuIEFkdmFuY2VkIFNJTUQgdmVjdG9yLgorICAgICBJZiB3 ZSBoYXZlIG1vcmUgdGhhbiBvbmUgZWxlbWVudCBwZXIgcGF0dGVybiB0aGVuIHdlIHVzZSB0 aGUgY29uc3RhbnQKKyAgICAgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgZnVsbCB2ZWN0b3Iu CisgICAgIElmIHdlIG9ubHkgaGF2ZSBvbmUgZWxlbWVudCBwZXIgcGF0dGVybiB3ZSB1c2Ug dGhlIG51bWJlciBvZiBwYXR0ZXJucyBhcworICAgICB0aGlzIG1heSBiZSBsb3dlciB0aGFu IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSBmdWxsIHZlY3Rvciwgd2hpY2gKKyAgICAg bWVhbnMgdGhleSByZXBlYXQgYW5kIHdlIHNob3VsZCB1c2UgYSBkdXBsaWNhdGUgb2YgdGhl IHNtYWxsZXIgdmVjdG9yLiAgKi8KKyAgdW5zaWduZWQgbl9lbHRzCisgICAgPSB2Lm5lbHRz X3Blcl9wYXR0ZXJuICgpID09IDEgPyB2Lm5wYXR0ZXJucyAoKQorCQkJCSAgOiB2LmZ1bGxf bmVsdHMgKCkuY29lZmZzWzBdOworCisgIC8qIENvdW50IHRoZSBudW1iZXIgb2YgdmFyaWFi bGUgZWxlbWVudHMgdG8gaW5pdGlhbGlzZS4gICovCisgIGZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCBuX2VsdHMgOyArK2kpCiAgICAgewotICAgICAgcnR4IHggPSBYVkVDRVhQICh2YWxz LCAwLCBpKTsKKyAgICAgIHJ0eCB4ID0gdi5lbHQgKGkpOwogICAgICAgaWYgKCEoQ09OU1Rf SU5UX1AgKHgpIHx8IENPTlNUX0RPVUJMRV9QICh4KSkpCiAJKytuX3ZhcjsKICAgICAgIGVs c2UKIAlhbnlfY29uc3QgPSB4OwotCi0gICAgICBhbGxfc2FtZSAmPSBydHhfZXF1YWxfcCAo eCwgdjApOwogICAgIH0KIAogICAvKiBObyB2YXJpYWJsZSBlbGVtZW50cywgaGFuZCBvZmYg dG8gYWFyY2g2NF9zaW1kX21ha2VfY29uc3RhbnQgd2hpY2gga25vd3MKICAgICAgaG93IGJl c3QgdG8gaGFuZGxlIHRoaXMuICAqLwogICBpZiAobl92YXIgPT0gMCkKICAgICB7Ci0gICAg ICBydHggY29uc3RhbnQgPSBhYXJjaDY0X3NpbWRfbWFrZV9jb25zdGFudCAodmFscyk7Cisg ICAgICBydHggY29uc3RhbnQgPSBhYXJjaDY0X3NpbWRfbWFrZV9jb25zdGFudCAodi5idWls ZCAoKSk7CiAgICAgICBpZiAoY29uc3RhbnQgIT0gTlVMTF9SVFgpCiAJewogCSAgZW1pdF9t b3ZlX2luc24gKHRhcmdldCwgY29uc3RhbnQpOwpAQCAtMjE4NjEsNyArMjE5MDMsNyBAQCBh YXJjaDY0X2V4cGFuZF92ZWN0b3JfaW5pdCAocnR4IHRhcmdldCwgcnR4IHZhbHMpCiAgICAg fQogCiAgIC8qIFNwbGF0IGEgc2luZ2xlIG5vbi1jb25zdGFudCBlbGVtZW50IGlmIHdlIGNh bi4gICovCi0gIGlmIChhbGxfc2FtZSkKKyAgaWYgKG5fZWx0cyA9PSAxKQogICAgIHsKICAg ICAgIHJ0eCB4ID0gY29weV90b19tb2RlX3JlZyAoaW5uZXJfbW9kZSwgdjApOwogICAgICAg YWFyY2g2NF9lbWl0X21vdmUgKHRhcmdldCwgZ2VuX3ZlY19kdXBsaWNhdGUgKG1vZGUsIHgp KTsKQEAgLTIxODc5LDE0ICsyMTkyMSwxNSBAQCBhYXJjaDY0X2V4cGFuZF92ZWN0b3JfaW5p dCAocnR4IHRhcmdldCwgcnR4IHZhbHMpCiAgICAgIGFuZCBtYXRjaGVzW1hdWzFdIHdpdGgg dGhlIGNvdW50IG9mIGR1cGxpY2F0ZSBlbGVtZW50cyAoaWYgWCBpcyB0aGUKICAgICAgZWFy bGllc3QgZWxlbWVudCB3aGljaCBoYXMgZHVwbGljYXRlcykuICAqLwogCi0gIGlmIChuX3Zh ciA9PSBuX2VsdHMgJiYgbl9lbHRzIDw9IDE2KQorICBpZiAobl92YXIgPT0gbl9lbHRzKQog ICAgIHsKLSAgICAgIGludCBtYXRjaGVzWzE2XVsyXSA9IHswfTsKLSAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgbl9lbHRzOyBpKyspCisgICAgICBnY2NfYXNzZXJ0IChuX2VsdHMgPD0g MTYpOworICAgICAgdW5zaWduZWQgbWF0Y2hlc1sxNl1bMl0gPSB7MH07CisgICAgICBmb3Ig KHVuc2lnbmVkIGkgPSAwOyBpIDwgbl9lbHRzOyBpKyspCiAJewotCSAgZm9yIChpbnQgaiA9 IDA7IGogPD0gaTsgaisrKQorCSAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8PSBpOyBqKysp CiAJICAgIHsKLQkgICAgICBpZiAocnR4X2VxdWFsX3AgKFhWRUNFWFAgKHZhbHMsIDAsIGkp LCBYVkVDRVhQICh2YWxzLCAwLCBqKSkpCisJICAgICAgaWYgKHJ0eF9lcXVhbF9wICh2LmVs dCAoaSksIHYuZWx0IChqKSkpCiAJCXsKIAkJICBtYXRjaGVzW2ldWzBdID0gajsKIAkJICBt YXRjaGVzW2pdWzFdKys7CkBAIC0yMTg5NCw5ICsyMTkzNyw5IEBAIGFhcmNoNjRfZXhwYW5k X3ZlY3Rvcl9pbml0IChydHggdGFyZ2V0LCBydHggdmFscykKIAkJfQogCSAgICB9CiAJfQot ICAgICAgaW50IG1heGVsZW1lbnQgPSAwOwotICAgICAgaW50IG1heHYgPSAwOwotICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBuX2VsdHM7IGkrKykKKyAgICAgIHVuc2lnbmVkIG1heGVs ZW1lbnQgPSAwOworICAgICAgdW5zaWduZWQgbWF4diA9IDA7CisgICAgICBmb3IgKHVuc2ln bmVkIGkgPSAwOyBpIDwgbl9lbHRzOyBpKyspCiAJaWYgKG1hdGNoZXNbaV1bMV0gPiBtYXh2 KQogCSAgewogCSAgICBtYXhlbGVtZW50ID0gaTsKQEAgLTIxOTE1LDggKzIxOTU4LDggQEAg YWFyY2g2NF9leHBhbmRfdmVjdG9yX2luaXQgKHJ0eCB0YXJnZXQsIHJ0eCB2YWxzKQogCQkg IHx8IGlubmVyX21vZGUgPT0gRV9ERm1vZGUpKQogCiAJICAgIHsKLQkgICAgICBydHggeDAg PSBYVkVDRVhQICh2YWxzLCAwLCAwKTsKLQkgICAgICBydHggeDEgPSBYVkVDRVhQICh2YWxz LCAwLCAxKTsKKwkgICAgICBydHggeDAgPSB2LmVsdCAoMCk7CisJICAgICAgcnR4IHgxID0g di5lbHQgKDEpOwogCSAgICAgIC8qIENvbWJpbmUgY2FuIHBpY2sgdXAgdGhpcyBjYXNlLCBi dXQgaGFuZGxpbmcgaXQgZGlyZWN0bHkKIAkJIGhlcmUgbGVhdmVzIGNsZWFyZXIgUlRMLgog CkBAIC0yMTkzOSwyNCArMjE5ODIsMjYgQEAgYWFyY2g2NF9leHBhbmRfdmVjdG9yX2luaXQg KHJ0eCB0YXJnZXQsIHJ0eCB2YWxzKQogCSAgICAgdmVjdG9yIHJlZ2lzdGVyLiAgRm9yIGJp Zy1lbmRpYW4gd2Ugd2FudCB0aGF0IHBvc2l0aW9uIHRvIGhvbGQKIAkgICAgIHRoZSBsYXN0 IGVsZW1lbnQgb2YgVkFMUy4gICovCiAJICBtYXhlbGVtZW50ID0gQllURVNfQklHX0VORElB TiA/IG5fZWx0cyAtIDEgOiAwOwotCSAgcnR4IHggPSBjb3B5X3RvX21vZGVfcmVnIChpbm5l cl9tb2RlLCBYVkVDRVhQICh2YWxzLCAwLCBtYXhlbGVtZW50KSk7CisJICBydHggeCA9IGNv cHlfdG9fbW9kZV9yZWcgKGlubmVyX21vZGUsIHYuZWx0IChtYXhlbGVtZW50KSk7CiAJICBh YXJjaDY0X2VtaXRfbW92ZSAodGFyZ2V0LCBsb3dwYXJ0X3N1YnJlZyAobW9kZSwgeCwgaW5u ZXJfbW9kZSkpOwogCX0KICAgICAgIGVsc2UKIAl7Ci0JICBydHggeCA9IGNvcHlfdG9fbW9k ZV9yZWcgKGlubmVyX21vZGUsIFhWRUNFWFAgKHZhbHMsIDAsIG1heGVsZW1lbnQpKTsKKwkg IHJ0eCB4ID0gY29weV90b19tb2RlX3JlZyAoaW5uZXJfbW9kZSwgdi5lbHQgKG1heGVsZW1l bnQpKTsKIAkgIGFhcmNoNjRfZW1pdF9tb3ZlICh0YXJnZXQsIGdlbl92ZWNfZHVwbGljYXRl IChtb2RlLCB4KSk7CiAJfQogCiAgICAgICAvKiBJbnNlcnQgdGhlIHJlc3QuICAqLwotICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuX2VsdHM7IGkrKykKKyAgICAgIGZvciAodW5zaWdu ZWQgaSA9IDA7IGkgPCBuX2VsdHM7IGkrKykKIAl7Ci0JICBydHggeCA9IFhWRUNFWFAgKHZh bHMsIDAsIGkpOworCSAgcnR4IHggPSB2LmVsdCAoaSk7CiAJICBpZiAobWF0Y2hlc1tpXVsw XSA9PSBtYXhlbGVtZW50KQogCSAgICBjb250aW51ZTsKIAkgIHggPSBjb3B5X3RvX21vZGVf cmVnIChpbm5lcl9tb2RlLCB4KTsKIAkgIGVtaXRfaW5zbiAoR0VOX0ZDTiAoaWNvZGUpICh0 YXJnZXQsIHgsIEdFTl9JTlQgKGkpKSk7CiAJfQorCWlmICgha25vd25fZXEgKHYuZnVsbF9u ZWx0cyAoKSwgbl9lbHRzKSkKKwkgIGFhcmNoNjRfdmVjX2R1cGxpY2F0ZSAodGFyZ2V0LCBt b2RlLCBHRVRfTU9ERSAodjApLCBuX2VsdHMpOwogICAgICAgcmV0dXJuOwogICAgIH0KIApA QCAtMjE5NjUsMTkgKzIyMDEwLDE5IEBAIGFhcmNoNjRfZXhwYW5kX3ZlY3Rvcl9pbml0IChy dHggdGFyZ2V0LCBydHggdmFscykKICAgICAgY2FuLiAgKi8KICAgaWYgKG5fdmFyICE9IG5f ZWx0cykKICAgICB7Ci0gICAgICBydHggY29weSA9IGNvcHlfcnR4ICh2YWxzKTsKKyAgICAg IHJ0eCBjb3B5ID0gdi5idWlsZCAoKTsKIAogICAgICAgLyogTG9hZCBjb25zdGFudCBwYXJ0 IG9mIHZlY3Rvci4gIFdlIHJlYWxseSBkb24ndCBjYXJlIHdoYXQgZ29lcyBpbnRvIHRoZQog CSBwYXJ0cyB3ZSB3aWxsIG92ZXJ3cml0ZSwgYnV0IHdlJ3JlIG1vcmUgbGlrZWx5IHRvIGJl IGFibGUgdG8gbG9hZCB0aGUKIAkgY29uc3RhbnQgZWZmaWNpZW50bHkgaWYgaXQgaGFzIGZl d2VyLCBsYXJnZXIsIHJlcGVhdGluZyBwYXJ0cwogCSAoc2VlIGFhcmNoNjRfc2ltZF92YWxp ZF9pbW1lZGlhdGUpLiAgKi8KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbl9lbHRzOyBp KyspCisgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbl9lbHRzOyBpKyspCiAJewot CSAgcnR4IHggPSBYVkVDRVhQICh2YWxzLCAwLCBpKTsKKwkgIHJ0eCB4ID0gWFZFQ0VYUCAo Y29weSwgMCwgaSk7CiAJICBpZiAoQ09OU1RfSU5UX1AgKHgpIHx8IENPTlNUX0RPVUJMRV9Q ICh4KSkKIAkgICAgY29udGludWU7CiAJICBydHggc3Vic3QgPSBhbnlfY29uc3Q7Ci0JICBm b3IgKGludCBiaXQgPSBuX2VsdHMgLyAyOyBiaXQgPiAwOyBiaXQgLz0gMikKKwkgIGZvciAo dW5zaWduZWQgYml0ID0gbl9lbHRzIC8gMjsgYml0ID4gMDsgYml0IC89IDIpCiAJICAgIHsK IAkgICAgICAvKiBMb29rIGluIHRoZSBjb3BpZWQgdmVjdG9yLCBhcyBtb3JlIGVsZW1lbnRz IGFyZSBjb25zdC4gICovCiAJICAgICAgcnR4IHRlc3QgPSBYVkVDRVhQIChjb3B5LCAwLCBp IF4gYml0KTsKQEAgLTIxOTg5LDE4ICsyMjAzNCwyMSBAQCBhYXJjaDY0X2V4cGFuZF92ZWN0 b3JfaW5pdCAocnR4IHRhcmdldCwgcnR4IHZhbHMpCiAJICAgIH0KIAkgIFhWRUNFWFAgKGNv cHksIDAsIGkpID0gc3Vic3Q7CiAJfQorICAgICAgZ2NjX2Fzc2VydCAoR0VUX01PREUgKHRh cmdldCkgPT0gR0VUX01PREUgKGNvcHkpKTsKICAgICAgIGFhcmNoNjRfZXhwYW5kX3ZlY3Rv cl9pbml0ICh0YXJnZXQsIGNvcHkpOwogICAgIH0KIAogICAvKiBJbnNlcnQgdGhlIHZhcmlh YmxlIGxhbmVzIGRpcmVjdGx5LiAgKi8KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBuX2VsdHM7 IGkrKykKKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5fZWx0czsgaSsrKQogICAgIHsK LSAgICAgIHJ0eCB4ID0gWFZFQ0VYUCAodmFscywgMCwgaSk7CisgICAgICBydHggeCA9IHYu ZWx0IChpKTsKICAgICAgIGlmIChDT05TVF9JTlRfUCAoeCkgfHwgQ09OU1RfRE9VQkxFX1Ag KHgpKQogCWNvbnRpbnVlOwogICAgICAgeCA9IGNvcHlfdG9fbW9kZV9yZWcgKGlubmVyX21v ZGUsIHgpOwogICAgICAgZW1pdF9pbnNuIChHRU5fRkNOIChpY29kZSkgKHRhcmdldCwgeCwg R0VOX0lOVCAoaSkpKTsKICAgICB9CisgIGlmICgha25vd25fZXEgKHYuZnVsbF9uZWx0cyAo KSwgbl9lbHRzKSkKKyAgICBhYXJjaDY0X3ZlY19kdXBsaWNhdGUgKHRhcmdldCwgbW9kZSwg aW5uZXJfbW9kZSwgbl9lbHRzKTsKIH0KIAogLyogRW1pdCBSVEwgY29ycmVzcG9uZGluZyB0 bzoKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2xkcF9z dHBfMTYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2xkcF9zdHBfMTYu YwppbmRleCA4YWIxMTdjNGRjZDdhNzMxYWJjN2UxYjAzOWUxZmFmMGRmYTA5YTVkLi5iMzA3 ZDI3OTE4MjRkZDljMzAyMDA5MzE0NTJiMjYzNjcwOGI1MDM1IDEwMDY0NAotLS0gYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9sZHBfc3RwXzE2LmMKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvbGRwX3N0cF8xNi5jCkBAIC05Niw4ICs5Niw4 IEBAIENPTlMyX0ZOICg0LCBmbG9hdCk7CiAKIC8qCiAqKiBjb25zMl84X2Zsb2F0OgotKioJ ZHVwCXYoWzAtOV0rKVwuNHMsIC4qCi0qKgkuLi4KKyoqCWlucwl2MFwuc1xbMVxdLCB2MVwu c1xbMFxdCisqKglkdXAJdihbMC05XSspXC4yZCwgdjBcLmRcWzBcXQogKioJc3RwCXFcMSwg cVwxLCBcW3gwXF0KICoqCXN0cAlxXDEsIHFcMSwgXFt4MCwgIz8zMlxdCiAqKglyZXQKZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3ZlY3RfaW5pdC5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdmVjdF9pbml0LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uNTQ2ZTQ0ZTk2ZjRkYjYwZDI4OWI0YmMwZWJmZWNiZTE4YzgxYjRjYwotLS0g L2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3ZlY3Rf aW5pdC5jCkBAIC0wLDAgKzEsMTQ0IEBACisjaW5jbHVkZSA8YXJtX25lb24uaD4KKworLyoK KyoqIGludDMyXzA6CisqKglmbW92CXMwLCB3MAorKioJaW5zCXYwLnNcWzFcXSwgdzEKKyoq CWR1cAl2MC4yZCwgdjAuZFxbMFxdCisqKglyZXQKKyovCisKK2ludDMyeDRfdCBpbnQzMl8w IChpbnQgYSwgaW50IGIpCit7CisgIGludDMyeDRfdCB2ID0ge2EsIGIsIGEsIGJ9OworICBy ZXR1cm4gdjsKK30KKy8qCisqKiBpbnQzMl8xOgorKioJZHVwCXYwLjRzLCB3MAorKioJcmV0 CisqLworCitpbnQzMng0X3QgaW50MzJfMSAoaW50IGEpCit7CisgIGludDMyeDRfdCB2ID0g e2EsIGEsIGEsIGF9OworICByZXR1cm4gdjsKK30KKworLyoKKyoqIGludDE2XzA6CisqKglz eHRoCXcwLCB3MAorKioJZm1vdglzMCwgdzAKKyoqCWlucwl2MC5oXFsxXF0sIHcxCisqKglp bnMJdjAuaFxbMlxdLCB3MgorKioJaW5zCXYwLmhcWzNcXSwgdzMKKyoqCWR1cAl2MC4yZCwg djAuZFxbMFxdCisqKglyZXQKKyovCisKK2ludDE2eDhfdCBpbnQxNl8wIChpbnQxNl90IGEs IGludDE2X3QgYiwgaW50MTZfdCBjLCBpbnQxNl90IGQpCit7CisgIGludDE2eDhfdCB2ID0g e2EsIGIsIGMsIGQsCisJCSBhLCBiLCBjLCBkfTsKKyAgcmV0dXJuIHY7Cit9CisKKy8qCisq KiBpbnQxNl8xOgorKioJc3h0aAl3MCwgdzAKKyoqCWZtb3YJczAsIHcwCisqKglpbnMJdjAu aFxbMVxdLCB3MQorKioJZHVwCXYwLjRzLCB2MC5zXFswXF0KKyoqCXJldAorKi8KKworaW50 MTZ4OF90IGludDE2XzEgKGludDE2X3QgYSwgaW50MTZfdCBiKQoreworICBpbnQxNng4X3Qg diA9IHthLCBiLCBhLCBiLAorCQkgYSwgYiwgYSwgYn07CisgIHJldHVybiB2OworfQorCisv KgorKiogaW50MTZfMjoKKyoqCWR1cAl2MC44aCwgdzAKKyoqCXJldAorKi8KKworaW50MTZ4 OF90IGludDE2XzIgKGludDE2X3QgYSkKK3sKKyAgaW50MTZ4OF90IHYgPSB7YSwgYSwgYSwg YSwKKwkJIGEsIGEsIGEsIGF9OworICByZXR1cm4gdjsKK30KKworLyoKKyoqIGludDhfMDoK KyoqCXN4dGIJdzAsIHcwCisqKglmbW92CXMwLCB3MAorKioJaW5zCXYwLmJcWzFcXSwgdzEK KyoqCWlucwl2MC5iXFsyXF0sIHcyCisqKglpbnMJdjAuYlxbM1xdLCB3MworKioJaW5zCXYw LmJcWzRcXSwgdzQKKyoqCWlucwl2MC5iXFs1XF0sIHc1CisqKglpbnMJdjAuYlxbNlxdLCB3 NgorKioJaW5zCXYwLmJcWzdcXSwgdzcKKyoqCWR1cAl2MC4yZCwgdjAuZFxbMFxdCisqKgly ZXQKKyovCisKK2ludDh4MTZfdCBpbnQ4XzAgKGludDhfdCBhLCBpbnQ4X3QgYiwgaW50OF90 IGMsIGludDhfdCBkLCBpbnQ4X3QgZSwgaW50OF90IGYsCisJCSAgIGludDhfdCBnLCBpbnQ4 X3QgaCkKK3sKKyAgaW50OHgxNl90IHYgPSB7YSwgYiwgYywgZCwgZSwgZiwgZywgaCwKKyAg ICAgICAgICAgICAgICAgYSwgYiwgYywgZCwgZSwgZiwgZywgaH07CisgIHJldHVybiB2Owor fQorCisvKgorKiogaW50OF8xOgorKioJc3h0Ygl3MCwgdzAKKyoqCWZtb3YJczAsIHcwCisq KglpbnMJdjAuYlxbMVxdLCB3MQorKioJaW5zCXYwLmJcWzJcXSwgdzIKKyoqCWlucwl2MC5i XFszXF0sIHczCisqKglkdXAJdjAuNHMsIHYwLnNcWzBcXQorKioJcmV0CisqLworCitpbnQ4 eDE2X3QgaW50OF8xIChpbnQ4X3QgYSwgaW50OF90IGIsIGludDhfdCBjLCBpbnQ4X3QgZCkK K3sKKyAgaW50OHgxNl90IHYgPSB7YSwgYiwgYywgZCwgYSwgYiwgYywgZCwKKyAgICAgICAg ICAgICAgICAgYSwgYiwgYywgZCwgYSwgYiwgYywgZH07CisgIHJldHVybiB2OworfQorCisv KgorKiogaW50OF8yOgorKioJc3h0Ygl3MCwgdzAKKyoqCWZtb3YJczAsIHcwCisqKglpbnMJ djAuYlxbMVxdLCB3MQorKioJZHVwCXYwLjhoLCB2MC5oXFswXF0KKyoqCXJldAorKi8KKwor aW50OHgxNl90IGludDhfMiAoaW50OF90IGEsIGludDhfdCBiKQoreworICBpbnQ4eDE2X3Qg diA9IHthLCBiLCBhLCBiLCBhLCBiLCBhLCBiLAorICAgICAgICAgICAgICAgICBhLCBiLCBh LCBiLCBhLCBiLCBhLCBifTsKKyAgcmV0dXJuIHY7Cit9CisKKy8qCisqKiBpbnQ4XzM6Cisq KglkdXAJdjAuMTZiLCB3MAorKioJcmV0CisqLworCitpbnQ4eDE2X3QgaW50OF8zIChpbnQ4 X3QgYSkKK3sKKyAgaW50OHgxNl90IHYgPSB7YSwgYSwgYSwgYSwgYSwgYSwgYSwgYSwKKyAg ICAgICAgICAgICAgICAgYSwgYSwgYSwgYSwgYSwgYSwgYSwgYX07CisgIHJldHVybiB2Owor fQorCg== --------------TZa4rr5x034jhBof9KCv00ni--