From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id C0ED56E04B for ; Wed, 6 Mar 2019 02:18:38 +0000 (UTC) From: Kevin Strasser Date: Tue, 5 Mar 2019 18:18:33 -0800 Message-Id: <1551838717-5283-2-git-send-email-kevin.strasser@intel.com> In-Reply-To: <1551838717-5283-1-git-send-email-kevin.strasser@intel.com> References: <1551838717-5283-1-git-send-email-kevin.strasser@intel.com> Subject: [igt-dev] [RFC v2 1/5] lib: Add halffloat implementation List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: UHJvYmUgZm9yIGFuZCBtYWtlIGFuIEFQSSBhdmFpbGFibGUgZm9yIHRlc3RzIHRvIHVzZSBmMTZj IGludHJpbnNpY3MgdG8KZ2VuZXJhdGUgbmVlZGVkIGZwMTYgcGl4ZWwgZGF0YS4KCkFsc28gaW1w b3J0IGEgcHVyZSBjIGZwMzIgPC0+IGZwMTYgY29udmVyc2lvbiBpbXBsZW1lbnRhdGlvbiBmcm9t IE1lc2EKMTguMy40LCB3aGljaCB3aWxsIGFjdCBhcyBhIGZhbGxiYWNrIHdoZW4gZjE2YyBpcyB1 bmF2YWlsYWJsZS4KCnJmYzI6Ci0gQ2hhbmdlIEFQSSB0byByZWR1Y2UgbnVtYmVyIG9mIGZ1bmN0 aW9uIGNhbGxzIChNYWFydGVuKQoKU2lnbmVkLW9mZi1ieTogS2V2aW4gU3RyYXNzZXIgPGtldmlu LnN0cmFzc2VyQGludGVsLmNvbT4KLS0tCiBDT1BZSU5HICAgICAgICAgICAgICB8ICAyMiArKysr KwogbGliL01ha2VmaWxlLnNvdXJjZXMgfCAgIDIgKwogbGliL2lndF9oYWxmZmxvYXQuYyAgfCAy MzQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBs aWIvaWd0X2hhbGZmbG9hdC5oICB8ICAyNyArKysrKysKIGxpYi9pZ3RfeDg2LmMgICAgICAgIHwg ICA5ICsrCiBsaWIvaWd0X3g4Ni5oICAgICAgICB8ICAgMSArCiBsaWIvbWVzb24uYnVpbGQgICAg ICB8ICAgMSArCiA3IGZpbGVzIGNoYW5nZWQsIDI5NiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9k ZSAxMDA2NDQgbGliL2lndF9oYWxmZmxvYXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3Rf aGFsZmZsb2F0LmgKCmRpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORwppbmRleCAyOWUwMjM4 Li4wZmU2NTg0IDEwMDY0NAotLS0gYS9DT1BZSU5HCisrKyBiL0NPUFlJTkcKQEAgLTEyNiwzICsx MjYsMjUgQEAgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIE9SIEFOWSBEQU1BR0VTCiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNF LCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KIEFDVElPTiBPRiBDT05UUkFDVCwgTkVH TElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgor CitDb3B5cmlnaHQgKEMpIDE5OTktMjAwNyAgQnJpYW4gUGF1bCAgIEFsbCBSaWdodHMgUmVzZXJ2 ZWQuCitDb3B5cmlnaHQgMjAxNSBQaGlsaXAgVGF5bG9yIDxwaGlsaXBAemF5bmFyLmNvLnVrPgor Q29weXJpZ2h0IDIwMTggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorCitQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKK3RvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KK3RoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCitTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAoraW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTCitPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorVEhFIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IK K09USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLAorQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCitPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdB UkUuCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3Vy Y2VzCmluZGV4IGNmMjcyMDkuLjg5ZjZjZTUgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5zb3Vy Y2VzCisrKyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCkBAIC0zMCw2ICszMCw4IEBAIGxpYl9zb3Vy Y2VfbGlzdCA9CSAJXAogCWlndF9ndC5oCQlcCiAJaWd0X2d2dC5jCQlcCiAJaWd0X2d2dC5oCQlc CisJaWd0X2hhbGZmbG9hdC5jCQlcCisJaWd0X2hhbGZmbG9hdC5oCQlcCiAJaWd0X21hdHJpeC5j CQlcCiAJaWd0X21hdHJpeC5oCQlcCiAJaWd0X3ByaW1lcy5jCQlcCmRpZmYgLS1naXQgYS9saWIv aWd0X2hhbGZmbG9hdC5jIGIvbGliL2lndF9oYWxmZmxvYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5mYzA5OTMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2lndF9oYWxm ZmxvYXQuYwpAQCAtMCwwICsxLDIzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA3 ICBCcmlhbiBQYXVsICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDE1IFBo aWxpcCBUYXlsb3IgPHBoaWxpcEB6YXluYXIuY28udWs+CisgKiBDb3B5cmlnaHQgMjAxOCBBZHZh bmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0 aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICog aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisg KgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U IFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IK KyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8YXNz ZXJ0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiaWd0X2hhbGZmbG9hdC5oIgor I2luY2x1ZGUgImlndF94ODYuaCIKKwordHlwZWRlZiB1bmlvbiB7IGZsb2F0IGY7IGludDMyX3Qg aTsgdWludDMyX3QgdTsgfSBmaV90eXBlOworCisvKioKKyAqIENvbnZlcnQgYSA0LWJ5dGUgZmxv YXQgdG8gYSAyLWJ5dGUgaGFsZiBmbG9hdC4KKyAqCisgKiBOb3QgYWxsIGZsb2F0MzIgdmFsdWVz IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5IGFzIGEgZmxvYXQxNiB2YWx1ZS4gV2UKKyAqIHJv dW5kIHN1Y2ggaW50ZXJtZWRpYXRlIGZsb2F0MzIgdmFsdWVzIHRvIHRoZSBuZWFyZXN0IGZsb2F0 MTYuIFdoZW4gdGhlCisgKiBmbG9hdDMyIGxpZXMgZXhhY3RseSBiZXR3ZWVuIHRvIGZsb2F0MTYg dmFsdWVzLCB3ZSByb3VuZCB0byB0aGUgb25lIHdpdGgKKyAqIGFuIGV2ZW4gbWFudGlzc2EuCisg KgorICogVGhpcyByb3VuZGluZyBiZWhhdmlvciBoYXMgc2V2ZXJhbCBiZW5lZml0czoKKyAqICAg LSBJdCBoYXMgbm8gc2lnbiBiaWFzLgorICoKKyAqICAgLSBJdCByZXByb2R1Y2VzIHRoZSBiZWhh dmlvciBvZiByZWFsIGhhcmR3YXJlOiBvcGNvZGUgRjMyVE8xNiBpbiBJbnRlbCdzCisgKiAgICAg R1BVIElTQS4KKyAqCisgKiAgIC0gQnkgcmVwcm9kdWNpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBH UFUgKGF0IGxlYXN0IG9uIEludGVsIGhhcmR3YXJlKSwKKyAqICAgICBjb21waWxlLXRpbWUgZXZh bHVhdGlvbiBvZiBjb25zdGFudCBwYWNrSGFsZjJ4MTYgR0xTTCBleHByZXNzaW9ucyB3aWxsCisg KiAgICAgcmVzdWx0IGluIHRoZSBzYW1lIHZhbHVlIGFzIGlmIHRoZSBleHByZXNzaW9uIHdlcmUg ZXhlY3V0ZWQgb24gdGhlIEdQVS4KKyAqLworc3RhdGljIGlubGluZSB1aW50MTZfdCBfZmxvYXRf dG9faGFsZihmbG9hdCB2YWwpCit7CisJY29uc3QgZmlfdHlwZSBmaSA9IHt2YWx9OworCWNvbnN0 IGludCBmbHRfbSA9IGZpLmkgJiAweDdmZmZmZjsKKwljb25zdCBpbnQgZmx0X2UgPSAoZmkuaSA+ PiAyMykgJiAweGZmOworCWNvbnN0IGludCBmbHRfcyA9IChmaS5pID4+IDMxKSAmIDB4MTsKKwlp bnQgcywgZSwgbSA9IDA7CisJdWludDE2X3QgcmVzdWx0OworCisJLyogc2lnbiBiaXQgKi8KKwlz ID0gZmx0X3M7CisKKwkvKiBoYW5kbGUgc3BlY2lhbCBjYXNlcyAqLworCWlmICgoZmx0X2UgPT0g MCkgJiYgKGZsdF9tID09IDApKSB7CisJCS8qIHplcm8gKi8KKwkJLyogbSA9IDA7IC0gYWxyZWFk eSBzZXQgKi8KKwkJZSA9IDA7CisJfSBlbHNlIGlmICgoZmx0X2UgPT0gMCkgJiYgKGZsdF9tICE9 IDApKSB7CisJCS8qIGRlbm9ybSAtLSBkZW5vcm0gZmxvYXQgbWFwcyB0byAwIGhhbGYgKi8KKwkJ LyogbSA9IDA7IC0gYWxyZWFkeSBzZXQgKi8KKwkJZSA9IDA7CisJfSBlbHNlIGlmICgoZmx0X2Ug PT0gMHhmZikgJiYgKGZsdF9tID09IDApKSB7CisJCS8qIGluZmluaXR5ICovCisJCS8qIG0gPSAw OyAtIGFscmVhZHkgc2V0ICovCisJCWUgPSAzMTsKKwl9IGVsc2UgaWYgKChmbHRfZSA9PSAweGZm KSAmJiAoZmx0X20gIT0gMCkpIHsKKwkJLyogTmFOICovCisJCW0gPSAxOworCQllID0gMzE7CisJ fSBlbHNlIHsKKwkJLyogcmVndWxhciBudW1iZXIgKi8KKwkJY29uc3QgaW50IG5ld19leHAgPSBm bHRfZSAtIDEyNzsKKwkJaWYgKG5ld19leHAgPCAtMTQpIHsKKwkJCS8qIFRoZSBmbG9hdDMyIGxp ZXMgaW4gdGhlIHJhbmdlICgwLjAsIG1pbl9ub3JtYWwxNikgYW5kCisJCQkgKiBpcyByb3VuZGVk IHRvIGEgbmVhcmJ5IGZsb2F0MTYgdmFsdWUuIFRoZSByZXN1bHQgd2lsbAorCQkJICogYmUgZWl0 aGVyIHplcm8sIHN1Ym5vcm1hbCwgb3Igbm9ybWFsLgorCQkJICovCisJCQllID0gMDsKKwkJCW0g PSBscmludGYoKDEgPDwgMjQpICogZmFic2YoZmkuZikpOworCQl9IGVsc2UgaWYgKG5ld19leHAg PiAxNSkgeworCQkJLyogbWFwIHRoaXMgdmFsdWUgdG8gaW5maW5pdHkgKi8KKwkJCS8qIG0gPSAw OyAtIGFscmVhZHkgc2V0ICovCisJCQllID0gMzE7CisJCX0gZWxzZSB7CisJCQkvKiBUaGUgZmxv YXQzMiBsaWVzIGluIHRoZSByYW5nZQorCQkJICogICBbbWluX25vcm1hbDE2LCBtYXhfbm9ybWFs MTYgKyBtYXhfc3RlcDE2KQorCQkJICogYW5kIGlzIHJvdW5kZWQgdG8gYSBuZWFyYnkgZmxvYXQx NiB2YWx1ZS4gVGhlIHJlc3VsdAorCQkJICogd2lsbCBiZSBlaXRoZXIgbm9ybWFsIG9yIGluZmlu aXRlLgorCQkJICovCisJCQllID0gbmV3X2V4cCArIDE1OworCQkJbSA9IGxyaW50ZihmbHRfbSAv IChmbG9hdCkoMSA8PCAxMykpOworCQl9CisJfQorCisJYXNzZXJ0KDAgPD0gbSAmJiBtIDw9IDEw MjQpOworCWlmIChtID09IDEwMjQpIHsKKwkJLyogVGhlIGZsb2F0MzIgd2FzIHJvdW5kZWQgdXB3 YXJkcyBpbnRvIHRoZSByYW5nZSBvZiB0aGUgbmV4dAorCQkgKiBleHBvbmVudCwgc28gYnVtcCB0 aGUgZXhwb25lbnQuIFRoaXMgY29ycmVjdGx5IGhhbmRsZXMgdGhlCisJCSAqIGNhc2Ugd2hlcmUg ZjMyIHNob3VsZCBiZSByb3VuZGVkIHVwIHRvIGZsb2F0MTYgaW5maW5pdHkuCisJCSAqLworCQkr K2U7CisJCW0gPSAwOworCX0KKworCXJlc3VsdCA9IChzIDw8IDE1KSB8IChlIDw8IDEwKSB8IG07 CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBDb252ZXJ0IGEgMi1ieXRlIGhhbGYgZmxv YXQgdG8gYSA0LWJ5dGUgZmxvYXQuCisgKiBCYXNlZCBvbiBjb2RlIGZyb206CisgKiBodHRwOi8v d3d3Lm9wZW5nbC5vcmcvZGlzY3Vzc2lvbl9ib2FyZHMvdWJiL0ZvcnVtMy9IVE1MLzAwODc4Ni5o dG1sCisgKi8KK3N0YXRpYyBpbmxpbmUgZmxvYXQgX2hhbGZfdG9fZmxvYXQodWludDE2X3QgdmFs KQoreworCS8qIFhYWCBjb3VsZCBhbHNvIHVzZSBhIDY0Sy1lbnRyeSBsb29rdXAgdGFibGUgKi8K Kwljb25zdCBpbnQgbSA9IHZhbCAmIDB4M2ZmOworCWNvbnN0IGludCBlID0gKHZhbCA+PiAxMCkg JiAweDFmOworCWNvbnN0IGludCBzID0gKHZhbCA+PiAxNSkgJiAweDE7CisJaW50IGZsdF9tLCBm bHRfZSwgZmx0X3M7CisJZmlfdHlwZSBmaTsKKworCS8qIHNpZ24gYml0ICovCisJZmx0X3MgPSBz OworCisJLyogaGFuZGxlIHNwZWNpYWwgY2FzZXMgKi8KKwlpZiAoKGUgPT0gMCkgJiYgKG0gPT0g MCkpIHsKKwkJLyogemVybyAqLworCQlmbHRfbSA9IDA7CisJCWZsdF9lID0gMDsKKwl9IGVsc2Ug aWYgKChlID09IDApICYmIChtICE9IDApKSB7CisJCS8qIGRlbm9ybSAtLSBkZW5vcm0gaGFsZiB3 aWxsIGZpdCBpbiBub24tZGVub3JtIHNpbmdsZSAqLworCQljb25zdCBmbG9hdCBoYWxmX2Rlbm9y bSA9IDEuMGYgLyAxNjM4NC4wZjsgLyogMl4tMTQgKi8KKwkJZmxvYXQgbWFudGlzc2EgPSAoKGZs b2F0KSAobSkpIC8gMTAyNC4wZjsKKwkJZmxvYXQgc2lnbiA9IHMgPyAtMS4wZiA6IDEuMGY7CisJ CXJldHVybiBzaWduICogbWFudGlzc2EgKiBoYWxmX2Rlbm9ybTsKKwl9IGVsc2UgaWYgKChlID09 IDMxKSAmJiAobSA9PSAwKSkgeworCQkvKiBpbmZpbml0eSAqLworCQlmbHRfZSA9IDB4ZmY7CisJ CWZsdF9tID0gMDsKKwl9IGVsc2UgaWYgKChlID09IDMxKSAmJiAobSAhPSAwKSkgeworCQkvKiBO YU4gKi8KKwkJZmx0X2UgPSAweGZmOworCQlmbHRfbSA9IDE7CisJfSBlbHNlIHsKKwkJLyogcmVn dWxhciAqLworCQlmbHRfZSA9IGUgKyAxMTI7CisJCWZsdF9tID0gbSA8PCAxMzsKKwl9CisKKwlm aS5pID0gKGZsdF9zIDw8IDMxKSB8IChmbHRfZSA8PCAyMykgfCBmbHRfbTsKKwlyZXR1cm4gZmku ZjsKK30KKworI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgIWRlZmluZWQoX19jbGFuZ19fKQor I3ByYWdtYSBHQ0MgcHVzaF9vcHRpb25zCisjcHJhZ21hIEdDQyB0YXJnZXQoImYxNmMiKQorCisj aW5jbHVkZSA8aW1taW50cmluLmg+CisKK3N0YXRpYyB2b2lkIGZsb2F0X3RvX2hhbGZfZjE2Yyhj b25zdCBmbG9hdCAqZiwgdWludDE2X3QgKmgsIHVuc2lnbmVkIGludCBudW0pCit7CisJZm9yIChp bnQgaSA9IDA7IGkgPCBudW07IGkrKykKKwkJaFtpXSA9IF9jdnRzc19zaChmW2ldLCAwKTsKK30K Kworc3RhdGljIHZvaWQgaGFsZl90b19mbG9hdF9mMTZjKGNvbnN0IHVpbnQxNl90ICpoLCBmbG9h dCAqZiwgdW5zaWduZWQgaW50IG51bSkKK3sKKwlmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsr KQorCQlmW2ldID0gX2N2dHNoX3NzKGhbaV0pOworfQorCitzdGF0aWMgdm9pZCBmbG9hdF90b19o YWxmKGNvbnN0IGZsb2F0ICpmLCB1aW50MTZfdCAqaCwgdW5zaWduZWQgaW50IG51bSkKK3sKKwlm b3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKQorCQloW2ldID0gX2Zsb2F0X3RvX2hhbGYoZltp XSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGZfdG9fZmxvYXQoY29uc3QgdWludDE2X3QgKmgsIGZs b2F0ICpmLCB1bnNpZ25lZCBpbnQgbnVtKQoreworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtOyBp KyspCisJCWZbaV0gPSBfaGFsZl90b19mbG9hdChoW2ldKTsKK30KKworI3ByYWdtYSBHQ0MgcG9w X29wdGlvbnMKKworc3RhdGljIHZvaWQgKCpyZXNvbHZlX2Zsb2F0X3RvX2hhbGYodm9pZCkpKGNv bnN0IGZsb2F0ICpmLCB1aW50MTZfdCAqaCwgdW5zaWduZWQgaW50IG51bSkKK3sKKwlpZiAoaWd0 X3g4Nl9mZWF0dXJlcygpICYgRjE2QykKKwkJcmV0dXJuIGZsb2F0X3RvX2hhbGZfZjE2YzsKKwor CXJldHVybiBmbG9hdF90b19oYWxmOworfQorCit2b2lkIGlndF9mbG9hdF90b19oYWxmKGNvbnN0 IGZsb2F0ICpmLCB1aW50MTZfdCAqaCwgdW5zaWduZWQgaW50IG51bSkKKwlfX2F0dHJpYnV0ZV9f KChpZnVuYygicmVzb2x2ZV9mbG9hdF90b19oYWxmIikpKTsKKworc3RhdGljIHZvaWQgKCpyZXNv bHZlX2hhbGZfdG9fZmxvYXQodm9pZCkpKGNvbnN0IHVpbnQxNl90ICpoLCBmbG9hdCAqZiwgdW5z aWduZWQgaW50IG51bSkKK3sKKwlpZiAoaWd0X3g4Nl9mZWF0dXJlcygpICYgRjE2QykKKwkJcmV0 dXJuIGhhbGZfdG9fZmxvYXRfZjE2YzsKKworCXJldHVybiBoYWxmX3RvX2Zsb2F0OworfQorCit2 b2lkIGlndF9oYWxmX3RvX2Zsb2F0KGNvbnN0IHVpbnQxNl90ICpoLCBmbG9hdCAqZiwgdW5zaWdu ZWQgaW50IG51bSkKKwlfX2F0dHJpYnV0ZV9fKChpZnVuYygicmVzb2x2ZV9oYWxmX3RvX2Zsb2F0 IikpKTsKKworI2Vsc2UKKwordm9pZCBpZ3RfZmxvYXRfdG9faGFsZihjb25zdCBmbG9hdCAqZiwg dWludDE2X3QgKmgsIHVuc2lnbmVkIGludCBudW0pCit7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBu dW07IGkrKykKKwkJaFtpXSA9IF9mbG9hdF90b19oYWxmKGZbaV0pOworfQorCitmbG9hdCBpZ3Rf aGFsZl90b19mbG9hdChjb25zdCB1aW50MTZfdCAqaCwgZmxvYXQgKmYsIHVuc2lnbmVkIGludCBu dW0pCit7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykKKwkJZltpXSA9IF9oYWxmX3Rv X2Zsb2F0KGhbaV0pOworfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliL2lndF9oYWxmZmxv YXQuaCBiL2xpYi9pZ3RfaGFsZmZsb2F0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uOGRiNDQ4YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfaGFsZmZsb2F0LmgKQEAg LTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA3ICBCcmlhbiBQYXVs ICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgKiBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAq CisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgor ICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzdGRp bnQuaD4KKwordm9pZCBpZ3RfZmxvYXRfdG9faGFsZihjb25zdCBmbG9hdCAqZiwgdWludDE2X3Qg KmgsIHVuc2lnbmVkIGludCBudW0pOwordm9pZCBpZ3RfaGFsZl90b19mbG9hdChjb25zdCB1aW50 MTZfdCAqaCwgZmxvYXQgKmYsIHVuc2lnbmVkIGludCBudW0pOworCmRpZmYgLS1naXQgYS9saWIv aWd0X3g4Ni5jIGIvbGliL2lndF94ODYuYwppbmRleCA4OGU1MTRkLi45ZDI4ZTZiIDEwMDY0NAot LS0gYS9saWIvaWd0X3g4Ni5jCisrKyBiL2xpYi9pZ3RfeDg2LmMKQEAgLTg4LDYgKzg4LDEwIEBA CiAjZGVmaW5lIGJpdF9BVlgJCSgxIDw8IDI4KQogI2VuZGlmCiAKKyNpZm5kZWYgYml0X0YxNkMK KyNkZWZpbmUgYml0X0YxNkMJKDEgPDwgMjkpCisjZW5kaWYKKwogI2lmbmRlZiBiaXRfQVZYMgog I2RlZmluZSBiaXRfQVZYMgkoMTw8NSkKICNlbmRpZgpAQCAtMTM4LDYgKzE0Miw5IEBAIHVuc2ln bmVkIGlndF94ODZfZmVhdHVyZXModm9pZCkKIAogCQlpZiAoZWR4ICYgYml0X1NTRTIpCiAJCQlm ZWF0dXJlcyB8PSBTU0UyOworCisJCWlmIChlZHggJiBiaXRfRjE2QykKKwkJCWZlYXR1cmVzIHw9 IEYxNkM7CiAJfQogCiAJaWYgKG1heCA+PSA3KSB7CkBAIC0xNzQsNiArMTgxLDggQEAgY2hhciAq aWd0X3g4Nl9mZWF0dXJlc190b19zdHJpbmcodW5zaWduZWQgZmVhdHVyZXMsIGNoYXIgKmxpbmUp CiAJCWxpbmUgKz0gc3ByaW50ZihsaW5lLCAiLCBhdngiKTsKIAlpZiAoZmVhdHVyZXMgJiBBVlgy KQogCQlsaW5lICs9IHNwcmludGYobGluZSwgIiwgYXZ4MiIpOworCWlmIChmZWF0dXJlcyAmIEYx NkMpCisJCWxpbmUgKz0gc3ByaW50ZihsaW5lLCAiLCBmMTZjIik7CiAKIAkodm9pZClsaW5lOwog CmRpZmYgLS1naXQgYS9saWIvaWd0X3g4Ni5oIGIvbGliL2lndF94ODYuaAppbmRleCBkNGY4YzM0 Li5jN2I4NGRlIDEwMDY0NAotLS0gYS9saWIvaWd0X3g4Ni5oCisrKyBiL2xpYi9pZ3RfeDg2LmgK QEAgLTM5LDYgKzM5LDcgQEAKICNkZWZpbmUgU1NFNF8yCTB4NDAKICNkZWZpbmUgQVZYCTB4ODAK ICNkZWZpbmUgQVZYMgkweDEwMAorI2RlZmluZSBGMTZDCTB4MjAwCiAKICNpZiBkZWZpbmVkKF9f eDg2XzY0X18pIHx8IGRlZmluZWQoX19pMzg2X18pCiB1bnNpZ25lZCBpZ3RfeDg2X2ZlYXR1cmVz KHZvaWQpOwpkaWZmIC0tZ2l0IGEvbGliL21lc29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkCmlu ZGV4IDBlYjU1ODUuLmVkZjBhNjYgMTAwNjQ0Ci0tLSBhL2xpYi9tZXNvbi5idWlsZAorKysgYi9s aWIvbWVzb24uYnVpbGQKQEAgLTExLDYgKzExLDcgQEAgbGliX3NvdXJjZXMgPSBbCiAJJ2lndF9h dXguYycsCiAJJ2lndF9ndC5jJywKIAknaWd0X2d2dC5jJywKKwknaWd0X2hhbGZmbG9hdC5jJywK IAknaWd0X21hdHJpeC5jJywKIAknaWd0X3ByaW1lcy5jJywKIAknaWd0X3JhbmQuYycsCi0tIAoy LjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0 LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2