From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 37770 invoked by alias); 23 Oct 2019 01:53:12 -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 37444 invoked by uid 89); 23 Oct 2019 01:53:12 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-16.5 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,RCVD_IN_JMF_BL,SPF_PASS autolearn=ham version=3.3.1 spammy=0x, 071, xbm, xxn X-HELO: mail-oi1-f193.google.com Received: from mail-oi1-f193.google.com (HELO mail-oi1-f193.google.com) (209.85.167.193) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 23 Oct 2019 01:53:07 +0000 Received: by mail-oi1-f193.google.com with SMTP id k20so15985454oih.3 for ; Tue, 22 Oct 2019 18:53:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to:cc; bh=he4illBpF8JX8KedUD+MPSVUgQ40oskCE7k5ATOZs5g=; b=D5aNpSUX6egqCAuI3wfWJW0WMONtQjCfJvEDZgNm+6mMjd7LW6RlRIC0HHpyfK+ct4 mJPWcSi2mDg6sbVjfbuV8BLw4E69zavAyeMY+96ER3iuj/0orJnt1yvx77SaTC0dj1Vh QUjLXBfauVA2XxOi8odH6M/8w4PeVWY5Sqb2UAM2u5O88LNXr6cAtOU3zXfH/fJgeQDu 1GRFbORwD81vHTiyuf+BR+dbXMcizWf+uNAH2lnqfrypAgG7UJtcAyPTrE10UqbQBTnR pln0xaOqQEzXiYKZLb7Axf5CCCvn+1+kmNEFbqCrjkE9qW8urUTTokBSnU/eVBeixyBc bInw== MIME-Version: 1.0 From: Hongtao Liu Date: Wed, 23 Oct 2019 02:25:00 -0000 Message-ID: Subject: [PATCH target/89071] Fix false dependence of scalar operations vrcp/vsqrt/vrsqrt/vrndscale To: Uros Bizjak , GCC Patches Cc: "H. J. Lu" , yanguan.wang@intel.com Content-Type: multipart/mixed; boundary="00000000000084617c05958a2dc3" X-IsSubscribed: yes X-SW-Source: 2019-10/txt/msg01611.txt.bz2 --00000000000084617c05958a2dc3 Content-Type: text/plain; charset="UTF-8" Content-length: 1560 Hi uros: This patch fixes false dependence of scalar operations vrcp/vsqrt/vrsqrt/vrndscale. Bootstrap ok, regression test on i386/x86 ok. It does something like this: ----- For scalar instructions with both xmm operands: op %xmmN,%xmmQ,%xmmQ ----> op %xmmN, %xmmN, %xmmQ for scalar instructions with one mem or gpr operand: op mem/gpr, %xmmQ, %xmmQ ---> using pass rpad ----> xorps %xmmN, %xmmN, %xxN op mem/gpr, %xmmN, %xmmQ Performance influence of SPEC2017 fprate which is tested on SKX 503.bwaves_r -0.03% 507.cactuBSSN_r -0.22% 508.namd_r -0.02% 510.parest_r 0.37% 511.povray_r 0.74% 519.lbm_r 0.24% 521.wrf_r 2.35% 526.blender_r 0.71% 527.cam4_r 0.65% 538.imagick_r 0.95% 544.nab_r -0.37 549.fotonik3d_r 0.24% 554.roms_r 0.90% fprate geomean 0.50% ----- Changelog gcc/ * config/i386/i386.md (*rcpsf2_sse): Add avx_partial_xmm_update, prefer m constraint for TARGET_AVX. (*rsqrtsf2_sse): Ditto. (*sqrt2_sse): Ditto. (sse4_1_round2): separate constraint vm, add avx_partail_xmm_update, prefer m constraint for TARGET_AVX. * config/i386/sse.md (*sse_vmrcpv4sf2"): New define_insn used by pass rpad. (*_vmsqrt2*): Ditto. (*sse_vmrsqrtv4sf2): Ditto. (*avx512f_rndscale): Ditto. (*sse4_1_round): Ditto. gcc/testsuite * gcc.target/i386/pr87007-4.c: New test. * gcc.target/i386/pr87007-5.c: Ditto. -- BR, Hongtao --00000000000084617c05958a2dc3 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Fix-false-dependence-of-scalar-operation-vrcp-vsqrt-.patch" Content-Disposition: attachment; filename="0001-Fix-false-dependence-of-scalar-operation-vrcp-vsqrt-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k22mh3rl0 Content-length: 15503 RnJvbSAyZGIwOGJmZjNmYjllMjcyMGM2YzU3YTUyZTZmNTFjOTkwZDFhNTdm IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBsaXVob25ndCA8aG9u Z3Rhby5saXVAaW50ZWwuY29tPgpEYXRlOiBXZWQsIDkgT2N0IDIwMTkgMTE6 MjE6MjUgKzA4MDAKU3ViamVjdDogW1BBVENIXSBGaXggZmFsc2UgZGVwZW5k ZW5jZSBvZiBzY2FsYXIgb3BlcmF0aW9uCiB2cmNwL3ZzcXJ0L3Zyc3FydC92 cm5kc2NhbGUKCkZvciBpbnN0cnVjdGlvbnMgd2l0aCB4bW0gb3BlcmFuZDoK Cm9wICV4bW1OLCV4bW1RLCV4bW1RIC0tLS0+IG9wICV4bW1OLCAleG1tTiwg JXhtbVEKCmZvciBpbnN0cnVjdGlvbiB3aXRoIG1lbSBvcGVyYW5kIG9yIGdw ciBvcGVyYW5kOgoKb3AgbWVtL2dwciwgJXhtbVEsICV4bW1RCgotLS0+ICB1 c2luZyBwYXNzIHJwYWQgLS0tLT4KCnhvcnBzICV4bW1OLCAleG1tTiwgJXh4 TgpvcCBtZW0vZ3ByLCAleG1tTiwgJXhtbVEKClBlcmZvcm1hbmNlIGluZmx1 ZW5jZSBvZiBTUEVDMjAxNyBmcHJhdGUgd2hpY2ggaXMgdGVzdGVkIG9uIFNL WAotLS0tCjUwMy5id2F2ZXNfcgktMC4wMyUKNTA3LmNhY3R1QlNTTl9yIC0w LjIyJQo1MDgubmFtZF9yCS0wLjAyJQo1MTAucGFyZXN0X3IJMC4zNyUKNTEx LnBvdnJheV9yCTAuNzQlCjUxOS5sYm1fcgkwLjI0JQo1MjEud3JmX3IJMi4z NSUKNTI2LmJsZW5kZXJfcgkwLjcxJQo1MjcuY2FtNF9yCTAuNjUlCjUzOC5p bWFnaWNrX3IJMC45NSUKNTQ0Lm5hYl9yCS0wLjM3CjU0OS5mb3RvbmlrM2Rf ciAwLjI0JQo1NTQucm9tc19yCTAuOTAlCmZwcmF0ZSBnZW9tZWFuCTAuNTAl Ci0tLS0tCgpDaGFuZ2Vsb2cKZ2NjLwoJKiBjb25maWcvaTM4Ni9pMzg2Lm1k ICgqcmNwc2YyX3NzZSk6IEFkZAoJYXZ4X3BhcnRpYWxfeG1tX3VwZGF0ZSwg cHJlZmVyIG0gY29uc3RyYWludCBmb3IgVEFSR0VUX0FWWC4KCSgqcnNxcnRz ZjJfc3NlKTogRGl0dG8uCgkoKnNxcnQ8bW9kZT4yX3NzZSk6IERpdHRvLgoJ KHNzZTRfMV9yb3VuZDxtb2RlPjIpOiBzZXBhcmF0ZSBjb25zdHJhaW50IHZt LCBhZGQKCWF2eF9wYXJ0YWlsX3htbV91cGRhdGUsIHByZWZlciBtIGNvbnN0 cmFpbnQgZm9yIFRBUkdFVF9BVlguCgkqIGNvbmZpZy9pMzg2L3NzZS5tZCAo KnNzZV92bXJjcHY0c2YyIik6IE5ldyBkZWZpbmVfaW5zbiB1c2VkCglieSBw YXNzIHJwYWQuCgkoKjxzc2U+X3Ztc3FydDxtb2RlPjI8bWFza19zY2FsYXJf bmFtZT48cm91bmRfc2NhbGFyX25hbWU+Kik6CglEaXR0by4KCSgqc3NlX3Zt cnNxcnR2NHNmMik6IERpdHRvLgoJKCphdng1MTJmX3JuZHNjYWxlPG1vZGU+ PHJvdW5kX3NhZW9ubHlfbmFtZT4pOiBEaXR0by4KCSgqc3NlNF8xX3JvdW5k PHNzZXNjYWxhcm1vZGVzdWZmaXg+KTogRGl0dG8uCgpnY2MvdGVzdHN1aXRl CgkqIGdjYy50YXJnZXQvaTM4Ni9wcjg3MDA3LTQuYzogTmV3IHRlc3QuCgkq IGdjYy50YXJnZXQvaTM4Ni9wcjg3MDA3LTUuYzogRGl0dG8uCi0tLQogZ2Nj L2NvbmZpZy9pMzg2L2kzODYubWQgICAgICAgICAgICAgICAgICAgfCAyNyAr KysrLS0tCiBnY2MvY29uZmlnL2kzODYvc3NlLm1kICAgICAgICAgICAgICAg ICAgICB8IDk1ICsrKysrKysrKysrKysrKysrKysrKysrCiBnY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg3MDA3LTQuYyB8IDE4ICsrKysrCiBn Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg3MDA3LTUuYyB8IDE4 ICsrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDE0NyBpbnNlcnRpb25zKCspLCAx MSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg3MDA3LTQuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODcwMDct NS5jCgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYubWQgYi9n Y2MvY29uZmlnL2kzODYvaTM4Ni5tZAppbmRleCA1ZTA3OTU5NTNkOC4uYWI3 ODVkM2Q2ZDcgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9pMzg2Lm1k CisrKyBiL2djYy9jb25maWcvaTM4Ni9pMzg2Lm1kCkBAIC0xNDg0MywxMSAr MTQ4NDMsMTIgQEAKICAgIChzZXRfYXR0ciAiYnR2ZXIyX3NzZV9hdHRyIiAi cmNwIikKICAgIChzZXRfYXR0ciAicHJlZml4IiAibWF5YmVfdmV4IikKICAg IChzZXRfYXR0ciAibW9kZSIgIlNGIikKKyAgIChzZXRfYXR0ciAiYXZ4X3Bh cnRpYWxfeG1tX3VwZGF0ZSIgImZhbHNlLGZhbHNlLHRydWUiKQogICAgKHNl dCAoYXR0ciAicHJlZmVycmVkX2Zvcl9zcGVlZCIpCiAgICAgIChjb25kIFso ZXFfYXR0ciAiYWx0ZXJuYXRpdmUiICIxIikKIAkgICAgICAoc3ltYm9sX3Jl ZiAiVEFSR0VUX0FWWCB8fCAhVEFSR0VUX1NTRV9QQVJUSUFMX1JFR19ERVBF TkRFTkNZIikKIAkgICAoZXFfYXR0ciAiYWx0ZXJuYXRpdmUiICIyIikKLQkg ICAgICAoc3ltYm9sX3JlZiAiIVRBUkdFVF9TU0VfUEFSVElBTF9SRUdfREVQ RU5ERU5DWSIpCisJICAgICAgKHN5bWJvbF9yZWYgIlRBUkdFVF9BVlggfHwg IVRBUkdFVF9TU0VfUEFSVElBTF9SRUdfREVQRU5ERU5DWSIpCiAJICAgXQog CSAgIChzeW1ib2xfcmVmICJ0cnVlIikpKV0pCiAKQEAgLTE1MDg5LDExICsx NTA5MCwxMiBAQAogICAgKHNldF9hdHRyICJidHZlcjJfc3NlX2F0dHIiICJy Y3AiKQogICAgKHNldF9hdHRyICJwcmVmaXgiICJtYXliZV92ZXgiKQogICAg KHNldF9hdHRyICJtb2RlIiAiU0YiKQorICAgKHNldF9hdHRyICJhdnhfcGFy dGlhbF94bW1fdXBkYXRlIiAiZmFsc2UsZmFsc2UsdHJ1ZSIpCiAgICAoc2V0 IChhdHRyICJwcmVmZXJyZWRfZm9yX3NwZWVkIikKICAgICAgKGNvbmQgWyhl cV9hdHRyICJhbHRlcm5hdGl2ZSIgIjEiKQogCSAgICAgIChzeW1ib2xfcmVm ICJUQVJHRVRfQVZYIHx8ICFUQVJHRVRfU1NFX1BBUlRJQUxfUkVHX0RFUEVO REVOQ1kiKQogCSAgIChlcV9hdHRyICJhbHRlcm5hdGl2ZSIgIjIiKQotCSAg ICAgIChzeW1ib2xfcmVmICIhVEFSR0VUX1NTRV9QQVJUSUFMX1JFR19ERVBF TkRFTkNZIikKKwkgICAgICAoc3ltYm9sX3JlZiAiVEFSR0VUX0FWWCB8fCAh VEFSR0VUX1NTRV9QQVJUSUFMX1JFR19ERVBFTkRFTkNZIikKIAkgICBdCiAJ ICAgKHN5bWJvbF9yZWYgInRydWUiKSkpXSkKIApAQCAtMTUxMjAsMTIgKzE1 MTIyLDEzIEBACiAgICAoc2V0X2F0dHIgImF0b21fc3NlX2F0dHIiICJzcXJ0 IikKICAgIChzZXRfYXR0ciAiYnR2ZXIyX3NzZV9hdHRyIiAic3FydCIpCiAg ICAoc2V0X2F0dHIgInByZWZpeCIgIm1heWJlX3ZleCIpCisgICAoc2V0X2F0 dHIgImF2eF9wYXJ0aWFsX3htbV91cGRhdGUiICJmYWxzZSxmYWxzZSx0cnVl IikKICAgIChzZXRfYXR0ciAibW9kZSIgIjxNT0RFPiIpCiAgICAoc2V0IChh dHRyICJwcmVmZXJyZWRfZm9yX3NwZWVkIikKICAgICAgKGNvbmQgWyhlcV9h dHRyICJhbHRlcm5hdGl2ZSIgIjEiKQogCSAgICAgIChzeW1ib2xfcmVmICJU QVJHRVRfQVZYIHx8ICFUQVJHRVRfU1NFX1BBUlRJQUxfUkVHX0RFUEVOREVO Q1kiKQogCSAgIChlcV9hdHRyICJhbHRlcm5hdGl2ZSIgIjIiKQotCSAgICAg IChzeW1ib2xfcmVmICIhVEFSR0VUX1NTRV9QQVJUSUFMX1JFR19ERVBFTkRF TkNZIikKKwkgICAgICAoc3ltYm9sX3JlZiAiVEFSR0VUX0FWWCB8fCAhVEFS R0VUX1NTRV9QQVJUSUFMX1JFR19ERVBFTkRFTkNZIikKIAkgICBdCiAJICAg KHN5bWJvbF9yZWYgInRydWUiKSkpXSkKIApAQCAtMTYyNjEsMjggKzE2MjY0 LDMwIEBACiAMCiAKIChkZWZpbmVfaW5zbiAic3NlNF8xX3JvdW5kPG1vZGU+ MiIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6TU9ERUYgMCAicmVnaXN0ZXJf b3BlcmFuZCIgIj14LHgseCx2IikKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 TU9ERUYgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14LHgseCx2LHYiKQogCSh1 bnNwZWM6TU9ERUYKLQkgIFsobWF0Y2hfb3BlcmFuZDpNT0RFRiAxICJub25p bW1lZGlhdGVfb3BlcmFuZCIgIjAseCxtLHZtIikKLQkgICAobWF0Y2hfb3Bl cmFuZDpTSSAyICJjb25zdF8wX3RvXzE1X29wZXJhbmQiICJuLG4sbixuIild CisJICBbKG1hdGNoX29wZXJhbmQ6TU9ERUYgMSAibm9uaW1tZWRpYXRlX29w ZXJhbmQiICIwLHgsbSx2LG0iKQorCSAgIChtYXRjaF9vcGVyYW5kOlNJIDIg ImNvbnN0XzBfdG9fMTVfb3BlcmFuZCIgIm4sbixuLG4sbiIpXQogCSAgVU5T UEVDX1JPVU5EKSldCiAgICJUQVJHRVRfU1NFNF8xIgogICAiQAogICAgJXZy b3VuZDxzc2Vtb2Rlc3VmZml4Plx0eyUyLCAlZDEsICUwfCUwLCAlZDEsICUy fQogICAgJXZyb3VuZDxzc2Vtb2Rlc3VmZml4Plx0eyUyLCAlZDEsICUwfCUw LCAlZDEsICUyfQogICAgJXZyb3VuZDxzc2Vtb2Rlc3VmZml4Plx0eyUyLCAl MSwgJWQwfCVkMCwgJTEsICUyfQorICAgdnJuZHNjYWxlPHNzZW1vZGVzdWZm aXg+XHR7JTIsICVkMSwgJTB8JTAsICVkMSwgJTJ9CiAgICB2cm5kc2NhbGU8 c3NlbW9kZXN1ZmZpeD5cdHslMiwgJTEsICVkMHwlZDAsICUxLCAlMn0iCiAg IFsoc2V0X2F0dHIgInR5cGUiICJzc2VjdnQiKQotICAgKHNldF9hdHRyICJw cmVmaXhfZXh0cmEiICIxLDEsMSwqIikKLSAgIChzZXRfYXR0ciAibGVuZ3Ro X2ltbWVkaWF0ZSIgIiosKiwqLDEiKQotICAgKHNldF9hdHRyICJwcmVmaXgi ICJtYXliZV92ZXgsbWF5YmVfdmV4LG1heWJlX3ZleCxldmV4IikKLSAgIChz ZXRfYXR0ciAiaXNhIiAibm9hdng1MTJmLG5vYXZ4NTEyZixub2F2eDUxMmYs YXZ4NTEyZiIpCisgICAoc2V0X2F0dHIgInByZWZpeF9leHRyYSIgIjEsMSwx LCosKiIpCisgICAoc2V0X2F0dHIgImxlbmd0aF9pbW1lZGlhdGUiICIqLCos KiwxLDEiKQorICAgKHNldF9hdHRyICJwcmVmaXgiICJtYXliZV92ZXgsbWF5 YmVfdmV4LG1heWJlX3ZleCxldmV4LGV2ZXgiKQorICAgKHNldF9hdHRyICJp c2EiICJub2F2eDUxMmYsbm9hdng1MTJmLG5vYXZ4NTEyZixhdng1MTJmLGF2 eDUxMmYiKQorICAgKHNldF9hdHRyICJhdnhfcGFydGlhbF94bW1fdXBkYXRl IiAiZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlIikKICAgIChzZXRfYXR0 ciAibW9kZSIgIjxNT0RFPiIpCiAgICAoc2V0IChhdHRyICJwcmVmZXJyZWRf Zm9yX3NwZWVkIikKICAgICAgKGNvbmQgWyhlcV9hdHRyICJhbHRlcm5hdGl2 ZSIgIjEiKQogCSAgICAgIChzeW1ib2xfcmVmICJUQVJHRVRfQVZYIHx8ICFU QVJHRVRfU1NFX1BBUlRJQUxfUkVHX0RFUEVOREVOQ1kiKQogCSAgIChlcV9h dHRyICJhbHRlcm5hdGl2ZSIgIjIiKQotCSAgICAgIChzeW1ib2xfcmVmICIh VEFSR0VUX1NTRV9QQVJUSUFMX1JFR19ERVBFTkRFTkNZIikKKwkgICAgICAo c3ltYm9sX3JlZiAiVEFSR0VUX0FWWCB8fCAhVEFSR0VUX1NTRV9QQVJUSUFM X1JFR19ERVBFTkRFTkNZIikKIAkgICBdCiAJICAgKHN5bWJvbF9yZWYgInRy dWUiKSkpXSkKIApkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L3NzZS5t ZCBiL2djYy9jb25maWcvaTM4Ni9zc2UubWQKaW5kZXggNDAzZTkxZDRiMTcu LmQyZTE1N2RmODFmIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2kzODYvc3Nl Lm1kCisrKyBiL2djYy9jb25maWcvaTM4Ni9zc2UubWQKQEAgLTIwMzUsNiAr MjAzNSwyNSBAQAogICAgKHNldF9hdHRyICJwcmVmaXgiICJvcmlnLHZleCIp CiAgICAoc2V0X2F0dHIgIm1vZGUiICJTRiIpXSkKIAorKGRlZmluZV9pbnNu ICIqc3NlX3ZtcmNwdjRzZjIiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlY0 U0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14LHgiKQorCSh2ZWNfbWVyZ2U6 VjRTRgorCSAgKHZlY19kdXBsaWNhdGU6VjRTRgorCSAgICAodW5zcGVjOlNG IFsobWF0Y2hfb3BlcmFuZDpTRiAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIg InhtLHhtIildCisJCSAgICAgICAgIFVOU1BFQ19SQ1ApKQorCSAgKG1hdGNo X29wZXJhbmQ6VjRTRiAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCx4IikKKwkg IChjb25zdF9pbnQgMSkpKV0KKyAgIlRBUkdFVF9TU0UiCisgICJACisgICBy Y3Bzc1x0eyUxLCAlMHwlMCwgJWsxfQorICAgdnJjcHNzXHR7JTEsICUyLCAl MHwlMCwgJTIsICVrMX0iCisgIFsoc2V0X2F0dHIgImlzYSIgIm5vYXZ4LGF2 eCIpCisgICAoc2V0X2F0dHIgInR5cGUiICJzc2UiKQorICAgKHNldF9hdHRy ICJhdG9tX3NzZV9hdHRyIiAicmNwIikKKyAgIChzZXRfYXR0ciAiYnR2ZXIy X3NzZV9hdHRyIiAicmNwIikKKyAgIChzZXRfYXR0ciAicHJlZml4IiAib3Jp Zyx2ZXgiKQorICAgKHNldF9hdHRyICJtb2RlIiAiU0YiKV0pCisKIChkZWZp bmVfaW5zbiAiPG1hc2tfY29kZWZvcj5yY3AxNDxtb2RlPjxtYXNrX25hbWU+ IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWRl9BVlg1MTJWTCAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiPXYiKQogCSh1bnNwZWM6VkZfQVZYNTEyVkwKQEAg LTIxMzAsNiArMjE0OSwyNSBAQAogICAgKHNldF9hdHRyICJidHZlcjJfc3Nl X2F0dHIiICJzcXJ0IikKICAgIChzZXRfYXR0ciAibW9kZSIgIjxzc2VzY2Fs YXJtb2RlPiIpXSkKIAorKGRlZmluZV9pbnNuICIqPHNzZT5fdm1zcXJ0PG1v ZGU+MjxtYXNrX3NjYWxhcl9uYW1lPjxyb3VuZF9zY2FsYXJfbmFtZT4iCisg IFsoc2V0IChtYXRjaF9vcGVyYW5kOlZGXzEyOCAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiPXgsdiIpCisJKHZlY19tZXJnZTpWRl8xMjgKKwkgICh2ZWNfZHVw bGljYXRlOlZGXzEyOAorCSAgICAoc3FydDo8c3Nlc2NhbGFybW9kZT4KKwkg ICAgICAobWF0Y2hfb3BlcmFuZDo8c3Nlc2NhbGFybW9kZT4gMSAidmVjdG9y X29wZXJhbmQiICJ4Qm0sPHJvdW5kX3NjYWxhcl9jb25zdHJhaW50PiIpKSkK KwkgIChtYXRjaF9vcGVyYW5kOlZGXzEyOCAyICJyZWdpc3Rlcl9vcGVyYW5k IiAiMCx2IikKKwkgIChjb25zdF9pbnQgMSkpKV0KKyAgIlRBUkdFVF9TU0Ui CisgICJACisgICBzcXJ0PHNzZXNjYWxhcm1vZGVzdWZmaXg+XHR7JTEsICUw fCUwLCAlPGlwdHI+MX0KKyAgIHZzcXJ0PHNzZXNjYWxhcm1vZGVzdWZmaXg+ XHR7PHJvdW5kX3NjYWxhcl9tYXNrX29wMz4lMSwgJTIsICUwPG1hc2tfc2Nh bGFyX29wZXJhbmQzPnwlMDxtYXNrX3NjYWxhcl9vcGVyYW5kMz4sICUyLCAl PGlwdHI+MTxyb3VuZF9zY2FsYXJfbWFza19vcDM+fSIKKyAgWyhzZXRfYXR0 ciAiaXNhIiAibm9hdngsYXZ4IikKKyAgIChzZXRfYXR0ciAidHlwZSIgInNz ZSIpCisgICAoc2V0X2F0dHIgImF0b21fc3NlX2F0dHIiICJzcXJ0IikKKyAg IChzZXRfYXR0ciAicHJlZml4IiAiPHJvdW5kX3NjYWxhcl9wcmVmaXg+IikK KyAgIChzZXRfYXR0ciAiYnR2ZXIyX3NzZV9hdHRyIiAic3FydCIpCisgICAo c2V0X2F0dHIgIm1vZGUiICI8c3Nlc2NhbGFybW9kZT4iKV0pCisKIChkZWZp bmVfZXhwYW5kICJyc3FydDxtb2RlPjIiCiAgIFsoc2V0IChtYXRjaF9vcGVy YW5kOlZGMV8xMjhfMjU2IDAgInJlZ2lzdGVyX29wZXJhbmQiKQogCSh1bnNw ZWM6VkYxXzEyOF8yNTYKQEAgLTIyMTksNiArMjI1NywyMyBAQAogICAgKHNl dF9hdHRyICJwcmVmaXgiICJvcmlnLHZleCIpCiAgICAoc2V0X2F0dHIgIm1v ZGUiICJTRiIpXSkKIAorKGRlZmluZV9pbnNuICIqc3NlX3ZtcnNxcnR2NHNm MiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjRTRiAwICJyZWdpc3Rlcl9v cGVyYW5kIiAiPXgseCIpCisJKHZlY19tZXJnZTpWNFNGCisJICAodmVjX2R1 cGxpY2F0ZTpWNFNGCisJICAgICh1bnNwZWM6U0YgWyhtYXRjaF9vcGVyYW5k OlNGIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAieG0seG0iKV0KKwkJICAg ICAgICAgVU5TUEVDX1JTUVJUKSkKKwkgIChtYXRjaF9vcGVyYW5kOlY0U0Yg MiAicmVnaXN0ZXJfb3BlcmFuZCIgIjAseCIpCisJICAoY29uc3RfaW50IDEp KSldCisgICJUQVJHRVRfU1NFIgorICAiQAorICAgcnNxcnRzc1x0eyUxLCAl MHwlMCwgJWsxfQorICAgdnJzcXJ0c3NcdHslMSwgJTIsICUwfCUwLCAlMiwg JWsxfSIKKyAgWyhzZXRfYXR0ciAiaXNhIiAibm9hdngsYXZ4IikKKyAgIChz ZXRfYXR0ciAidHlwZSIgInNzZSIpCisgICAoc2V0X2F0dHIgInByZWZpeCIg Im9yaWcsdmV4IikKKyAgIChzZXRfYXR0ciAibW9kZSIgIlNGIildKQorCiAo ZGVmaW5lX2V4cGFuZCAiPGNvZGU+PG1vZGU+MzxtYXNrX25hbWU+PHJvdW5k X3NhZW9ubHlfbmFtZT4iCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlZGIDAg InJlZ2lzdGVyX29wZXJhbmQiKQogCShzbWF4bWluOlZGCkBAIC05NzA5LDYg Kzk3NjQsMjIgQEAKICAgIChzZXRfYXR0ciAicHJlZml4IiAiZXZleCIpCiAg ICAoc2V0X2F0dHIgIm1vZGUiICI8TU9ERT4iKV0pCiAKKyhkZWZpbmVfaW5z biAiKmF2eDUxMmZfcm5kc2NhbGU8bW9kZT48cm91bmRfc2Flb25seV9uYW1l PiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VkZfMTI4IDAgInJlZ2lzdGVy X29wZXJhbmQiICI9diIpCisJKHZlY19tZXJnZTpWRl8xMjgKKwkgICh2ZWNf ZHVwbGljYXRlOlZGXzEyOAorCSAgICAodW5zcGVjOjxzc2VzY2FsYXJtb2Rl PgorCSAgICAgIFsobWF0Y2hfb3BlcmFuZDo8c3Nlc2NhbGFybW9kZT4gMiAi PHJvdW5kX3NhZW9ubHlfbmltbV9wcmVkaWNhdGU+IiAiPHJvdW5kX3NhZW9u bHlfY29uc3RyYWludD4iKQorCSAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAz ICJjb25zdF8wX3RvXzI1NV9vcGVyYW5kIildCisJICAgICAgVU5TUEVDX1JP VU5EKSkKKyAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpWRl8xMjggMSAicmVn aXN0ZXJfb3BlcmFuZCIgInYiKQorCSAgKGNvbnN0X2ludCAxKSkpXQorICAi VEFSR0VUX0FWWDUxMkYiCisgICJ2cm5kc2NhbGU8c3Nlc2NhbGFybW9kZXN1 ZmZpeD5cdHslMywgPHJvdW5kX3NhZW9ubHlfb3A0PiUyLCAlMSwgJTB8JTAs ICUxLCAlPGlwdHI+Mjxyb3VuZF9zYWVvbmx5X29wND4sICUzfSIKKyAgWyhz ZXRfYXR0ciAibGVuZ3RoX2ltbWVkaWF0ZSIgIjEiKQorICAgKHNldF9hdHRy ICJwcmVmaXgiICJldmV4IikKKyAgIChzZXRfYXR0ciAibW9kZSIgIjxNT0RF PiIpXSkKKwogOzsgT25lIGJpdCBpbiBtYXNrIHNlbGVjdHMgMiBlbGVtZW50 cy4KIChkZWZpbmVfaW5zbiAiYXZ4NTEyZl9zaHVmcHM1MTJfMTxtYXNrX25h bWU+IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMTZTRiAwICJyZWdpc3Rl cl9vcGVyYW5kIiAiPXYiKQpAQCAtMTc5NzMsNiArMTgwNDQsMzAgQEAKICAg IChzZXRfYXR0ciAicHJlZml4IiAib3JpZyxvcmlnLHZleCxldmV4IikKICAg IChzZXRfYXR0ciAibW9kZSIgIjxNT0RFPiIpXSkKIAorKGRlZmluZV9pbnNu ICIqc3NlNF8xX3JvdW5kPHNzZXNjYWxhcm1vZGVzdWZmaXg+IgorICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpWRl8xMjggMCAicmVnaXN0ZXJfb3BlcmFuZCIg Ij1ZciwqeCx4LHYiKQorCSh2ZWNfbWVyZ2U6VkZfMTI4CisJICAodmVjX2R1 cGxpY2F0ZTpWRl8xMjgKKwkgICAgKHVuc3BlYzo8c3Nlc2NhbGFybW9kZT4K KwkgICAgICBbKG1hdGNoX29wZXJhbmQ6PHNzZXNjYWxhcm1vZGU+IDIgInJl Z2lzdGVyX29wZXJhbmQiICJZciwqeCx4LHYiKQorCSAgICAgICAobWF0Y2hf b3BlcmFuZDpTSSAzICJjb25zdF8wX3RvXzE1X29wZXJhbmQiICJuLG4sbixu IildCisJICAgICAgVU5TUEVDX1JPVU5EKSkKKwkgIChtYXRjaF9vcGVyYW5k OlZGXzEyOCAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCwwLHgsdiIpCisJICAo Y29uc3RfaW50IDEpKSldCisgICJUQVJHRVRfU1NFNF8xIgorICAiQAorICAg cm91bmQ8c3Nlc2NhbGFybW9kZXN1ZmZpeD5cdHslMywgJTIsICUwfCUwLCAl MiwgJTN9CisgICByb3VuZDxzc2VzY2FsYXJtb2Rlc3VmZml4Plx0eyUzLCAl MiwgJTB8JTAsICUyLCAlM30KKyAgIHZyb3VuZDxzc2VzY2FsYXJtb2Rlc3Vm Zml4Plx0eyUzLCAlMiwgJTEsICUwfCUwLCAlMSwgJTIsICUzfQorICAgdnJu ZHNjYWxlPHNzZXNjYWxhcm1vZGVzdWZmaXg+XHR7JTMsICUyLCAlMSwgJTB8 JTAsICUxLCAlMiwgJTN9IgorICBbKHNldF9hdHRyICJpc2EiICJub2F2eCxu b2F2eCxhdngsYXZ4NTEyZiIpCisgICAoc2V0X2F0dHIgInR5cGUiICJzc2Vj dnQiKQorICAgKHNldF9hdHRyICJsZW5ndGhfaW1tZWRpYXRlIiAiMSIpCisg ICAoc2V0X2F0dHIgInByZWZpeF9kYXRhMTYiICIxLDEsKiwqIikKKyAgIChz ZXRfYXR0ciAicHJlZml4X2V4dHJhIiAiMSIpCisgICAoc2V0X2F0dHIgInBy ZWZpeCIgIm9yaWcsb3JpZyx2ZXgsZXZleCIpCisgICAoc2V0X2F0dHIgIm1v ZGUiICI8TU9ERT4iKV0pCisKIChkZWZpbmVfZXhwYW5kICJyb3VuZDxtb2Rl PjIiCiAgIFsoc2V0IChtYXRjaF9kdXAgMykKIAkocGx1czpWRgpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4NzAwNy00 LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg3MDA3LTQu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTkx YmRjYmFjNDQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjg3MDA3LTQuYwpAQCAtMCwwICsxLDE4IEBACisv KiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItT2Zh c3QgLW1hcmNoPXNreWxha2UtYXZ4NTEyIC1tZnBtYXRoPXNzZSIgfSAqLwor CisKKyNpbmNsdWRlPG1hdGguaD4KKworZXh0ZXJuIGRvdWJsZSBkMSwgZDIs IGQzOwordm9pZAorZm9vIChpbnQgbiwgaW50IGspCit7CisgIGZvciAoaW50 IGkgPSAwOyBpICE9IG47IGkrKykKKyAgICBpZihpIDwgaykKKyAgICAgIGQx ID0gZmxvb3IgKGQyKTsKKyAgICBlbHNlCisgICAgICBkMSA9IGNlaWwgKGQz KTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz ICJ2eG9ycHNcW15cblxyXF0qeG1tXFswLTlcXSIgMSB9IH0gKi8KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODcwMDct NS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4NzAwNy01 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIw ZDEzY2Y2NTBiCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvcHI4NzAwNy01LmMKQEAgLTAsMCArMSwxOCBAQAor LyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU9m YXN0IC1tYXJjaD1za3lsYWtlLWF2eDUxMiAtbWZwbWF0aD1zc2UiIH0gKi8K KworCisjaW5jbHVkZTxtYXRoLmg+CisKK2V4dGVybiBkb3VibGUgZDEsIGQy LCBkMzsKK3ZvaWQKK2ZvbyAoaW50IG4sIGludCBrKQoreworICBmb3IgKGlu dCBpID0gMDsgaSAhPSBuOyBpKyspCisgICAgaWYoaSA8IGspCisgICAgICBk MSA9IHNxcnQgKGQyKTsKKyAgICBlbHNlCisgICAgICBkMSA9IHNxcnQgKGQz KTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz ICJ2eG9ycHNcW15cblxyXF0qeG1tXFswLTlcXSIgMSB9IH0gKi8KLS0gCjIu MTkuMQoK --00000000000084617c05958a2dc3--