From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id CDD7289BA3 for ; Sun, 3 Mar 2019 01:39:07 +0000 (UTC) From: Kevin Strasser Date: Sat, 2 Mar 2019 17:39:02 -0800 Message-Id: <1551577146-2348-2-git-send-email-kevin.strasser@intel.com> In-Reply-To: <1551577146-2348-1-git-send-email-kevin.strasser@intel.com> References: <1551577146-2348-1-git-send-email-kevin.strasser@intel.com> Subject: [igt-dev] [RFC 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 bmF2YWlsYWJsZS4KClNpZ25lZC1vZmYtYnk6IEtldmluIFN0cmFzc2VyIDxrZXZpbi5zdHJhc3Nl ckBpbnRlbC5jb20+Ci0tLQogQ09QWUlORyAgICAgICAgICAgICAgfCAgMjIgKysrKysrCiBsaWIv TWFrZWZpbGUuc291cmNlcyB8ICAgMiArCiBsaWIvaWd0X2hhbGZmbG9hdC5jICB8IDIxOCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYi9pZ3Rf aGFsZmZsb2F0LmggIHwgIDI3ICsrKysrKysKIGxpYi9pZ3RfeDg2LmMgICAgICAgIHwgICA5ICsr KwogbGliL2lndF94ODYuaCAgICAgICAgfCAgIDEgKwogbGliL21lc29uLmJ1aWxkICAgICAgfCAg IDEgKwogNyBmaWxlcyBjaGFuZ2VkLCAyODAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGxpYi9pZ3RfaGFsZmZsb2F0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2hhbGZm bG9hdC5oCgpkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKaW5kZXggMjllMDIzOC4uMGZl NjU4NCAxMDA2NDQKLS0tIGEvQ09QWUlORworKysgYi9DT1BZSU5HCkBAIC0xMjYsMyArMTI2LDI1 IEBAIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBP UiBBTlkgREFNQUdFUwogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFU QSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VO Q0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgogT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworQ29w eXJpZ2h0IChDKSAxOTk5LTIwMDcgIEJyaWFuIFBhdWwgICBBbGwgUmlnaHRzIFJlc2VydmVkLgor Q29weXJpZ2h0IDIwMTUgUGhpbGlwIFRheWxvciA8cGhpbGlwQHpheW5hci5jby51az4KK0NvcHly aWdodCAyMDE4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKworUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK K2NvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCit0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCit0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKK2Fu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKK2luIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUg SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVT UworT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKK1RIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCitPVEhF UiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwKK0FSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUgorT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpk aWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwpp bmRleCBjZjI3MjA5Li44OWY2Y2U1IDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUuc291cmNlcwor KysgYi9saWIvTWFrZWZpbGUuc291cmNlcwpAQCAtMzAsNiArMzAsOCBAQCBsaWJfc291cmNlX2xp c3QgPQkgCVwKIAlpZ3RfZ3QuaAkJXAogCWlndF9ndnQuYwkJXAogCWlndF9ndnQuaAkJXAorCWln dF9oYWxmZmxvYXQuYwkJXAorCWlndF9oYWxmZmxvYXQuaAkJXAogCWlndF9tYXRyaXguYwkJXAog CWlndF9tYXRyaXguaAkJXAogCWlndF9wcmltZXMuYwkJXApkaWZmIC0tZ2l0IGEvbGliL2lndF9o YWxmZmxvYXQuYyBiL2xpYi9pZ3RfaGFsZmZsb2F0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZTJhYjAwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfaGFsZmZsb2F0 LmMKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNyAgQnJp YW4gUGF1bCAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAxNSBQaGlsaXAg VGF5bG9yIDxwaGlsaXBAemF5bmFyLmNvLnVrPgorICogQ29weXJpZ2h0IDIwMTggQWR2YW5jZWQg TWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAqIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBP VEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGFzc2VydC5o PgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImlndF9oYWxmZmxvYXQuaCIKKyNpbmNs dWRlICJpZ3RfeDg2LmgiCisKK3R5cGVkZWYgdW5pb24geyBmbG9hdCBmOyBpbnQzMl90IGk7IHVp bnQzMl90IHU7IH0gZmlfdHlwZTsKKworLyoqCisgKiBDb252ZXJ0IGEgNC1ieXRlIGZsb2F0IHRv IGEgMi1ieXRlIGhhbGYgZmxvYXQuCisgKgorICogTm90IGFsbCBmbG9hdDMyIHZhbHVlcyBjYW4g YmUgcmVwcmVzZW50ZWQgZXhhY3RseSBhcyBhIGZsb2F0MTYgdmFsdWUuIFdlCisgKiByb3VuZCBz dWNoIGludGVybWVkaWF0ZSBmbG9hdDMyIHZhbHVlcyB0byB0aGUgbmVhcmVzdCBmbG9hdDE2LiBX aGVuIHRoZQorICogZmxvYXQzMiBsaWVzIGV4YWN0bHkgYmV0d2VlbiB0byBmbG9hdDE2IHZhbHVl cywgd2Ugcm91bmQgdG8gdGhlIG9uZSB3aXRoCisgKiBhbiBldmVuIG1hbnRpc3NhLgorICoKKyAq IFRoaXMgcm91bmRpbmcgYmVoYXZpb3IgaGFzIHNldmVyYWwgYmVuZWZpdHM6CisgKiAgIC0gSXQg aGFzIG5vIHNpZ24gYmlhcy4KKyAqCisgKiAgIC0gSXQgcmVwcm9kdWNlcyB0aGUgYmVoYXZpb3Ig b2YgcmVhbCBoYXJkd2FyZTogb3Bjb2RlIEYzMlRPMTYgaW4gSW50ZWwncworICogICAgIEdQVSBJ U0EuCisgKgorICogICAtIEJ5IHJlcHJvZHVjaW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgR1BVIChh dCBsZWFzdCBvbiBJbnRlbCBoYXJkd2FyZSksCisgKiAgICAgY29tcGlsZS10aW1lIGV2YWx1YXRp b24gb2YgY29uc3RhbnQgcGFja0hhbGYyeDE2IEdMU0wgZXhwcmVzc2lvbnMgd2lsbAorICogICAg IHJlc3VsdCBpbiB0aGUgc2FtZSB2YWx1ZSBhcyBpZiB0aGUgZXhwcmVzc2lvbiB3ZXJlIGV4ZWN1 dGVkIG9uIHRoZSBHUFUuCisgKi8KK3N0YXRpYyB1aW50MTZfdCBmbG9hdF90b19oYWxmKGZsb2F0 IHZhbCkKK3sKKwljb25zdCBmaV90eXBlIGZpID0ge3ZhbH07CisJY29uc3QgaW50IGZsdF9tID0g ZmkuaSAmIDB4N2ZmZmZmOworCWNvbnN0IGludCBmbHRfZSA9IChmaS5pID4+IDIzKSAmIDB4ZmY7 CisJY29uc3QgaW50IGZsdF9zID0gKGZpLmkgPj4gMzEpICYgMHgxOworCWludCBzLCBlLCBtID0g MDsKKwl1aW50MTZfdCByZXN1bHQ7CisKKwkvKiBzaWduIGJpdCAqLworCXMgPSBmbHRfczsKKwor CS8qIGhhbmRsZSBzcGVjaWFsIGNhc2VzICovCisJaWYgKChmbHRfZSA9PSAwKSAmJiAoZmx0X20g PT0gMCkpIHsKKwkJLyogemVybyAqLworCQkvKiBtID0gMDsgLSBhbHJlYWR5IHNldCAqLworCQll ID0gMDsKKwl9IGVsc2UgaWYgKChmbHRfZSA9PSAwKSAmJiAoZmx0X20gIT0gMCkpIHsKKwkJLyog ZGVub3JtIC0tIGRlbm9ybSBmbG9hdCBtYXBzIHRvIDAgaGFsZiAqLworCQkvKiBtID0gMDsgLSBh bHJlYWR5IHNldCAqLworCQllID0gMDsKKwl9IGVsc2UgaWYgKChmbHRfZSA9PSAweGZmKSAmJiAo Zmx0X20gPT0gMCkpIHsKKwkJLyogaW5maW5pdHkgKi8KKwkJLyogbSA9IDA7IC0gYWxyZWFkeSBz ZXQgKi8KKwkJZSA9IDMxOworCX0gZWxzZSBpZiAoKGZsdF9lID09IDB4ZmYpICYmIChmbHRfbSAh PSAwKSkgeworCQkvKiBOYU4gKi8KKwkJbSA9IDE7CisJCWUgPSAzMTsKKwl9IGVsc2UgeworCQkv KiByZWd1bGFyIG51bWJlciAqLworCQljb25zdCBpbnQgbmV3X2V4cCA9IGZsdF9lIC0gMTI3Owor CQlpZiAobmV3X2V4cCA8IC0xNCkgeworCQkJLyogVGhlIGZsb2F0MzIgbGllcyBpbiB0aGUgcmFu Z2UgKDAuMCwgbWluX25vcm1hbDE2KSBhbmQKKwkJCSAqIGlzIHJvdW5kZWQgdG8gYSBuZWFyYnkg ZmxvYXQxNiB2YWx1ZS4gVGhlIHJlc3VsdCB3aWxsCisJCQkgKiBiZSBlaXRoZXIgemVybywgc3Vi bm9ybWFsLCBvciBub3JtYWwuCisJCQkgKi8KKwkJCWUgPSAwOworCQkJbSA9IGxyaW50ZigoMSA8 PCAyNCkgKiBmYWJzZihmaS5mKSk7CisJCX0gZWxzZSBpZiAobmV3X2V4cCA+IDE1KSB7CisJCQkv KiBtYXAgdGhpcyB2YWx1ZSB0byBpbmZpbml0eSAqLworCQkJLyogbSA9IDA7IC0gYWxyZWFkeSBz ZXQgKi8KKwkJCWUgPSAzMTsKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBmbG9hdDMyIGxpZXMgaW4g dGhlIHJhbmdlCisJCQkgKiAgIFttaW5fbm9ybWFsMTYsIG1heF9ub3JtYWwxNiArIG1heF9zdGVw MTYpCisJCQkgKiBhbmQgaXMgcm91bmRlZCB0byBhIG5lYXJieSBmbG9hdDE2IHZhbHVlLiBUaGUg cmVzdWx0CisJCQkgKiB3aWxsIGJlIGVpdGhlciBub3JtYWwgb3IgaW5maW5pdGUuCisJCQkgKi8K KwkJCWUgPSBuZXdfZXhwICsgMTU7CisJCQltID0gbHJpbnRmKGZsdF9tIC8gKGZsb2F0KSgxIDw8 IDEzKSk7CisJCX0KKwl9CisKKwlhc3NlcnQoMCA8PSBtICYmIG0gPD0gMTAyNCk7CisJaWYgKG0g PT0gMTAyNCkgeworCQkvKiBUaGUgZmxvYXQzMiB3YXMgcm91bmRlZCB1cHdhcmRzIGludG8gdGhl IHJhbmdlIG9mIHRoZSBuZXh0CisJCSAqIGV4cG9uZW50LCBzbyBidW1wIHRoZSBleHBvbmVudC4g VGhpcyBjb3JyZWN0bHkgaGFuZGxlcyB0aGUKKwkJICogY2FzZSB3aGVyZSBmMzIgc2hvdWxkIGJl IHJvdW5kZWQgdXAgdG8gZmxvYXQxNiBpbmZpbml0eS4KKwkJICovCisJCSsrZTsKKwkJbSA9IDA7 CisJfQorCisJcmVzdWx0ID0gKHMgPDwgMTUpIHwgKGUgPDwgMTApIHwgbTsKKwlyZXR1cm4gcmVz dWx0OworfQorCisvKioKKyAqIENvbnZlcnQgYSAyLWJ5dGUgaGFsZiBmbG9hdCB0byBhIDQtYnl0 ZSBmbG9hdC4KKyAqIEJhc2VkIG9uIGNvZGUgZnJvbToKKyAqIGh0dHA6Ly93d3cub3BlbmdsLm9y Zy9kaXNjdXNzaW9uX2JvYXJkcy91YmIvRm9ydW0zL0hUTUwvMDA4Nzg2Lmh0bWwKKyAqLworc3Rh dGljIGZsb2F0IGhhbGZfdG9fZmxvYXQodWludDE2X3QgdmFsKQoreworCS8qIFhYWCBjb3VsZCBh bHNvIHVzZSBhIDY0Sy1lbnRyeSBsb29rdXAgdGFibGUgKi8KKwljb25zdCBpbnQgbSA9IHZhbCAm IDB4M2ZmOworCWNvbnN0IGludCBlID0gKHZhbCA+PiAxMCkgJiAweDFmOworCWNvbnN0IGludCBz ID0gKHZhbCA+PiAxNSkgJiAweDE7CisJaW50IGZsdF9tLCBmbHRfZSwgZmx0X3M7CisJZmlfdHlw ZSBmaTsKKworCS8qIHNpZ24gYml0ICovCisJZmx0X3MgPSBzOworCisJLyogaGFuZGxlIHNwZWNp YWwgY2FzZXMgKi8KKwlpZiAoKGUgPT0gMCkgJiYgKG0gPT0gMCkpIHsKKwkJLyogemVybyAqLwor CQlmbHRfbSA9IDA7CisJCWZsdF9lID0gMDsKKwl9IGVsc2UgaWYgKChlID09IDApICYmIChtICE9 IDApKSB7CisJCS8qIGRlbm9ybSAtLSBkZW5vcm0gaGFsZiB3aWxsIGZpdCBpbiBub24tZGVub3Jt IHNpbmdsZSAqLworCQljb25zdCBmbG9hdCBoYWxmX2Rlbm9ybSA9IDEuMGYgLyAxNjM4NC4wZjsg LyogMl4tMTQgKi8KKwkJZmxvYXQgbWFudGlzc2EgPSAoKGZsb2F0KSAobSkpIC8gMTAyNC4wZjsK KwkJZmxvYXQgc2lnbiA9IHMgPyAtMS4wZiA6IDEuMGY7CisJCXJldHVybiBzaWduICogbWFudGlz c2EgKiBoYWxmX2Rlbm9ybTsKKwl9IGVsc2UgaWYgKChlID09IDMxKSAmJiAobSA9PSAwKSkgewor CQkvKiBpbmZpbml0eSAqLworCQlmbHRfZSA9IDB4ZmY7CisJCWZsdF9tID0gMDsKKwl9IGVsc2Ug aWYgKChlID09IDMxKSAmJiAobSAhPSAwKSkgeworCQkvKiBOYU4gKi8KKwkJZmx0X2UgPSAweGZm OworCQlmbHRfbSA9IDE7CisJfSBlbHNlIHsKKwkJLyogcmVndWxhciAqLworCQlmbHRfZSA9IGUg KyAxMTI7CisJCWZsdF9tID0gbSA8PCAxMzsKKwl9CisKKwlmaS5pID0gKGZsdF9zIDw8IDMxKSB8 IChmbHRfZSA8PCAyMykgfCBmbHRfbTsKKwlyZXR1cm4gZmkuZjsKK30KKworI2lmIGRlZmluZWQo X194ODZfNjRfXykgJiYgIWRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBHQ0MgcHVzaF9vcHRp b25zCisjcHJhZ21hIEdDQyB0YXJnZXQoImYxNmMiKQorCisjaW5jbHVkZSA8aW1taW50cmluLmg+ CisKK3N0YXRpYyB1aW50MTZfdCBmbG9hdF90b19oYWxmX2YxNmMoZmxvYXQgZikKK3sKKwlyZXR1 cm4gX2N2dHNzX3NoKGYsIDApOworfQorCitzdGF0aWMgZmxvYXQgaGFsZl90b19mbG9hdF9mMTZj KHVpbnQxNl90IGgpCit7CisJcmV0dXJuIF9jdnRzaF9zcyhoKTsKK30KKworI3ByYWdtYSBHQ0Mg cG9wX29wdGlvbnMKKworc3RhdGljIHVpbnQxNl90ICgqcmVzb2x2ZV9mbG9hdF90b19oYWxmKHZv aWQpKShmbG9hdCBmKQoreworCWlmIChpZ3RfeDg2X2ZlYXR1cmVzKCkgJiBGMTZDKQorCQlyZXR1 cm4gZmxvYXRfdG9faGFsZl9mMTZjOworCisJcmV0dXJuIGZsb2F0X3RvX2hhbGY7Cit9CisKK3Vp bnQxNl90IGlndF9mbG9hdF90b19oYWxmKGZsb2F0IGYpCisJX19hdHRyaWJ1dGVfXygoaWZ1bmMo InJlc29sdmVfZmxvYXRfdG9faGFsZiIpKSk7CisKK3N0YXRpYyBmbG9hdCAoKnJlc29sdmVfaGFs Zl90b19mbG9hdCh2b2lkKSkodWludDE2X3QgaCkKK3sKKwlpZiAoaWd0X3g4Nl9mZWF0dXJlcygp ICYgRjE2QykKKwkJcmV0dXJuIGhhbGZfdG9fZmxvYXRfZjE2YzsKKworCXJldHVybiBoYWxmX3Rv X2Zsb2F0OworfQorCitmbG9hdCBpZ3RfaGFsZl90b19mbG9hdCh1aW50MTZfdCBoKQorCV9fYXR0 cmlidXRlX18oKGlmdW5jKCJyZXNvbHZlX2hhbGZfdG9fZmxvYXQiKSkpOworCisjZWxzZQorCitp Z3RfaGFsZiBpZ3RfZmxvYXRfdG9faGFsZihmbG9hdCBmKQoreworCXJldHVybiBmbG9hdF90b19o YWxmKGYpOworfQorCitmbG9hdCBpZ3RfaGFsZl90b19mbG9hdCh1aW50MTZfdCBoKQoreworCXJl dHVybiBoYWxmX3RvX2Zsb2F0KGgpOworfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliL2ln dF9oYWxmZmxvYXQuaCBiL2xpYi9pZ3RfaGFsZmZsb2F0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMmFlMTg5ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfaGFsZmZs b2F0LmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA3ICBC cmlhbiBQYXVsICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1 ZGVkCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0 d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJ TkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNs dWRlIDxzdGRpbnQuaD4KKwordWludDE2X3QgaWd0X2Zsb2F0X3RvX2hhbGYoZmxvYXQgZik7Citm bG9hdCBpZ3RfaGFsZl90b19mbG9hdCh1aW50MTZfdCBoKTsKKwpkaWZmIC0tZ2l0IGEvbGliL2ln dF94ODYuYyBiL2xpYi9pZ3RfeDg2LmMKaW5kZXggODhlNTE0ZC4uOWQyOGU2YiAxMDA2NDQKLS0t IGEvbGliL2lndF94ODYuYworKysgYi9saWIvaWd0X3g4Ni5jCkBAIC04OCw2ICs4OCwxMCBAQAog I2RlZmluZSBiaXRfQVZYCQkoMSA8PCAyOCkKICNlbmRpZgogCisjaWZuZGVmIGJpdF9GMTZDCisj ZGVmaW5lIGJpdF9GMTZDCSgxIDw8IDI5KQorI2VuZGlmCisKICNpZm5kZWYgYml0X0FWWDIKICNk ZWZpbmUgYml0X0FWWDIJKDE8PDUpCiAjZW5kaWYKQEAgLTEzOCw2ICsxNDIsOSBAQCB1bnNpZ25l ZCBpZ3RfeDg2X2ZlYXR1cmVzKHZvaWQpCiAKIAkJaWYgKGVkeCAmIGJpdF9TU0UyKQogCQkJZmVh dHVyZXMgfD0gU1NFMjsKKworCQlpZiAoZWR4ICYgYml0X0YxNkMpCisJCQlmZWF0dXJlcyB8PSBG MTZDOwogCX0KIAogCWlmIChtYXggPj0gNykgewpAQCAtMTc0LDYgKzE4MSw4IEBAIGNoYXIgKmln dF94ODZfZmVhdHVyZXNfdG9fc3RyaW5nKHVuc2lnbmVkIGZlYXR1cmVzLCBjaGFyICpsaW5lKQog CQlsaW5lICs9IHNwcmludGYobGluZSwgIiwgYXZ4Iik7CiAJaWYgKGZlYXR1cmVzICYgQVZYMikK IAkJbGluZSArPSBzcHJpbnRmKGxpbmUsICIsIGF2eDIiKTsKKwlpZiAoZmVhdHVyZXMgJiBGMTZD KQorCQlsaW5lICs9IHNwcmludGYobGluZSwgIiwgZjE2YyIpOwogCiAJKHZvaWQpbGluZTsKIApk aWZmIC0tZ2l0IGEvbGliL2lndF94ODYuaCBiL2xpYi9pZ3RfeDg2LmgKaW5kZXggZDRmOGMzNC4u YzdiODRkZSAxMDA2NDQKLS0tIGEvbGliL2lndF94ODYuaAorKysgYi9saWIvaWd0X3g4Ni5oCkBA IC0zOSw2ICszOSw3IEBACiAjZGVmaW5lIFNTRTRfMgkweDQwCiAjZGVmaW5lIEFWWAkweDgwCiAj ZGVmaW5lIEFWWDIJMHgxMDAKKyNkZWZpbmUgRjE2QwkweDIwMAogCiAjaWYgZGVmaW5lZChfX3g4 Nl82NF9fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKQogdW5zaWduZWQgaWd0X3g4Nl9mZWF0dXJlcyh2 b2lkKTsKZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWlsZAppbmRl eCAwZWI1NTg1Li5lZGYwYTY2IDEwMDY0NAotLS0gYS9saWIvbWVzb24uYnVpbGQKKysrIGIvbGli L21lc29uLmJ1aWxkCkBAIC0xMSw2ICsxMSw3IEBAIGxpYl9zb3VyY2VzID0gWwogCSdpZ3RfYXV4 LmMnLAogCSdpZ3RfZ3QuYycsCiAJJ2lndF9ndnQuYycsCisJJ2lndF9oYWxmZmxvYXQuYycsCiAJ J2lndF9tYXRyaXguYycsCiAJJ2lndF9wcmltZXMuYycsCiAJJ2lndF9yYW5kLmMnLAotLSAKMi43 LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1k ZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==