From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id 4AD743858D1E for ; Tue, 18 Apr 2023 11:24:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4AD743858D1E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.99,207,1677571200"; d="scan'208";a="2787210" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 18 Apr 2023 03:24:35 -0800 IronPort-SDR: FiMbLC8xhVM5azQ9okeJ2p9Z2MqV3W25OPy5+RlWkdVpRVcCHISAFqN2jFOAR/9ihyso3TxWL3 tQ1TYO1NM7vhJaNiq8uGo/uUDZiXicwx3iqagYLByMN6ji64QL6hEsLDqRNB1S5KL8yeWllug0 f6X7FRqhH4mh0i4blIdijMzDFfCo84sRGVqbUIxfsktxlmDI2hnyEjUCYOILxCsWqBn/FbbQbu UaTRWIhz1/NHFZ7aArkc1ggL9C4cvSM5XcOqZOIee+3AbiceYImCt8FUf+oOZQ4EsgahV5IhYy fQE= Content-Type: multipart/mixed; boundary="------------xVmU3MgdDzkMUOOQEhP4HbsI" Message-ID: Date: Tue, 18 Apr 2023 12:24:29 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Content-Language: en-GB From: Andrew Stubbs Subject: [committed] amdgcn: HardFP divide To: "gcc-patches@gcc.gnu.org" X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-14.mgc.mentorg.com (139.181.222.14) To svr-ies-mbx-11.mgc.mentorg.com (139.181.222.11) X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,KAM_SHORT,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------xVmU3MgdDzkMUOOQEhP4HbsI Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit This patch switches amdgcn from using softfp for division to using the hardware support. There isn't a single division instruction, but there is an instruction sequence that gives the necessary accuracy. This implementation also allows fully vectorized division, so gives good performance improvements for many use cases. Andrew --------------xVmU3MgdDzkMUOOQEhP4HbsI Content-Type: text/plain; charset="UTF-8"; name="230418-hardfp-divide.patch" Content-Disposition: attachment; filename="230418-hardfp-divide.patch" Content-Transfer-Encoding: base64 YW1kZ2NuOiBIYXJkRlAgZGl2aWRlCgpJbXBsZW1lbnQgRlAgZGl2aXNpb24gdXNpbmcgaGFy ZHdhcmUgaW5zdHJ1Y3Rpb25zLiBUaGlzIHJlcGxhY2VzIGJvdGggdGhlCnNvZnRmcCBsaWJy YXJ5IGNhbGxzLCBhbmQgdGhlIC0tZmFzdC1tYXRoIGluYWNjdXJhdGUgZGl2c2lvbiB3ZSBo YWQgcHJldmlvdXNseS4KClRoZSBHQ04gYXJjaGl0ZWN0dXJlIGRvZXMgbm90IGhhdmUgYSBz aW5nbGUgZGl2aWRlIGluc3RydWN0aW9uLCBidXQgaXQgZG9lcwpoYXZlIGEgbnVtYmVyIG9m IHN1cHBvcnQgaW5zdHJ1Y3Rpb25zIGRlc2lnbmVkIHRvIG1ha2UgbXVsdGlwbHktYnktcmVj aXByb2NhbApzdWZmaWNpZW50bHkgYWNjdXJhdGUgZm9yIG5vbi1mYXN0LW1hdGggdXNhZ2Uu CgpnY2MvQ2hhbmdlTG9nOgoKCSogY29uZmlnL2djbi9nY24tdmFsdS5tZCAoU1ZfU0ZERik6 IE5ldyBpdGVyYXRvci4KCShTVl9GUCk6IE5ldyBpdGVyYXRvci4KCShzY2FsYXJfbW9kZSwg U0NBTEFSX01PREUpOiBBZGQgaWRlbnRpdHkgbWFwcGluZ3MgZm9yIHNjYWxhciBtb2Rlcy4K CShyZWNpcDxtb2RlPjIpOiBVbmlmeSB0aGUgdHdvIHBhdHRlcm5zIHVzaW5nIFNWX0ZQLgoJ KGRpdl9zY2FsZTxtb2RlPjxleGVjX3ZjYz4pOiBOZXcgaW5zbi4KCShkaXZfZm1hczxtb2Rl PjxleGVjPik6IE5ldyBpbnNuLgoJKGRpdl9maXh1cDxtb2RlPjxleGVjPik6IE5ldyBpbnNu LgoJKGRpdjxtb2RlPjMpOiBVbmlmeSB0aGUgdHdvIGV4cGFuZGVycyBhbmQgcmV3cml0ZSB1 c2luZyBoYXJkZnAuCgkqIGNvbmZpZy9nY24vZ2NuLmNjIChnY25fbWRfcmVvcmcpOiBTdXBw b3J0ICJ2Y2N3YWl0IiBhdHRyaWJ1dGUuCgkqIGNvbmZpZy9nY24vZ2NuLm1kICh1bnNwZWMp OiBBZGQgVU5TUEVDX0RJVl9TQ0FMRSwgVU5TUEVDX0RJVl9GTUFTLAoJYW5kIFVOU1BFQ19E SVZfRklYVVAuCgkodmNjd2FpdCk6IE5ldyBhdHRyaWJ1dGUuCgpnY2MvdGVzdHN1aXRlL0No YW5nZUxvZzoKCgkqIGdjYy50YXJnZXQvZ2NuL2ZwZGl2LmM6IFJlbW92ZSB0aGUgLWZmYXN0 LW1hdGggcmVxdWlyZW1lbnQuCgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9nY24vZ2NuLXZh bHUubWQgYi9nY2MvY29uZmlnL2djbi9nY24tdmFsdS5tZAppbmRleCBlM2Q2ZDY1ZTlhOS4u NGE0MGE5ZDhkNGMgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvZ2NuL2djbi12YWx1Lm1kCisr KyBiL2djYy9jb25maWcvZ2NuL2djbi12YWx1Lm1kCkBAIC0xNSw2ICsxNSw3IEBACiA7OyA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKIDs7IHt7eyBWZWN0b3IgaXRlcmF0 b3JzCis7IFNWIGl0ZXJhdG9ycyBpbmNsdWRlIGJvdGggc2NhbGFyIGFuZCB2ZWN0b3IgbW9k ZXMuCiAKIDsgVmVjdG9yIG1vZGVzIGZvciBzcGVjaWZpYyB0eXBlcwogKGRlZmluZV9tb2Rl X2l0ZXJhdG9yIFZfUUkKQEAgLTEyNiw2ICsxMjcsMTUgQEAgKGRlZmluZV9tb2RlX2l0ZXJh dG9yIFZfSU5UX25vSEkKIAkJICAgICAgIFYzMlNJIFYzMkRJCiAJCSAgICAgICBWNjRTSSBW NjRESV0pCiAKKyhkZWZpbmVfbW9kZV9pdGVyYXRvciBTVl9TRkRGCisJCSAgICAgIFtTRiBE RgorCQkgICAgICAgVjJTRiBWMkRGCisJCSAgICAgICBWNFNGIFY0REYKKwkJICAgICAgIFY4 U0YgVjhERgorCQkgICAgICAgVjE2U0YgVjE2REYKKwkJICAgICAgIFYzMlNGIFYzMkRGCisJ CSAgICAgICBWNjRTRiBWNjRERl0pCisKIDsgQWxsIG9mIGFib3ZlCiAoZGVmaW5lX21vZGVf aXRlcmF0b3IgVl9BTEwKIAkJICAgICAgW1YyUUkgVjJISSBWMkhGIFYyU0kgVjJTRiBWMkRJ IFYyREYKQEAgLTE1Niw5ICsxNjYsMTkgQEAgKGRlZmluZV9tb2RlX2l0ZXJhdG9yIFZfRlAK IAkJICAgICAgIFYxNkhGIFYxNlNGIFYxNkRGCiAJCSAgICAgICBWMzJIRiBWMzJTRiBWMzJE RgogCQkgICAgICAgVjY0SEYgVjY0U0YgVjY0REZdKQorKGRlZmluZV9tb2RlX2l0ZXJhdG9y IFNWX0ZQCisJCSAgICAgIFtIRiBTRiBERgorCQkgICAgICAgVjJIRiBWMlNGIFYyREYKKwkJ ICAgICAgIFY0SEYgVjRTRiBWNERGCisJCSAgICAgICBWOEhGIFY4U0YgVjhERgorCQkgICAg ICAgVjE2SEYgVjE2U0YgVjE2REYKKwkJICAgICAgIFYzMkhGIFYzMlNGIFYzMkRGCisJCSAg ICAgICBWNjRIRiBWNjRTRiBWNjRERl0pCiAKIChkZWZpbmVfbW9kZV9hdHRyIHNjYWxhcl9t b2RlCi0gIFsoVjJRSSAicWkiKSAoVjJISSAiaGkiKSAoVjJTSSAic2kiKQorICBbKFFJICJx aSIpIChISSAiaGkiKSAoU0kgInNpIikKKyAgIChIRiAiaGYiKSAoU0YgInNmIikgKERJICJk aSIpIChERiAiZGYiKQorICAgKFYyUUkgInFpIikgKFYySEkgImhpIikgKFYyU0kgInNpIikK ICAgIChWMkhGICJoZiIpIChWMlNGICJzZiIpIChWMkRJICJkaSIpIChWMkRGICJkZiIpCiAg ICAoVjRRSSAicWkiKSAoVjRISSAiaGkiKSAoVjRTSSAic2kiKQogICAgKFY0SEYgImhmIikg KFY0U0YgInNmIikgKFY0REkgImRpIikgKFY0REYgImRmIikKQEAgLTE3Miw3ICsxOTIsOSBA QCAoZGVmaW5lX21vZGVfYXR0ciBzY2FsYXJfbW9kZQogICAgKFY2NEhGICJoZiIpIChWNjRT RiAic2YiKSAoVjY0REkgImRpIikgKFY2NERGICJkZiIpXSkKIAogKGRlZmluZV9tb2RlX2F0 dHIgU0NBTEFSX01PREUKLSAgWyhWMlFJICJRSSIpIChWMkhJICJISSIpIChWMlNJICJTSSIp CisgIFsoUUkgIlFJIikgKEhJICJISSIpIChTSSAiU0kiKQorICAgKEhGICJIRiIpIChTRiAi U0YiKSAoREkgIkRJIikgKERGICJERiIpCisgICAoVjJRSSAiUUkiKSAoVjJISSAiSEkiKSAo VjJTSSAiU0kiKQogICAgKFYySEYgIkhGIikgKFYyU0YgIlNGIikgKFYyREkgIkRJIikgKFYy REYgIkRGIikKICAgIChWNFFJICJRSSIpIChWNEhJICJISSIpIChWNFNJICJTSSIpCiAgICAo VjRIRiAiSEYiKSAoVjRTRiAiU0YiKSAoVjRESSAiREkiKSAoVjRERiAiREYiKQpAQCAtMzE4 OCwxMTMgKzMyMTAsMTI0IEBAIChkZWZpbmVfaW5zbiAiZm1zPG1vZGU+NF9uZWdvcDIiCiA7 OyB7e3sgRlAgZGl2aXNpb24KIAogKGRlZmluZV9pbnNuICJyZWNpcDxtb2RlPjI8ZXhlYz4i Ci0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlZfRlAgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICI9 ICB2IikKLQkodW5zcGVjOlZfRlAKLQkgIFsobWF0Y2hfb3BlcmFuZDpWX0ZQIDEgImdjbl9h bHVfb3BlcmFuZCIgInZTdkIiKV0KKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U1ZfRlAgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgICI9ICB2IikKKwkodW5zcGVjOlNWX0ZQCisJICBbKG1hdGNo X29wZXJhbmQ6U1ZfRlAgMSAiZ2NuX2FsdV9vcGVyYW5kIiAidlN2QiIpXQogCSAgVU5TUEVD X1JDUCkpXQogICAiIgogICAidl9yY3AlaTBcdCUwLCAlMSIKICAgWyhzZXRfYXR0ciAidHlw ZSIgInZvcDEiKQogICAgKHNldF9hdHRyICJsZW5ndGgiICI4IildKQogCi0oZGVmaW5lX2lu c24gInJlY2lwPG1vZGU+MiIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6RlAgMCAicmVnaXN0 ZXJfb3BlcmFuZCIJICI9ICB2IikKLQkodW5zcGVjOkZQCi0JICBbKG1hdGNoX29wZXJhbmQ6 RlAgMSAiZ2NuX2FsdV9vcGVyYW5kIiAidlN2QiIpXQotCSAgVU5TUEVDX1JDUCkpXQotICAi IgotICAidl9yY3AlaTBcdCUwLCAlMSIKLSAgWyhzZXRfYXR0ciAidHlwZSIgInZvcDEiKQor Ozsgdl9kaXZfc2NhbGUgdGFrZXMgYSBudW1lcmF0b3IgKG9wMikgYW5kIGRlbm9taW5hdG9y IChvcDEpIGFuZCByZXR1cm5zIHRoZQorOzsgb25lIHRoYXQgbWF0Y2hlcyBvcDMgYWRqdXN0 ZWQgZm9yIGJlc3QgcmVzdWx0cyBpbiByZWNpcHJvY2FsIGRpdmlzaW9uLgorOzsgSXQgYWxz byBlbWl0cyBhIFZDQyBtYXNrIHRoYXQgaXMgaW50ZW5kZWQgZm9yIGlucHV0IHRvIHZfZGl2 X2ZtYXMuCis7OyBUaGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGNhbGwgdGhpcyB0d2ljZSwg b25jZSBmb3IgZWFjaCBpbnB1dC4gIFRoZSBvdXRwdXQKKzs7IFZDQyBpcyB0aGUgc2FtZSBp biBib3RoIGNhc2VzLCBzbyB0aGUgY2FsbGVyIG1heSBkaXNjYXJkIG9uZS4KKyhkZWZpbmVf aW5zbiAiZGl2X3NjYWxlPG1vZGU+PGV4ZWNfdmNjPiIKKyAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6U1ZfU0ZERiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICI9diIpCisJKHVuc3BlYzpTVl9T RkRGCisJICBbKG1hdGNoX29wZXJhbmQ6U1ZfU0ZERiAxICJnY25fYWx1X29wZXJhbmQiICJ2 IikKKwkgICAobWF0Y2hfb3BlcmFuZDpTVl9TRkRGIDIgImdjbl9hbHVfb3BlcmFuZCIgInYi KQorCSAgIChtYXRjaF9vcGVyYW5kOlNWX1NGREYgMyAiZ2NuX2FsdV9vcGVyYW5kIiAidiIp XQorCSAgVU5TUEVDX0RJVl9TQ0FMRSkpCisgICAoc2V0IChtYXRjaF9vcGVyYW5kOkRJIDQg InJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAiPVN2Y1YiKQorCSh1bnNwZWM6REkKKwkgIFso bWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikgKG1hdGNoX2R1cCAzKV0KKwkgIFVOU1BFQ19E SVZfU0NBTEUpKV0KKyAgIiIKKyAgInZfZGl2X3NjYWxlJWkwXHQlMCwgJTQsICUzLCAlMSwg JTIiCisgIFsoc2V0X2F0dHIgInR5cGUiICJ2b3AzYiIpCiAgICAoc2V0X2F0dHIgImxlbmd0 aCIgIjgiKV0pCiAKLTs7IERvIGRpdmlzaW9uIHZpYSBhID0gYiAqIDEvYwotOzsgVGhlIHZf cmNwXyogaW5zdHJ1Y3Rpb25zIGFyZSBub3Qgc3VmZmljaWVudGx5IGFjY3VyYXRlIG9uIHRo ZWlyIG93biwKLTs7IHNvIHdlIHVzZSAyIHZfZm1hXyogaW5zdHJ1Y3Rpb25zIHRvIGRvIG9u ZSByb3VuZCBvZiBOZXd0b24tUmFwaHNvbgotOzsgd2hpY2ggdGhlIElTQSBtYW51YWwgc2F5 cyBpcyBlbm91Z2ggdG8gaW1wcm92ZSB0aGUgcmVjaXByb2NhbCBhY2N1cmFjeS4KLTs7Ci07 OyBGSVhNRTogVGhpcyBkb2VzIG5vdCBoYW5kbGUgZGVub3JtYWxzLCBOYU5zLCBkaXZpc2lv bi1ieS16ZXJvIGV0Yy4KKzs7IHZfZGl2X2ZtYXMgaXMgIkZNQSBhbmQgU2NhbGUiIHRoYXQg dXNlcyB0aGUgVkNDIG91dHB1dCBmcm9tIHZfZGl2X3NjYWxlCis7OyB0byBjb25kaXRpb25h bGx5IHNjYWxlIHRoZSBvdXRwdXQgb2YgdGhlIHdob2xlIGRpdmlzaW9uIG9wZXJhdGlvbi4K Kzs7IFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGNvdW50ZXIgdGhlIGFkanVzdG1lbnRzIG1hZGUg Ynkgdl9kaXZfc2NhbGUgYW5kCis7OyByZXBsYWNlcyB0aGUgbGFzdCBGTUEgaW5zdHJ1Y3Rp b24gb2YgdGhlIE5ld3RvbiBSYXBoc29uIGFsZ29yaXRobS4KKyhkZWZpbmVfaW5zbiAiZGl2 X2ZtYXM8bW9kZT48ZXhlYz4iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNWX1NGREYgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgIj12IikKKwkodW5zcGVjOlNWX1NGREYKKwkgIFso cGx1czpTVl9TRkRGCisJICAgICAobXVsdDpTVl9TRkRGCisJICAgICAgIChtYXRjaF9vcGVy YW5kOlNWX1NGREYgMSAiZ2NuX2FsdV9vcGVyYW5kIiAidiIpCisJICAgICAgIChtYXRjaF9v cGVyYW5kOlNWX1NGREYgMiAiZ2NuX2FsdV9vcGVyYW5kIiAidiIpKQorCSAgICAgKG1hdGNo X29wZXJhbmQ6U1ZfU0ZERiAzICJnY25fYWx1X29wZXJhbmQiICAgInYiKSkKKwkgICAobWF0 Y2hfb3BlcmFuZDpESSA0ICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgICJjViIpXQorCSAg VU5TUEVDX0RJVl9GTUFTKSldCisgICIiCisgICJ2X2Rpdl9mbWFzJWkwXHQlMCwgJTEsICUy LCAlMzsgJTQiCisgIFsoc2V0X2F0dHIgInR5cGUiICJ2b3AzYSIpCisgICAoc2V0X2F0dHIg Imxlbmd0aCIgIjgiKQorICAgKHNldF9hdHRyICJ2Y2N3YWl0IiAiNSIpXSkKKworOzsgdl9k aXZfZml4dXAgdGFrZXMgdGhlIGlucHV0cyBhbmQgb3V0cHV0cyBvZiBhIGRpdmlzaW9uIG9w ZXJhdGlvbiBhbHJlYWR5Cis7OyBjb21wbGV0ZWQgYW5kIGNsZWFucyB1cCB0aGUgZmxvYXRp bmctcG9pbnQgc2lnbiBiaXQsIGluZmluaXR5LCB1bmRlcmZsb3csCis7OyBvdmVyZmxvdywg YW5kIE5hTiBzdGF0dXMuICBJdCB3aWxsIGFsc28gZW1pdCBhbnkgRlAgZXhjZXB0aW9ucy4K Kzs7IG9wMTogcXVvdGllbnQsICBvcDI6IGRlbm9taW5hdG9yLCAgb3AzOiBudW1lcmF0b3IK KyhkZWZpbmVfaW5zbiAiZGl2X2ZpeHVwPG1vZGU+PGV4ZWM+IgorICBbKHNldCAobWF0Y2hf b3BlcmFuZDpTVl9GUCAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAiPXYiKQorCSh1bnNwZWM6 U1ZfRlAKKwkgIFsobWF0Y2hfb3BlcmFuZDpTVl9GUCAxICJyZWdpc3Rlcl9vcGVyYW5kIiAi diIpCisJICAgKG1hdGNoX29wZXJhbmQ6U1ZfRlAgMiAiZ2NuX2FsdV9vcGVyYW5kIiAgInYi KQorCSAgIChtYXRjaF9vcGVyYW5kOlNWX0ZQIDMgImdjbl9hbHVfb3BlcmFuZCIgICJ2Iild CisJICBVTlNQRUNfRElWX0ZJWFVQKSldCisgICIiCisgICJ2X2Rpdl9maXh1cCVpMFx0JTAs ICUxLCAlMiwgJTMiCisgIFsoc2V0X2F0dHIgInR5cGUiICJ2b3AzYSIpCisgICAoc2V0X2F0 dHIgImxlbmd0aCIgIjgiKV0pCiAKIChkZWZpbmVfZXhwYW5kICJkaXY8bW9kZT4zIgotICBb KG1hdGNoX29wZXJhbmQ6Vl9GUCAwICJnY25fdmFsdV9kc3Rfb3BlcmFuZCIpCi0gICAobWF0 Y2hfb3BlcmFuZDpWX0ZQIDEgImdjbl92YWx1X3NyYzBfb3BlcmFuZCIpCi0gICAobWF0Y2hf b3BlcmFuZDpWX0ZQIDIgImdjbl92YWx1X3NyYzBfb3BlcmFuZCIpXQotICAiZmxhZ19yZWNp cHJvY2FsX21hdGgiCisgIFsobWF0Y2hfb3BlcmFuZDpTVl9TRkRGIDAgInJlZ2lzdGVyX29w ZXJhbmQiKQorICAgKG1hdGNoX29wZXJhbmQ6U1ZfU0ZERiAxICJnY25fYWx1X29wZXJhbmQi KQorICAgKG1hdGNoX29wZXJhbmQ6U1ZfU0ZERiAyICJnY25fYWx1X29wZXJhbmQiKV0KKyAg IiIKICAgeworICAgIHJ0eCBudW1lcmF0b3IgPSBvcGVyYW5kc1sxXTsKKyAgICBydHggZGVu b21pbmF0b3IgPSBvcGVyYW5kc1syXTsKKworICAgIC8qIFNjYWxlIHRoZSBpbnB1dHMgaWYg dGhleSBhcmUgY2xvc2UgdG8gdGhlIEZQIGxpbWl0cy4KKyAgICAgICBUaGlzIHdpbGwgYmUg cmV2ZXJzZWQgbGF0ZXIuICAqLworICAgIHJ0eCB2Y2MgPSBnZW5fcmVnX3J0eCAoREltb2Rl KTsKKyAgICBydHggZGlzY2FyZGVkdmNjID0gZ2VuX3JlZ19ydHggKERJbW9kZSk7CisgICAg cnR4IHNjYWxlZF9udW1lcmF0b3IgPSBnZW5fcmVnX3J0eCAoPE1PREU+bW9kZSk7CisgICAg cnR4IHNjYWxlZF9kZW5vbWluYXRvciA9IGdlbl9yZWdfcnR4ICg8TU9ERT5tb2RlKTsKKyAg ICBlbWl0X2luc24gKGdlbl9kaXZfc2NhbGU8bW9kZT4gKHNjYWxlZF9kZW5vbWluYXRvciwK KwkJCQkgICAgZGVub21pbmF0b3IsIG51bWVyYXRvciwKKwkJCQkgICAgZGVub21pbmF0b3Is IGRpc2NhcmRlZHZjYykpOworICAgIGVtaXRfaW5zbiAoZ2VuX2Rpdl9zY2FsZTxtb2RlPiAo c2NhbGVkX251bWVyYXRvciwKKwkJCQkgICAgZGVub21pbmF0b3IsIG51bWVyYXRvciwKKwkJ CQkgICAgbnVtZXJhdG9yLCB2Y2MpKTsKKworICAgIC8qIEZpbmQgdGhlIHJlY2lwcm9jYWwg b2YgdGhlIGRlbm9taW5hdG9yLCBhbmQgdXNlIE5ld3Rvbi1SYXBoc29uIHRvCisgICAgICAg aW1wcm92ZSB0aGUgYWNjdXJhY3kgb3ZlciB0aGUgYmFzaWMgaGFyZHdhcmUgaW5zdHJ1Y3Rp b24uICAqLwogICAgIHJ0eCBvbmUgPSBnY25fdmVjX2NvbnN0YW50ICg8TU9ERT5tb2RlLAog CQkgIGNvbnN0X2RvdWJsZV9mcm9tX3JlYWxfdmFsdWUgKGRjb25zdDEsIDxTQ0FMQVJfTU9E RT5tb2RlKSk7CiAgICAgcnR4IGluaXRyY3AgPSBnZW5fcmVnX3J0eCAoPE1PREU+bW9kZSk7 Ci0gICAgcnR4IGZtYSA9IGdlbl9yZWdfcnR4ICg8TU9ERT5tb2RlKTsKLSAgICBydHggcmNw OwotICAgIHJ0eCBudW0gPSBvcGVyYW5kc1sxXSwgZGVub20gPSBvcGVyYW5kc1syXTsKLQot ICAgIGJvb2wgaXNfcmNwID0gKEdFVF9DT0RFIChudW0pID09IENPTlNUX1ZFQ1RPUgotCQkg ICAmJiByZWFsX2lkZW50aWNhbAotCQkgICAgICAgIChDT05TVF9ET1VCTEVfUkVBTF9WQUxV RQotCQkJICAoQ09OU1RfVkVDVE9SX0VMVCAobnVtLCAwKSksICZkY29uc3RtMSkpOwotCi0g ICAgaWYgKGlzX3JjcCkKLSAgICAgIHJjcCA9IG9wZXJhbmRzWzBdOwotICAgIGVsc2UKLSAg ICAgIHJjcCA9IGdlbl9yZWdfcnR4ICg8TU9ERT5tb2RlKTsKLQotICAgIGVtaXRfaW5zbiAo Z2VuX3JlY2lwPG1vZGU+MiAoaW5pdHJjcCwgZGVub20pKTsKLSAgICBlbWl0X2luc24gKGdl bl9mbWE8bW9kZT40X25lZ29wMiAoZm1hLCBpbml0cmNwLCBkZW5vbSwgb25lKSk7Ci0gICAg ZW1pdF9pbnNuIChnZW5fZm1hPG1vZGU+NCAocmNwLCBmbWEsIGluaXRyY3AsIGluaXRyY3Ap KTsKLQotICAgIGlmICghaXNfcmNwKQotICAgICAgewotCXJ0eCBkaXZfZXN0ID0gZ2VuX3Jl Z19ydHggKDxNT0RFPm1vZGUpOwotCXJ0eCBmbWEyID0gZ2VuX3JlZ19ydHggKDxNT0RFPm1v ZGUpOwotCXJ0eCBmbWEzID0gZ2VuX3JlZ19ydHggKDxNT0RFPm1vZGUpOwotCXJ0eCBmbWE0 ID0gZ2VuX3JlZ19ydHggKDxNT0RFPm1vZGUpOwotCWVtaXRfaW5zbiAoZ2VuX211bDxtb2Rl PjMgKGRpdl9lc3QsIG51bSwgcmNwKSk7Ci0JZW1pdF9pbnNuIChnZW5fZm1hPG1vZGU+NF9u ZWdvcDIgKGZtYTIsIGRpdl9lc3QsIGRlbm9tLCBudW0pKTsKLQllbWl0X2luc24gKGdlbl9m bWE8bW9kZT40IChmbWEzLCBmbWEyLCByY3AsIGRpdl9lc3QpKTsKLQllbWl0X2luc24gKGdl bl9mbWE8bW9kZT40X25lZ29wMiAoZm1hNCwgZm1hMywgZGVub20sIG51bSkpOwotCWVtaXRf aW5zbiAoZ2VuX2ZtYTxtb2RlPjQgKG9wZXJhbmRzWzBdLCBmbWE0LCByY3AsIGZtYTMpKTsK LSAgICAgIH0KLQotICAgIERPTkU7Ci0gIH0pCi0KLShkZWZpbmVfZXhwYW5kICJkaXY8bW9k ZT4zIgotICBbKG1hdGNoX29wZXJhbmQ6RlAgMCAiZ2NuX3ZhbHVfZHN0X29wZXJhbmQiKQot ICAgKG1hdGNoX29wZXJhbmQ6RlAgMSAiZ2NuX3ZhbHVfc3JjMF9vcGVyYW5kIikKLSAgICht YXRjaF9vcGVyYW5kOkZQIDIgImdjbl92YWx1X3NyYzBfb3BlcmFuZCIpXQotICAiZmxhZ19y ZWNpcHJvY2FsX21hdGgiCi0gIHsKLSAgICBydHggb25lID0gY29uc3RfZG91YmxlX2Zyb21f cmVhbF92YWx1ZSAoZGNvbnN0MSwgPE1PREU+bW9kZSk7Ci0gICAgcnR4IGluaXRyY3AgPSBn ZW5fcmVnX3J0eCAoPE1PREU+bW9kZSk7Ci0gICAgcnR4IGZtYSA9IGdlbl9yZWdfcnR4ICg8 TU9ERT5tb2RlKTsKLSAgICBydHggcmNwOwotICAgIHJ0eCBudW0gPSBvcGVyYW5kc1sxXSwg ZGVub20gPSBvcGVyYW5kc1syXTsKLQotICAgIGJvb2wgaXNfcmNwID0gKEdFVF9DT0RFIChv cGVyYW5kc1sxXSkgPT0gQ09OU1RfRE9VQkxFCi0JCSAgICYmIHJlYWxfaWRlbnRpY2FsIChD T05TVF9ET1VCTEVfUkVBTF9WQUxVRSAob3BlcmFuZHNbMV0pLAotCQkJCSAgICAgICZkY29u c3RtMSkpOwotCi0gICAgaWYgKGlzX3JjcCkKLSAgICAgIHJjcCA9IG9wZXJhbmRzWzBdOwot ICAgIGVsc2UKLSAgICAgIHJjcCA9IGdlbl9yZWdfcnR4ICg8TU9ERT5tb2RlKTsKLQotICAg IGVtaXRfaW5zbiAoZ2VuX3JlY2lwPG1vZGU+MiAoaW5pdHJjcCwgZGVub20pKTsKLSAgICBl bWl0X2luc24gKGdlbl9mbWE8bW9kZT40X25lZ29wMiAoZm1hLCBpbml0cmNwLCBkZW5vbSwg b25lKSk7Ci0gICAgZW1pdF9pbnNuIChnZW5fZm1hPG1vZGU+NCAocmNwLCBmbWEsIGluaXRy Y3AsIGluaXRyY3ApKTsKLQotICAgIGlmICghaXNfcmNwKQotICAgICAgewotCXJ0eCBkaXZf ZXN0ID0gZ2VuX3JlZ19ydHggKDxNT0RFPm1vZGUpOwotCXJ0eCBmbWEyID0gZ2VuX3JlZ19y dHggKDxNT0RFPm1vZGUpOwotCXJ0eCBmbWEzID0gZ2VuX3JlZ19ydHggKDxNT0RFPm1vZGUp OwotCXJ0eCBmbWE0ID0gZ2VuX3JlZ19ydHggKDxNT0RFPm1vZGUpOwotCWVtaXRfaW5zbiAo Z2VuX211bDxtb2RlPjMgKGRpdl9lc3QsIG51bSwgcmNwKSk7Ci0JZW1pdF9pbnNuIChnZW5f Zm1hPG1vZGU+NF9uZWdvcDIgKGZtYTIsIGRpdl9lc3QsIGRlbm9tLCBudW0pKTsKLQllbWl0 X2luc24gKGdlbl9mbWE8bW9kZT40IChmbWEzLCBmbWEyLCByY3AsIGRpdl9lc3QpKTsKLQll bWl0X2luc24gKGdlbl9mbWE8bW9kZT40X25lZ29wMiAoZm1hNCwgZm1hMywgZGVub20sIG51 bSkpOwotCWVtaXRfaW5zbiAoZ2VuX2ZtYTxtb2RlPjQgKG9wZXJhbmRzWzBdLCBmbWE0LCBy Y3AsIGZtYTMpKTsKLSAgICAgIH0KLQorICAgIHJ0eCBmbWExID0gZ2VuX3JlZ19ydHggKDxN T0RFPm1vZGUpOworICAgIHJ0eCByY3AgPSBnZW5fcmVnX3J0eCAoPE1PREU+bW9kZSk7Cisg ICAgZW1pdF9pbnNuIChnZW5fcmVjaXA8bW9kZT4yIChpbml0cmNwLCBzY2FsZWRfZGVub21p bmF0b3IpKTsKKyAgICBlbWl0X2luc24gKGdlbl9mbWE8bW9kZT40X25lZ29wMiAoZm1hMSwg aW5pdHJjcCwgc2NhbGVkX2Rlbm9taW5hdG9yLCBvbmUpKTsKKyAgICBlbWl0X2luc24gKGdl bl9mbWE8bW9kZT40IChyY3AsIGZtYTEsIGluaXRyY3AsIGluaXRyY3ApKTsKKworICAgIC8q IERvIHRoZSBkaXZpc2lvbiAiYS9iIiB2aWEgImEqMS9iIiBhbmQgdXNlIE5ld3Rvbi1SYXBo c29uIHRvIGltcHJvdmUKKyAgICAgICB0aGUgYWNjdXJhY3kuICBUaGUgImRpdl9mbWFzIiBp bnN0cnVjdGlvbiByZXZlcnNlcyBhbnkgc2NhbGluZworICAgICAgIHBlcmZvcm1lZCBieSAi ZGl2X3NjYWxlIiwgYWJvdmUuICAqLworICAgIHJ0eCBkaXZfZXN0ID0gZ2VuX3JlZ19ydHgg KDxNT0RFPm1vZGUpOworICAgIHJ0eCBmbWEyID0gZ2VuX3JlZ19ydHggKDxNT0RFPm1vZGUp OworICAgIHJ0eCBmbWEzID0gZ2VuX3JlZ19ydHggKDxNT0RFPm1vZGUpOworICAgIHJ0eCBm bWE0ID0gZ2VuX3JlZ19ydHggKDxNT0RFPm1vZGUpOworICAgIHJ0eCBmbWFzID0gZ2VuX3Jl Z19ydHggKDxNT0RFPm1vZGUpOworICAgIGVtaXRfaW5zbiAoZ2VuX211bDxtb2RlPjMgKGRp dl9lc3QsIHNjYWxlZF9udW1lcmF0b3IsIHJjcCkpOworICAgIGVtaXRfaW5zbiAoZ2VuX2Zt YTxtb2RlPjRfbmVnb3AyIChmbWEyLCBkaXZfZXN0LCBzY2FsZWRfZGVub21pbmF0b3IsCisJ CQkJICAgICAgc2NhbGVkX251bWVyYXRvcikpOworICAgIGVtaXRfaW5zbiAoZ2VuX2ZtYTxt b2RlPjQgKGZtYTMsIGZtYTIsIHJjcCwgZGl2X2VzdCkpOworICAgIGVtaXRfaW5zbiAoZ2Vu X2ZtYTxtb2RlPjRfbmVnb3AyIChmbWE0LCBmbWEzLCBzY2FsZWRfZGVub21pbmF0b3IsCisJ CQkJICAgICAgc2NhbGVkX251bWVyYXRvcikpOworICAgIGVtaXRfaW5zbiAoZ2VuX2Rpdl9m bWFzPG1vZGU+IChmbWFzLCBmbWE0LCByY3AsIGZtYTMsIHZjYykpOworCisgICAgLyogRmlu YWxseSwgdXNlICJkaXZfZml4dXAiIHRvIGdldCB0aGUgZGV0YWlscyByaWdodCBhbmQgZmlu ZCBlcnJvcnMuICAqLworICAgIGVtaXRfaW5zbiAoZ2VuX2Rpdl9maXh1cDxtb2RlPiAob3Bl cmFuZHNbMF0sIGZtYXMsIGRlbm9taW5hdG9yLAorCQkJCSAgICBudW1lcmF0b3IpKTsKICAg ICBET05FOwogICB9KQogCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2djbi9nY24uY2MgYi9n Y2MvY29uZmlnL2djbi9nY24uY2MKaW5kZXggYTdkMjc4Y2QyZjguLjU2MDhkODVhMWEwIDEw MDY0NAotLS0gYS9nY2MvY29uZmlnL2djbi9nY24uY2MKKysrIGIvZ2NjL2NvbmZpZy9nY24v Z2NuLmNjCkBAIC01ODQwLDYgKzU4NDAsNyBAQCBnY25fbWRfcmVvcmcgKHZvaWQpCiAgICAg ICBhdHRyX3R5cGUgaXR5cGUgPSBnZXRfYXR0cl90eXBlIChpbnNuKTsKICAgICAgIGF0dHJf dW5pdCBpdW5pdCA9IGdldF9hdHRyX3VuaXQgKGluc24pOwogICAgICAgYXR0cl9kZWxheWVk dXNlIGlkZWxheWVkdXNlID0gZ2V0X2F0dHJfZGVsYXllZHVzZSAoaW5zbik7CisgICAgICBp bnQgaXZjY3dhaXQgPSBnZXRfYXR0cl92Y2N3YWl0IChpbnNuKTsKICAgICAgIEhBUkRfUkVH X1NFVCBpcmVhZHMsIGl3cml0ZXM7CiAgICAgICBDTEVBUl9IQVJEX1JFR19TRVQgKGlyZWFk cyk7CiAgICAgICBDTEVBUl9IQVJEX1JFR19TRVQgKGl3cml0ZXMpOwpAQCAtNTkxNyw2ICs1 OTE4LDE0IEBAIGdjbl9tZF9yZW9yZyAodm9pZCkKIAkgICAgICAmJiAoKGhhcmRfcmVnX3Nl dF9pbnRlcnNlY3RfcAogCQkgICAocHJldl9pbnNuLT5yZWFkcywgaXdyaXRlcykpKSkKIAkg ICAgbm9wc19ycWQgPSAxIC0gcHJldl9pbnNuLT5hZ2U7CisKKwkgIC8qIEluc3RydWN0aW9u IHRoYXQgcmVxdWlyZXMgVkNDIGlzIG5vdCB3cml0dGVuIHRvbyBjbG9zZSBiZWZvcmUKKwkg ICAgIHVzaW5nIGl0LiAgKi8KKwkgIGlmIChwcmV2X2luc24tPmFnZSA8IGl2Y2N3YWl0CisJ ICAgICAgJiYgKGhhcmRfcmVnX3NldF9pbnRlcnNlY3RfcAorCQkgIChwcmV2X2luc24tPndy aXRlcywKKwkJICAgcmVnX2NsYXNzX2NvbnRlbnRzWyhpbnQpVkNDX0NPTkRJVElPTkFMX1JF R10pKSkKKwkgICAgbm9wc19ycWQgPSBpdmNjd2FpdCAtIHByZXZfaW5zbi0+YWdlOwogCX0K IAogICAgICAgLyogSW5zZXJ0IHRoZSByZXF1aXJlZCBudW1iZXIgb2YgTk9Qcy4gICovCmRp ZmYgLS1naXQgYS9nY2MvY29uZmlnL2djbi9nY24ubWQgYi9nY2MvY29uZmlnL2djbi9nY24u bWQKaW5kZXggYzkwMzAzYzU0YjUuLjcwNjVhY2Y0MDJiIDEwMDY0NAotLS0gYS9nY2MvY29u ZmlnL2djbi9nY24ubWQKKysrIGIvZ2NjL2NvbmZpZy9nY24vZ2NuLm1kCkBAIC05MCw3ICs5 MCw4IEBAIChkZWZpbmVfY19lbnVtICJ1bnNwZWMiIFsKICAgVU5TUEVDX1JDUAogICBVTlNQ RUNfRkxCSVRfSU5UCiAgIFVOU1BFQ19GTE9PUiBVTlNQRUNfQ0VJTCBVTlNQRUNfU0lOIFVO U1BFQ19DT1MgVU5TUEVDX0VYUDIgVU5TUEVDX0xPRzIKLSAgVU5TUEVDX0xERVhQIFVOU1BF Q19GUkVYUF9FWFAgVU5TUEVDX0ZSRVhQX01BTlRdKQorICBVTlNQRUNfTERFWFAgVU5TUEVD X0ZSRVhQX0VYUCBVTlNQRUNfRlJFWFBfTUFOVAorICBVTlNQRUNfRElWX1NDQUxFIFVOU1BF Q19ESVZfRk1BUyBVTlNQRUNfRElWX0ZJWFVQXSkKIAogOzsgfX19CiA7OyB7e3sgQXR0cmli dXRlcwpAQCAtMzAyLDYgKzMwMywxMSBAQCAoZGVmaW5lX2F0dHIgImxhbmVzZWxlY3QiICJ5 ZXMsbm8iIChjb25zdF9zdHJpbmcgIm5vIikpCiAKIChkZWZpbmVfYXR0ciAiZGVsYXllZHVz ZSIgInllcyxubyIgKGNvbnN0X3N0cmluZyAibm8iKSkKIAorOyBJZGVudGlmeSBpbnN0cnVj dGlvbnMgdGhhdCByZXF1aXJlICJNYW51YWxseSBJbnNlcnRlZCBXYWl0IFN0YXRlIiBpZgor OyBhIHByZXZpb3VzIGluc3RydWN0aW9uIHdyaXRlcyB0byBWQ0MuICBUaGUgbnVtYmVyIGdp dmVzIHRoZSBudW1iZXIgb2YgTk9Qcy4KKworKGRlZmluZV9hdHRyICJ2Y2N3YWl0IiAiIiAo Y29uc3RfaW50IDApKQorCiA7OyB9fX0KIDs7IHt7eyBJdGVyYXRvcnMgdXNlZnVsIGFjcm9z cyB0aGUgd29sZSBtYWNoaW5lIGRlc2NyaXB0aW9uCiAKZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9nY24vZnBkaXYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9nY24vZnBkaXYuYwppbmRleCA3MTI1YjZmNmJhMC4uOTM2ZDM5Y2Y5OGUgMTAwNjQ0Ci0t LSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9nY24vZnBkaXYuYworKysgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvZ2NuL2ZwZGl2LmMKQEAgLTEsNSArMSw0IEBACiAvKiB7IGRn LWRvIHJ1biB9ICovCi0vKiB7IGRnLW9wdGlvbnMgIi1mZmFzdC1tYXRoIiB9ICovCiAKICNp bmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgo= --------------xVmU3MgdDzkMUOOQEhP4HbsI--