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 D0A623858D32 for ; Tue, 26 Jul 2022 10:03:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D0A623858D32 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 EEA6A1FB; Tue, 26 Jul 2022 03:03:43 -0700 (PDT) Received: from [10.57.9.57] (unknown [10.57.9.57]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6F0EE3F70D; Tue, 26 Jul 2022 03:03:42 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------7nRpY1ZkU9yKGWQbaeyKq6f0" Message-ID: <4a6f2350-f070-1473-63a5-3232968d3a89@arm.com> Date: Tue, 26 Jul 2022 11:00:16 +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 Content-Language: en-US To: "gcc-patches@gcc.gnu.org" Cc: Richard Biener , Richard Sandiford , pinskia@gmail.com From: "Andre Vieira (lists)" Subject: [RFC] Teach vectorizer to deal with bitfield reads X-Spam-Status: No, score=-26.7 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_LOTSOFHASH, SPF_HELO_NONE, SPF_NONE, TXREP 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: Tue, 26 Jul 2022 10:03:50 -0000 This is a multi-part message in MIME format. --------------7nRpY1ZkU9yKGWQbaeyKq6f0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, This is a RFC for my prototype for bitfield read vectorization. This patch enables bit-field read vectorization by removing the rejection of bit-field read's during DR analysis and by adding two vect patterns. The first one transforms TREE_COMPONENT's with BIT_FIELD_DECL's into BIT_FIELD_REF's, this is a temporary one as I believe there are plans to do this lowering earlier in the compiler. To avoid having to wait for that to happen we decided to implement this temporary vect pattern. The second one looks for conversions of the result of BIT_FIELD_REF's from a 'partial' type to a 'full-type' and transforms it into a 'full-type' load followed by the necessary shifting and masking. The patch is not perfect, one thing I'd like to change for instance is the way the 'full-type' load is represented. I currently abuse the fact that the vectorizer transforms the original TREE_COMPONENT with a BIT_FIELD_DECL into a full-type vector load, because it uses the smallest mode necessary for that precision. The reason I do this is because I was struggling to construct a MEM_REF that the vectorizer would accept and this for some reason seemed to work ... I'd appreciate some pointers on how to do this properly :) Another aspect that I haven't paid much attention to yet is costing, I've noticed some testcases fail to vectorize due to costing where I think it might be wrong, but like I said, I haven't paid much attention to it. Finally another aspect I'd eventually like to tackle is the sinking of the masking when possible, for instance in bit-field-read-3.c the 'masking' does not need to be inside the loop because we are doing bitwise operations. Though I suspect we are better off looking at things like this elsewhere, maybe where we do codegen for the reduction... Haven't looked at this at all yet. Let me know if you believe this is a good approach? I've ran regression tests and this hasn't broken anything so far... Kind regards, Andre PS: Once we do have lowering of BIT_FIELD_DECL's to BIT_FIELD_REF's earlier in the compiler I suspect we will require some further changes to the DR analysis part, but that's difficult to test right now. --------------7nRpY1ZkU9yKGWQbaeyKq6f0 Content-Type: text/plain; charset=UTF-8; name="vect_bitfieldread_rfc.patch" Content-Disposition: attachment; filename="vect_bitfieldread_rfc.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvYml0ZmllbGQtcmVhZC0x LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L2JpdGZpZWxkLXJlYWQtMS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLmMzMGFhZDM2NWM0MDQ3NDEwOTc0OGJkMDNjM2E1Y2ExZDEwNzIzZWQKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L2JpdGZpZWxkLXJl YWQtMS5jCkBAIC0wLDAgKzEsMzggQEAKKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFy Z2V0IHZlY3RfaW50IH0gKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgInRy ZWUtdmVjdC5oIgorCitleHRlcm4gdm9pZCBhYm9ydCh2b2lkKTsKKworc3RydWN0IHMgeyBp bnQgaSA6IDMxOyB9OworCisjZGVmaW5lIEVMVDAgezB9CisjZGVmaW5lIEVMVDEgezF9Cisj ZGVmaW5lIEVMVDIgezJ9CisjZGVmaW5lIEVMVDMgezN9CisjZGVmaW5lIFJFUyA0OAorc3Ry dWN0IHMgQVtOXQorICA9IHsgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxUMCwgRUxUMSwg RUxUMiwgRUxUMywKKyAgICAgIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsIEVMVDAsIEVMVDEs IEVMVDIsIEVMVDMsCisgICAgICBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLCBFTFQwLCBFTFQx LCBFTFQyLCBFTFQzLAorICAgICAgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxUMCwgRUxU MSwgRUxUMiwgRUxUM307CisKK2ludCBmKHN0cnVjdCBzICpwdHIsIHVuc2lnbmVkIG4pIHsK KyAgICBpbnQgcmVzID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKKyAg ICAgIHJlcyArPSBwdHJbaV0uaTsKKyAgICByZXR1cm4gcmVzOworfQorCitpbnQgbWFpbiAo dm9pZCkKK3sKKyAgY2hlY2tfdmVjdCAoKTsKKworICBpZiAoZigmQVswXSwgTikgIT0gUkVT KQorICAgIGFib3J0ICgpOworCisgIHJldHVybiAwOworfQorCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMSAidmVjdCIgfSB9 ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L2JpdGZpZWxkLXJl YWQtMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9iaXRmaWVsZC1yZWFkLTIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi5hYjgyZmYzNDdjNTVlNzhkMDk4ZDE5NGQ3MzliY2Q5ZDc3MzdmNzc3 Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9iaXRmaWVs ZC1yZWFkLTIuYwpAQCAtMCwwICsxLDQyIEBACisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZl LXRhcmdldCB2ZWN0X2ludCB9ICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRl ICJ0cmVlLXZlY3QuaCIKKworZXh0ZXJuIHZvaWQgYWJvcnQodm9pZCk7CisKK3N0cnVjdCBz IHsKKyAgICB1bnNpZ25lZCBpIDogMzE7CisgICAgY2hhciBhIDogNDsKK307CisKKyNkZWZp bmUgTiAzMgorI2RlZmluZSBFTFQwIHsweDdGRkZGRkZGVUwsIDB9CisjZGVmaW5lIEVMVDEg ezB4N0ZGRkZGRkZVTCwgMX0KKyNkZWZpbmUgRUxUMiB7MHg3RkZGRkZGRlVMLCAyfQorI2Rl ZmluZSBFTFQzIHsweDdGRkZGRkZGVUwsIDN9CisjZGVmaW5lIFJFUyA0OAorc3RydWN0IHMg QVtOXQorICA9IHsgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxUMCwgRUxUMSwgRUxUMiwg RUxUMywKKyAgICAgIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsIEVMVDAsIEVMVDEsIEVMVDIs IEVMVDMsCisgICAgICBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLCBFTFQwLCBFTFQxLCBFTFQy LCBFTFQzLAorICAgICAgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxUMCwgRUxUMSwgRUxU MiwgRUxUM307CisKK2ludCBmKHN0cnVjdCBzICpwdHIsIHVuc2lnbmVkIG4pIHsKKyAgICBp bnQgcmVzID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKKyAgICAgIHJl cyArPSBwdHJbaV0uYTsKKyAgICByZXR1cm4gcmVzOworfQorCitpbnQgbWFpbiAodm9pZCkK K3sKKyAgY2hlY2tfdmVjdCAoKTsKKworICBpZiAoZigmQVswXSwgTikgIT0gUkVTKQorICAg IGFib3J0ICgpOworCisgIHJldHVybiAwOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMSAidmVjdCIgfSB9ICovCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L2JpdGZpZWxkLXJlYWQtMy5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9iaXRmaWVsZC1yZWFkLTMuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwLi4yMTY2MTFhMjlmZDhiYmZiYWZkYmRiNzlkNzkwZTUyMGY0NGJhNjcyCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9iaXRmaWVsZC1yZWFk LTMuYwpAQCAtMCwwICsxLDQzIEBACisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdl dCB2ZWN0X2ludCB9ICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJ0cmVl LXZlY3QuaCIKKyNpbmNsdWRlIDxzdGRib29sLmg+CisKK2V4dGVybiB2b2lkIGFib3J0KHZv aWQpOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50ICBjOworICAgIGludCAgYjsKKyAg ICBib29sIGEgOiAxOworfSBzdHJ1Y3RfdDsKKworI2RlZmluZSBOIDE2CisjZGVmaW5lIEVM VF9GIHsgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMCB9CisjZGVmaW5lIEVMVF9UIHsgMHhG RkZGRkZGRiwgMHhGRkZGRkZGRiwgMSB9CisKK3N0cnVjdF90IHZlY3RfZmFsc2VbTl0gPSB7 IEVMVF9GLCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRf RiwKKwkJCSAgIEVMVF9GLCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxUX0YsIEVM VF9GLCBFTFRfRiAgfTsKK3N0cnVjdF90IHZlY3RfdHJ1ZVtOXSAgPSB7IEVMVF9GLCBFTFRf RiwgRUxUX1QsIEVMVF9GLCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwKKwkJCSAgIEVM VF9GLCBFTFRfRiwgRUxUX1QsIEVMVF9GLCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiAg fTsKK2ludCBtYWluICh2b2lkKQoreworICB1bnNpZ25lZCByZXQgPSAwOworICBmb3IgKHVu c2lnbmVkIGkgPSAwOyBpIDwgTjsgaSsrKQorICB7CisgICAgICByZXQgfD0gdmVjdF9mYWxz ZVtpXS5hOworICB9CisgIGlmIChyZXQpCisgICAgYWJvcnQgKCk7CisKKyAgZm9yICh1bnNp Z25lZCBpID0gMDsgaSA8IE47IGkrKykKKyAgeworICAgICAgcmV0IHw9IHZlY3RfdHJ1ZVtp XS5hOworICB9CisgIGlmICghcmV0KQorICAgIGFib3J0ICgpOworCisgIHJldHVybiAwOwor fQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQg MiBsb29wcyIgMSAidmVjdCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L2JpdGZpZWxkLXJlYWQtNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj dC9iaXRmaWVsZC1yZWFkLTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTU2NmI0NDExZTBkYTE2ZjYx N2YwOTJlYjQ5Y2NlY2NiZTdjYTkwCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC9iaXRmaWVsZC1yZWFkLTQuYwpAQCAtMCwwICsxLDQ0IEBACisvKiB7 IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKKyNpbmNsdWRl IDxzdGRhcmcuaD4KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCIKKworZXh0ZXJuIHZvaWQgYWJv cnQodm9pZCk7CisKK3N0cnVjdCBzIHsKKyAgICB1bnNpZ25lZCBpIDogMzE7CisgICAgY2hh ciB4IDogMjsKKyAgICBjaGFyIGEgOiA0OworfTsKKworI2RlZmluZSBOIDMyCisjZGVmaW5l IEVMVDAgezB4N0ZGRkZGRkZVTCwgMywgMH0KKyNkZWZpbmUgRUxUMSB7MHg3RkZGRkZGRlVM LCAzLCAxfQorI2RlZmluZSBFTFQyIHsweDdGRkZGRkZGVUwsIDMsIDJ9CisjZGVmaW5lIEVM VDMgezB4N0ZGRkZGRkZVTCwgMywgM30KKyNkZWZpbmUgUkVTIDQ4CitzdHJ1Y3QgcyBBW05d CisgID0geyBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLCBFTFQwLCBFTFQxLCBFTFQyLCBFTFQz LAorICAgICAgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxUMCwgRUxUMSwgRUxUMiwgRUxU MywKKyAgICAgIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsIEVMVDAsIEVMVDEsIEVMVDIsIEVM VDMsCisgICAgICBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLCBFTFQwLCBFTFQxLCBFTFQyLCBF TFQzfTsKKworaW50IGYoc3RydWN0IHMgKnB0ciwgdW5zaWduZWQgbikgeworICAgIGludCBy ZXMgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQorICAgICAgcmVzICs9 IHB0cltpXS5hOworICAgIHJldHVybiByZXM7Cit9CisKK2ludCBtYWluICh2b2lkKQorewor ICBjaGVja192ZWN0ICgpOworCisgIGlmIChmKCZBWzBdLCBOKSAhPSBSRVMpCisgICAgYWJv cnQgKCk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0IiB9IH0gKi8KKwpkaWZm IC0tZ2l0IGEvZ2NjL3RyZWUtZGF0YS1yZWYuY2MgYi9nY2MvdHJlZS1kYXRhLXJlZi5jYwpp bmRleCBmZjkzMjdmNmRlYjJiYjg1YWJiZDM4NTNkY2E5YzY2NjY5OWU3YTM3Li5hMjdlYzM3 YTQ1NmIwYzcyNjIyMTc2N2E0YjVlNTJhNzQwNTdhZTIzIDEwMDY0NAotLS0gYS9nY2MvdHJl ZS1kYXRhLXJlZi5jYworKysgYi9nY2MvdHJlZS1kYXRhLXJlZi5jYwpAQCAtMTEzNyw3ICsx MTM3LDIyIEBAIGRyX2FuYWx5emVfaW5uZXJtb3N0IChpbm5lcm1vc3RfbG9vcF9iZWhhdmlv ciAqZHJiLCB0cmVlIHJlZiwKICAgZ2NjX2Fzc2VydCAoYmFzZSAhPSBOVUxMX1RSRUUpOwog CiAgIHBvbHlfaW50NjQgcGJ5dGVwb3M7Ci0gIGlmICghbXVsdGlwbGVfcCAocGJpdHBvcywg QklUU19QRVJfVU5JVCwgJnBieXRlcG9zKSkKKyAgLyogSWYgd2UgYXJlIGRlYWxpbmcgd2l0 aCBhIGJpdC1maWVsZCByZWZlcmVuY2UgdGhlbiB0aGUgUEJJVFBPUyBtYXkgbm90IGJlCisg ICAgIGEgbXVsdGlwbGUgb2YgQklUU19QRVJfVU5JVC4gIFNldCBQQllURVBPUyB0byAwIGlm IFBCSVRQT1MgaXMgc21hbGxlciB0aGFuCisgICAgIGEgYnl0ZSBvciB0byB0aGUgbGFyZ2Vz dCBudW1iZXIgb2YgYnl0ZXMgc21hbGxlciB0aGFuIEJJVFNfUEVSX1VOSVQgKgorICAgICBQ QklUUE9TLiAgKi8KKyAgaWYgKFRSRUVfQ09ERSAocmVmKSA9PSBDT01QT05FTlRfUkVGCisg ICAgICAmJiBERUNMX0JJVF9GSUVMRCAoVFJFRV9PUEVSQU5EIChyZWYsIDEpKSkKKyAgICB7 CisgICAgICBpZiAoIW11bHRpcGxlX3AgKHBiaXRwb3MsIEJJVFNfUEVSX1VOSVQsICZwYnl0 ZXBvcykpCisJeworCSAgaWYgKGtub3duX2x0IChwYml0cG9zLCBCSVRTX1BFUl9VTklUKSkK KwkgICBwYnl0ZXBvcyA9IDA7CisJICBlbHNlCisJICAgY2FuX2Rpdl90cnVuY19wIChwYml0 cG9zLCBCSVRTX1BFUl9VTklULCAmcGJ5dGVwb3MpOworCX0KKyAgICB9CisgIGVsc2UgaWYg KCFtdWx0aXBsZV9wIChwYml0cG9zLCBCSVRTX1BFUl9VTklULCAmcGJ5dGVwb3MpKQogICAg IHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0IChzdG10LAogCQkJCSAgICJmYWlsZWQ6 IGJpdCBvZmZzZXQgYWxpZ25tZW50LlxuIik7CiAKZGlmZiAtLWdpdCBhL2djYy90cmVlLXZl Y3QtZGF0YS1yZWZzLmNjIGIvZ2NjL3RyZWUtdmVjdC1kYXRhLXJlZnMuY2MKaW5kZXggYjI3 OWE4MjU1MWViNzAzNzk4MDRkNDA1OTgzYWU1ZGM0NGI2NmJmNS4uY2I2MTBkYjljYTU3ZTUx Nzk4MjVlNjdiZTVhZWI2YWY5OGQwMWFhMCAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdC1k YXRhLXJlZnMuY2MKKysrIGIvZ2NjL3RyZWUtdmVjdC1kYXRhLXJlZnMuY2MKQEAgLTQwMTYs NyArNDAxNiwxOCBAQCB2ZWN0X2NoZWNrX2dhdGhlcl9zY2F0dGVyIChzdG10X3ZlY19pbmZv IHN0bXRfaW5mbywgbG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLAogICBpZiAocmV2ZXJzZXAp CiAgICAgcmV0dXJuIGZhbHNlOwogCi0gIHBvbHlfaW50NjQgcGJ5dGVwb3MgPSBleGFjdF9k aXYgKHBiaXRwb3MsIEJJVFNfUEVSX1VOSVQpOworICAvKiBJZiB3ZSBhcmUgZGVhbGluZyB3 aXRoIGEgYml0LWZpZWxkIHJlZmVyZW5jZSB0aGVuIHRoZSBQQklUUE9TIG1heSBub3QgYmUK KyAgICAgYSBtdWx0aXBsZSBvZiBCSVRTX1BFUl9VTklULiAgU2V0IFBCWVRFUE9TIHRvIDAg aWYgUEJJVFBPUyBpcyBzbWFsbGVyIHRoYW4KKyAgICAgYSBieXRlIG9yIHRvIHRoZSBsYXJn ZXN0IG51bWJlciBvZiBieXRlcyBzbWFsbGVyIHRoYW4gQklUU19QRVJfVU5JVCAqCisgICAg IFBCSVRQT1MuICAqLworICBwb2x5X2ludDY0IHBieXRlcG9zOworICBpZiAoIW11bHRpcGxl X3AgKHBiaXRwb3MsIEJJVFNfUEVSX1VOSVQsICZwYnl0ZXBvcykpCisgICAgeworICAgICAg aWYgKGtub3duX2x0IChwYml0cG9zLCBCSVRTX1BFUl9VTklUKSkKKwlwYnl0ZXBvcyA9IDA7 CisgICAgICBlbHNlCisJY2FuX2Rpdl90cnVuY19wIChwYml0cG9zLCBCSVRTX1BFUl9VTklU LCAmcGJ5dGVwb3MpOworICAgIH0KIAogICBpZiAoVFJFRV9DT0RFIChiYXNlKSA9PSBNRU1f UkVGKQogICAgIHsKQEAgLTQyOTYsNyArNDMwNyw4IEBAIHZlY3RfZmluZF9zdG10X2RhdGFf cmVmZXJlbmNlIChsb29wX3AgbG9vcCwgZ2ltcGxlICpzdG10LAogICAgICAgfQogCiAgIGlm IChUUkVFX0NPREUgKERSX1JFRiAoZHIpKSA9PSBDT01QT05FTlRfUkVGCi0gICAgICAmJiBE RUNMX0JJVF9GSUVMRCAoVFJFRV9PUEVSQU5EIChEUl9SRUYgKGRyKSwgMSkpKQorICAgICAg JiYgREVDTF9CSVRfRklFTEQgKFRSRUVfT1BFUkFORCAoRFJfUkVGIChkciksIDEpKQorICAg ICAgJiYgIURSX0lTX1JFQUQgKGRyKSkKICAgICB7CiAgICAgICBmcmVlX2RhdGFfcmVmIChk cik7CiAgICAgICByZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAoc3RtdCwKZGlmZiAt LWdpdCBhL2djYy90cmVlLXZlY3QtcGF0dGVybnMuY2MgYi9nY2MvdHJlZS12ZWN0LXBhdHRl cm5zLmNjCmluZGV4IGRmYmZiNzFiM2M2OWEwMjA1Y2NjMWIyODdjYjUwZmEwMmE3MDk0MmUu LjNmNjRiMjM4ODgwODZmNjFlNWViZjkyOGE3ZWUwYzZlZDc4YmRlMTUgMTAwNjQ0Ci0tLSBh L2djYy90cmVlLXZlY3QtcGF0dGVybnMuY2MKKysrIGIvZ2NjL3RyZWUtdmVjdC1wYXR0ZXJu cy5jYwpAQCAtMzUsNiArMzUsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENP UFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUgInRyZWUtZWguaCIKICNpbmNsdWRlICJn aW1wbGlmeS5oIgogI2luY2x1ZGUgImdpbXBsZS1pdGVyYXRvci5oIgorI2luY2x1ZGUgImdp bXBsaWZ5LW1lLmgiCiAjaW5jbHVkZSAiY2ZnbG9vcC5oIgogI2luY2x1ZGUgInRyZWUtdmVj dG9yaXplci5oIgogI2luY2x1ZGUgImR1bXBmaWxlLmgiCkBAIC0xODI4LDYgKzE4MjksMTU3 IEBAIHZlY3RfcmVjb2dfd2lkZW5fc3VtX3BhdHRlcm4gKHZlY19pbmZvICp2aW5mbywKICAg cmV0dXJuIHBhdHRlcm5fc3RtdDsKIH0KIAorc3RhdGljIGdpbXBsZSAqCit2ZWN0X3JlY29n X2JpdF9maWVsZF9kZWNsICh2ZWNfaW5mbyogLyogdmluZm8qLywgc3RtdF92ZWNfaW5mbyBs YXN0X3N0bXRfaW5mbywKKwkJCSB0cmVlICp0eXBlX291dCkKK3sKKyAgZ2Fzc2lnbiAqZGVj bF9zdG10ID0gZHluX2Nhc3QgPGdhc3NpZ24gKj4gKGxhc3Rfc3RtdF9pbmZvLT5zdG10KTsK KworICBpZiAoIWRlY2xfc3RtdCkKKyAgICByZXR1cm4gTlVMTDsKKworICBkYXRhX3JlZmVy ZW5jZSAqZHIgPSBTVE1UX1ZJTkZPX0RBVEFfUkVGIChsYXN0X3N0bXRfaW5mbyk7CisgIGlm ICghZHIpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKFRSRUVfQ09ERSAoRFJfUkVGIChk cikpICE9IENPTVBPTkVOVF9SRUYKKyAgICAgIHx8ICFERUNMX0JJVF9GSUVMRCAoVFJFRV9P UEVSQU5EIChEUl9SRUYgKGRyKSwgMSkpCisgICAgICB8fCAhRFJfSVNfUkVBRCAoZHIpKQor ICAgIHJldHVybiBOVUxMOworCisgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAoZ2ltcGxlX2dl dF9saHMgKGRlY2xfc3RtdCkpOworICB0cmVlIHJlY29yZCA9IFRSRUVfT1BFUkFORCAoRFJf UkVGIChkciksIDApOworICB0cmVlIGRlY2xfZmllbGQgPSBUUkVFX09QRVJBTkQgKERSX1JF RiAoZHIpLCAxKTsKKyAgdHJlZSBvZmZzZXQgPSBmb2xkX2J1aWxkMiAoUExVU19FWFBSLCBz aXpldHlwZSwKKwkJCSAgICAgREVDTF9GSUVMRF9PRkZTRVQgKGRlY2xfZmllbGQpLAorCQkJ ICAgICBERUNMX0ZJRUxEX0JJVF9PRkZTRVQgKGRlY2xfZmllbGQpKTsKKyAgdHJlZSBiZl9y ZWYgPSBmb2xkX2J1aWxkMyAoQklUX0ZJRUxEX1JFRiwgdHlwZSwKKwkJCSAgICAgcmVjb3Jk LAorCQkJICAgICBidWlsZF9pbnRfY3N0IChzaXpldHlwZSwKKwkJCSAgICAgVFlQRV9QUkVD SVNJT04gKHR5cGUpKSwKKwkJCSAgICAgb2Zmc2V0KTsKKyAgZ2ltcGxlICpwYXR0ZXJuX3N0 bXQKKyAgICA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKHZlY3RfcmVjb2dfdGVtcF9zc2FfdmFy ICh0eXBlLCBOVUxMKSwgYmZfcmVmKTsKKworICAqdHlwZV9vdXQgPSBTVE1UX1ZJTkZPX1ZF Q1RZUEUgKGxhc3Rfc3RtdF9pbmZvKTsKKworICB2ZWN0X3BhdHRlcm5fZGV0ZWN0ZWQgKCJi aXRfZmllbGRfZGVjbCBwYXR0ZXJuIiwgbGFzdF9zdG10X2luZm8tPnN0bXQpOworCisgIHJl dHVybiBwYXR0ZXJuX3N0bXQ7Cit9CisKK3N0YXRpYyBnaW1wbGUgKgordmVjdF9yZWNvZ19i aXRfZmllbGRfcmVmICh2ZWNfaW5mbyAqdmluZm8sIHN0bXRfdmVjX2luZm8gbGFzdF9zdG10 X2luZm8sCisJCQkgIHRyZWUgKnR5cGVfb3V0KQoreworICBnYXNzaWduICpub3Bfc3RtdCA9 IGR5bl9jYXN0IDxnYXNzaWduICo+IChsYXN0X3N0bXRfaW5mby0+c3RtdCk7CisgIGlmICgh bm9wX3N0bXQpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKGdpbXBsZV9hc3NpZ25fcmhz X2NvZGUgKG5vcF9zdG10KSAhPSBOT1BfRVhQUikKKyAgICByZXR1cm4gTlVMTDsKKworICBp ZiAoVFJFRV9DT0RFIChnaW1wbGVfYXNzaWduX3JoczEgKG5vcF9zdG10KSkgIT0gU1NBX05B TUUpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgZ2Fzc2lnbiAqYmZfc3RtdAorICAgID0gZHlu X2Nhc3QgPGdhc3NpZ24gKj4gKFNTQV9OQU1FX0RFRl9TVE1UIChnaW1wbGVfYXNzaWduX3Jo czEgKG5vcF9zdG10KSkpOworCisgIGlmICghYmZfc3RtdCkKKyAgICByZXR1cm4gTlVMTDsK KworICBzdG10X3ZlY19pbmZvIGJmX3N0bXRfaW5mbyA9IHZpbmZvLT5sb29rdXBfc3RtdCAo YmZfc3RtdCk7CisgIGlmIChnaW1wbGVfYXNzaWduX3Joc19jb2RlIChiZl9zdG10KSAhPSBC SVRfRklFTERfUkVGCisgICAgICAmJiAoIWJmX3N0bXRfaW5mbyB8fCAhU1RNVF9WSU5GT19J Tl9QQVRURVJOX1AgKGJmX3N0bXRfaW5mbykpKQorICAgIHJldHVybiBOVUxMOworCisgIGlm IChnaW1wbGVfYXNzaWduX3Joc19jb2RlIChiZl9zdG10KSAhPSBCSVRfRklFTERfUkVGKQor ICAgIHsKKyAgICAgIGlmICghU1RNVF9WSU5GT19SRUxBVEVEX1NUTVQgKGJmX3N0bXRfaW5m bykpCisJcmV0dXJuIE5VTEw7CisgICAgICBiZl9zdG10CisJPSBkeW5fY2FzdCA8Z2Fzc2ln biAqPiAoU1RNVF9WSU5GT19SRUxBVEVEX1NUTVQgKGJmX3N0bXRfaW5mbyktPnN0bXQpOwor ICAgIH0KKworICBpZiAoIWJmX3N0bXQgfHwgZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoYmZf c3RtdCkgIT0gQklUX0ZJRUxEX1JFRikKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBUaGlz IGlzIHdlaXJkLCB3aHkgaXMgcmhzMSBzdGlsbCBhIEJJVF9GSUVMRF9SRUY/Py4gICovCisg IHRyZWUgYmZfcmVmID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChiZl9zdG10KTsKKworICB0cmVl IHJlY29yZCA9IFRSRUVfT1BFUkFORCAoYmZfcmVmLCAwKTsKKyAgdHJlZSBzaXplID0gVFJF RV9PUEVSQU5EIChiZl9yZWYsIDEpOworICB0cmVlIG9mZnNldCA9IFRSRUVfT1BFUkFORCAo YmZfcmVmLCAyKTsKKworICB0cmVlIGJmX3R5cGUgPSBUUkVFX1RZUEUgKGJmX3JlZik7Cisg IHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgYmZfcHJlY2lzaW9uID0gVFlQRV9QUkVDSVNJT04g KGJmX3R5cGUpOworICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGxvYWRfc2l6ZQorICAgID0g Q0VJTCAoYmZfcHJlY2lzaW9uLCBCSVRTX1BFUl9VTklUKSAqIEJJVFNfUEVSX1VOSVQ7CisK KyAgaWYgKGJmX3ByZWNpc2lvbiA9PSBsb2FkX3NpemUpCisgICAgcmV0dXJuIE5VTEw7CisK KyAgdHJlZSBhZGRyID0gYnVpbGQxIChBRERSX0VYUFIsIGJ1aWxkX3BvaW50ZXJfdHlwZSAo VFJFRV9UWVBFIChyZWNvcmQpKSwKKwkJICAgICAgcmVjb3JkKTsKKworICBhZGRyID0gZm9s ZF9idWlsZDIgKFBPSU5URVJfUExVU19FWFBSLCBUUkVFX1RZUEUgKGFkZHIpLCBhZGRyLAor CQkgICAgICBmb2xkX2NvbnZlcnQgKHNpemV0eXBlLCBvZmZzZXQpKTsKKworICB0cmVlIGxv YWRfdHlwZSA9IGJ1aWxkX25vbnN0YW5kYXJkX2ludGVnZXJfdHlwZSAobG9hZF9zaXplLCAx KTsKKyAgdHJlZSB2ZWN0eXBlID0gZ2V0X3ZlY3R5cGVfZm9yX3NjYWxhcl90eXBlICh2aW5m bywgbG9hZF90eXBlKTsKKyAgdHJlZSBsaHMgPSB2ZWN0X3JlY29nX3RlbXBfc3NhX3ZhciAo bG9hZF90eXBlLCBOVUxMKTsKKworICBkYXRhX3JlZmVyZW5jZSAqZHIgPSBTVE1UX1ZJTkZP X0RBVEFfUkVGIChiZl9zdG10X2luZm8pOworICAvKiBUT0RPOiBGaXggdGhpcywgcmF0aGVy IHRoYW4gdXNpbmcgdGhlIERSX1JFRiBoZXJlIEknZCBsaWtlIHRvIHJlY29uc3RydWN0Cisg ICAgIHRoZSBkZXNpcmVkIGxvYWQsIHJhdGhlciB0aGFuIHJlbHkgb24gdGhlICdtaXNndWlk ZWQ/JyBiZWhhdmlvdXIgb2YgdGhlCisgICAgIHZlY3Rvcml6ZXIgdG8gdmVjdG9yaXplIHRo ZXNlIGFzIG5vcm1hbCBsb2Fkcy4gIEhvd2V2ZXIgd2hlbiBJIHRyaWVkIGl0CisgICAgIGxl YWQgdG8gdGhlIHZlY3Rvcml6ZXIgdGhpbmsgaXQgbmVlZGVkIHRvIHZlY3Rvcml6ZSB0aGUg YWRkcmVzcworICAgICBjb21wdXRhdGlvbiB0b28uICAqLworICBnaW1wbGUgKnBhdHRlcm5f c3RtdCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKGxocywgRFJfUkVGIChkcikpOworICBnaW1w bGUgKmxvYWRfc3RtdCA9IHBhdHRlcm5fc3RtdDsKKworICB0cmVlIHJldF90eXBlID0gVFJF RV9UWVBFIChnaW1wbGVfZ2V0X2xocyAobm9wX3N0bXQpKTsKKyAgaWYgKCF1c2VsZXNzX3R5 cGVfY29udmVyc2lvbl9wIChUUkVFX1RZUEUgKGxocyksIHJldF90eXBlKSkKKyAgICB7Cisg ICAgICBhcHBlbmRfcGF0dGVybl9kZWZfc2VxICh2aW5mbywgYmZfc3RtdF9pbmZvLCBwYXR0 ZXJuX3N0bXQsCisJCQkgICAgICB2ZWN0eXBlKTsKKyAgICAgIHBhdHRlcm5fc3RtdAorCT0g Z2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVjdF9yZWNvZ190ZW1wX3NzYV92YXIgKHJldF90eXBl LCBOVUxMKSwKKwkJCSAgICAgICBOT1BfRVhQUiwgbGhzKTsKKyAgICAgIGxocyA9IGdpbXBs ZV9nZXRfbGhzIChwYXR0ZXJuX3N0bXQpOworICAgICAgdmVjdHlwZSA9IFNUTVRfVklORk9f VkVDVFlQRSAobGFzdF9zdG10X2luZm8pOworICAgIH0KKyAgdmVjdF9tYXJrX3BhdHRlcm5f c3RtdHMgKHZpbmZvLCBiZl9zdG10X2luZm8sIHBhdHRlcm5fc3RtdCwgdmVjdHlwZSk7CisK KyAgc3RtdF92ZWNfaW5mbyBsb2FkX3N0bXRfaW5mbyA9IHZpbmZvLT5sb29rdXBfc3RtdCAo bG9hZF9zdG10KTsKKyAgdmluZm8tPm1vdmVfZHIgKGxvYWRfc3RtdF9pbmZvLCBiZl9zdG10 X2luZm8pOworCisgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgb2Zmc2V0X2kgPSB0cmVlX3Rv X3Vod2kgKG9mZnNldCk7CisgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgc2hpZnRfbiA9IG9m ZnNldF9pICUgbG9hZF9zaXplOworCisgIGlmIChzaGlmdF9uKQorICAgIHsKKyAgICAgIHBh dHRlcm5fc3RtdAorCT0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVjdF9yZWNvZ190ZW1wX3Nz YV92YXIgKFRSRUVfVFlQRSAobGhzKSwgTlVMTCksCisJCQkgICAgICAgUlNISUZUX0VYUFIs IGxocywKKwkJCSAgICAgICBidWlsZF9pbnRfY3N0IChpbnRlZ2VyX3R5cGVfbm9kZSwgc2hp ZnRfbikpOworICAgICAgYXBwZW5kX3BhdHRlcm5fZGVmX3NlcSAodmluZm8sIGxhc3Rfc3Rt dF9pbmZvLCBwYXR0ZXJuX3N0bXQpOworICAgICAgbGhzID0gZ2ltcGxlX2dldF9saHMgKHBh dHRlcm5fc3RtdCk7CisgICAgfQorCisgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgbWFza19p ID0gdHJlZV90b191aHdpIChzaXplKTsKKyAgdHJlZSBtYXNrID0gYnVpbGRfaW50X2NzdCAo VFJFRV9UWVBFIChsaHMpLCAoMVVMTCA8PCBtYXNrX2kpIC0gMSk7CisgIHBhdHRlcm5fc3Rt dAorICAgID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVjdF9yZWNvZ190ZW1wX3NzYV92YXIg KFRSRUVfVFlQRSAobGhzKSwgTlVMTCksCisJCQkgICBCSVRfQU5EX0VYUFIsIGxocywgbWFz ayk7CisKKyAgKnR5cGVfb3V0ID0gU1RNVF9WSU5GT19WRUNUWVBFIChsYXN0X3N0bXRfaW5m byk7CisgIHZlY3RfcGF0dGVybl9kZXRlY3RlZCAoImJpdF9maWVsZF9yZWYgcGF0dGVybiIs IGxhc3Rfc3RtdF9pbmZvLT5zdG10KTsKKworICByZXR1cm4gcGF0dGVybl9zdG10OworfQor CisKIC8qIFJlY29nbml6ZSBjYXNlcyBpbiB3aGljaCBhbiBvcGVyYXRpb24gaXMgcGVyZm9y bWVkIGluIG9uZSB0eXBlIFdUWVBFCiAgICBidXQgY291bGQgYmUgZG9uZSBtb3JlIGVmZmlj aWVudGx5IGluIGEgbmFycm93ZXIgdHlwZSBOVFlQRS4gIEZvciBleGFtcGxlLAogICAgaWYg d2UgaGF2ZToKQEAgLTU2MjMsNiArNTc3NSw4IEBAIHN0cnVjdCB2ZWN0X3JlY29nX2Z1bmMK ICAgIHRha2VuIHdoaWNoIG1lYW5zIHVzdWFsbHkgdGhlIG1vcmUgY29tcGxleCBvbmUgbmVl ZHMgdG8gcHJlY2VlZCB0aGUKICAgIGxlc3MgY29tcGxlcyBvbmV4ICh3aWRlbl9zdW0gb25s eSBhZnRlciBkb3RfcHJvZCBvciBzYWQgZm9yIGV4YW1wbGUpLiAgKi8KIHN0YXRpYyB2ZWN0 X3JlY29nX2Z1bmMgdmVjdF92ZWN0X3JlY29nX2Z1bmNfcHRyc1tdID0geworICB7IHZlY3Rf cmVjb2dfYml0X2ZpZWxkX2RlY2wsICJiaXRfZmllbGRfZGVjbCIgfSwKKyAgeyB2ZWN0X3Jl Y29nX2JpdF9maWVsZF9yZWYsICJiaXRmaWVsZF9yZWYiIH0sCiAgIHsgdmVjdF9yZWNvZ19v dmVyX3dpZGVuaW5nX3BhdHRlcm4sICJvdmVyX3dpZGVuaW5nIiB9LAogICAvKiBNdXN0IGNv bWUgYWZ0ZXIgb3Zlcl93aWRlbmluZywgd2hpY2ggbmFycm93cyB0aGUgc2hpZnQgYXMgbXVj aCBhcwogICAgICBwb3NzaWJsZSBiZWZvcmVoYW5kLiAgKi8KZGlmZiAtLWdpdCBhL2djYy90 cmVlLXZlY3Qtc3RtdHMuY2MgYi9nY2MvdHJlZS12ZWN0LXN0bXRzLmNjCmluZGV4IGY1ODJk MjM4OTg0ZmJkMDgzNjUwYTQ1ZDg3OTk3ZjcyYjZjZDM4MzkuLmMwNmU5NmJhMjk3M2QzMDQ4 YTc1NGIxYzE1Y2ZhZTkxN2EzNWUyNzEgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXZlY3Qtc3Rt dHMuY2MKKysrIGIvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYwpAQCAtNDkzMywxOSArNDkzMyw2 IEBAIHZlY3Rvcml6YWJsZV9jb252ZXJzaW9uICh2ZWNfaW5mbyAqdmluZm8sCiAJICAgICAg ICYmIFNDQUxBUl9GTE9BVF9UWVBFX1AgKHJoc190eXBlKSkpKQogICAgIHJldHVybiBmYWxz ZTsKIAotICBpZiAoIVZFQ1RPUl9CT09MRUFOX1RZUEVfUCAodmVjdHlwZV9vdXQpCi0gICAg ICAmJiAoKElOVEVHUkFMX1RZUEVfUCAobGhzX3R5cGUpCi0JICAgJiYgIXR5cGVfaGFzX21v ZGVfcHJlY2lzaW9uX3AgKGxoc190eXBlKSkKLQkgIHx8IChJTlRFR1JBTF9UWVBFX1AgKHJo c190eXBlKQotCSAgICAgICYmICF0eXBlX2hhc19tb2RlX3ByZWNpc2lvbl9wIChyaHNfdHlw ZSkpKSkKLSAgICB7Ci0gICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCi0JZHVtcF9wcmlu dGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgdmVjdF9sb2NhdGlvbiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAidHlwZSBjb252ZXJzaW9uIHRvL2Zyb20gYml0LXByZWNp c2lvbiB1bnN1cHBvcnRlZC4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgIlxuIik7Ci0g ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgIGlmIChvcF90eXBlID09IGJpbmFyeV9v cCkKICAgICB7CiAgICAgICBnY2NfYXNzZXJ0IChjb2RlID09IFdJREVOX01VTFRfRVhQUiB8 fCBjb2RlID09IFdJREVOX0xTSElGVF9FWFBSCg== --------------7nRpY1ZkU9yKGWQbaeyKq6f0--