From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-il1-x129.google.com (mail-il1-x129.google.com [IPv6:2607:f8b0:4864:20::129]) by sourceware.org (Postfix) with ESMTPS id BC2BE3945C23 for ; Tue, 19 May 2020 12:15:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org BC2BE3945C23 Received: by mail-il1-x129.google.com with SMTP id c20so11005655ilk.6 for ; Tue, 19 May 2020 05:15:21 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Ptu77lSP0qpC4/QYS9skMMEUdzXCTReVuHvAAiJdois=; b=csHsXbwEdYeeGs1xtlukw21kJnq0lLbEIEBW3gkBqtLVDYZKFX552l31fBfvi3RTLq Wen7b2UeRaP4uEkGJVzedH6AJtiSieqZPQQRLgoSe9A/i49ojiOVjJy8crxk2s3l3g5E 0sMm80mT1O5BwrW3k0w7fRYv73kMmV8lHn787/Uezg+AnhkHvNrXu/kxyefBl7OpoiHX 6Lx0Zm7+C5uKGt6AGUCTmb3Pe7WqWGAhfNDyiz3bPlLXSix4fg+xC27f6+nh50EYkdyJ myOk9yj6HeQ1imou+OSzcCOV3VBHajcY377YkkEDDdSRb71pAB7PRqjbY3O0f7/ewJ9m fOeQ== X-Gm-Message-State: AOAM533HmYnRWJVASeese6MoCPSNB8otObmncrY3dBPAAG7uIL7N+k7x h+uFMhJNOtUaIdfMSUCO0fEqvyH2QGq/47/BrLI= X-Google-Smtp-Source: ABdhPJwEUfDEWlEO6cnzCR2w6ZwJjPAjtSjyR0CTwpScRmmcPS4BWIKtUWOG5jfDhoVqnLGPOK/du0/h65sPMADnF4A= X-Received: by 2002:a92:d591:: with SMTP id a17mr21921710iln.13.1589890521121; Tue, 19 May 2020 05:15:21 -0700 (PDT) MIME-Version: 1.0 References: <20200517170637.104977-1-hjl.tools@gmail.com> In-Reply-To: From: "H.J. Lu" Date: Tue, 19 May 2020 05:14:45 -0700 Message-ID: Subject: [PATCH] x86: Add cmpmemsi for -minline-all-stringops To: Uros Bizjak Cc: "gcc-patches@gcc.gnu.org" , Jan Hubicka Content-Type: multipart/mixed; boundary="000000000000be80e005a5ff3bad" X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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, 19 May 2020 12:15:24 -0000 --000000000000be80e005a5ff3bad Content-Type: text/plain; charset="UTF-8" On Tue, May 19, 2020 at 1:48 AM Uros Bizjak wrote: > > On Sun, May 17, 2020 at 7:06 PM H.J. Lu wrote: > > > > Duplicate the cmpstrn pattern for cmpmem. The only difference is that > > the length argument of cmpmem is guaranteed to be less than or equal to > > lengths of 2 memory areas. Since "repz cmpsb" can be much slower than > > memcmp function implemented with vector instruction, see > > > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43052 > > > > expand cmpmem to "repz cmpsb" only with -mgeneral-regs-only. > > If there is no benefit compared to the library implementation, then > enable these patterns only when -minline-all-stringops is used. Fixed. > Eventually these should be reimplemented with SSE4 string instructions. > > Honza is the author of the block handling x86 system, I'll leave the > review to him. We used to expand memcmp to "repz cmpsb" via cmpstrnsi. It was changed by commit 9b0f6f5e511ca512e4faeabc81d2fd3abad9b02f Author: Nick Clifton Date: Fri Aug 12 16:26:11 2011 +0000 builtins.c (expand_builtin_memcmp): Do not use cmpstrnsi pattern. * builtins.c (expand_builtin_memcmp): Do not use cmpstrnsi pattern. * doc/md.texi (cmpstrn): Note that the comparison stops if both fetched bytes are zero. (cmpstr): Likewise. (cmpmem): Note that the comparison does not stop if both of the fetched bytes are zero. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95151 is a regression. Honza, can you take a look at this? Thanks. -- H.J. --000000000000be80e005a5ff3bad Content-Type: text/x-patch; charset="UTF-8"; name="0001-x86-Add-cmpmemsi-for-minline-all-stringops.patch" Content-Disposition: attachment; filename="0001-x86-Add-cmpmemsi-for-minline-all-stringops.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kadvnxqh0 RnJvbSBlYzkxYTU3ZjNmOTExNjgwMzRmN2Y1ZWIzOTE5NDljMzAxNzQxNjgwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhqbC50b29sc0BnbWFpbC5jb20+CkRhdGU6 IFRodSwgMTQgTWF5IDIwMjAgMTM6MDY6MjMgLTA3MDAKU3ViamVjdDogW1BBVENIXSB4ODY6IEFk ZCBjbXBtZW1zaSBmb3IgLW1pbmxpbmUtYWxsLXN0cmluZ29wcwpNSU1FLVZlcnNpb246IDEuMApD b250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1F bmNvZGluZzogOGJpdAoKV2UgdXNlZCB0byBleHBhbmQgbWVtY21wIHRvICJyZXB6IGNtcHNiIiB2 aWEgY21wc3RybnNpLiDCoEl0IHdhcyBjaGFuZ2VkCmJ5Cgpjb21taXQgOWIwZjZmNWU1MTFjYTUx MmU0ZmFlYWJjODFkMmZkM2FiYWQ5YjAyZgpBdXRob3I6IE5pY2sgQ2xpZnRvbiA8bmlja2NAcmVk aGF0LmNvbT4KRGF0ZTogICBGcmkgQXVnIDEyIDE2OjI2OjExIDIwMTEgKzAwMDAKCiAgICBidWls dGlucy5jIChleHBhbmRfYnVpbHRpbl9tZW1jbXApOiBEbyBub3QgdXNlIGNtcHN0cm5zaSBwYXR0 ZXJuLgoKICAgICAgICAgICAgKiBidWlsdGlucy5jIChleHBhbmRfYnVpbHRpbl9tZW1jbXApOiBE byBub3QgdXNlIGNtcHN0cm5zaQogICAgICAgICAgICBwYXR0ZXJuLgogICAgICAgICAgICAqIGRv Yy9tZC50ZXhpIChjbXBzdHJuKTogTm90ZSB0aGF0IHRoZSBjb21wYXJpc29uIHN0b3BzIGlmIGJv dGgKICAgICAgICAgICAgZmV0Y2hlZCBieXRlcyBhcmUgemVyby4KICAgICAgICAgICAgKGNtcHN0 cik6IExpa2V3aXNlLgogICAgICAgICAgICAoY21wbWVtKTogTm90ZSB0aGF0IHRoZSBjb21wYXJp c29uIGRvZXMgbm90IHN0b3AgaWYgYm90aCBvZiB0aGUKICAgICAgICAgICAgZmV0Y2hlZCBieXRl cyBhcmUgemVyby4KCkR1cGxpY2F0ZSB0aGUgY21wc3RybiBwYXR0ZXJuIGZvciBjbXBtZW0uICBU aGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQKdGhlIGxlbmd0aCBhcmd1bWVudCBvZiBjbXBtZW0g aXMgZ3VhcmFudGVlZCB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KbGVuZ3RocyBvZiAyIG1l bW9yeSBhcmVhcy4gIFNpbmNlICJyZXB6IGNtcHNiIiBjYW4gYmUgbXVjaCBzbG93ZXIgdGhhbgpt ZW1jbXAgZnVuY3Rpb24gaW1wbGVtZW50ZWQgd2l0aCB2ZWN0b3IgaW5zdHJ1Y3Rpb24sIHNlZQoK aHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDMwNTIKCmV4cGFu ZCBjbXBtZW0gdG8gInJlcHogY21wc2IiIG9ubHkgZm9yIC1taW5saW5lLWFsbC1zdHJpbmdvcHMu CgpnY2MvCgoJUFIgdGFyZ2V0Lzk1MTUxCgkqIGNvbmZpZy9pMzg2L2kzODYtZXhwYW5kLmMgKGl4 ODZfZXhwYW5kX2NtcHN0cm5fb3JfY21wbWVtKTogTmV3CglmdW5jdGlvbi4KCSogY29uZmlnL2kz ODYvaTM4Ni1wcm90b3MuaCAoaXg4Nl9leHBhbmRfY21wc3Rybl9vcl9jbXBtZW0pOiBOZXcKCXBy b3RvdHlwZS4KCSogY29uZmlnL2kzODYvaTM4Ni5tZCAoY21wbWVtc2kpOiBOZXcgcGF0dGVybi4K CmdjYy90ZXN0c3VpdGUvCgoJUFIgdGFyZ2V0Lzk1MTUxCgkqIGdjYy50YXJnZXQvaTM4Ni9wcjk1 MTUxLTEuYzogTmV3IHRlc3QuCgkqIGdjYy50YXJnZXQvaTM4Ni9wcjk1MTUxLTIuYzogTGlrZXdp c2UuCgkqIGdjYy50YXJnZXQvaTM4Ni9wcjk1MTUxLTMuYzogTGlrZXdpc2UuCgkqIGdjYy50YXJn ZXQvaTM4Ni9wcjk1MTUxLTQuYzogTGlrZXdpc2UuCi0tLQogZ2NjL2NvbmZpZy9pMzg2L2kzODYt ZXhwYW5kLmMgICAgICAgICAgICAgfCA4MCArKysrKysrKysrKysrKysrKysrKysrKwogZ2NjL2Nv bmZpZy9pMzg2L2kzODYtcHJvdG9zLmggICAgICAgICAgICAgfCAgMSArCiBnY2MvY29uZmlnL2kz ODYvaTM4Ni5tZCAgICAgICAgICAgICAgICAgICB8IDgwICsrKysrKy0tLS0tLS0tLS0tLS0tLS0t CiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjk1MTUxLTEuYyB8IDE3ICsrKysrCiBn Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjk1MTUxLTIuYyB8IDEwICsrKwogZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI5NTE1MS0zLmMgfCAxOCArKysrKwogZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI5NTE1MS00LmMgfCAxMSArKysrCiA3IGZpbGVzIGNoYW5n ZWQsIDE1OCBpbnNlcnRpb25zKCspLCA1OSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjk1MTUxLTEuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByOTUxNTEtMi5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI5NTE1MS0zLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjk1MTUxLTQu YwoKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LWV4cGFuZC5jIGIvZ2NjL2NvbmZp Zy9pMzg2L2kzODYtZXhwYW5kLmMKaW5kZXggNzlmODI3ZmQ2NTMuLmQzZjQyODBhZDU4IDEwMDY0 NAotLS0gYS9nY2MvY29uZmlnL2kzODYvaTM4Ni1leHBhbmQuYworKysgYi9nY2MvY29uZmlnL2kz ODYvaTM4Ni1leHBhbmQuYwpAQCAtNzY1Niw2ICs3NjU2LDg2IEBAIGl4ODZfZXhwYW5kX3NldF9v cl9jcHltZW0gKHJ0eCBkc3QsIHJ0eCBzcmMsIHJ0eCBjb3VudF9leHAsIHJ0eCB2YWxfZXhwLAog ICByZXR1cm4gdHJ1ZTsKIH0KIAorLyogRXhwYW5kIGNtcHN0cm4gb3IgbWVtY21wLiAgKi8KKwor Ym9vbAoraXg4Nl9leHBhbmRfY21wc3Rybl9vcl9jbXBtZW0gKHJ0eCByZXN1bHQsIHJ0eCBzcmMx LCBydHggc3JjMiwKKwkJCSAgICAgICBydHggbGVuZ3RoLCBydHggYWxpZ24sIGJvb2wgaXNfY21w c3RybikKK3sKKyAgaWYgKG9wdGltaXplX2luc25fZm9yX3NpemVfcCAoKSAmJiAhVEFSR0VUX0lO TElORV9BTExfU1RSSU5HT1BTKQorICAgIHJldHVybiBmYWxzZTsKKworICAvKiBDYW4ndCB1c2Ug dGhpcyBpZiB0aGUgdXNlciBoYXMgYXBwcm9wcmlhdGVkIGVjeCwgZXNpIG9yIGVkaS4gICovCisg IGlmIChmaXhlZF9yZWdzW0NYX1JFR10gfHwgZml4ZWRfcmVnc1tTSV9SRUddIHx8IGZpeGVkX3Jl Z3NbRElfUkVHXSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKGlzX2NtcHN0cm4pCisgICAg eworICAgICAgLyogRm9yIHN0cm5jbXAsIGxlbmd0aCBpcyB0aGUgbWF4aW11bSBsZW5ndGgsIHdo aWNoIGNhbiBiZSBsYXJnZXIKKwkgdGhhbiBhY3R1YWwgc3RyaW5nIGxlbmd0aHMuICBXZSBjYW4g ZXhwYW5kIHRoZSBjbXBzdHJuIHBhdHRlcm4KKwkgdG8gInJlcHogY21wc2IiIG9ubHkgaWYgb25l IG9mIHRoZSBzdHJpbmdzIGlzIGEgY29uc3RhbnQgc28KKwkgdGhhdCBleHBhbmRfYnVpbHRpbl9z dHJuY21wKCkgY2FuIHdyaXRlIHRoZSBsZW5ndGggYXJndW1lbnQgdG8KKwkgYmUgdGhlIG1pbmlt dW0gb2YgdGhlIGNvbnN0IHN0cmluZyBsZW5ndGggYW5kIHRoZSBhY3R1YWwgbGVuZ3RoCisJIGFy Z3VtZW50LiAgT3RoZXJ3aXNlLCAicmVweiBjbXBzYiIgbWF5IHBhc3MgdGhlIDAgYnl0ZS4gICov CisgICAgICB0cmVlIHQxID0gTUVNX0VYUFIgKHNyYzEpOworICAgICAgdHJlZSB0MiA9IE1FTV9F WFBSIChzcmMyKTsKKyAgICAgIGlmICghKCh0MSAmJiBUUkVFX0NPREUgKHQxKSA9PSBNRU1fUkVG CisJICAgICAmJiBUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAodDEsIDApKSA9PSBBRERSX0VYUFIK KwkgICAgICYmIChUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAoVFJFRV9PUEVSQU5EICh0MSwgMCks IDApKQorCQkgPT0gU1RSSU5HX0NTVCkpCisJICAgIHx8ICh0MiAmJiBUUkVFX0NPREUgKHQyKSA9 PSBNRU1fUkVGCisJCSYmIFRSRUVfQ09ERSAoVFJFRV9PUEVSQU5EICh0MiwgMCkpID09IEFERFJf RVhQUgorCQkmJiAoVFJFRV9DT0RFIChUUkVFX09QRVJBTkQgKFRSRUVfT1BFUkFORCAodDIsIDAp LCAwKSkKKwkJICAgID09IFNUUklOR19DU1QpKSkpCisJcmV0dXJuIGZhbHNlOworICAgIH0KKyAg ZWxzZQorICAgIHsKKyAgICAgIC8qIEV4cGFuZCBtZW1jbXAgdG8gInJlcHogY21wc2IiIG9ubHkg Zm9yIC1taW5saW5lLWFsbC1zdHJpbmdvcHMKKwkgc2luY2UgInJlcHogY21wc2IiIGNhbiBiZSBt dWNoIHNsb3dlciB0aGFuIG1lbWNtcCBmdW5jdGlvbgorCSBpbXBsZW1lbnRlZCB3aXRoIHZlY3Rv ciBpbnN0cnVjdGlvbnMsIHNlZQorCisJIGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hv d19idWcuY2dpP2lkPTQzMDUyCisgICAgICAgKi8KKyAgICAgIGlmICghVEFSR0VUX0lOTElORV9B TExfU1RSSU5HT1BTKQorCXJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgcnR4IGFkZHIxID0gY29w eV9hZGRyX3RvX3JlZyAoWEVYUCAoc3JjMSwgMCkpOworICBydHggYWRkcjIgPSBjb3B5X2FkZHJf dG9fcmVnIChYRVhQIChzcmMyLCAwKSk7CisgIGlmIChhZGRyMSAhPSBYRVhQIChzcmMxLCAwKSkK KyAgICBzcmMxID0gcmVwbGFjZV9lcXVpdl9hZGRyZXNzX252IChzcmMxLCBhZGRyMSk7CisgIGlm IChhZGRyMiAhPSBYRVhQIChzcmMyLCAwKSkKKyAgICBzcmMyID0gcmVwbGFjZV9lcXVpdl9hZGRy ZXNzX252IChzcmMyLCBhZGRyMik7CisKKyAgcnR4IGxlbmd0aHJlZyA9IGl4ODZfemVyb19leHRl bmRfdG9fUG1vZGUgKGxlbmd0aCk7CisKKyAgLyogSWYgd2UgYXJlIHRlc3Rpbmcgc3RyaWN0IGVx dWFsaXR5LCB3ZSBjYW4gdXNlIGtub3duIGFsaWdubWVudCB0bworICAgICBnb29kIGFkdmFudGFn ZS4gIFRoaXMgbWF5IGJlIHBvc3NpYmxlIHdpdGggY29tYmluZSwgcGFydGljdWxhcmx5CisgICAg IG9uY2UgY2MwIGlzIGRlYWQuICAqLworICBpZiAoQ09OU1RfSU5UX1AgKGxlbmd0aCkpCisgICAg eworICAgICAgaWYgKGxlbmd0aCA9PSBjb25zdDBfcnR4KQorCXsKKwkgIGVtaXRfbW92ZV9pbnNu IChyZXN1bHQsIGNvbnN0MF9ydHgpOworCSAgcmV0dXJuIHRydWU7CisJfQorICAgICAgZW1pdF9p bnNuIChnZW5fY21wc3RybnFpX256XzEgKGFkZHIxLCBhZGRyMiwgbGVuZ3RocmVnLCBhbGlnbiwK KwkJCQkgICAgIHNyYzEsIHNyYzIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBlbWl0 X2luc24gKGdlbl9jbXBfMSAoUG1vZGUsIGxlbmd0aHJlZywgbGVuZ3RocmVnKSk7CisgICAgICBl bWl0X2luc24gKGdlbl9jbXBzdHJucWlfMSAoYWRkcjEsIGFkZHIyLCBsZW5ndGhyZWcsIGFsaWdu LAorCQkJCSAgc3JjMSwgc3JjMikpOworICAgIH0KKworICBydHggb3V0ID0gZ2VuX2xvd3BhcnQg KFFJbW9kZSwgcmVzdWx0KTsKKyAgZW1pdF9pbnNuIChnZW5fY21waW50cWkgKG91dCkpOworICBl bWl0X21vdmVfaW5zbiAocmVzdWx0LCBnZW5fcnR4X1NJR05fRVhURU5EIChTSW1vZGUsIG91dCkp OworCisgIHJldHVybiB0cnVlOworfQogCiAvKiBFeHBhbmQgdGhlIGFwcHJvcHJpYXRlIGluc25z IGZvciBkb2luZyBzdHJsZW4gaWYgbm90IGp1c3QgZG9pbmcKICAgIHJlcG56OyBzY2FzYgpkaWZm IC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYtcHJvdG9zLmggYi9nY2MvY29uZmlnL2kzODYv aTM4Ni1wcm90b3MuaAppbmRleCAzOWZjYWEwYWQ1Zi4uMjM4YWE2NTBiNjEgMTAwNjQ0Ci0tLSBh L2djYy9jb25maWcvaTM4Ni9pMzg2LXByb3Rvcy5oCisrKyBiL2djYy9jb25maWcvaTM4Ni9pMzg2 LXByb3Rvcy5oCkBAIC03MSw2ICs3MSw3IEBAIGV4dGVybiBpbnQgYXZ4X3ZwZXJtMmYxMjhfcGFy YWxsZWwgKHJ0eCBwYXIsIG1hY2hpbmVfbW9kZSBtb2RlKTsKIGV4dGVybiBib29sIGl4ODZfZXhw YW5kX3N0cmxlbiAocnR4LCBydHgsIHJ0eCwgcnR4KTsKIGV4dGVybiBib29sIGl4ODZfZXhwYW5k X3NldF9vcl9jcHltZW0gKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsCiAJCQkJICAgICAg IHJ0eCwgcnR4LCBydHgsIHJ0eCwgYm9vbCk7CitleHRlcm4gYm9vbCBpeDg2X2V4cGFuZF9jbXBz dHJuX29yX2NtcG1lbSAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIGJvb2wpOwogCiBleHRlcm4g Ym9vbCBjb25zdGFudF9hZGRyZXNzX3AgKHJ0eCk7CiBleHRlcm4gYm9vbCBsZWdpdGltYXRlX3Bp Y19vcGVyYW5kX3AgKHJ0eCk7CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvaTM4Ni5tZCBi L2djYy9jb25maWcvaTM4Ni9pMzg2Lm1kCmluZGV4IGFhNGYyNWI3MDY1Li45YWI0MWI4YWQwMSAx MDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYubWQKKysrIGIvZ2NjL2NvbmZpZy9pMzg2 L2kzODYubWQKQEAgLTE3NzYxLDYgKzE3NzYxLDIyIEBACiAJICAoY29uc3Rfc3RyaW5nICIqIikp KQogICAgKHNldF9hdHRyICJtb2RlIiAiUUkiKV0pCiAKKyhkZWZpbmVfZXhwYW5kICJjbXBtZW1z aSIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisg ICAgICAgIChjb21wYXJlOlNJIChtYXRjaF9vcGVyYW5kOkJMSyAxICJtZW1vcnlfb3BlcmFuZCIg IiIpCisgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkJMSyAyICJtZW1vcnlfb3Bl cmFuZCIgIiIpICkgKQorICAgKHVzZSAobWF0Y2hfb3BlcmFuZCAzICJnZW5lcmFsX29wZXJhbmQi KSkKKyAgICh1c2UgKG1hdGNoX29wZXJhbmQgNCAiaW1tZWRpYXRlX29wZXJhbmQiKSldCisgICIi Cit7CisgIGlmIChpeDg2X2V4cGFuZF9jbXBzdHJuX29yX2NtcG1lbSAob3BlcmFuZHNbMF0sIG9w ZXJhbmRzWzFdLAorCQkJCSAgICAgb3BlcmFuZHNbMl0sIG9wZXJhbmRzWzNdLAorCQkJCSAgICAg b3BlcmFuZHNbNF0sIGZhbHNlKSkKKyAgICBET05FOworICBlbHNlCisgICAgRkFJTDsKK30pCisK IChkZWZpbmVfZXhwYW5kICJjbXBzdHJuc2kiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAg InJlZ2lzdGVyX29wZXJhbmQiKQogCShjb21wYXJlOlNJIChtYXRjaF9vcGVyYW5kOkJMSyAxICJn ZW5lcmFsX29wZXJhbmQiKQpAQCAtMTc3NjksNjYgKzE3Nzg1LDEyIEBACiAgICAodXNlIChtYXRj aF9vcGVyYW5kIDQgImltbWVkaWF0ZV9vcGVyYW5kIikpXQogICAiIgogewotICBydHggYWRkcjEs IGFkZHIyLCBjb3VudHJlZywgYWxpZ24sIG91dDsKLQotICBpZiAob3B0aW1pemVfaW5zbl9mb3Jf c2l6ZV9wICgpICYmICFUQVJHRVRfSU5MSU5FX0FMTF9TVFJJTkdPUFMpCi0gICAgRkFJTDsKLQot ICAvKiBDYW4ndCB1c2UgdGhpcyBpZiB0aGUgdXNlciBoYXMgYXBwcm9wcmlhdGVkIGVjeCwgZXNp IG9yIGVkaS4gICovCi0gIGlmIChmaXhlZF9yZWdzW0NYX1JFR10gfHwgZml4ZWRfcmVnc1tTSV9S RUddIHx8IGZpeGVkX3JlZ3NbRElfUkVHXSkKLSAgICBGQUlMOwotCi0gIC8qIE9uZSBvZiB0aGUg c3RyaW5ncyBtdXN0IGJlIGEgY29uc3RhbnQuICBJZiBzbywgZXhwYW5kX2J1aWx0aW5fc3RybmNt cCgpCi0gICAgIHdpbGwgaGF2ZSByZXdyaXR0ZW4gdGhlIGxlbmd0aCBhcmcgdG8gYmUgdGhlIG1p bmltdW0gb2YgdGhlIGNvbnN0IHN0cmluZwotICAgICBsZW5ndGggYW5kIHRoZSBhY3R1YWwgbGVu Z3RoIGFyZy4gIElmIGJvdGggc3RyaW5ncyBhcmUgdGhlIHNhbWUgYW5kCi0gICAgIHNob3J0ZXIg dGhhbiB0aGUgbGVuZ3RoIGFyZywgcmVweiBjbXBzYiB3aWxsIG5vdCBzdG9wIGF0IHRoZSAwIGJ5 dGUgYW5kCi0gICAgIHdpbGwgaW5jb3JyZWN0bHkgYmFzZSB0aGUgcmVzdWx0cyBvbiBjaGFycyBw YXN0IHRoZSAwIGJ5dGUuICAqLwotICB0cmVlIHQxID0gTUVNX0VYUFIgKG9wZXJhbmRzWzFdKTsK LSAgdHJlZSB0MiA9IE1FTV9FWFBSIChvcGVyYW5kc1syXSk7Ci0gIGlmICghKCh0MSAmJiBUUkVF X0NPREUgKHQxKSA9PSBNRU1fUkVGCi0gICAgICAgICAmJiBUUkVFX0NPREUgKFRSRUVfT1BFUkFO RCAodDEsIDApKSA9PSBBRERSX0VYUFIKLSAgICAgICAgICYmIFRSRUVfQ09ERSAoVFJFRV9PUEVS QU5EIChUUkVFX09QRVJBTkQgKHQxLCAwKSwgMCkpID09IFNUUklOR19DU1QpCi0gICAgICB8fCAo dDIgJiYgVFJFRV9DT0RFICh0MikgPT0gTUVNX1JFRgotICAgICAgICAgICYmIFRSRUVfQ09ERSAo VFJFRV9PUEVSQU5EICh0MiwgMCkpID09IEFERFJfRVhQUgotICAgICAgICAgICYmIFRSRUVfQ09E RSAoVFJFRV9PUEVSQU5EIChUUkVFX09QRVJBTkQgKHQyLCAwKSwgMCkpID09IFNUUklOR19DU1Qp KSkKLSAgICBGQUlMOwotCi0gIGFkZHIxID0gY29weV9hZGRyX3RvX3JlZyAoWEVYUCAob3BlcmFu ZHNbMV0sIDApKTsKLSAgYWRkcjIgPSBjb3B5X2FkZHJfdG9fcmVnIChYRVhQIChvcGVyYW5kc1sy XSwgMCkpOwotICBpZiAoYWRkcjEgIT0gWEVYUCAob3BlcmFuZHNbMV0sIDApKQotICAgIG9wZXJh bmRzWzFdID0gcmVwbGFjZV9lcXVpdl9hZGRyZXNzX252IChvcGVyYW5kc1sxXSwgYWRkcjEpOwot ICBpZiAoYWRkcjIgIT0gWEVYUCAob3BlcmFuZHNbMl0sIDApKQotICAgIG9wZXJhbmRzWzJdID0g cmVwbGFjZV9lcXVpdl9hZGRyZXNzX252IChvcGVyYW5kc1syXSwgYWRkcjIpOwotCi0gIGNvdW50 cmVnID0gaXg4Nl96ZXJvX2V4dGVuZF90b19QbW9kZSAob3BlcmFuZHNbM10pOwotCi0gIC8qICUl JSBJZmYgd2UgYXJlIHRlc3Rpbmcgc3RyaWN0IGVxdWFsaXR5LCB3ZSBjYW4gdXNlIGtub3duIGFs aWdubWVudAotICAgICB0byBnb29kIGFkdmFudGFnZS4gIFRoaXMgbWF5IGJlIHBvc3NpYmxlIHdp dGggY29tYmluZSwgcGFydGljdWxhcmx5Ci0gICAgIG9uY2UgY2MwIGlzIGRlYWQuICAqLwotICBh bGlnbiA9IG9wZXJhbmRzWzRdOwotCi0gIGlmIChDT05TVF9JTlRfUCAob3BlcmFuZHNbM10pKQot ICAgIHsKLSAgICAgIGlmIChvcGVyYW5kc1szXSA9PSBjb25zdDBfcnR4KQotCXsKLQkgIGVtaXRf bW92ZV9pbnNuIChvcGVyYW5kc1swXSwgY29uc3QwX3J0eCk7Ci0JICBET05FOwotCX0KLSAgICAg IGVtaXRfaW5zbiAoZ2VuX2NtcHN0cm5xaV9uel8xIChhZGRyMSwgYWRkcjIsIGNvdW50cmVnLCBh bGlnbiwKLQkJCQkgICAgIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSkpOwotICAgIH0KKyAgaWYg KGl4ODZfZXhwYW5kX2NtcHN0cm5fb3JfY21wbWVtIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0s CisJCQkJICAgICBvcGVyYW5kc1syXSwgb3BlcmFuZHNbM10sCisJCQkJICAgICBvcGVyYW5kc1s0 XSwgdHJ1ZSkpCisgICAgRE9ORTsKICAgZWxzZQotICAgIHsKLSAgICAgIGVtaXRfaW5zbiAoZ2Vu X2NtcF8xIChQbW9kZSwgY291bnRyZWcsIGNvdW50cmVnKSk7Ci0gICAgICBlbWl0X2luc24gKGdl bl9jbXBzdHJucWlfMSAoYWRkcjEsIGFkZHIyLCBjb3VudHJlZywgYWxpZ24sCi0JCQkJICBvcGVy YW5kc1sxXSwgb3BlcmFuZHNbMl0pKTsKLSAgICB9Ci0KLSAgb3V0ID0gZ2VuX2xvd3BhcnQgKFFJ bW9kZSwgb3BlcmFuZHNbMF0pOwotICBlbWl0X2luc24gKGdlbl9jbXBpbnRxaSAob3V0KSk7Ci0g IGVtaXRfbW92ZV9pbnNuIChvcGVyYW5kc1swXSwgZ2VuX3J0eF9TSUdOX0VYVEVORCAoU0ltb2Rl LCBvdXQpKTsKLQotICBET05FOworICAgIEZBSUw7CiB9KQogCiA7OyBQcm9kdWNlIGEgdHJpLXN0 YXRlIGludGVnZXIgKC0xLCAwLCAxKSBmcm9tIGNvbmRpdGlvbiBjb2Rlcy4KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByOTUxNTEtMS5jIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvcHI5NTE1MS0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjU0YTc1MTAwNDJhCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvcHI5NTE1MS0xLmMKQEAgLTAsMCArMSwxNyBAQAorLyogeyBkZy1k byBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1taW5saW5lLWFsbC1zdHJpbmdv cHMiIH0gKi8KKworc3RydWN0IGZvbworeworICBjaGFyIGFycmF5WzI1N107Cit9OworCitleHRl cm4gc3RydWN0IGZvbyB4OworCitpbnQKK2Z1bmMgKHN0cnVjdCBmb28gaSkKK3sKKyAgcmV0dXJu IF9fYnVpbHRpbl9tZW1jbXAgKCZ4LCAmaSwgc2l6ZW9mICh4KSkgPyAxIDogMjsKK30KKworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiY2FsbFxbXFx0IFxdKl8/bWVtY21wIiB9 IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByOTUxNTEt Mi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI5NTE1MS0yLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhmOWQ4ZWUxYmY0Ci0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI5NTE1MS0yLmMKQEAgLTAsMCAr MSwxMCBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1t aW5saW5lLWFsbC1zdHJpbmdvcHMiIH0gKi8KKworaW50CitmdW5jICh2b2lkICpkLCB2b2lkICpz LCB1bnNpZ25lZCBpbnQgbCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9tZW1jbXAgKGQsIHMsIGwp ID8gMSA6IDI7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgImNhbGxc W1xcdCBcXSpfP21lbWNtcCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9wcjk1MTUxLTMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3By OTUxNTEtMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xNGNiZGVj NGM5MwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3By OTUxNTEtMy5jCkBAIC0wLDAgKzEsMTggQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1PMiAtbXNzZTIgLW1uby1pbmxpbmUtYWxsLXN0cmluZ29wcyIgfSAqLwor CitzdHJ1Y3QgZm9vCit7CisgIGNoYXIgYXJyYXlbMjU3XTsKK307CisKK2V4dGVybiBzdHJ1Y3Qg Zm9vIHg7CisKK2ludAorZnVuYyAoc3RydWN0IGZvbyBpKQoreworICByZXR1cm4gX19idWlsdGlu X21lbWNtcCAoJngsICZpLCBzaXplb2YgKHgpKSA/IDEgOiAyOworfQorCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXIgImNhbGxcW1xcdCBcXSpfP21lbWNtcCIgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJjbXBzYiIgfSB9ICovCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjk1MTUxLTQuYyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L3ByOTUxNTEtNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5jOTNiMmI2MGM1YgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L3ByOTUxNTEtNC5jCkBAIC0wLDAgKzEsMTEgQEAKKy8qIHsgZGctZG8g Y29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbXNzZTIgLW1uby1pbmxpbmUtYWxs LXN0cmluZ29wcyIgfSAqLworCitpbnQKK2Z1bmMgKHZvaWQgKmQsIHZvaWQgKnMsIHVuc2lnbmVk IGludCBsKQoreworICByZXR1cm4gX19idWlsdGluX21lbWNtcCAoZCwgcywgbCkgPyAxIDogMjsK K30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJjYWxsXFtcXHQgXF0qXz9tZW1j bXAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiY21wc2IiIH0g fSAqLwotLSAKMi4yNi4yCgo= --000000000000be80e005a5ff3bad--