From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 94257 invoked by alias); 11 Jul 2019 16:54:29 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 93814 invoked by uid 89); 11 Jul 2019 16:54:28 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-0.7 required=5.0 tests=AWL,BAYES_00,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,HK_RANDOM_ENVFROM,HK_RANDOM_FROM,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=no version=3.3.1 spammy=HX-Spam-Relays-External:209.85.221.68, H*RU:209.85.221.68 X-HELO: mail-wr1-f68.google.com Received: from mail-wr1-f68.google.com (HELO mail-wr1-f68.google.com) (209.85.221.68) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 11 Jul 2019 16:54:18 +0000 Received: by mail-wr1-f68.google.com with SMTP id j8so2979621wrj.9 for ; Thu, 11 Jul 2019 09:54:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=o0u4cx0Nv6uhohlotTr55TB9ngzq6rUQ04u1PpvM7Jg=; b=FYmcVOW8k9bjbh7H1lNpstwpG+YHPlpKIsFPpuVRCQqQdXLiMLCttEYA4nwnbdqw+5 iyonKl4Wa91lxDAaT+R1jt5jaEMaIshteJyx/5xXrSqm8WvndYTTuLZgpK8Hkmhg1+Nc fgIsDU+Oz5h3+Wq0AGb4Z9peC85iJwEdsEr64j6pCvuiwO61y1SqY+9V4aVh38hXDnoG Xed4nx8jbaRN/KcT1ahf7sirHEh8ohtD4sD5aT8dtwaK8uFEfDk0qOr85IhIzCAyMax0 8Yn7JTBETVMOi/fxY5k1AgtZSfCC7GqAQgGIcDijhE7FAoVEYzQ2+07AneR6k2rkh1Lg Lc2g== MIME-Version: 1.0 References: In-Reply-To: From: Sunil Pandey Date: Thu, 11 Jul 2019 17:04:00 -0000 Message-ID: Subject: Re: [PATCH] i386: Add AVX512 unaligned intrinsics To: Uros Bizjak Cc: "gcc-patches@gcc.gnu.org" , "H. J. Lu" Content-Type: multipart/mixed; boundary="000000000000e8421b058d6aa459" X-SW-Source: 2019-07/txt/msg00907.txt.bz2 --000000000000e8421b058d6aa459 Content-Type: text/plain; charset="UTF-8" Content-length: 4900 Fixed. --Sunil Pandey i386: Add AVX512 unaligned intrinsics __m512i _mm512_loadu_epi64( void * sa); void _mm512_storeu_epi64(void * d, __m512i a); __m512i _mm512_loadu_epi32( void * sa); void _mm512_storeu_epi32(void * d, __m512i a); void _mm256_storeu_epi64(void * d, __m256i a); void _mm_storeu_epi64(void * d, __m128i a); void _mm256_storeu_epi32(void * d, __m256i a); void _mm_storeu_epi32(void * d, __m128i a); Tested on x86-64. gcc/ PR target/90980 * config/i386/avx512fintrin.h (_mm512_loadu_epi64): New. (_mm512_storeu_epi64): Likewise. (_mm512_loadu_epi32): Likewise. (_mm512_storeu_epi32): Likewise. * config/i386/avx512vlintrin.h (_mm256_storeu_epi64): New. (_mm_storeu_epi64): Likewise. (_mm256_storeu_epi32): Likewise. (_mm_storeu_epi32): Likewise. gcc/testsuite/ PR target/90980 * gcc.target/i386/pr90980-1.c: New test. * gcc.target/i386/pr90980-2.c: Likewise. * gcc.target/i386/pr90980-3.c: Likewise. On Wed, Jul 10, 2019 at 12:20 PM Uros Bizjak wrote: > > On Wed, Jul 10, 2019 at 9:11 PM Sunil Pandey wrote: > > > > Thanks Uros. I incorporated suggested changes in attached patch. > > > > --Sunil Pandey > > > > i386: Add AVX512 unaligned intrinsics > > > > __m512i _mm512_loadu_epi32( void * sa); > > __m512i _mm512_loadu_epi64( void * sa); > > void _mm512_storeu_epi32(void * d, __m512i a); > > void _mm256_storeu_epi32(void * d, __m256i a); > > void _mm_storeu_epi32(void * d, __m128i a); > > void _mm512_storeu_epi64(void * d, __m512i a); > > void _mm256_storeu_epi64(void * d, __m256i a); > > void _mm_storeu_epi64(void * d, __m128i a); > > > > Tested on x86-64. > > > > gcc/ > > > > PR target/90980 > > * config/i386/avx512fintrin.h (_mm512_loadu_epi32): New. > > (_mm512_loadu_epi64): Likewise. > > (_mm512_storeu_epi32): Likewise. > > (_mm512_storeu_epi64): Likewise. > > * config/i386/avx512vlintrin.h (_mm_storeu_epi32): New. > > (_mm256_storeu_epi32): Likewise. > > (_mm_storeu_epi64): Likewise. > > (_mm256_storeu_epi64): Likewise. > > > > gcc/testsuite/ > > > > PR target/90980 > > * gcc.target/i386/pr90980-1.c: New test. > > * gcc.target/i386/pr90980-2.c: Likewise. > > * gcc.target/i386/pr90980-3.c: Likewise. > > Looks good, but please put new intrinsics nearby existing intrinsics, > so we will have e.g.: > > _mm512_loadu_epi32 > _mm512_mask_loadu_epi32 > _mm512_maskz_loadu_epi32 > > and in similar way for other loads and stores. > > Uros. > > > > > On Tue, Jul 9, 2019 at 11:39 PM Uros Bizjak wrote: > > > > > > On Tue, Jul 9, 2019 at 11:44 PM Sunil Pandey wrote: > > > > > > > > __m512i _mm512_loadu_epi32( void * sa); > > > > __m512i _mm512_loadu_epi64( void * sa); > > > > void _mm512_storeu_epi32(void * d, __m512i a); > > > > void _mm256_storeu_epi32(void * d, __m256i a); > > > > void _mm_storeu_epi32(void * d, __m128i a); > > > > void _mm512_storeu_epi64(void * d, __m512i a); > > > > void _mm256_storeu_epi64(void * d, __m256i a); > > > > void _mm_storeu_epi64(void * d, __m128i a); > > > > > > > > Tested on x86-64. > > > > > > > > OK for trunk? > > > > > > > > --Sunil Pandey > > > > > > > > > > > > gcc/ > > > > > > > > PR target/90980 > > > > * config/i386/avx512fintrin.h (__v16si_u): New data type > > > > (__v8di_u): Likewise > > > > (_mm512_loadu_epi32): New. > > > > (_mm512_loadu_epi64): Likewise. > > > > (_mm512_storeu_epi32): Likewise. > > > > (_mm512_storeu_epi64): Likewise. > > > > * config/i386/avx512vlintrin.h (_mm_storeu_epi32): New. > > > > (_mm256_storeu_epi32): Likewise. > > > > (_mm_storeu_epi64): Likewise. > > > > (_mm256_storeu_epi64): Likewise. > > > > > > > > gcc/testsuite/ > > > > > > > > PR target/90980 > > > > * gcc.target/i386/avx512f-vmovdqu32-3.c: New test. > > > > * gcc.target/i386/avx512f-vmovdqu64-3.c: Likewise. > > > > * gcc.target/i386/pr90980-1.c: Likewise. > > > > * gcc.target/i386/pr90980-2.c: Likewise. > > > > > > +/* Internal data types for implementing unaligned version of intrinsics. */ > > > +typedef int __v16si_u __attribute__ ((__vector_size__ (64), > > > + __aligned__ (1))); > > > +typedef long long __v8di_u __attribute__ ((__vector_size__ (64), > > > + __aligned__ (1))); > > > > > > You should define only one generic __m512i_u type, something like: > > > > > > typedef long long __m512i_u __attribute__ ((__vector_size__ (64), > > > __may_alias__, __aligned__ (1))); > > > > > > Please see avxintrin.h how __m256i_u is defined and used. > > > > > > Uros. --000000000000e8421b058d6aa459 Content-Type: application/octet-stream; name="0001-i386-Add-AVX512-unaligned-intrinsics.patch" Content-Disposition: attachment; filename="0001-i386-Add-AVX512-unaligned-intrinsics.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jxywd7mu0 Content-length: 10623 RnJvbSBiNWQwOGU0MjdlZDExNzhjOTE1OWEzYjIwYjkyMWE3NjYzMjA2YmRk IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBTdW5pbCBLIFBhbmRl eSA8c2twZ2twMUBnbWFpbC5jb20+CkRhdGU6IE1vbiwgOCBKdWwgMjAxOSAx MjozNjowMiAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIGkzODY6IEFkZCBBVlg1 MTIgdW5hbGlnbmVkIGludHJpbnNpY3MKCl9fbTUxMmkgX21tNTEyX2xvYWR1 X2VwaTY0KCB2b2lkICogc2EpOwp2b2lkIF9tbTUxMl9zdG9yZXVfZXBpNjQo dm9pZCAqIGQsIF9fbTUxMmkgYSk7Cl9fbTUxMmkgX21tNTEyX2xvYWR1X2Vw aTMyKCB2b2lkICogc2EpOwp2b2lkIF9tbTUxMl9zdG9yZXVfZXBpMzIodm9p ZCAqIGQsIF9fbTUxMmkgYSk7CnZvaWQgX21tMjU2X3N0b3JldV9lcGk2NCh2 b2lkICogZCwgX19tMjU2aSBhKTsKdm9pZCBfbW1fc3RvcmV1X2VwaTY0KHZv aWQgKiBkLCBfX20xMjhpIGEpOwp2b2lkIF9tbTI1Nl9zdG9yZXVfZXBpMzIo dm9pZCAqIGQsIF9fbTI1NmkgYSk7CnZvaWQgX21tX3N0b3JldV9lcGkzMih2 b2lkICogZCwgX19tMTI4aSBhKTsKClRlc3RlZCBvbiB4ODYtNjQuCgpnY2Mv CgogICAgICAgIFBSIHRhcmdldC85MDk4MAogICAgICAgICogY29uZmlnL2kz ODYvYXZ4NTEyZmludHJpbi5oIChfbW01MTJfbG9hZHVfZXBpNjQpOiBOZXcu CiAgICAgICAgKF9tbTUxMl9zdG9yZXVfZXBpNjQpOiBMaWtld2lzZS4KICAg ICAgICAoX21tNTEyX2xvYWR1X2VwaTMyKTogTGlrZXdpc2UuCiAgICAgICAg KF9tbTUxMl9zdG9yZXVfZXBpMzIpOiBMaWtld2lzZS4KICAgICAgICAqIGNv bmZpZy9pMzg2L2F2eDUxMnZsaW50cmluLmggKF9tbTI1Nl9zdG9yZXVfZXBp NjQpOiBOZXcuCiAgICAgICAgKF9tbV9zdG9yZXVfZXBpNjQpOiBMaWtld2lz ZS4KICAgICAgICAoX21tMjU2X3N0b3JldV9lcGkzMik6IExpa2V3aXNlLgog ICAgICAgIChfbW1fc3RvcmV1X2VwaTMyKTogTGlrZXdpc2UuCgpnY2MvdGVz dHN1aXRlLwoKICAgICAgICBQUiB0YXJnZXQvOTA5ODAKICAgICAgICAqIGdj Yy50YXJnZXQvaTM4Ni9wcjkwOTgwLTEuYzogTmV3IHRlc3QuCiAgICAgICAg KiBnY2MudGFyZ2V0L2kzODYvcHI5MDk4MC0yLmM6IExpa2V3aXNlLgogICAg ICAgICogZ2NjLnRhcmdldC9pMzg2L3ByOTA5ODAtMy5jOiBMaWtld2lzZS4K LS0tCiBnY2MvY29uZmlnL2kzODYvYXZ4NTEyZmludHJpbi5oICAgICAgICAg ICB8IDI4ICsrKysrKysrKysrKysrKysrKysrKysrCiBnY2MvY29uZmlnL2kz ODYvYXZ4NTEydmxpbnRyaW4uaCAgICAgICAgICB8IDI4ICsrKysrKysrKysr KysrKysrKysrKysrCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9w cjkwOTgwLTEuYyB8IDE3ICsrKysrKysrKysrKysrCiBnY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9wcjkwOTgwLTIuYyB8IDE3ICsrKysrKysrKysr KysrCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjkwOTgwLTMu YyB8IDIwICsrKysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMTEw IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9wcjkwOTgwLTEuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByOTA5ODAt Mi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvcHI5MDk4MC0zLmMKCmRpZmYgLS1naXQgYS9nY2MvY29uZmln L2kzODYvYXZ4NTEyZmludHJpbi5oIGIvZ2NjL2NvbmZpZy9pMzg2L2F2eDUx MmZpbnRyaW4uaAppbmRleCBlMzVlZWRiOTI2OC4uNDU0ZmQzZDI0N2QgMTAw NjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9hdng1MTJmaW50cmluLmgKKysr IGIvZ2NjL2NvbmZpZy9pMzg2L2F2eDUxMmZpbnRyaW4uaApAQCAtNjM1MCw2 ICs2MzUwLDEzIEBAIF9tbV9tYXNrX3N0b3JlX3NkIChkb3VibGUgKl9fUCwg X19tbWFzazggX19VLCBfX20xMjhkIF9fQSkKICAgX19idWlsdGluX2lhMzJf c3RvcmVzZF9tYXNrIChfX1AsIChfX3YyZGYpIF9fQSwgKF9fbW1hc2s4KSBf X1UpOwogfQogCitleHRlcm4gX19pbmxpbmUgX19tNTEyaQorX19hdHRyaWJ1 dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQorX21tNTEyX2xvYWR1X2VwaTY0ICh2b2lkIGNvbnN0 ICpfX1ApCit7CisgIHJldHVybiAqKF9fbTUxMmlfdSAqKSBfX1A7Cit9CisK IGV4dGVybiBfX2lubGluZSBfX201MTJpCiBfX2F0dHJpYnV0ZV9fICgoX19n bnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpCiBfbW01MTJfbWFza19sb2FkdV9lcGk2NCAoX19tNTEyaSBfX1csIF9f bW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQpAQCAtNjM2OSw2ICs2Mzc2 LDEzIEBAIF9tbTUxMl9tYXNrel9sb2FkdV9lcGk2NCAoX19tbWFzazggX19V LCB2b2lkIGNvbnN0ICpfX1ApCiAJCQkJCQkgICAgIChfX21tYXNrOCkgX19V KTsKIH0KIAorZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18g KChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkKK19tbTUxMl9zdG9yZXVfZXBpNjQgKHZvaWQgKl9fUCwgX19t NTEyaSBfX0EpCit7CisgICooX19tNTEyaV91ICopIF9fUCA9IChfX201MTJp X3UpIF9fQTsKK30KKwogZXh0ZXJuIF9faW5saW5lIHZvaWQKIF9fYXR0cmli dXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9f YXJ0aWZpY2lhbF9fKSkKIF9tbTUxMl9tYXNrX3N0b3JldV9lcGk2NCAodm9p ZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQpAQCAtNjM4NCw2 ICs2Mzk4LDEzIEBAIF9tbTUxMl9sb2FkdV9zaTUxMiAodm9pZCBjb25zdCAq X19QKQogICByZXR1cm4gKihfX201MTJpX3UgKilfX1A7CiB9CiAKK2V4dGVy biBfX2lubGluZSBfX201MTJpCitfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5s aW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitf bW01MTJfbG9hZHVfZXBpMzIgKHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0 dXJuICooX19tNTEyaV91ICopIF9fUDsKK30KKwogZXh0ZXJuIF9faW5saW5l IF9fbTUxMmkKIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19h bHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIF9tbTUxMl9tYXNr X2xvYWR1X2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgdm9p ZCBjb25zdCAqX19QKQpAQCAtNjQxMCw2ICs2NDMxLDEzIEBAIF9tbTUxMl9z dG9yZXVfc2k1MTIgKHZvaWQgKl9fUCwgX19tNTEyaSBfX0EpCiAgICooX19t NTEyaV91ICopX19QID0gX19BOwogfQogCitleHRlcm4gX19pbmxpbmUgdm9p ZAorX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX21tNTEyX3N0b3JldV9lcGkz MiAodm9pZCAqX19QLCBfX201MTJpIF9fQSkKK3sKKyAgKihfX201MTJpX3Ug KikgX19QID0gKF9fbTUxMmlfdSkgX19BOworfQorCiBleHRlcm4gX19pbmxp bmUgdm9pZAogX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fs d2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogX21tNTEyX21hc2tf c3RvcmV1X2VwaTMyICh2b2lkICpfX1AsIF9fbW1hc2sxNiBfX1UsIF9fbTUx MmkgX19BKQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2F2eDUxMnZs aW50cmluLmggYi9nY2MvY29uZmlnL2kzODYvYXZ4NTEydmxpbnRyaW4uaApp bmRleCAzZWFmODE3Zjg5OC4uYmQ4NzQ2ZGRjOTQgMTAwNjQ0Ci0tLSBhL2dj Yy9jb25maWcvaTM4Ni9hdng1MTJ2bGludHJpbi5oCisrKyBiL2djYy9jb25m aWcvaTM4Ni9hdng1MTJ2bGludHJpbi5oCkBAIC03NTUsNiArNzU1LDEzIEBA IF9tbV9tYXNrel9sb2FkdV9lcGk2NCAoX19tbWFzazggX19VLCB2b2lkIGNv bnN0ICpfX1ApCiAJCQkJCQkgICAgIChfX21tYXNrOCkgX19VKTsKIH0KIAor ZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChfX2dudV9p bmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK K19tbTI1Nl9zdG9yZXVfZXBpNjQgKHZvaWQgKl9fUCwgX19tMjU2aSBfX0Ep Cit7CisgICooX19tMjU2aV91ICopIF9fUCA9IChfX20yNTZpX3UpIF9fQTsK K30KKwogZXh0ZXJuIF9faW5saW5lIHZvaWQKIF9fYXR0cmlidXRlX18gKChf X2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKIF9tbTI1Nl9tYXNrX3N0b3JldV9lcGk2NCAodm9pZCAqX19QLCBf X21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKQpAQCAtNzY0LDYgKzc3MSwxMyBA QCBfbW0yNTZfbWFza19zdG9yZXVfZXBpNjQgKHZvaWQgKl9fUCwgX19tbWFz azggX19VLCBfX20yNTZpIF9fQSkKIAkJCQkgICAgIChfX21tYXNrOCkgX19V KTsKIH0KIAorZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18g KChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkKK19tbV9zdG9yZXVfZXBpNjQgKHZvaWQgKl9fUCwgX19tMTI4 aSBfX0EpCit7CisgICooX19tMTI4aV91ICopIF9fUCA9IChfX20xMjhpX3Up IF9fQTsKK30KKwogZXh0ZXJuIF9faW5saW5lIHZvaWQKIF9fYXR0cmlidXRl X18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0 aWZpY2lhbF9fKSkKIF9tbV9tYXNrX3N0b3JldV9lcGk2NCAodm9pZCAqX19Q LCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQpAQCAtODExLDYgKzgyNSwx MyBAQCBfbW1fbWFza3pfbG9hZHVfZXBpMzIgKF9fbW1hc2s4IF9fVSwgdm9p ZCBjb25zdCAqX19QKQogCQkJCQkJICAgICAoX19tbWFzazgpIF9fVSk7CiB9 CiAKK2V4dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJpYnV0ZV9fICgoX19n bnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpCitfbW0yNTZfc3RvcmV1X2VwaTMyICh2b2lkICpfX1AsIF9fbTI1Nmkg X19BKQoreworICAqKF9fbTI1NmlfdSAqKSBfX1AgPSAoX19tMjU2aV91KSBf X0E7Cit9CisKIGV4dGVybiBfX2lubGluZSB2b2lkCiBfX2F0dHJpYnV0ZV9f ICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCiBfbW0yNTZfbWFza19zdG9yZXVfZXBpMzIgKHZvaWQgKl9f UCwgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkKQEAgLTgyMCw2ICs4NDEs MTMgQEAgX21tMjU2X21hc2tfc3RvcmV1X2VwaTMyICh2b2lkICpfX1AsIF9f bW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpCiAJCQkJICAgICAoX19tbWFzazgp IF9fVSk7CiB9CiAKK2V4dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJpYnV0 ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCitfbW1fc3RvcmV1X2VwaTMyICh2b2lkICpfX1AsIF9f bTEyOGkgX19BKQoreworICAqKF9fbTEyOGlfdSAqKSBfX1AgPSAoX19tMTI4 aV91KSBfX0E7Cit9CisKIGV4dGVybiBfX2lubGluZSB2b2lkCiBfX2F0dHJp YnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCiBfbW1fbWFza19zdG9yZXVfZXBpMzIgKHZvaWQg Kl9fUCwgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByOTA5ODAtMS5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI5MDk4MC0xLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjcyYTMwZGM4 ZGEyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvcHI5MDk4MC0xLmMKQEAgLTAsMCArMSwxNyBAQAorLyogeyBk Zy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1hcmNoPXNr eWxha2UtYXZ4NTEyIC1PMiIgfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLXRpbWVzICIoPzp2bW92dXBzfHZtb3ZkcXUpXFsgXFx0XF0r XFteXHtcblxdKiV4bW1cWzAtOVxdK1xbXlxuXF0qXFwpKD86XG58XFsgXFx0 XF0rIykiIDIgfSB9ICovCisKKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKwor aW50ICphOworbG9uZyBsb25nICpiOwordm9sYXRpbGUgX19tMTI4aSB4eDsK K3ZvbGF0aWxlIF9fbTEyOGkgeHgxOworCit2b2lkIGV4dGVybgorYXZ4NTEy dmxfdGVzdCAodm9pZCkKK3sKKyAgX21tX3N0b3JldV9lcGkzMiAoYSwgeHgp OworICBfbW1fc3RvcmV1X2VwaTY0IChiLCB4eDEpOworfQpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI5MDk4MC0yLmMg Yi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjkwOTgwLTIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjE5ODBl NjUxNDAKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9wcjkwOTgwLTIuYwpAQCAtMCwwICsxLDE3IEBACisvKiB7 IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItbWFyY2g9 c2t5bGFrZS1hdng1MTIgLU8yIiB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMgInZtb3ZkcXVcWzAtOVxdKlxbIFxcdFxdK1xb Xlx7XG5cXSoleW1tXFswLTlcXStcW15cblxdKlxcKSg/OlxufFxbIFxcdFxd KyMpIiAyIH0gfSAqLworCisjaW5jbHVkZSA8aW1taW50cmluLmg+CisKK2lu dCAqYTsKK2xvbmcgbG9uZyAqYjsKK3ZvbGF0aWxlIF9fbTI1NmkgeXk7Cit2 b2xhdGlsZSBfX20yNTZpIHl5MTsKKwordm9pZCBleHRlcm4KK2F2eDUxMnZs X3Rlc3QgKHZvaWQpCit7CisgIF9tbTI1Nl9zdG9yZXVfZXBpMzIgKGEsIHl5 KTsKKyAgX21tMjU2X3N0b3JldV9lcGk2NCAoYiwgeXkxKTsKK30KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByOTA5ODAt My5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI5MDk4MC0z LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ4 MzllZTAxMWFhCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvcHI5MDk4MC0zLmMKQEAgLTAsMCArMSwyMCBAQAor LyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1h cmNoPXNreWxha2UtYXZ4NTEyIC1PMiIgfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2bW92ZHF1NjRcWyBcXHRcXStcW15c e1xuXF0qXFwpXFteXG5cXSolem1tXFswLTlcXSsoPzpcbnxcWyBcXHRcXSsj KSIgMiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10 aW1lcyAidm1vdmRxdTY0XFsgXFx0XF0rXFteXHtcblxdKiV6bW1cWzAtOVxd K1xbXlxuXF0qXFwpKD86XG58XFsgXFx0XF0rIykiIDIgfSB9ICovCisKKyNp bmNsdWRlIDxpbW1pbnRyaW4uaD4KKworaW50ICphOworbG9uZyBsb25nICpi Owordm9sYXRpbGUgX19tNTEyaSB6ejsKK3ZvbGF0aWxlIF9fbTUxMmkgenox OworCit2b2lkIGV4dGVybgorYXZ4NTEyZl90ZXN0ICh2b2lkKQoreworICB6 eiA9IF9tbTUxMl9sb2FkdV9lcGkzMiAoYSk7CisgIF9tbTUxMl9zdG9yZXVf ZXBpMzIgKGEsIHp6KTsKKyAgenoxID0gX21tNTEyX2xvYWR1X2VwaTY0IChi KTsKKyAgX21tNTEyX3N0b3JldV9lcGk2NCAoYiwgenoxKTsKK30KLS0gCjIu MjAuMQoK --000000000000e8421b058d6aa459--