From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-il1-x12c.google.com (mail-il1-x12c.google.com [IPv6:2607:f8b0:4864:20::12c]) by sourceware.org (Postfix) with ESMTPS id ACFDE3857C45 for ; Sat, 22 Aug 2020 19:09:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org ACFDE3857C45 Received: by mail-il1-x12c.google.com with SMTP id p18so4097502ilm.7 for ; Sat, 22 Aug 2020 12:09:29 -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=xqNCjSVLZgYYWerhTVOVJfJESv1WtDAEvIw5ZiMtCb0=; b=SDIbSx+qGzKBdCMohrANCG+yYJiQopNpuwlk41Jj2/2xuZ6awg8EXcW3/rPkiRRt89 SN6r1WSFn0d+2C33gfrNnNjEiTC/oIf16F1ytQHzWUrwUl6k2Cw8Kep+oX+wdIWzHP/6 2aig5YxBkW0yEQnarVvA432/0hhy4Ta6sOhYDpNdCY7wQ5R7N+sWVIm4o6xogzRBWrZu G/Fp6KYnTFDV8fY0DjCBBm16PSZmqpghXJNhelJklPiInQcJK1e6crNs2EtZbQF0+Q8q /UjUu2H7pAgMOvWE57OUgj/bAnJts1mPa2pRXNDPxFV9WhmG3z9NGYTA2lLCHe0ved3F TWXA== X-Gm-Message-State: AOAM5322pGwkn4mXWB2v7fSpGA91Bq1le/7cBc2CmH19DWLMmhlp/P3r KZsjuYLjZHHKarQNyhablZkFIlRSeJaW3O1EZao= X-Google-Smtp-Source: ABdhPJzL1xVtTmVnsDeId1XxFCBEo07XTcVXGK7Et8LxChf83yH83VZ6XuM62GFdjcvd6gMTT47pjkcoqmbT13vhMsU= X-Received: by 2002:a92:d386:: with SMTP id o6mr7280506ilo.292.1598123369063; Sat, 22 Aug 2020 12:09:29 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: "H.J. Lu" Date: Sat, 22 Aug 2020 12:08:53 -0700 Message-ID: Subject: [PATCH] x86: Only use general-purpose registers during CPUID check To: Uros Bizjak Cc: Hongtao Liu , GCC Patches , Kirill Yukhin Content-Type: multipart/mixed; boundary="000000000000b888ac05ad7c172e" X-Spam-Status: No, score=-9.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, 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: Sat, 22 Aug 2020 19:09:32 -0000 --000000000000b888ac05ad7c172e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Aug 22, 2020 at 10:11 AM Uros Bizjak wrote: > > On Sat, Aug 22, 2020 at 6:27 PM H.J. Lu wrote: > > > > On Fri, Aug 21, 2020 at 9:45 AM H.J. Lu wrote: > > > > > > On Fri, Aug 21, 2020 at 9:35 AM H.J. Lu wrote: > > > > > > > > On Fri, Aug 21, 2020 at 9:29 AM Hongtao Liu wr= ote: > > > > > > > > > > On Fri, Aug 21, 2020 at 11:50 PM Uros Bizjak = wrote: > > > > > > > > > > > > On Fri, Aug 21, 2020 at 5:41 PM Hongtao Liu wrote: > > > > > > > > > > > > > > On Fri, Aug 21, 2020 at 9:15 PM Uros Bizjak wrote: > > > > > > > > > > > > > > > > > > > gcc/ > > > > > > > > > > > PR target/88808 > > > > > > > > > > > * config/i386/i386.c (ix86_preferred_reload_c= lass): Allow > > > > > > > > > > > QImode data go into mask registers. > > > > > > > > > > > * config/i386/i386.md: (*movhi_internal): Adj= ust constraints > > > > > > > > > > > for mask registers. > > > > > > > > > > > (*movqi_internal): Ditto. > > > > > > > > > > > (*anddi_1): Support mask register operations > > > > > > > > > > > (*and_1): Ditto. > > > > > > > > > > > (*andqi_1): Ditto. > > > > > > > > > > > (*andn_1): Ditto. > > > > > > > > > > > (*_1): Ditto. > > > > > > > > > > > (*qi_1): Ditto. > > > > > > > > > > > (*one_cmpl2_1): Ditto. > > > > > > > > > > > (*one_cmplsi2_1_zext): Ditto. > > > > > > > > > > > (*one_cmplqi2_1): Ditto. > > > > > > > > > > > (define_peephole2): Move constant 0/-1 direct= ly into mask > > > > > > > > > > > registers. > > > > > > > > > > > * config/i386/predicates.md (mask_reg_operand= ): New predicate. > > > > > > > > > > > * config/i386/sse.md (define_split): Add post= -reload splitters > > > > > > > > > > > that would convert "generic" patterns to mask= patterns. > > > > > > > > > > > (*knotsi_1_zext): New define_insn. > > > > > > > > > > > > > > > > > > > > > > gcc/testsuite/ > > > > > > > > > > > * gcc.target/i386/bitwise_mask_op-1.c: New te= st. > > > > > > > > > > > * gcc.target/i386/bitwise_mask_op-2.c: New te= st. > > > > > > > > > > > * gcc.target/i386/bitwise_mask_op-3.c: New te= st. > > > > > > > > > > > * gcc.target/i386/avx512bw-pr88465.c: New tes= tcase. > > > > > > > > > > > * gcc.target/i386/avx512bw-kunpckwd-1.c: Adju= st testcase. > > > > > > > > > > > * gcc.target/i386/avx512bw-kunpckwd-3.c: Ditt= o. > > > > > > > > > > > * gcc.target/i386/avx512dq-kmovb-5.c: Ditto. > > > > > > > > > > > * gcc.target/i386/avx512f-kmovw-5.c: Ditto. > > > > > > > > > > > > > > > > > > > > A little nit, please put new splitters after the instru= ction pattern. > > > > > > > > > > > > > > > > > > > > OK for the whole patch set with the above change, > > > > > > > > > > > > > > > > > > > > > > > > > > > > Yes, thanks for the review. > > > > > > > > > > > > > > > > Please note that your patch introduces several testsuite fa= ils with -m32: > > > > > > > > > > > > > > > > gcc -O2 -mavx512bitalg -mavx512bw -m32 -g avx512bitalg-vpop= cntb-1.c > > > > > > > > > > > > > > > > > > > > > > I can't reproduce this failure. > > > > > > > > > > > > Because you are running it on AVX512 enabled target. > > > > > > > > > > > > > > Program received signal SIGILL, Illegal instruction. > > > > > > > > 0x080490ac in __get_cpuid_count (__edx=3D, > > > > > > > > __ecx=3D, __ebx=3D, _= _eax=3D > > > > > > > pointer>, > > > > > > > > __subleaf=3D0, __leaf=3D7) at /hdd/uros/gcc-build-fast/= gcc/include/cpuid.h:316 > > > > > > > > 316 __cpuid_count (__leaf, __subleaf, *__eax, *__ebx,= *__ecx, *__edx); > > > > > > > > > > > > > > > > 0x080490a3 <+51>: cpuid > > > > > > > > 0x080490a5 <+53>: mov $0x1,%eax > > > > > > > > 0x080490aa <+58>: mov %ecx,%esi > > > > > > > > =3D> 0x080490ac <+60>: kmovd %ebx,%k0 > > > > > > > > 0x080490b0 <+64>: mov %edi,%ecx > > > > > > > > 0x080490b2 <+66>: mov %edi,%ebx > > > > > > > > > > > > > > > > kmov insn is generated for __cpuid_count function, where th= e binary > > > > > > > > determines, if the new instructions are supported. The bina= ry will > > > > > > > > crash in the detection code if the processor lacks AVX512 > > > > > > > > instructions. > > > > > > > > > > > > > > > > > > > > > > IMHO, the testcase shouldn't be run on processors without AVX= 512BW. > > > > > > > > > > > > No, it could run, because it checks for AVX512BW at runtime. > > > > > > > > > > > > > > > > Got it. > > > > > > > > > > > > Because in avx512bitalg-vpopcntb-1.c, there's /* > > > > > > > dg-require-effective-target avx512bw } */. > > > > > > > > > > > > This is to check the toolchain for support. > > > > > > > > > > > > > what's the version of your assembler=EF=BC=9F > > > > > > > > > > > > GNU assembler version 2.34-4.fc32 > > > > > > > > > > > > > > > > If assembler supports avx512bw, but processor not, the test would= pass > > > > > condition `dg-require-effective-target avx512bw` and be runned. > > > > > then crashed for illegal instruction. > > > > > > > > > > > Please add something like > > > > > > X86_TUNE_INTER_UNIT_MOVES_FROM_MASK/X86_TUNE_INTER_UNIT_MOVES_T= O_MASK > > > > > > and enable them only for m_CORE_AVX512 (or perhaps m_INTEL). > > > > > > > > > > > > Handle this in inline_secondary_memory_needed to reject direct = moves > > > > > > for all other targets. This should disable direct moves for gen= eric > > > > > > targets. > > > > > > > > > > > > > > > > Yes, I'll add it. > > > > > > > > > > > > > > > > > (define_insn "*movsi_internal" > > > > [(set (match_operand:SI 0 "nonimmediate_operand" > > > > "=3Dr,m ,*y,*y,?*y,?m,?r,?*y,*v,*v,*v,m ,?r,?*v,*k,*k ,*rm,*k") > > > > (match_operand:SI 1 "general_operand" > > > > "g ,re,C ,*y,m ,*y,*y,r ,C ,*v,m ,*v,*v,r ,*r,*km,*k ,CBC"))= ] > > > > "!(MEM_P (operands[0]) && MEM_P (operands[1]))" > > > > ... > > > > [(set (attr "isa") > > > > (cond [(eq_attr "alternative" "12,13") > > > > (const_string "sse2") > > > > ] > > > > (const_string "*"))) > > > > > > > > is wrong. mask register alternatives should be marked with avx512= f. > > > > Please fix it. Other integer move patterns may have the same issu= e. > > > > Once these are fixed, > > > > > > > > diff --git a/gcc/testsuite/gcc.target/i386/avx512-check.h > > > > b/gcc/testsuite/gcc.target/i386/avx512-check.h > > > > index 0a377dba1d5..576e9b390c6 100644 > > > > --- a/gcc/testsuite/gcc.target/i386/avx512-check.h > > > > +++ b/gcc/testsuite/gcc.target/i386/avx512-check.h > > > > @@ -25,6 +25,7 @@ do_test (void) > > > > } > > > > #endif > > > > > > > > +__attribute__((target ("no-avx512f"))) > > > > static int > > > > check_osxsave (void) > > > > { > > > > @@ -34,6 +35,7 @@ check_osxsave (void) > > > > return (ecx & bit_OSXSAVE) !=3D 0; > > > > } > > > > > > > > +__attribute__((target ("no-avx512f"))) > > > > int > > > > main () > > > > { > > > > > > > > should work. > > > > > > > > > > Like this. You need to check all integer patterns with mskmov and ms= klog. > > > > Compile CPUID check with "-mno-sse -mfpmath=3D387" to disable SSE, AVX = and > > AVX512 during CPUID check to avoid vector and mask register operations. > > -mgeneral-regs-only ? > Here is a patch to add target("general-regs-only") function attribute and use it for CPUID check. OK for master if there are no regressions? Thanks. --=20 H.J. --000000000000b888ac05ad7c172e Content-Type: text/x-patch; charset="US-ASCII"; name="0001-x86-Only-use-general-purpose-registers-during-CPUID-.patch" Content-Disposition: attachment; filename="0001-x86-Only-use-general-purpose-registers-during-CPUID-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ke61batc0 RnJvbSBmZGEyMDEyZDdiMjEwMGVhYmVjNDYxMDU5NWMxMTNmYTVmYzgzNjM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhqbC50b29sc0BnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjEgQXVnIDIwMjAgMDk6NDI6NDkgLTA3MDAKU3ViamVjdDogW1BBVENIXSB4ODY6IE9u bHkgdXNlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgZHVyaW5nIENQVUlEIGNoZWNrCgpDb21w aWxlIENQVUlEIGNoZWNrIHdpdGggLW1nZW5lcmFsLXJlZ3Mtb25seSBvciAtbW5vLXNzZSAtbWZw bWF0aD0zODcKdGFyZ2V0IGF0dHJpYnV0ZSB0byBvbmx5IHVzZSBnZW5lcmFsLXB1cnBvc2UgcmVn aXN0ZXJzLgoKTm90ZTogLW1uby1zc2UgLW1mcG1hdGg9Mzg3IHRhcmdldCBhdHRyaWJ1dGUgaXMg dXNlZCBmb3IgR0NDcyBvbGRlciB0aGFuCkdDQyAxMS4KCmdjYy8KCglQUiB0YXJnZXQvOTY3NDQK CSogY29tbW9uL2NvbmZpZy9pMzg2L2kzODYtY29tbW9uLmMgKGl4ODZfaGFuZGxlX29wdGlvbik6 IFNldAoJeF9peDg2X2ZwbWF0aCB0byBGUE1BVEhfMzg3IGZvciAtbWdlbmVyYWwtcmVncy1vbmx5 LgoJKiBjb25maWcvaTM4Ni9jcHVpZC5oOiBBZGQgI3ByYWdtYSBHQ0MgdGFyZ2V0KCJnZW5lcmFs LXJlZ3Mtb25seSIpCglvciAjcHJhZ21hIEdDQyB0YXJnZXQoIm5vLXNzZSxmcG1hdGg9Mzg3Iikg dG8gb25seSB1c2UKCWdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuCgkqIGNvbmZpZy9pMzg2L2kz ODYtb3B0aW9ucy5jIChJWDg2X0FUVFJfSVg4Nl9ZRVMpOiBOZXcuCgkoSVg4Nl9BVFRSX0lYODZf Tk8pOiBMaWtld2lzZS4KCShpeDg2X29wdF90eXBlKTogQWRkIGl4ODZfb3B0X2l4ODZfeWVzIGFu ZCBpeDg2X29wdF9peDg2X25vLgoJKGl4ODZfdmFsaWRfdGFyZ2V0X2F0dHJpYnV0ZV9pbm5lcl9w KTogSGFuZGxlIGdlbmVyYWwtcmVncy1vbmx5LAoJaXg4Nl9vcHRfaXg4Nl95ZXMgYW5kIGl4ODZf b3B0X2l4ODZfbm8uCgkqIGRvYy9leHRlbmQudGV4aTogRG9jdW1lbnQgdGFyZ2V0KCJnZW5lcmFs LXJlZ3Mtb25seSIpIGZ1bmN0aW9uCglhdHRyaWJ1dGUuCgpnY2MvdGVzdHN1aXRlLwoKCVBSIHRh cmdldC85Njc0NAoJKiBnY2MudGFyZ2V0L2kzODYvYWR4LWNoZWNrLmg6IEFkZAoJX19hdHRyaWJ1 dGVfXygoX190YXJnZXRfXygiZ2VuZXJhbC1yZWdzLW9ubHkiKSkpIHRvIG9ubHkgdXNlCglnZW5l cmFsLXB1cnBvc2UgcmVnaXN0ZXJzLgoJKiBnY2MudGFyZ2V0L2kzODYvYm1pLWNoZWNrLmg6IExp a2V3aXNlLgoJKiBnY2MudGFyZ2V0L2kzODYvYm1pMi1jaGVjay5oOiBMaWtld2lzZS4KCSogZ2Nj LnRhcmdldC9pMzg2L3ByNzc3NTYuYzogTGlrZXdpc2UuCgkqIGdjYy50YXJnZXQvaTM4Ni9wcjk1 OTczLmM6IExpa2V3aXNlLgoJKiBnY2MudGFyZ2V0L2kzODYvcnRtLWNoZWNrLmg6IExpa2V3aXNl LgoJKiBnY2MudGFyZ2V0L2kzODYvc2hhLWNoZWNrLmg6IExpa2V3aXNlLgoJKiBnY2MudGFyZ2V0 L2kzODYvYXZ4Mi1jaGVjay5oOiBBZGQKCSNwcmFnbWEgR0NDIHRhcmdldCgiZ2VuZXJhbC1yZWdz LW9ubHkiKSB0byBvbmx5IHVzZQoJZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4KCSogZ2NjLnRh cmdldC9pMzg2L2F2eDUxMi1jaGVjay5oOiBMaWtld2lzZS4KLS0tCiBnY2MvY29tbW9uL2NvbmZp Zy9pMzg2L2kzODYtY29tbW9uLmMgICAgICAgICB8ICAxICsKIGdjYy9jb25maWcvaTM4Ni9jcHVp ZC5oICAgICAgICAgICAgICAgICAgICAgIHwgIDkgKysrKysKIGdjYy9jb25maWcvaTM4Ni9pMzg2 LW9wdGlvbnMuYyAgICAgICAgICAgICAgIHwgMzcgKysrKysrKysrKysrKysrKysrKysKIGdjYy9k b2MvZXh0ZW5kLnRleGkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKysrCiBnY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hZHgtY2hlY2suaCAgICB8ICAyICstCiBnY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9hdngyLWNoZWNrLmggICB8ICA1ICsrKwogZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEyLWNoZWNrLmggfCAgNSArKysKIGdjYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L2JtaS1jaGVjay5oICAgIHwgIDEgKwogZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvYm1pMi1jaGVjay5oICAgfCAgMSArCiBnY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9wcjc3NzU2LmMgICAgICB8ICAxICsKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9p Mzg2L3ByOTU5NzMuYyAgICAgIHwgIDEgKwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv cnRtLWNoZWNrLmggICAgfCAgMSArCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9zaGEt Y2hlY2suaCAgICB8ICAxICsKIDEzIGZpbGVzIGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKyksIDEg ZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9nY2MvY29tbW9uL2NvbmZpZy9pMzg2L2kzODYtY29t bW9uLmMgYi9nY2MvY29tbW9uL2NvbmZpZy9pMzg2L2kzODYtY29tbW9uLmMKaW5kZXggYmIxNDMw NWFkN2IuLjc3YTY3ZDBkZDIwIDEwMDY0NAotLS0gYS9nY2MvY29tbW9uL2NvbmZpZy9pMzg2L2kz ODYtY29tbW9uLmMKKysrIGIvZ2NjL2NvbW1vbi9jb25maWcvaTM4Ni9pMzg2LWNvbW1vbi5jCkBA IC0zMzMsNiArMzMzLDcgQEAgaXg4Nl9oYW5kbGVfb3B0aW9uIChzdHJ1Y3QgZ2NjX29wdGlvbnMg Km9wdHMsCiAJICAgIHw9IE9QVElPTl9NQVNLX0lTQTJfR0VORVJBTF9SRUdTX09OTFlfVU5TRVQ7 CiAKIAkgIG9wdHMtPnhfdGFyZ2V0X2ZsYWdzICY9IH5NQVNLXzgwMzg3OworCSAgb3B0cy0+eF9p eDg2X2ZwbWF0aCA9IEZQTUFUSF8zODc7CiAJfQogICAgICAgZWxzZQogCWdjY191bnJlYWNoYWJs ZSAoKTsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9jcHVpZC5oIGIvZ2NjL2NvbmZpZy9p Mzg2L2NwdWlkLmgKaW5kZXggYmNhNjFkNjIwZGIuLmQzYmNmNGFlMzEzIDEwMDY0NAotLS0gYS9n Y2MvY29uZmlnL2kzODYvY3B1aWQuaAorKysgYi9nY2MvY29uZmlnL2kzODYvY3B1aWQuaApAQCAt MjQsNiArMjQsMTMgQEAKICNpZm5kZWYgX0NQVUlEX0hfSU5DTFVERUQKICNkZWZpbmUgX0NQVUlE X0hfSU5DTFVERUQKIAorI3ByYWdtYSBHQ0MgcHVzaF9vcHRpb25zCisjaWYgX19HTlVDX18gPj0g MTEKKyNwcmFnbWEgR0NDIHRhcmdldCgiZ2VuZXJhbC1yZWdzLW9ubHkiKQorI2Vsc2UKKyNwcmFn bWEgR0NDIHRhcmdldCgibm8tc3NlLGZwbWF0aD0zODciKQorI2VuZGlmCisKIC8qICVlYXggKi8K ICNkZWZpbmUgYml0X0FWWDUxMkJGMTYJKDEgPDwgNSkKIApAQCAtMzI0LDQgKzMzMSw2IEBAIF9f Y3B1aWRleCAoaW50IF9fY3B1aWRfaW5mb1s0XSwgaW50IF9fbGVhZiwgaW50IF9fc3VibGVhZikK IAkJIF9fY3B1aWRfaW5mb1syXSwgX19jcHVpZF9pbmZvWzNdKTsKIH0KIAorI3ByYWdtYSBHQ0Mg cG9wX29wdGlvbnMKKwogI2VuZGlmIC8qIF9DUFVJRF9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQg YS9nY2MvY29uZmlnL2kzODYvaTM4Ni1vcHRpb25zLmMgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni1v cHRpb25zLmMKaW5kZXggMjZkMWVhMThlZjEuLjI3Y2JhNjVjY2Y5IDEwMDY0NAotLS0gYS9nY2Mv Y29uZmlnL2kzODYvaTM4Ni1vcHRpb25zLmMKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYtb3B0 aW9ucy5jCkBAIC05MjIsMTIgKzkyMiwxOCBAQCBpeDg2X3ZhbGlkX3RhcmdldF9hdHRyaWJ1dGVf aW5uZXJfcCAodHJlZSBmbmRlY2wsIHRyZWUgYXJncywgY2hhciAqcF9zdHJpbmdzW10sCiAjZGVm aW5lIElYODZfQVRUUl9FTlVNKFMsTykgIHsgUywgc2l6ZW9mIChTKS0xLCBpeDg2X29wdF9lbnVt LCBPLCAwIH0KICNkZWZpbmUgSVg4Nl9BVFRSX1lFUyhTLE8sTSkgeyBTLCBzaXplb2YgKFMpLTEs IGl4ODZfb3B0X3llcywgTywgTSB9CiAjZGVmaW5lIElYODZfQVRUUl9OTyhTLE8sTSkgIHsgUywg c2l6ZW9mIChTKS0xLCBpeDg2X29wdF9ubywgIE8sIE0gfQorI2RlZmluZSBJWDg2X0FUVFJfSVg4 Nl9ZRVMoUyxPLE0pIFwKKyAgeyBTLCBzaXplb2YgKFMpLTEsIGl4ODZfb3B0X2l4ODZfeWVzLCBP LCBNIH0KKyNkZWZpbmUgSVg4Nl9BVFRSX0lYODZfTk8oUyxPLE0pIFwKKyAgeyBTLCBzaXplb2Yg KFMpLTEsIGl4ODZfb3B0X2l4ODZfbm8sICBPLCBNIH0KIAogICBlbnVtIGl4ODZfb3B0X3R5cGUK ICAgewogICAgIGl4ODZfb3B0X3Vua25vd24sCiAgICAgaXg4Nl9vcHRfeWVzLAogICAgIGl4ODZf b3B0X25vLAorICAgIGl4ODZfb3B0X2l4ODZfeWVzLAorICAgIGl4ODZfb3B0X2l4ODZfbm8sCiAg ICAgaXg4Nl9vcHRfc3RyLAogICAgIGl4ODZfb3B0X2VudW0sCiAgICAgaXg4Nl9vcHRfaXNhCkBA IC0xMDYyLDYgKzEwNjgsMTAgQEAgaXg4Nl92YWxpZF90YXJnZXRfYXR0cmlidXRlX2lubmVyX3Ag KHRyZWUgZm5kZWNsLCB0cmVlIGFyZ3MsIGNoYXIgKnBfc3RyaW5nc1tdLAogICAgIElYODZfQVRU Ul9ZRVMgKCJyZWNpcCIsCiAJCSAgIE9QVF9tcmVjaXAsCiAJCSAgIE1BU0tfUkVDSVApLAorCisg ICAgSVg4Nl9BVFRSX0lYODZfWUVTICgiZ2VuZXJhbC1yZWdzLW9ubHkiLAorCQkJT1BUX21nZW5l cmFsX3JlZ3Nfb25seSwKKwkJCU9QVElPTl9NQVNLX0dFTkVSQUxfUkVHU19PTkxZKSwKICAgfTsK IAogICBsb2NhdGlvbl90IGxvYwpAQCAtMTE3NSw2ICsxMTg1LDMzIEBAIGl4ODZfdmFsaWRfdGFy Z2V0X2F0dHJpYnV0ZV9pbm5lcl9wICh0cmVlIGZuZGVjbCwgdHJlZSBhcmdzLCBjaGFyICpwX3N0 cmluZ3NbXSwKIAkgICAgb3B0cy0+eF90YXJnZXRfZmxhZ3MgJj0gfm1hc2s7CiAJfQogCisgICAg ICBlbHNlIGlmICh0eXBlID09IGl4ODZfb3B0X2l4ODZfeWVzIHx8IHR5cGUgPT0gaXg4Nl9vcHRf aXg4Nl9ubykKKwl7CisJICBpZiAobWFzayA9PSBPUFRJT05fTUFTS19HRU5FUkFMX1JFR1NfT05M WSkKKwkgICAgeworCSAgICAgIGlmICh0eXBlICE9IGl4ODZfb3B0X2l4ODZfeWVzKQorCQlnY2Nf dW5yZWFjaGFibGUgKCk7CisKKwkgICAgICBvcHRzLT54X2l4ODZfdGFyZ2V0X2ZsYWdzIHw9IG1h c2s7CisKKwkgICAgICBzdHJ1Y3QgY2xfZGVjb2RlZF9vcHRpb24gZGVjb2RlZDsKKwkgICAgICBn ZW5lcmF0ZV9vcHRpb24gKG9wdCwgTlVMTCwgb3B0X3NldF9wLCBDTF9UQVJHRVQsCisJCQkgICAg ICAgJmRlY29kZWQpOworCSAgICAgIGl4ODZfaGFuZGxlX29wdGlvbiAob3B0cywgb3B0c19zZXQs ICZkZWNvZGVkLAorCQkJCSAgaW5wdXRfbG9jYXRpb24pOworCSAgICB9CisJICBlbHNlCisJICAg IHsKKwkgICAgICBpZiAodHlwZSA9PSBpeDg2X29wdF9peDg2X25vKQorCQlvcHRfc2V0X3AgPSAh b3B0X3NldF9wOworCisJICAgICAgaWYgKG9wdF9zZXRfcCkKKwkJb3B0cy0+eF9peDg2X3Rhcmdl dF9mbGFncyB8PSBtYXNrOworCSAgICAgIGVsc2UKKwkJb3B0cy0+eF9peDg2X3RhcmdldF9mbGFn cyAmPSB+bWFzazsKKwkgICAgfQorCX0KKwogICAgICAgZWxzZSBpZiAodHlwZSA9PSBpeDg2X29w dF9zdHIpCiAJewogCSAgaWYgKHBfc3RyaW5nc1tvcHRdKQpkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9l eHRlbmQudGV4aSBiL2djYy9kb2MvZXh0ZW5kLnRleGkKaW5kZXggZmQ3OTQ5NjFlMGEuLjJiYjli MmY3MmY1IDEwMDY0NAotLS0gYS9nY2MvZG9jL2V4dGVuZC50ZXhpCisrKyBiL2djYy9kb2MvZXh0 ZW5kLnRleGkKQEAgLTY2NTYsNiArNjY1NiwxMCBAQCBFbmFibGUvZGlzYWJsZSB0aGUgZ2VuZXJh dGlvbiBvZiBSQ1BTUywgUkNQUFMsIFJTUVJUU1MgYW5kIFJTUVJUUFMKIGluc3RydWN0aW9ucyBm b2xsb3dlZCBhbiBhZGRpdGlvbmFsIE5ld3Rvbi1SYXBoc29uIHN0ZXAgaW5zdGVhZCBvZgogZG9p bmcgYSBmbG9hdGluZy1wb2ludCBkaXZpc2lvbi4KIAorQGl0ZW0gZ2VuZXJhbC1yZWdzLW9ubHkK K0BjaW5kZXggQGNvZGV7dGFyZ2V0KCJnZW5lcmFsLXJlZ3Mtb25seSIpfSBmdW5jdGlvbiBhdHRy aWJ1dGUsIHg4NgorR2VuZXJhdGUgY29kZSB3aGljaCB1c2VzIG9ubHkgdGhlIGdlbmVyYWwgcmVn aXN0ZXJzLgorCiBAaXRlbSBhcmNoPUB2YXJ7QVJDSH0KIEBjaW5kZXggQGNvZGV7dGFyZ2V0KCJh cmNoPUB2YXJ7QVJDSH0iKX0gZnVuY3Rpb24gYXR0cmlidXRlLCB4ODYKIFNwZWNpZnkgdGhlIGFy Y2hpdGVjdHVyZSB0byBnZW5lcmF0ZSBjb2RlIGZvciBpbiBjb21waWxpbmcgdGhlIGZ1bmN0aW9u LgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYWR4LWNoZWNrLmgg Yi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hZHgtY2hlY2suaAppbmRleCBjZmVkMWEz ODQ4My4uNDBmM2I1MjNmMmIgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9p Mzg2L2FkeC1jaGVjay5oCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2FkeC1j aGVjay5oCkBAIC04LDYgKzgsNyBAQCBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fICgobm9pbmxp bmUpKSBkb190ZXN0ICh2b2lkKQogICBhZHhfdGVzdCAoKTsKIH0KIAorX19hdHRyaWJ1dGVfXygo X190YXJnZXRfXygiZ2VuZXJhbC1yZWdzLW9ubHkiKSkpCiBpbnQKIG1haW4gKCkKIHsKQEAgLTMx LDQgKzMyLDMgQEAgbWFpbiAoKQogI2VuZGlmCiAgIHJldHVybiAwOwogfQotCmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdngyLWNoZWNrLmggYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9hdngyLWNoZWNrLmgKaW5kZXggMjViZWQ1ZTBkYTYuLmRkMGY5 OWRiMGUyIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdngyLWNo ZWNrLmgKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4Mi1jaGVjay5oCkBA IC0xMCw2ICsxMCw5IEBAIHN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpIGRv X3Rlc3QgKHZvaWQpCiAgIGF2eDJfdGVzdCAoKTsKIH0KIAorI3ByYWdtYSBHQ0MgcHVzaF9vcHRp b25zCisjcHJhZ21hIEdDQyB0YXJnZXQoImdlbmVyYWwtcmVncy1vbmx5IikKKwogc3RhdGljIGlu dAogY2hlY2tfb3N4c2F2ZSAodm9pZCkKIHsKQEAgLTQyLDMgKzQ1LDUgQEAgbWFpbiAoKQogI2Vu ZGlmCiAgIHJldHVybiAwOwogfQorCisjcHJhZ21hIEdDQyBwb3Bfb3B0aW9ucwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEyLWNoZWNrLmggYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTItY2hlY2suaAppbmRleCAwYTM3N2RiYTFkNS4u OGFhMzM2MWRjNjMgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2 eDUxMi1jaGVjay5oCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMi1j aGVjay5oCkBAIC0yNSw2ICsyNSw5IEBAIGRvX3Rlc3QgKHZvaWQpCiB9CiAjZW5kaWYKIAorI3By YWdtYSBHQ0MgcHVzaF9vcHRpb25zCisjcHJhZ21hIEdDQyB0YXJnZXQoImdlbmVyYWwtcmVncy1v bmx5IikKKwogc3RhdGljIGludAogY2hlY2tfb3N4c2F2ZSAodm9pZCkKIHsKQEAgLTExMCwzICsx MTMsNSBAQCBtYWluICgpCiAjZW5kaWYKICAgcmV0dXJuIDA7CiB9CisKKyNwcmFnbWEgR0NDIHBv cF9vcHRpb25zCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9ibWkt Y2hlY2suaCBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2JtaS1jaGVjay5oCmluZGV4 IDE5NzNmM2I2NDY4Li5lZTRjYWQ5NmE4YiAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvYm1pLWNoZWNrLmgKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvYm1pLWNoZWNrLmgKQEAgLTEyLDYgKzEyLDcgQEAgZG9fdGVzdCAodm9pZCkKICAgYm1pX3Rl c3QgKCk7CiB9CiAKK19fYXR0cmlidXRlX18oKF9fdGFyZ2V0X18oImdlbmVyYWwtcmVncy1vbmx5 IikpKQogaW50CiBtYWluICgpCiB7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9ibWkyLWNoZWNrLmggYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9ibWky LWNoZWNrLmgKaW5kZXggYmE5MWVmOWI3ODAuLjc5NzdlMzUzNjQwIDEwMDY0NAotLS0gYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9ibWkyLWNoZWNrLmgKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvYm1pMi1jaGVjay5oCkBAIC0xMSw2ICsxMSw3IEBAIGRvX3Rlc3Qg KHZvaWQpCiAgIGJtaTJfdGVzdCAoKTsKIH0KIAorX19hdHRyaWJ1dGVfXygoX190YXJnZXRfXygi Z2VuZXJhbC1yZWdzLW9ubHkiKSkpCiBpbnQKIG1haW4gKCkKIHsKZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByNzc3NTYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L3ByNzc3NTYuYwppbmRleCAxZWVlN2NkNWEwMC4uYmZlNWQ4NjZiY2EgMTAwNjQ0 Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByNzc3NTYuYworKysgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjc3NzU2LmMKQEAgLTIsNiArMiw3IEBACiAKICNp bmNsdWRlICJjcHVpZC5oIgogCitfX2F0dHJpYnV0ZV9fKChfX3RhcmdldF9fKCJnZW5lcmFsLXJl Z3Mtb25seSIpKSkKIGludAogbWFpbiAoKQogewpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvcHI5NTk3My5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv cHI5NTk3My5jCmluZGV4IDA4YzdkYmE4ZjQ2Li45ZmM1MGFmZTQzZiAxMDA2NDQKLS0tIGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI5NTk3My5jCisrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L3ByOTU5NzMuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxjcHVp ZC5oPgogI2luY2x1ZGUgPGNwdWlkLmg+CiAKK19fYXR0cmlidXRlX18oKF9fdGFyZ2V0X18oImdl bmVyYWwtcmVncy1vbmx5IikpKQogaW50CiBtYWluICgpCiB7CmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9ydG0tY2hlY2suaCBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L3J0bS1jaGVjay5oCmluZGV4IGJkYjVhNmRjMGJmLi5iNzkzNmVkMDQ1NSAxMDA2 NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcnRtLWNoZWNrLmgKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcnRtLWNoZWNrLmgKQEAgLTgsNiArOCw3IEBA IHN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpIGRvX3Rlc3QgKHZvaWQpCiAg IHJ0bV90ZXN0ICgpOwogfQogCitfX2F0dHJpYnV0ZV9fKChfX3RhcmdldF9fKCJnZW5lcmFsLXJl Z3Mtb25seSIpKSkKIGludAogbWFpbiAoKQogewpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvc2hhLWNoZWNrLmggYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9zaGEtY2hlY2suaAppbmRleCA1YmM1YTU5YWI4MC4uMmJmOWU4MzE1ZDQgMTAwNjQ0Ci0tLSBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3NoYS1jaGVjay5oCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3NoYS1jaGVjay5oCkBAIC0xMCw2ICsxMCw3IEBAIGRvX3Rl c3QgKHZvaWQpCiAgIHNoYV90ZXN0ICgpOwogfQogCitfX2F0dHJpYnV0ZV9fKChfX3RhcmdldF9f KCJnZW5lcmFsLXJlZ3Mtb25seSIpKSkKIGludAogbWFpbiAoKQogewotLSAKMi4yNi4yCgo= --000000000000b888ac05ad7c172e--