From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 96E2A384840F for ; Thu, 24 Jun 2021 14:34:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 96E2A384840F Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-191-uEQwcOG-OMGcFMdDYAnKkw-1; Thu, 24 Jun 2021 10:34:35 -0400 X-MC-Unique: uEQwcOG-OMGcFMdDYAnKkw-1 Received: by mail-wr1-f72.google.com with SMTP id a4-20020a0560001884b0290124b6e4a437so412995wri.16 for ; Thu, 24 Jun 2021 07:34:35 -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=Rml3waYABlvIqhwou0dpW0EkDfaxKhC5UCiQ+2vLxbI=; b=OKzUAqXO48A69lCJqtWilFf/rFp4YrATLKrwbTfkssFfj1wrDRQm60KEtbRitO/9bm JYIMFWsyl5SKHcw+wQMzrvPls4QXkhurj+OLuFMHvFTVm/a+QnBkmg9s7qUcxaME6fKG tfYW6LNWqEkx7zw+5xBdcVBu3dctJ7JSgjkgp0gNvY94ZKNny+KMbZ/4ZEKGqiCzu2to cxri/76HTjINlBQokSTcPCO/iyXxtMb6HBq4bIciPyNN9XR+NSGX8zOh6vKvzSiRnFY4 s9Li47pKhqheskd87oTFyQVEMK1gX5sx97x3AA2GlGETYiiV30s2dyp51y+eA3DngmTj XIPw== X-Gm-Message-State: AOAM530+awnjFP2Wr3FVNxVZZ6LOkHfMcxiO9zEd7Vmm+QN5TbSTWtXb cUiSUgnbDzHUcQ5GMb4FovzbIb+0IjxvLtVNijc3JaitgaKvXT++j7GDAbzP8N8svqg1FKOGcHF JwMGlvkDyIglbYUh4jX3LLsoC4oYtJmY= X-Received: by 2002:a05:6000:cb:: with SMTP id q11mr4996748wrx.13.1624545274401; Thu, 24 Jun 2021 07:34:34 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxGAd8k0iETafFOXdNVwULtKHk1PhMFM2n/DMaGGkCE8t9Uiev/DIxccHY48z/EaaGWE6RIFT3qCYwaPm0L0Uw= X-Received: by 2002:a05:6000:cb:: with SMTP id q11mr4996721wrx.13.1624545274127; Thu, 24 Jun 2021 07:34:34 -0700 (PDT) MIME-Version: 1.0 References: <270527782.u9WJ3AIrlG@excalibur> <3553838.ebMzRN9Arp@excalibur> <3315301.e9AK2G76lq@excalibur> <14392010.RDIVbhacDa@minbar> <20210624140837.GT7746@tucnak> <20210624142104.GU7746@tucnak> In-Reply-To: <20210624142104.GU7746@tucnak> From: Jonathan Wakely Date: Thu, 24 Jun 2021 15:34:23 +0100 Message-ID: Subject: Re: [PATCH 04/11 v3] libstdc++: Make use of __builtin_bit_cast To: Jakub Jelinek Cc: Matthias Kretz , gcc Patches , "libstdc++" X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000fc8fa105c583eb32" X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, 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: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Jun 2021 14:34:42 -0000 --000000000000fc8fa105c583eb32 Content-Type: text/plain; charset="UTF-8" On Thu, 24 Jun 2021 at 15:21, Jakub Jelinek wrote: > > On Thu, Jun 24, 2021 at 03:11:01PM +0100, Jonathan Wakely wrote: > > On Thu, 24 Jun 2021 at 15:08, Jakub Jelinek wrote: > > > > > > On Thu, Jun 24, 2021 at 04:01:34PM +0200, Matthias Kretz wrote: > > > > --- a/libstdc++-v3/include/experimental/bits/simd.h > > > > +++ b/libstdc++-v3/include/experimental/bits/simd.h > > > > @@ -1598,7 +1598,9 @@ template > > > > _GLIBCXX_SIMD_INTRINSIC constexpr _To > > > > __bit_cast(const _From __x) > > > > { > > > > - // TODO: implement with / replace by __builtin_bit_cast ASAP > > > > +#if __has_builtin(__builtin_bit_cast) > > > > > > Shouldn't that use #if _GLIBCXX_HAS_BUILTIN(__builtin_bit_cast) in > > > c++config to define a new macro and use that macro here? > > > Though it is true that c++config already uses > > > #if __has_builtin(__builtin_is_constant_evaluated) > > > and so would fail miserably for compilers that don't support __has_builtin > > > > GCC was the last of our supported compilers to implement > > __has_builtin, so for GCC trunk we can assume that it's always > > supported. > > We don't support mixing GCC and libstdc++ versions, so I'm not worried > about GCC. At least according to godbolt, already clang 3.0 supports it > which is 10 years old, so probably fine too, but ICC 19.0/19.1 still doesn't > support it, only ICC 2021 does. And ICC 19.1 seems to be released in > October 2020. > > So, wouldn't it be better not to #undef _GLIBCXX_HAS_BUILTIN, move its > definition a little bit earlier and use it also for > __builtin_is_constant_evaluated? I discussed this with Judy Ward on the Intel compiler team. If you're using their compiler, you should be using the latest version. They also claim 100% compatibility with GCC, for versions they've been able to test. So if you are using libstdc++ headers from a GCC release that supports __has_builtin, then you need to use a release of the Intel compiler that supports __has_builtin. Otherwise, it's unsupported. So in GCC 12 C++ headers we support GCC 12, versions of Intel compatible with GCC 12, and the last few releases of Clang. All of those have __has_builtin. Rather than use the _GLIBCXX_HAS_BUILTIN macro more widely, I'd prefer to not use it where it isn't needed, as in the attached (untested) patch. --000000000000fc8fa105c583eb32 Content-Type: text/plain; charset="US-ASCII"; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kqb07gc10 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvYmFzaWNfc3RyaW5nLmggYi9s aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Jhc2ljX3N0cmluZy5oCmluZGV4IDk5MTFkNGRlYjcy Li4zYzA3NTk2NjY2MCAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9iYXNp Y19zdHJpbmcuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Jhc2ljX3N0cmluZy5o CkBAIC01NSw3ICs1NSw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAjaWZk ZWYgX19jcHBfbGliX2lzX2NvbnN0YW50X2V2YWx1YXRlZAogLy8gU3VwcG9ydCBQMTAzMlIxIGlu IEMrKzIwIChidXQgbm90IFAwOTgwUjEgeWV0KS4KICMgZGVmaW5lIF9fY3BwX2xpYl9jb25zdGV4 cHJfc3RyaW5nIDIwMTgxMUwKLSNlbGlmIF9fY3BsdXNwbHVzID49IDIwMTcwM0wgJiYgX0dMSUJD WFhfSEFWRV9CVUlMVElOX0lTX0NPTlNUQU5UX0VWQUxVQVRFRAorI2VsaWYgX19jcGx1c3BsdXMg Pj0gMjAxNzAzTCAmJiBfX2hhc19idWlsdGluKF9fYnVpbHRpbl9pc19jb25zdGFudF9ldmFsdWF0 ZWQpCiAvLyBTdXBwb3J0IFAwNDI2UjEgY2hhbmdlcyB0byBjaGFyX3RyYWl0cyBpbiBDKysxNy4K ICMgZGVmaW5lIF9fY3BwX2xpYl9jb25zdGV4cHJfc3RyaW5nIDIwMTYxMUwKICNlbGlmIF9fY3Bs dXNwbHVzID4gMjAxNzAzTApkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9j Kytjb25maWcgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2MrK2NvbmZpZwppbmRleCA5MzE0 MTE3YWVkOC4uM2VjNjY4YjY1Y2YgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Jp dHMvYysrY29uZmlnCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvYysrY29uZmlnCkBA IC03MjAsMTMgKzcyMCwxMSBAQCBuYW1lc3BhY2Ugc3RkCiAjIGRlZmluZSBfR0xJQkNYWF9ET1VC TEVfSVNfSUVFRV9CSU5BUlk2NCAxCiAjZW5kaWYKIAotI2lmZGVmIF9faGFzX2J1aWx0aW4KLSMg aWZkZWYgX19pc19pZGVudGlmaWVyCisjaWZkZWYgX19pc19pZGVudGlmaWVyCiAvLyBJbnRlbCBh bmQgb2xkZXIgQ2xhbmcgcmVxdWlyZSAhX19pc19pZGVudGlmaWVyIGZvciBzb21lIGJ1aWx0LWlu czoKLSMgIGRlZmluZSBfR0xJQkNYWF9IQVNfQlVJTFRJTihCKSBfX2hhc19idWlsdGluKEIpIHx8 ICEgX19pc19pZGVudGlmaWVyKEIpCi0jIGVsc2UKLSMgIGRlZmluZSBfR0xJQkNYWF9IQVNfQlVJ TFRJTihCKSBfX2hhc19idWlsdGluKEIpCi0jIGVuZGlmCisjIGRlZmluZSBfR0xJQkNYWF9IQVNf QlVJTFRJTihCKSBfX2hhc19idWlsdGluKEIpIHx8ICEgX19pc19pZGVudGlmaWVyKEIpCisjZWxz ZQorIyBkZWZpbmUgX0dMSUJDWFhfSEFTX0JVSUxUSU4oQikgX19oYXNfYnVpbHRpbihCKQogI2Vu ZGlmCiAKICNpZiBfR0xJQkNYWF9IQVNfQlVJTFRJTihfX2hhc191bmlxdWVfb2JqZWN0X3JlcHJl c2VudGF0aW9ucykKQEAgLTczNywxOCArNzM1LDEwIEBAIG5hbWVzcGFjZSBzdGQKICMgZGVmaW5l IF9HTElCQ1hYX0hBVkVfQlVJTFRJTl9JU19BR0dSRUdBVEUgMQogI2VuZGlmCiAKLSNpZiBfR0xJ QkNYWF9IQVNfQlVJTFRJTihfX2J1aWx0aW5faXNfY29uc3RhbnRfZXZhbHVhdGVkKQotIyAgZGVm aW5lIF9HTElCQ1hYX0hBVkVfQlVJTFRJTl9JU19DT05TVEFOVF9FVkFMVUFURUQgMQotI2VuZGlm Ci0KICNpZiBfR0xJQkNYWF9IQVNfQlVJTFRJTihfX2lzX3NhbWUpCiAjICBkZWZpbmUgX0dMSUJD WFhfSEFWRV9CVUlMVElOX0lTX1NBTUUgMQogI2VuZGlmCiAKLSNpZiBfR0xJQkNYWF9IQVNfQlVJ TFRJTihfX2J1aWx0aW5fbGF1bmRlcikKLSMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfQlVJTFRJTl9M QVVOREVSIDEKLSNlbmRpZgotCiAjdW5kZWYgX0dMSUJDWFhfSEFTX0JVSUxUSU4KIAogCmRpZmYg LS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2NoYXJfdHJhaXRzLmggYi9saWJzdGRj KystdjMvaW5jbHVkZS9iaXRzL2NoYXJfdHJhaXRzLmgKaW5kZXggM2RhNmUyOGE1MTMuLjc3YWQ3 YmU1ZGZiIDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2NoYXJfdHJhaXRz LmgKKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9jaGFyX3RyYWl0cy5oCkBAIC0yMzgs NyArMjM4LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICNpZmRlZiBfX2Nw cF9saWJfaXNfY29uc3RhbnRfZXZhbHVhdGVkCiAvLyBVbm9mZmljaWFsIG1hY3JvIGluZGljYXRp bmcgUDEwMzJSMSBzdXBwb3J0IGluIEMrKzIwCiAjIGRlZmluZSBfX2NwcF9saWJfY29uc3RleHBy X2NoYXJfdHJhaXRzIDIwMTgxMUwKLSNlbGlmIF9fY3BsdXNwbHVzID49IDIwMTcwM0wgJiYgX0dM SUJDWFhfSEFWRV9CVUlMVElOX0lTX0NPTlNUQU5UX0VWQUxVQVRFRAorI2VsaWYgX19jcGx1c3Bs dXMgPj0gMjAxNzAzTCAmJiBfX2hhc19idWlsdGluKF9fYnVpbHRpbl9pc19jb25zdGFudF9ldmFs dWF0ZWQpCiAvLyBVbm9mZmljaWFsIG1hY3JvIGluZGljYXRpbmcgUDA0MjZSMSBzdXBwb3J0IGlu IEMrKzE3CiAjIGRlZmluZSBfX2NwcF9saWJfY29uc3RleHByX2NoYXJfdHJhaXRzIDIwMTYxMUwK ICNlbmRpZgpAQCAtMjk1LDcgKzI5NSw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJT SU9OCiAgICAgICB7CiAJaWYgKF9fbiA9PSAwKQogCSAgcmV0dXJuIDA7Ci0jaWYgX19jcGx1c3Bs dXMgPj0gMjAxNzAzTCAmJiBfR0xJQkNYWF9IQVZFX0JVSUxUSU5fSVNfQ09OU1RBTlRfRVZBTFVB VEVECisjaWYgX19jcGx1c3BsdXMgPj0gMjAxNzAzTCAmJiBfX2hhc19idWlsdGluKF9fYnVpbHRp bl9pc19jb25zdGFudF9ldmFsdWF0ZWQpCiAJaWYgKF9fYnVpbHRpbl9pc19jb25zdGFudF9ldmFs dWF0ZWQoKSkKIAkgIHsKIAkgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19f aSkKQEAgLTMxMiw3ICszMTIsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgog ICAgICAgc3RhdGljIF9HTElCQ1hYMTdfQ09OU1RFWFBSIHNpemVfdAogICAgICAgbGVuZ3RoKGNv bnN0IGNoYXJfdHlwZSogX19zKQogICAgICAgewotI2lmIF9fY3BsdXNwbHVzID49IDIwMTcwM0wg JiYgX0dMSUJDWFhfSEFWRV9CVUlMVElOX0lTX0NPTlNUQU5UX0VWQUxVQVRFRAorI2lmIF9fY3Bs dXNwbHVzID49IDIwMTcwM0wgJiYgX19oYXNfYnVpbHRpbihfX2J1aWx0aW5faXNfY29uc3RhbnRf ZXZhbHVhdGVkKQogCWlmIChfX2J1aWx0aW5faXNfY29uc3RhbnRfZXZhbHVhdGVkKCkpCiAJICBy ZXR1cm4gX19nbnVfY3h4OjpjaGFyX3RyYWl0czxjaGFyX3R5cGU+OjpsZW5ndGgoX19zKTsKICNl bmRpZgpAQCAtMzI0LDcgKzMyNCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9O CiAgICAgICB7CiAJaWYgKF9fbiA9PSAwKQogCSAgcmV0dXJuIDA7Ci0jaWYgX19jcGx1c3BsdXMg Pj0gMjAxNzAzTCAmJiBfR0xJQkNYWF9IQVZFX0JVSUxUSU5fSVNfQ09OU1RBTlRfRVZBTFVBVEVE CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxNzAzTCAmJiBfX2hhc19idWlsdGluKF9fYnVpbHRpbl9p c19jb25zdGFudF9ldmFsdWF0ZWQpCiAJaWYgKF9fYnVpbHRpbl9pc19jb25zdGFudF9ldmFsdWF0 ZWQoKSkKIAkgIHJldHVybiBfX2dudV9jeHg6OmNoYXJfdHJhaXRzPGNoYXJfdHlwZT46OmZpbmQo X19zLCBfX24sIF9fYSk7CiAjZW5kaWYKQEAgLTQyMiw3ICs0MjIsNyBAQCBfR0xJQkNYWF9CRUdJ Tl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgewogCWlmIChfX24gPT0gMCkKIAkgIHJldHVybiAw OwotI2lmIF9fY3BsdXNwbHVzID49IDIwMTcwM0wgJiYgX0dMSUJDWFhfSEFWRV9CVUlMVElOX0lT X0NPTlNUQU5UX0VWQUxVQVRFRAorI2lmIF9fY3BsdXNwbHVzID49IDIwMTcwM0wgJiYgX19oYXNf YnVpbHRpbihfX2J1aWx0aW5faXNfY29uc3RhbnRfZXZhbHVhdGVkKQogCWlmIChfX2J1aWx0aW5f aXNfY29uc3RhbnRfZXZhbHVhdGVkKCkpCiAJICByZXR1cm4gX19nbnVfY3h4OjpjaGFyX3RyYWl0 czxjaGFyX3R5cGU+Ojpjb21wYXJlKF9fczEsIF9fczIsIF9fbik7CiAjZW5kaWYKQEAgLTQzMiw3 ICs0MzIsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgc3RhdGlj IF9HTElCQ1hYMTdfQ09OU1RFWFBSIHNpemVfdAogICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlw ZSogX19zKQogICAgICAgewotI2lmIF9fY3BsdXNwbHVzID49IDIwMTcwM0wgJiYgX0dMSUJDWFhf SEFWRV9CVUlMVElOX0lTX0NPTlNUQU5UX0VWQUxVQVRFRAorI2lmIF9fY3BsdXNwbHVzID49IDIw MTcwM0wgJiYgX19oYXNfYnVpbHRpbihfX2J1aWx0aW5faXNfY29uc3RhbnRfZXZhbHVhdGVkKQog CWlmIChfX2J1aWx0aW5faXNfY29uc3RhbnRfZXZhbHVhdGVkKCkpCiAJICByZXR1cm4gX19nbnVf Y3h4OjpjaGFyX3RyYWl0czxjaGFyX3R5cGU+OjpsZW5ndGgoX19zKTsKICNlbmRpZgpAQCAtNDQ0 LDcgKzQ0NCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICB7CiAJ aWYgKF9fbiA9PSAwKQogCSAgcmV0dXJuIDA7Ci0jaWYgX19jcGx1c3BsdXMgPj0gMjAxNzAzTCAm JiBfR0xJQkNYWF9IQVZFX0JVSUxUSU5fSVNfQ09OU1RBTlRfRVZBTFVBVEVECisjaWYgX19jcGx1 c3BsdXMgPj0gMjAxNzAzTCAmJiBfX2hhc19idWlsdGluKF9fYnVpbHRpbl9pc19jb25zdGFudF9l dmFsdWF0ZWQpCiAJaWYgKF9fYnVpbHRpbl9pc19jb25zdGFudF9ldmFsdWF0ZWQoKSkKIAkgIHJl dHVybiBfX2dudV9jeHg6OmNoYXJfdHJhaXRzPGNoYXJfdHlwZT46OmZpbmQoX19zLCBfX24sIF9f YSk7CiAjZW5kaWYKQEAgLTUzOSw3ICs1MzksNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Vf VkVSU0lPTgogICAgICAgewogCWlmIChfX24gPT0gMCkKIAkgIHJldHVybiAwOwotI2lmIF9fY3Bs dXNwbHVzID49IDIwMTcwM0wgJiYgX0dMSUJDWFhfSEFWRV9CVUlMVElOX0lTX0NPTlNUQU5UX0VW QUxVQVRFRAorI2lmIF9fY3BsdXNwbHVzID49IDIwMTcwM0wgJiYgX19oYXNfYnVpbHRpbihfX2J1 aWx0aW5faXNfY29uc3RhbnRfZXZhbHVhdGVkKQogCWlmIChfX2J1aWx0aW5faXNfY29uc3RhbnRf ZXZhbHVhdGVkKCkpCiAJICByZXR1cm4gX19nbnVfY3h4OjpjaGFyX3RyYWl0czxjaGFyX3R5cGU+ Ojpjb21wYXJlKF9fczEsIF9fczIsIF9fbik7CiAjZW5kaWYKQEAgLTU0OSw3ICs1NDksNyBAQCBf R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgc3RhdGljIF9HTElCQ1hYMTdf Q09OU1RFWFBSIHNpemVfdAogICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAg ICAgewotI2lmIF9fY3BsdXNwbHVzID49IDIwMTcwM0wgJiYgX0dMSUJDWFhfSEFWRV9CVUlMVElO X0lTX0NPTlNUQU5UX0VWQUxVQVRFRAorI2lmIF9fY3BsdXNwbHVzID49IDIwMTcwM0wgJiYgX19o YXNfYnVpbHRpbihfX2J1aWx0aW5faXNfY29uc3RhbnRfZXZhbHVhdGVkKQogCWlmIChfX2J1aWx0 aW5faXNfY29uc3RhbnRfZXZhbHVhdGVkKCkpCiAJICByZXR1cm4gX19nbnVfY3h4OjpjaGFyX3Ry YWl0czxjaGFyX3R5cGU+OjpsZW5ndGgoX19zKTsKICNlbmRpZgpAQCAtNTY0LDcgKzU2NCw3IEBA IF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICB7CiAJaWYgKF9fbiA9PSAw KQogCSAgcmV0dXJuIDA7Ci0jaWYgX19jcGx1c3BsdXMgPj0gMjAxNzAzTCAmJiBfR0xJQkNYWF9I QVZFX0JVSUxUSU5fSVNfQ09OU1RBTlRfRVZBTFVBVEVECisjaWYgX19jcGx1c3BsdXMgPj0gMjAx NzAzTCAmJiBfX2hhc19idWlsdGluKF9fYnVpbHRpbl9pc19jb25zdGFudF9ldmFsdWF0ZWQpCiAJ aWYgKF9fYnVpbHRpbl9pc19jb25zdGFudF9ldmFsdWF0ZWQoKSkKIAkgIHJldHVybiBfX2dudV9j eHg6OmNoYXJfdHJhaXRzPGNoYXJfdHlwZT46OmZpbmQoX19zLCBfX24sIF9fYSk7CiAjZW5kaWYK ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2Z1bmN0aW9uLmggYi9s aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9mdW5jdGlvbi5oCmluZGV4IDA3MzAxOGQ1MjJk Li43NzRhOTgyOTI4NCAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxf ZnVuY3Rpb24uaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9mdW5jdGlvbi5o CkBAIC00MTMsMTIgKzQxMyw4IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAg ICAgICBfR0xJQkNYWDE0X0NPTlNURVhQUiBib29sCiAgICAgICBvcGVyYXRvcigpKF9UcCogX194 LCBfVHAqIF9feSkgY29uc3QgX0dMSUJDWFhfTk9USFJPVwogICAgICAgewotI2lmIF9fY3BsdXNw bHVzID49IDIwMTQwMkwKLSNpZmRlZiBfR0xJQkNYWF9IQVZFX0JVSUxUSU5fSVNfQ09OU1RBTlRf RVZBTFVBVEVECisjaWYgX19jcGx1c3BsdXMgPj0gMjAxNDAyTCAmJiBfX2hhc19idWlsdGluKF9f YnVpbHRpbl9pc19jb25zdGFudF9ldmFsdWF0ZWQpCiAJaWYgKF9fYnVpbHRpbl9pc19jb25zdGFu dF9ldmFsdWF0ZWQoKSkKLSNlbHNlCi0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKF9feCA+IF9f eSkpCi0jZW5kaWYKIAkgIHJldHVybiBfX3ggPiBfX3k7CiAjZW5kaWYKIAlyZXR1cm4gKF9fVUlO VFBUUl9UWVBFX18pX194ID4gKF9fVUlOVFBUUl9UWVBFX18pX195OwpAQCAtNDMyLDEyICs0Mjgs OCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgX0dMSUJDWFgxNF9D T05TVEVYUFIgYm9vbAogICAgICAgb3BlcmF0b3IoKShfVHAqIF9feCwgX1RwKiBfX3kpIGNvbnN0 IF9HTElCQ1hYX05PVEhST1cKICAgICAgIHsKLSNpZiBfX2NwbHVzcGx1cyA+PSAyMDE0MDJMCi0j aWZkZWYgX0dMSUJDWFhfSEFWRV9CVUlMVElOX0lTX0NPTlNUQU5UX0VWQUxVQVRFRAorI2lmIF9f Y3BsdXNwbHVzID49IDIwMTQwMkwgJiYgX19oYXNfYnVpbHRpbihfX2J1aWx0aW5faXNfY29uc3Rh bnRfZXZhbHVhdGVkKQogCWlmIChfX2J1aWx0aW5faXNfY29uc3RhbnRfZXZhbHVhdGVkKCkpCi0j ZWxzZQotCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChfX3ggPCBfX3kpKQotI2VuZGlmCiAJICBy ZXR1cm4gX194IDwgX195OwogI2VuZGlmCiAJcmV0dXJuIChfX1VJTlRQVFJfVFlQRV9fKV9feCA8 IChfX1VJTlRQVFJfVFlQRV9fKV9feTsKQEAgLTQ1MSwxMiArNDQzLDggQEAgX0dMSUJDWFhfQkVH SU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9HTElCQ1hYMTRfQ09OU1RFWFBSIGJvb2wKICAg ICAgIG9wZXJhdG9yKCkoX1RwKiBfX3gsIF9UcCogX195KSBjb25zdCBfR0xJQkNYWF9OT1RIUk9X CiAgICAgICB7Ci0jaWYgX19jcGx1c3BsdXMgPj0gMjAxNDAyTAotI2lmZGVmIF9HTElCQ1hYX0hB VkVfQlVJTFRJTl9JU19DT05TVEFOVF9FVkFMVUFURUQKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDE0 MDJMICYmIF9faGFzX2J1aWx0aW4oX19idWlsdGluX2lzX2NvbnN0YW50X2V2YWx1YXRlZCkKIAlp ZiAoX19idWlsdGluX2lzX2NvbnN0YW50X2V2YWx1YXRlZCgpKQotI2Vsc2UKLQlpZiAoX19idWls dGluX2NvbnN0YW50X3AoX194ID49IF9feSkpCi0jZW5kaWYKIAkgIHJldHVybiBfX3ggPj0gX195 OwogI2VuZGlmCiAJcmV0dXJuIChfX1VJTlRQVFJfVFlQRV9fKV9feCA+PSAoX19VSU5UUFRSX1RZ UEVfXylfX3k7CkBAIC00NzAsMTIgKzQ1OCw4IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9W RVJTSU9OCiAgICAgICBfR0xJQkNYWDE0X0NPTlNURVhQUiBib29sCiAgICAgICBvcGVyYXRvcigp KF9UcCogX194LCBfVHAqIF9feSkgY29uc3QgX0dMSUJDWFhfTk9USFJPVwogICAgICAgewotI2lm IF9fY3BsdXNwbHVzID49IDIwMTQwMkwKLSNpZmRlZiBfR0xJQkNYWF9IQVZFX0JVSUxUSU5fSVNf Q09OU1RBTlRfRVZBTFVBVEVECisjaWYgX19jcGx1c3BsdXMgPj0gMjAxNDAyTCAmJiBfX2hhc19i dWlsdGluKF9fYnVpbHRpbl9pc19jb25zdGFudF9ldmFsdWF0ZWQpCiAJaWYgKF9fYnVpbHRpbl9p c19jb25zdGFudF9ldmFsdWF0ZWQoKSkKLSNlbHNlCi0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9w KF9feCA8PSBfX3kpKQotI2VuZGlmCiAJICByZXR1cm4gX194IDw9IF9feTsKICNlbmRpZgogCXJl dHVybiAoX19VSU5UUFRSX1RZUEVfXylfX3ggPD0gKF9fVUlOVFBUUl9UWVBFX18pX195OwpkaWZm IC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZGVidWcvaGVscGVyX2Z1bmN0aW9ucy5oIGIv bGlic3RkYysrLXYzL2luY2x1ZGUvZGVidWcvaGVscGVyX2Z1bmN0aW9ucy5oCmluZGV4IGMwMTQ0 Y2VkOTc5Li5jNTQzMTFhMjJkMSAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZGVi dWcvaGVscGVyX2Z1bmN0aW9ucy5oCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2RlYnVnL2hl bHBlcl9mdW5jdGlvbnMuaApAQCAtMTI1LDcgKzEyNSw3IEBAIG5hbWVzcGFjZSBfX2dudV9kZWJ1 ZwogICAgIF9fY2hlY2tfc2luZ3VsYXIoX0l0ZXJhdG9yIGNvbnN0JiBfX3gpCiAgICAgewogICAg ICAgcmV0dXJuCi0jaWZkZWYgX0dMSUJDWFhfSEFWRV9CVUlMVElOX0lTX0NPTlNUQU5UX0VWQUxV QVRFRAorI2lmIF9faGFzX2J1aWx0aW4oX19idWlsdGluX2lzX2NvbnN0YW50X2V2YWx1YXRlZCkK IAlfX2J1aWx0aW5faXNfY29uc3RhbnRfZXZhbHVhdGVkKCkgPyBmYWxzZSA6CiAjZW5kaWYKIAlf X2NoZWNrX3Npbmd1bGFyX2F1eChzdGQ6Ol9fYWRkcmVzc29mKF9feCkpOwpAQCAtMTM4LDcgKzEz OCw3IEBAIG5hbWVzcGFjZSBfX2dudV9kZWJ1ZwogICAgIF9fY2hlY2tfc2luZ3VsYXIoX1RwKiBj b25zdCYgX19wdHIpCiAgICAgewogICAgICAgcmV0dXJuCi0jaWZkZWYgX0dMSUJDWFhfSEFWRV9C VUlMVElOX0lTX0NPTlNUQU5UX0VWQUxVQVRFRAorI2lmIF9faGFzX2J1aWx0aW4oX19idWlsdGlu X2lzX2NvbnN0YW50X2V2YWx1YXRlZCkKIAlfX2J1aWx0aW5faXNfY29uc3RhbnRfZXZhbHVhdGVk KCkgPyBmYWxzZSA6CiAjZW5kaWYKIAlfX3B0ciA9PSAwOwpkaWZmIC0tZ2l0IGEvbGlic3RkYysr LXYzL2luY2x1ZGUvc3RkL2JpdCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9iaXQKaW5kZXgg YzVhYWU4YmFiMDMuLmVlOGUwMDFmZDQ0IDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVk ZS9zdGQvYml0CisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9iaXQKQEAgLTI2NSw3ICsy NjUsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgLy8gcmVwcmVz ZW50YWJsZSBhcyBhIHZhbHVlIG9mIF9UcCwgYW5kIHNvIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVk LgogICAgICAgLy8gV2FudCB0aGF0IHVuZGVmaW5lZCBiZWhhdmlvdXIgdG8gYmUgZGV0ZWN0ZWQg aW4gY29uc3RhbnQgZXhwcmVzc2lvbnMsCiAgICAgICAvLyBieSBVQlNhbiwgYW5kIGJ5IGRlYnVn IGFzc2VydGlvbnMuCi0jaWZkZWYgX0dMSUJDWFhfSEFWRV9CVUlMVElOX0lTX0NPTlNUQU5UX0VW QUxVQVRFRAorI2lmIF9faGFzX2J1aWx0aW4oX19idWlsdGluX2lzX2NvbnN0YW50X2V2YWx1YXRl ZCkKICAgICAgIGlmICghX19idWlsdGluX2lzX2NvbnN0YW50X2V2YWx1YXRlZCgpKQogCXsKIAkg IF9fZ2xpYmN4eF9hc3NlcnQoIF9fc2hpZnRfZXhwb25lbnQgIT0gX19pbnRfdHJhaXRzPF9UcD46 Ol9fZGlnaXRzICk7CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9zdGQvdHlwZV90 cmFpdHMgYi9saWJzdGRjKystdjMvaW5jbHVkZS9zdGQvdHlwZV90cmFpdHMKaW5kZXggZDkwNjhh MDZmMDguLjk1YTYwZTQwNmE4IDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9zdGQv dHlwZV90cmFpdHMKKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL3R5cGVfdHJhaXRzCkBA IC0zMzE2LDcgKzMzMTYsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0Zyb20sIHR5cGVuYW1lIF9U bz4KICAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgaXNfc2NvcGVkX2VudW1fdiA9IGlzX3Njb3Bl ZF9lbnVtPF9UcD46OnZhbHVlOwogI2VuZGlmIC8vIEMrKzIzCiAKLSNpZmRlZiBfR0xJQkNYWF9I QVZFX0JVSUxUSU5fSVNfQ09OU1RBTlRfRVZBTFVBVEVECisjaWYgX19oYXNfYnVpbHRpbihfX2J1 aWx0aW5faXNfY29uc3RhbnRfZXZhbHVhdGVkKQogCiAjZGVmaW5lIF9fY3BwX2xpYl9pc19jb25z dGFudF9ldmFsdWF0ZWQgMjAxODExTAogCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVk ZS9zdGQvdmVyc2lvbiBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC92ZXJzaW9uCmluZGV4IDI3 YmNkMzJjYjYwLi4zYmI1MGQzN2E3MiAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUv c3RkL3ZlcnNpb24KKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL3ZlcnNpb24KQEAgLTEx MSw3ICsxMTEsNyBAQAogI2VuZGlmCiAjZGVmaW5lIF9fY3BwX2xpYl9pc19pbnZvY2FibGUgMjAx NzAzCiAjZGVmaW5lIF9fY3BwX2xpYl9pc19zd2FwcGFibGUgMjAxNjAzCi0jaWZkZWYgX0dMSUJD WFhfSEFWRV9CVUlMVElOX0xBVU5ERVIKKyNpZiBfX2hhc19idWlsdGluKF9fYnVpbHRpbl9sYXVu ZGVyKQogIyBkZWZpbmUgX19jcHBfbGliX2xhdW5kZXIgMjAxNjA2CiAjZW5kaWYKICNkZWZpbmUg X19jcHBfbGliX2xvZ2ljYWxfdHJhaXRzIDIwMTUxMApAQCAtMTMwLDcgKzEzMCw3IEBACiAjZGVm aW5lIF9fY3BwX2xpYl9jaHJvbm8gMjAxNjExCiAjZGVmaW5lIF9fY3BwX2xpYl9jbGFtcCAyMDE2 MDMKICNpZiBfX2NwbHVzcGx1cyA9PSAyMDE3MDNMIC8vIE4uQi4gdXBkYXRlZCB2YWx1ZSBpbiBD KysyMAotIyBpZiBfR0xJQkNYWF9IQVZFX0JVSUxUSU5fSVNfQ09OU1RBTlRfRVZBTFVBVEVECisj IGlmIF9faGFzX2J1aWx0aW4oX19idWlsdGluX2lzX2NvbnN0YW50X2V2YWx1YXRlZCkKICMgIGRl ZmluZSBfX2NwcF9saWJfY29uc3RleHByX2NoYXJfdHJhaXRzIDIwMTYxMUwKICMgIGRlZmluZSBf X2NwcF9saWJfY29uc3RleHByX3N0cmluZyAyMDE2MTFMCiAjIGVuZGlmCkBAIC0xODgsNyArMTg4 LDcgQEAKICNlbmRpZgogI2RlZmluZSBfX2NwcF9saWJfZW5kaWFuIDIwMTkwN0wKICNkZWZpbmUg X19jcHBfbGliX2ludF9wb3cyIDIwMjAwMkwKLSNpZmRlZiBfR0xJQkNYWF9IQVZFX0JVSUxUSU5f SVNfQ09OU1RBTlRfRVZBTFVBVEVECisjaWZkZWYgX19oYXNfYnVpbHRpbihfX2J1aWx0aW5faXNf Y29uc3RhbnRfZXZhbHVhdGVkKQogIyBkZWZpbmUgX19jcHBfbGliX2lzX2NvbnN0YW50X2V2YWx1 YXRlZCAyMDE4MTFMCiAjZW5kaWYKICNkZWZpbmUgX19jcHBfbGliX2lzX25vdGhyb3dfY29udmVy dGlibGUgMjAxODA2TApkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2xpYnN1cGMrKy9uZXcgYi9s aWJzdGRjKystdjMvbGlic3VwYysrL25ldwppbmRleCAzMzQ5YjEzZmQxYi4uODc3NGIzMzNiOTAg MTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9saWJzdXBjKysvbmV3CisrKyBiL2xpYnN0ZGMrKy12 My9saWJzdXBjKysvbmV3CkBAIC0xODIsOCArMTgyLDcgQEAgaW5saW5lIHZvaWQgb3BlcmF0b3Ig ZGVsZXRlW10odm9pZCosIHZvaWQqKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyB9CiAvL0B9CiB9 IC8vIGV4dGVybiAiQysrIgogCi0jaWYgX19jcGx1c3BsdXMgPj0gMjAxNzAzTAotI2lmZGVmIF9H TElCQ1hYX0hBVkVfQlVJTFRJTl9MQVVOREVSCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxNzAzTCAm JiBfX2hhc19idWlsdGluKF9fYnVpbHRpbl9sYXVuZGVyKQogbmFtZXNwYWNlIHN0ZAogewogI2Rl ZmluZSBfX2NwcF9saWJfbGF1bmRlciAyMDE2MDYKQEAgLTIwNiw3ICsyMDUsNiBAQCBuYW1lc3Bh Y2Ugc3RkCiAgIHZvaWQgbGF1bmRlcih2b2xhdGlsZSB2b2lkKikgPSBkZWxldGU7CiAgIHZvaWQg bGF1bmRlcihjb25zdCB2b2xhdGlsZSB2b2lkKikgPSBkZWxldGU7CiB9Ci0jZW5kaWYgLy8gX0dM SUJDWFhfSEFWRV9CVUlMVElOX0xBVU5ERVIKICNlbmRpZiAvLyBDKysxNwogCiAjaWYgX19jcGx1 c3BsdXMgPiAyMDE3MDNMCg== --000000000000fc8fa105c583eb32--