From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 618E289DC1 for ; Fri, 5 Apr 2019 20:14:06 +0000 (UTC) From: Kevin Strasser Date: Fri, 5 Apr 2019 13:14:03 -0700 Message-Id: <1554495245-27955-2-git-send-email-kevin.strasser@intel.com> In-Reply-To: <1554495245-27955-1-git-send-email-kevin.strasser@intel.com> References: <1554495245-27955-1-git-send-email-kevin.strasser@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH 1/3] lib: Add halffloat implementation List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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 aW9uIGNhbGxzIChNYWFydGVuKQoKdjE6Ci0gTW92ZSBwcmFnbWEgc28gQVZYIGNvZGUgaXNuJ3Qg ZW1pdHRlZCBmb3IgZmFsbGJhY2tzIChWaWxsZSkKLSBDaGFuZ2UgZWR4IHRvIGVjeCAoVmlsbGUp CgpTaWduZWQtb2ZmLWJ5OiBLZXZpbiBTdHJhc3NlciA8a2V2aW4uc3RyYXNzZXJAaW50ZWwuY29t PgpSZXZpZXdlZC1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVs LmNvbT4KLS0tCiBDT1BZSU5HICAgICAgICAgICAgICB8ICAyMiArKysrKwogbGliL01ha2VmaWxl LnNvdXJjZXMgfCAgIDIgKwogbGliL2lndF9oYWxmZmxvYXQuYyAgfCAyMzQgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIvaWd0X2hhbGZmbG9h dC5oICB8ICAyNyArKysrKysKIGxpYi9pZ3RfeDg2LmMgICAgICAgIHwgICA5ICsrCiBsaWIvaWd0 X3g4Ni5oICAgICAgICB8ICAgMSArCiBsaWIvbWVzb24uYnVpbGQgICAgICB8ICAgMSArCiA3IGZp bGVzIGNoYW5nZWQsIDI5NiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2ln dF9oYWxmZmxvYXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfaGFsZmZsb2F0LmgKCmRp ZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORwppbmRleCAyOWUwMjM4Li4wZmU2NTg0IDEwMDY0 NAotLS0gYS9DT1BZSU5HCisrKyBiL0NPUFlJTkcKQEAgLTEyNiwzICsxMjYsMjUgQEAgU1BFQ0lB TCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1B R0VTCiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJ VFMsIFdIRVRIRVIgSU4gQU4KIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhF UiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitDb3B5cmlnaHQgKEMp IDE5OTktMjAwNyAgQnJpYW4gUGF1bCAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb3B5cmlnaHQg MjAxNSBQaGlsaXAgVGF5bG9yIDxwaGlsaXBAemF5bmFyLmNvLnVrPgorQ29weXJpZ2h0IDIwMTgg QWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKK3RvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KK3RoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl CitTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAoraW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCitPUiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKK09USEVSIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAor QVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SCitPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQg YS9saWIvTWFrZWZpbGUuc291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IGUwMDM0 N2YuLjg0ZDE0YzkgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL2xpYi9N YWtlZmlsZS5zb3VyY2VzCkBAIC0zMiw2ICszMiw4IEBAIGxpYl9zb3VyY2VfbGlzdCA9CSAJXAog CWlndF9ndC5oCQlcCiAJaWd0X2d2dC5jCQlcCiAJaWd0X2d2dC5oCQlcCisJaWd0X2hhbGZmbG9h dC5jCQlcCisJaWd0X2hhbGZmbG9hdC5oCQlcCiAJaWd0X21hdHJpeC5jCQlcCiAJaWd0X21hdHJp eC5oCQlcCiAJaWd0X3ByaW1lcy5jCQlcCmRpZmYgLS1naXQgYS9saWIvaWd0X2hhbGZmbG9hdC5j IGIvbGliL2lndF9oYWxmZmxvYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4yNjNiMjhjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2lndF9oYWxmZmxvYXQuYwpAQCAtMCww ICsxLDIzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA3ICBCcmlhbiBQYXVsICAg QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDE1IFBoaWxpcCBUYXlsb3IgPHBo aWxpcEB6YXluYXIuY28udWs+CisgKiBDb3B5cmlnaHQgMjAxOCBBZHZhbmNlZCBNaWNybyBEZXZp Y2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICogaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJ TkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVk ZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiaWd0X2hhbGZmbG9hdC5oIgorI2luY2x1ZGUgImlndF94 ODYuaCIKKwordHlwZWRlZiB1bmlvbiB7IGZsb2F0IGY7IGludDMyX3QgaTsgdWludDMyX3QgdTsg fSBmaV90eXBlOworCisvKioKKyAqIENvbnZlcnQgYSA0LWJ5dGUgZmxvYXQgdG8gYSAyLWJ5dGUg aGFsZiBmbG9hdC4KKyAqCisgKiBOb3QgYWxsIGZsb2F0MzIgdmFsdWVzIGNhbiBiZSByZXByZXNl bnRlZCBleGFjdGx5IGFzIGEgZmxvYXQxNiB2YWx1ZS4gV2UKKyAqIHJvdW5kIHN1Y2ggaW50ZXJt ZWRpYXRlIGZsb2F0MzIgdmFsdWVzIHRvIHRoZSBuZWFyZXN0IGZsb2F0MTYuIFdoZW4gdGhlCisg KiBmbG9hdDMyIGxpZXMgZXhhY3RseSBiZXR3ZWVuIHRvIGZsb2F0MTYgdmFsdWVzLCB3ZSByb3Vu ZCB0byB0aGUgb25lIHdpdGgKKyAqIGFuIGV2ZW4gbWFudGlzc2EuCisgKgorICogVGhpcyByb3Vu ZGluZyBiZWhhdmlvciBoYXMgc2V2ZXJhbCBiZW5lZml0czoKKyAqICAgLSBJdCBoYXMgbm8gc2ln biBiaWFzLgorICoKKyAqICAgLSBJdCByZXByb2R1Y2VzIHRoZSBiZWhhdmlvciBvZiByZWFsIGhh cmR3YXJlOiBvcGNvZGUgRjMyVE8xNiBpbiBJbnRlbCdzCisgKiAgICAgR1BVIElTQS4KKyAqCisg KiAgIC0gQnkgcmVwcm9kdWNpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBHUFUgKGF0IGxlYXN0IG9u IEludGVsIGhhcmR3YXJlKSwKKyAqICAgICBjb21waWxlLXRpbWUgZXZhbHVhdGlvbiBvZiBjb25z dGFudCBwYWNrSGFsZjJ4MTYgR0xTTCBleHByZXNzaW9ucyB3aWxsCisgKiAgICAgcmVzdWx0IGlu IHRoZSBzYW1lIHZhbHVlIGFzIGlmIHRoZSBleHByZXNzaW9uIHdlcmUgZXhlY3V0ZWQgb24gdGhl IEdQVS4KKyAqLworc3RhdGljIGlubGluZSB1aW50MTZfdCBfZmxvYXRfdG9faGFsZihmbG9hdCB2 YWwpCit7CisJY29uc3QgZmlfdHlwZSBmaSA9IHt2YWx9OworCWNvbnN0IGludCBmbHRfbSA9IGZp LmkgJiAweDdmZmZmZjsKKwljb25zdCBpbnQgZmx0X2UgPSAoZmkuaSA+PiAyMykgJiAweGZmOwor CWNvbnN0IGludCBmbHRfcyA9IChmaS5pID4+IDMxKSAmIDB4MTsKKwlpbnQgcywgZSwgbSA9IDA7 CisJdWludDE2X3QgcmVzdWx0OworCisJLyogc2lnbiBiaXQgKi8KKwlzID0gZmx0X3M7CisKKwkv KiBoYW5kbGUgc3BlY2lhbCBjYXNlcyAqLworCWlmICgoZmx0X2UgPT0gMCkgJiYgKGZsdF9tID09 IDApKSB7CisJCS8qIHplcm8gKi8KKwkJLyogbSA9IDA7IC0gYWxyZWFkeSBzZXQgKi8KKwkJZSA9 IDA7CisJfSBlbHNlIGlmICgoZmx0X2UgPT0gMCkgJiYgKGZsdF9tICE9IDApKSB7CisJCS8qIGRl bm9ybSAtLSBkZW5vcm0gZmxvYXQgbWFwcyB0byAwIGhhbGYgKi8KKwkJLyogbSA9IDA7IC0gYWxy ZWFkeSBzZXQgKi8KKwkJZSA9IDA7CisJfSBlbHNlIGlmICgoZmx0X2UgPT0gMHhmZikgJiYgKGZs dF9tID09IDApKSB7CisJCS8qIGluZmluaXR5ICovCisJCS8qIG0gPSAwOyAtIGFscmVhZHkgc2V0 ICovCisJCWUgPSAzMTsKKwl9IGVsc2UgaWYgKChmbHRfZSA9PSAweGZmKSAmJiAoZmx0X20gIT0g MCkpIHsKKwkJLyogTmFOICovCisJCW0gPSAxOworCQllID0gMzE7CisJfSBlbHNlIHsKKwkJLyog cmVndWxhciBudW1iZXIgKi8KKwkJY29uc3QgaW50IG5ld19leHAgPSBmbHRfZSAtIDEyNzsKKwkJ aWYgKG5ld19leHAgPCAtMTQpIHsKKwkJCS8qIFRoZSBmbG9hdDMyIGxpZXMgaW4gdGhlIHJhbmdl ICgwLjAsIG1pbl9ub3JtYWwxNikgYW5kCisJCQkgKiBpcyByb3VuZGVkIHRvIGEgbmVhcmJ5IGZs b2F0MTYgdmFsdWUuIFRoZSByZXN1bHQgd2lsbAorCQkJICogYmUgZWl0aGVyIHplcm8sIHN1Ym5v cm1hbCwgb3Igbm9ybWFsLgorCQkJICovCisJCQllID0gMDsKKwkJCW0gPSBscmludGYoKDEgPDwg MjQpICogZmFic2YoZmkuZikpOworCQl9IGVsc2UgaWYgKG5ld19leHAgPiAxNSkgeworCQkJLyog bWFwIHRoaXMgdmFsdWUgdG8gaW5maW5pdHkgKi8KKwkJCS8qIG0gPSAwOyAtIGFscmVhZHkgc2V0 ICovCisJCQllID0gMzE7CisJCX0gZWxzZSB7CisJCQkvKiBUaGUgZmxvYXQzMiBsaWVzIGluIHRo ZSByYW5nZQorCQkJICogICBbbWluX25vcm1hbDE2LCBtYXhfbm9ybWFsMTYgKyBtYXhfc3RlcDE2 KQorCQkJICogYW5kIGlzIHJvdW5kZWQgdG8gYSBuZWFyYnkgZmxvYXQxNiB2YWx1ZS4gVGhlIHJl c3VsdAorCQkJICogd2lsbCBiZSBlaXRoZXIgbm9ybWFsIG9yIGluZmluaXRlLgorCQkJICovCisJ CQllID0gbmV3X2V4cCArIDE1OworCQkJbSA9IGxyaW50ZihmbHRfbSAvIChmbG9hdCkoMSA8PCAx MykpOworCQl9CisJfQorCisJYXNzZXJ0KDAgPD0gbSAmJiBtIDw9IDEwMjQpOworCWlmIChtID09 IDEwMjQpIHsKKwkJLyogVGhlIGZsb2F0MzIgd2FzIHJvdW5kZWQgdXB3YXJkcyBpbnRvIHRoZSBy YW5nZSBvZiB0aGUgbmV4dAorCQkgKiBleHBvbmVudCwgc28gYnVtcCB0aGUgZXhwb25lbnQuIFRo aXMgY29ycmVjdGx5IGhhbmRsZXMgdGhlCisJCSAqIGNhc2Ugd2hlcmUgZjMyIHNob3VsZCBiZSBy b3VuZGVkIHVwIHRvIGZsb2F0MTYgaW5maW5pdHkuCisJCSAqLworCQkrK2U7CisJCW0gPSAwOwor CX0KKworCXJlc3VsdCA9IChzIDw8IDE1KSB8IChlIDw8IDEwKSB8IG07CisJcmV0dXJuIHJlc3Vs dDsKK30KKworLyoqCisgKiBDb252ZXJ0IGEgMi1ieXRlIGhhbGYgZmxvYXQgdG8gYSA0LWJ5dGUg ZmxvYXQuCisgKiBCYXNlZCBvbiBjb2RlIGZyb206CisgKiBodHRwOi8vd3d3Lm9wZW5nbC5vcmcv ZGlzY3Vzc2lvbl9ib2FyZHMvdWJiL0ZvcnVtMy9IVE1MLzAwODc4Ni5odG1sCisgKi8KK3N0YXRp YyBpbmxpbmUgZmxvYXQgX2hhbGZfdG9fZmxvYXQodWludDE2X3QgdmFsKQoreworCS8qIFhYWCBj b3VsZCBhbHNvIHVzZSBhIDY0Sy1lbnRyeSBsb29rdXAgdGFibGUgKi8KKwljb25zdCBpbnQgbSA9 IHZhbCAmIDB4M2ZmOworCWNvbnN0IGludCBlID0gKHZhbCA+PiAxMCkgJiAweDFmOworCWNvbnN0 IGludCBzID0gKHZhbCA+PiAxNSkgJiAweDE7CisJaW50IGZsdF9tLCBmbHRfZSwgZmx0X3M7CisJ ZmlfdHlwZSBmaTsKKworCS8qIHNpZ24gYml0ICovCisJZmx0X3MgPSBzOworCisJLyogaGFuZGxl IHNwZWNpYWwgY2FzZXMgKi8KKwlpZiAoKGUgPT0gMCkgJiYgKG0gPT0gMCkpIHsKKwkJLyogemVy byAqLworCQlmbHRfbSA9IDA7CisJCWZsdF9lID0gMDsKKwl9IGVsc2UgaWYgKChlID09IDApICYm IChtICE9IDApKSB7CisJCS8qIGRlbm9ybSAtLSBkZW5vcm0gaGFsZiB3aWxsIGZpdCBpbiBub24t ZGVub3JtIHNpbmdsZSAqLworCQljb25zdCBmbG9hdCBoYWxmX2Rlbm9ybSA9IDEuMGYgLyAxNjM4 NC4wZjsgLyogMl4tMTQgKi8KKwkJZmxvYXQgbWFudGlzc2EgPSAoKGZsb2F0KSAobSkpIC8gMTAy NC4wZjsKKwkJZmxvYXQgc2lnbiA9IHMgPyAtMS4wZiA6IDEuMGY7CisJCXJldHVybiBzaWduICog bWFudGlzc2EgKiBoYWxmX2Rlbm9ybTsKKwl9IGVsc2UgaWYgKChlID09IDMxKSAmJiAobSA9PSAw KSkgeworCQkvKiBpbmZpbml0eSAqLworCQlmbHRfZSA9IDB4ZmY7CisJCWZsdF9tID0gMDsKKwl9 IGVsc2UgaWYgKChlID09IDMxKSAmJiAobSAhPSAwKSkgeworCQkvKiBOYU4gKi8KKwkJZmx0X2Ug PSAweGZmOworCQlmbHRfbSA9IDE7CisJfSBlbHNlIHsKKwkJLyogcmVndWxhciAqLworCQlmbHRf ZSA9IGUgKyAxMTI7CisJCWZsdF9tID0gbSA8PCAxMzsKKwl9CisKKwlmaS5pID0gKGZsdF9zIDw8 IDMxKSB8IChmbHRfZSA8PCAyMykgfCBmbHRfbTsKKwlyZXR1cm4gZmkuZjsKK30KKworI2lmIGRl ZmluZWQoX194ODZfNjRfXykgJiYgIWRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBHQ0MgcHVz aF9vcHRpb25zCisjcHJhZ21hIEdDQyB0YXJnZXQoImYxNmMiKQorCisjaW5jbHVkZSA8aW1taW50 cmluLmg+CisKK3N0YXRpYyB2b2lkIGZsb2F0X3RvX2hhbGZfZjE2Yyhjb25zdCBmbG9hdCAqZiwg dWludDE2X3QgKmgsIHVuc2lnbmVkIGludCBudW0pCit7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBu dW07IGkrKykKKwkJaFtpXSA9IF9jdnRzc19zaChmW2ldLCAwKTsKK30KKworc3RhdGljIHZvaWQg aGFsZl90b19mbG9hdF9mMTZjKGNvbnN0IHVpbnQxNl90ICpoLCBmbG9hdCAqZiwgdW5zaWduZWQg aW50IG51bSkKK3sKKwlmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKQorCQlmW2ldID0gX2N2 dHNoX3NzKGhbaV0pOworfQorCisjcHJhZ21hIEdDQyBwb3Bfb3B0aW9ucworCitzdGF0aWMgdm9p ZCBmbG9hdF90b19oYWxmKGNvbnN0IGZsb2F0ICpmLCB1aW50MTZfdCAqaCwgdW5zaWduZWQgaW50 IG51bSkKK3sKKwlmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKQorCQloW2ldID0gX2Zsb2F0 X3RvX2hhbGYoZltpXSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGZfdG9fZmxvYXQoY29uc3QgdWlu dDE2X3QgKmgsIGZsb2F0ICpmLCB1bnNpZ25lZCBpbnQgbnVtKQoreworCWZvciAoaW50IGkgPSAw OyBpIDwgbnVtOyBpKyspCisJCWZbaV0gPSBfaGFsZl90b19mbG9hdChoW2ldKTsKK30KKworc3Rh dGljIHZvaWQgKCpyZXNvbHZlX2Zsb2F0X3RvX2hhbGYodm9pZCkpKGNvbnN0IGZsb2F0ICpmLCB1 aW50MTZfdCAqaCwgdW5zaWduZWQgaW50IG51bSkKK3sKKwlpZiAoaWd0X3g4Nl9mZWF0dXJlcygp ICYgRjE2QykKKwkJcmV0dXJuIGZsb2F0X3RvX2hhbGZfZjE2YzsKKworCXJldHVybiBmbG9hdF90 b19oYWxmOworfQorCit2b2lkIGlndF9mbG9hdF90b19oYWxmKGNvbnN0IGZsb2F0ICpmLCB1aW50 MTZfdCAqaCwgdW5zaWduZWQgaW50IG51bSkKKwlfX2F0dHJpYnV0ZV9fKChpZnVuYygicmVzb2x2 ZV9mbG9hdF90b19oYWxmIikpKTsKKworc3RhdGljIHZvaWQgKCpyZXNvbHZlX2hhbGZfdG9fZmxv YXQodm9pZCkpKGNvbnN0IHVpbnQxNl90ICpoLCBmbG9hdCAqZiwgdW5zaWduZWQgaW50IG51bSkK K3sKKwlpZiAoaWd0X3g4Nl9mZWF0dXJlcygpICYgRjE2QykKKwkJcmV0dXJuIGhhbGZfdG9fZmxv YXRfZjE2YzsKKworCXJldHVybiBoYWxmX3RvX2Zsb2F0OworfQorCit2b2lkIGlndF9oYWxmX3Rv X2Zsb2F0KGNvbnN0IHVpbnQxNl90ICpoLCBmbG9hdCAqZiwgdW5zaWduZWQgaW50IG51bSkKKwlf X2F0dHJpYnV0ZV9fKChpZnVuYygicmVzb2x2ZV9oYWxmX3RvX2Zsb2F0IikpKTsKKworI2Vsc2UK Kwordm9pZCBpZ3RfZmxvYXRfdG9faGFsZihjb25zdCBmbG9hdCAqZiwgdWludDE2X3QgKmgsIHVu c2lnbmVkIGludCBudW0pCit7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykKKwkJaFtp XSA9IF9mbG9hdF90b19oYWxmKGZbaV0pOworfQorCitmbG9hdCBpZ3RfaGFsZl90b19mbG9hdChj b25zdCB1aW50MTZfdCAqaCwgZmxvYXQgKmYsIHVuc2lnbmVkIGludCBudW0pCit7CisJZm9yIChp bnQgaSA9IDA7IGkgPCBudW07IGkrKykKKwkJZltpXSA9IF9oYWxmX3RvX2Zsb2F0KGhbaV0pOwor fQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliL2lndF9oYWxmZmxvYXQuaCBiL2xpYi9pZ3Rf aGFsZmZsb2F0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiNDQ4YQot LS0gL2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfaGFsZmZsb2F0LmgKQEAgLTAsMCArMSwyNyBAQAor LyoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA3ICBCcmlhbiBQYXVsICAgQWxsIFJpZ2h0cyBS ZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgKiBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElO R1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKwordm9pZCBp Z3RfZmxvYXRfdG9faGFsZihjb25zdCBmbG9hdCAqZiwgdWludDE2X3QgKmgsIHVuc2lnbmVkIGlu dCBudW0pOwordm9pZCBpZ3RfaGFsZl90b19mbG9hdChjb25zdCB1aW50MTZfdCAqaCwgZmxvYXQg KmYsIHVuc2lnbmVkIGludCBudW0pOworCmRpZmYgLS1naXQgYS9saWIvaWd0X3g4Ni5jIGIvbGli L2lndF94ODYuYwppbmRleCA4OGU1MTRkLi42YWM3MDBkIDEwMDY0NAotLS0gYS9saWIvaWd0X3g4 Ni5jCisrKyBiL2xpYi9pZ3RfeDg2LmMKQEAgLTg4LDYgKzg4LDEwIEBACiAjZGVmaW5lIGJpdF9B VlgJCSgxIDw8IDI4KQogI2VuZGlmCiAKKyNpZm5kZWYgYml0X0YxNkMKKyNkZWZpbmUgYml0X0Yx NkMJKDEgPDwgMjkpCisjZW5kaWYKKwogI2lmbmRlZiBiaXRfQVZYMgogI2RlZmluZSBiaXRfQVZY MgkoMTw8NSkKICNlbmRpZgpAQCAtMTM4LDYgKzE0Miw5IEBAIHVuc2lnbmVkIGlndF94ODZfZmVh dHVyZXModm9pZCkKIAogCQlpZiAoZWR4ICYgYml0X1NTRTIpCiAJCQlmZWF0dXJlcyB8PSBTU0Uy OworCisJCWlmIChlY3ggJiBiaXRfRjE2QykKKwkJCWZlYXR1cmVzIHw9IEYxNkM7CiAJfQogCiAJ aWYgKG1heCA+PSA3KSB7CkBAIC0xNzQsNiArMTgxLDggQEAgY2hhciAqaWd0X3g4Nl9mZWF0dXJl c190b19zdHJpbmcodW5zaWduZWQgZmVhdHVyZXMsIGNoYXIgKmxpbmUpCiAJCWxpbmUgKz0gc3By aW50ZihsaW5lLCAiLCBhdngiKTsKIAlpZiAoZmVhdHVyZXMgJiBBVlgyKQogCQlsaW5lICs9IHNw cmludGYobGluZSwgIiwgYXZ4MiIpOworCWlmIChmZWF0dXJlcyAmIEYxNkMpCisJCWxpbmUgKz0g c3ByaW50ZihsaW5lLCAiLCBmMTZjIik7CiAKIAkodm9pZClsaW5lOwogCmRpZmYgLS1naXQgYS9s aWIvaWd0X3g4Ni5oIGIvbGliL2lndF94ODYuaAppbmRleCBkNGY4YzM0Li5jN2I4NGRlIDEwMDY0 NAotLS0gYS9saWIvaWd0X3g4Ni5oCisrKyBiL2xpYi9pZ3RfeDg2LmgKQEAgLTM5LDYgKzM5LDcg QEAKICNkZWZpbmUgU1NFNF8yCTB4NDAKICNkZWZpbmUgQVZYCTB4ODAKICNkZWZpbmUgQVZYMgkw eDEwMAorI2RlZmluZSBGMTZDCTB4MjAwCiAKICNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRl ZmluZWQoX19pMzg2X18pCiB1bnNpZ25lZCBpZ3RfeDg2X2ZlYXR1cmVzKHZvaWQpOwpkaWZmIC0t Z2l0IGEvbGliL21lc29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkCmluZGV4IDg5ZGUwNmUuLmEx MmE4ZjkgMTAwNjQ0Ci0tLSBhL2xpYi9tZXNvbi5idWlsZAorKysgYi9saWIvbWVzb24uYnVpbGQK QEAgLTEyLDYgKzEyLDcgQEAgbGliX3NvdXJjZXMgPSBbCiAJJ2lndF9ncHVfcG93ZXIuYycsCiAJ J2lndF9ndC5jJywKIAknaWd0X2d2dC5jJywKKwknaWd0X2hhbGZmbG9hdC5jJywKIAknaWd0X21h dHJpeC5jJywKIAknaWd0X3BlcmYuYycsCiAJJ2lndF9wcmltZXMuYycsCi0tIAoyLjcuNAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWls aW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2