From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3F19A43DF8; Thu, 4 Apr 2024 11:18:08 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BCB1D40268; Thu, 4 Apr 2024 11:18:07 +0200 (CEST) Received: from dkmailrelay1.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id 5022B4025D for ; Thu, 4 Apr 2024 11:18:05 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesys.local [192.168.4.10]) by dkmailrelay1.smartsharesystems.com (Postfix) with ESMTP id 1CFA520CEE; Thu, 4 Apr 2024 11:18:05 +0200 (CEST) Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Subject: RE: [PATCH v2] eal/x86: improve rte_memcpy const size 16 performance Date: Thu, 4 Apr 2024 11:18:03 +0200 X-MimeOLE: Produced By Microsoft Exchange V6.5 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35E9F358@smartserver.smartshare.dk> In-Reply-To: <20240303094621.16404-1-mb@smartsharesystems.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [PATCH v2] eal/x86: improve rte_memcpy const size 16 performance Thread-Index: AdptT6cfL9dS3hA6TtGCZ9jRG3Wf2QZIL/mw References: <20240302234812.9137-1-mb@smartsharesystems.com> <20240303094621.16404-1-mb@smartsharesystems.com> From: =?UTF-8?B?TW9ydGVuIEJyw7hydXA=?= To: , Cc: , , X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org UElORyBJbnRlbCB4ODYgbWFpbnRhaW5lcnMgZm9yIHJldmlldy4NCg0KPiBGcm9tOiBNb3J0ZW4g QnLDuHJ1cCBbbWFpbHRvOm1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbV0NCj4gU2VudDogU3VuZGF5 LCAzIE1hcmNoIDIwMjQgMTAuNDYNCj4gDQo+IFdoZW4gdGhlIHJ0ZV9tZW1jcHkoKSBzaXplIGlz IDE2LCB0aGUgc2FtZSAxNiBieXRlcyBhcmUgY29waWVkIHR3aWNlLg0KPiBJbiB0aGUgY2FzZSB3 aGVyZSB0aGUgc2l6ZSBpcyBrbm93biB0byBiZSAxNiBhdCBidWlsZCB0aW5lLCBvbWl0IHRoZQ0K PiBkdXBsaWNhdGUgY29weS4NCj4gDQo+IFJlZHVjZWQgdGhlIGFtb3VudCBvZiBlZmZlY3RpdmVs eSBjb3B5LXBhc3RlZCBjb2RlIGJ5IHVzaW5nICNpZmRlZg0KPiBpbnNpZGUgZnVuY3Rpb25zIGlu c3RlYWQgb2Ygb3V0c2lkZSBmdW5jdGlvbnMuDQo+IA0KPiBTdWdnZXN0ZWQtYnk6IFN0ZXBoZW4g SGVtbWluZ2VyIDxzdGVwaGVuQG5ldHdvcmtwbHVtYmVyLm9yZz4NCj4gU2lnbmVkLW9mZi1ieTog TW9ydGVuIEJyw7hydXAgPG1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT4NCj4gLS0tDQo+IHYyOg0K PiAqIEZvciBHQ0MsIHZlcnNpb24gMTEgaXMgcmVxdWlyZWQgZm9yIHByb3BlciBBVlggaGFuZGxp bmc7DQo+ICAgaWYgb2xkZXIgR0NDIHZlcnNpb24sIHRyZWF0IEFWWCBhcyBTU0UuDQo+ICAgQ2xh bmcgZG9lcyBub3QgaGF2ZSB0aGlzIGlzc3VlLg0KPiAgIE5vdGU6IE9yaWdpbmFsIGNvZGUgYWx3 YXlzIHRyZWF0ZWQgQVZYIGFzIFNTRSwgcmVnYXJkbGVzcyBvZiBjb21waWxlci4NCj4gKiBEbyBu b3QgYWRkIGNvcHlyaWdodC4gKFN0ZXBoZW4gSGVtbWluZ2VyKQ0KPiAtLS0NCj4gIGxpYi9lYWwv eDg2L2luY2x1ZGUvcnRlX21lbWNweS5oIHwgMjMxICsrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCj4gIDEgZmlsZSBjaGFuZ2VkLCA1NiBpbnNlcnRpb25zKCspLCAxNzUgZGVsZXRpb25z KC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvbGliL2VhbC94ODYvaW5jbHVkZS9ydGVfbWVtY3B5LmgN Cj4gYi9saWIvZWFsL3g4Ni9pbmNsdWRlL3J0ZV9tZW1jcHkuaA0KPiBpbmRleCA3MmE5MjI5MGUw Li5kMWRmODQxZjVlIDEwMDY0NA0KPiAtLS0gYS9saWIvZWFsL3g4Ni9pbmNsdWRlL3J0ZV9tZW1j cHkuaA0KPiArKysgYi9saWIvZWFsL3g4Ni9pbmNsdWRlL3J0ZV9tZW1jcHkuaA0KPiBAQCAtOTEs MTQgKzkxLDYgQEAgcnRlX21vdjE1X29yX2xlc3Modm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMs IHNpemVfdCBuKQ0KPiAgCXJldHVybiByZXQ7DQo+ICB9DQo+IA0KPiAtI2lmIGRlZmluZWQgX19B Vlg1MTJGX18gJiYgZGVmaW5lZCBSVEVfTUVNQ1BZX0FWWDUxMg0KPiAtDQo+IC0jZGVmaW5lIEFM SUdOTUVOVF9NQVNLIDB4M0YNCj4gLQ0KPiAtLyoqDQo+IC0gKiBBVlg1MTIgaW1wbGVtZW50YXRp b24gYmVsb3cNCj4gLSAqLw0KPiAtDQo+ICAvKioNCj4gICAqIENvcHkgMTYgYnl0ZXMgZnJvbSBv bmUgbG9jYXRpb24gdG8gYW5vdGhlciwNCj4gICAqIGxvY2F0aW9ucyBzaG91bGQgbm90IG92ZXJs YXAuDQo+IEBAIC0xMTksMTAgKzExMSwxNiBAQCBydGVfbW92MTYodWludDhfdCAqZHN0LCBjb25z dCB1aW50OF90ICpzcmMpDQo+ICBzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ICBy dGVfbW92MzIodWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMpDQo+ICB7DQo+ICsjaWYg KGRlZmluZWQgX19BVlg1MTJGX18gJiYgZGVmaW5lZCBSVEVfTUVNQ1BZX0FWWDUxMikgfHwgZGVm aW5lZCBfX0FWWDJfXyB8fA0KPiBcDQo+ICsJCShkZWZpbmVkIF9fQVZYX18gJiYgIShkZWZpbmVk KFJURV9UT09MQ0hBSU5fR0NDKSAmJiAoR0NDX1ZFUlNJT04NCj4gPCAxMTAwMDApKSkNCj4gIAlf X20yNTZpIHltbTA7DQo+IA0KPiAgCXltbTAgPSBfbW0yNTZfbG9hZHVfc2kyNTYoKGNvbnN0IF9f bTI1NmkgKilzcmMpOw0KPiAgCV9tbTI1Nl9zdG9yZXVfc2kyNTYoKF9fbTI1NmkgKilkc3QsIHlt bTApOw0KPiArI2Vsc2UgLyogU1NFIGltcGxlbWVudGF0aW9uICovDQo+ICsJcnRlX21vdjE2KCh1 aW50OF90ICopZHN0ICsgMCAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDAgKiAxNik7DQo+ ICsJcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgMSAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNy YyArIDEgKiAxNik7DQo+ICsjZW5kaWYNCj4gIH0NCj4gDQo+ICAvKioNCj4gQEAgLTEzMiwxMCAr MTMwLDE1IEBAIHJ0ZV9tb3YzMih1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYykNCj4g IHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gIHJ0ZV9tb3Y2NCh1aW50OF90ICpk c3QsIGNvbnN0IHVpbnQ4X3QgKnNyYykNCj4gIHsNCj4gKyNpZiBkZWZpbmVkIF9fQVZYNTEyRl9f ICYmIGRlZmluZWQgUlRFX01FTUNQWV9BVlg1MTINCj4gIAlfX201MTJpIHptbTA7DQo+IA0KPiAg CXptbTAgPSBfbW01MTJfbG9hZHVfc2k1MTIoKGNvbnN0IHZvaWQgKilzcmMpOw0KPiAgCV9tbTUx Ml9zdG9yZXVfc2k1MTIoKHZvaWQgKilkc3QsIHptbTApOw0KPiArI2Vsc2UgLyogQVZYMiwgQVZY ICYgU1NFIGltcGxlbWVudGF0aW9uICovDQo+ICsJcnRlX21vdjMyKCh1aW50OF90ICopZHN0ICsg MCAqIDMyLCAoY29uc3QgdWludDhfdCAqKXNyYyArIDAgKiAzMik7DQo+ICsJcnRlX21vdjMyKCh1 aW50OF90ICopZHN0ICsgMSAqIDMyLCAoY29uc3QgdWludDhfdCAqKXNyYyArIDEgKiAzMik7DQo+ ICsjZW5kaWYNCj4gIH0NCj4gDQo+ICAvKioNCj4gQEAgLTE1NiwxMiArMTU5LDE4IEBAIHJ0ZV9t b3YxMjgodWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMpDQo+ICBzdGF0aWMgX19ydGVf YWx3YXlzX2lubGluZSB2b2lkDQo+ICBydGVfbW92MjU2KHVpbnQ4X3QgKmRzdCwgY29uc3QgdWlu dDhfdCAqc3JjKQ0KPiAgew0KPiAtCXJ0ZV9tb3Y2NChkc3QgKyAwICogNjQsIHNyYyArIDAgKiA2 NCk7DQo+IC0JcnRlX21vdjY0KGRzdCArIDEgKiA2NCwgc3JjICsgMSAqIDY0KTsNCj4gLQlydGVf bW92NjQoZHN0ICsgMiAqIDY0LCBzcmMgKyAyICogNjQpOw0KPiAtCXJ0ZV9tb3Y2NChkc3QgKyAz ICogNjQsIHNyYyArIDMgKiA2NCk7DQo+ICsJcnRlX21vdjEyOChkc3QgKyAwICogMTI4LCBzcmMg KyAwICogMTI4KTsNCj4gKwlydGVfbW92MTI4KGRzdCArIDEgKiAxMjgsIHNyYyArIDEgKiAxMjgp Ow0KPiAgfQ0KPiANCj4gKyNpZiBkZWZpbmVkIF9fQVZYNTEyRl9fICYmIGRlZmluZWQgUlRFX01F TUNQWV9BVlg1MTINCj4gKw0KPiArLyoqDQo+ICsgKiBBVlg1MTIgaW1wbGVtZW50YXRpb24gYmVs b3cNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIEFMSUdOTUVOVF9NQVNLIDB4M0YNCj4gKw0KPiAg LyoqDQo+ICAgKiBDb3B5IDEyOC1ieXRlIGJsb2NrcyBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90 aGVyLA0KPiAgICogbG9jYXRpb25zIHNob3VsZCBub3Qgb3ZlcmxhcC4NCj4gQEAgLTIzMSwxMiAr MjQwLDIyIEBAIHJ0ZV9tZW1jcHlfZ2VuZXJpYyh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywg c2l6ZV90IG4pDQo+ICAJLyoqDQo+ICAJICogRmFzdCB3YXkgd2hlbiBjb3B5IHNpemUgZG9lc24n dCBleGNlZWQgNTEyIGJ5dGVzDQo+ICAJICovDQo+ICsJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9w KG4pICYmIG4gPT0gMzIpIHsNCj4gKwkJcnRlX21vdjMyKCh1aW50OF90ICopZHN0LCAoY29uc3Qg dWludDhfdCAqKXNyYyk7DQo+ICsJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiAgCWlmIChuIDw9IDMy KSB7DQo+ICAJCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCwgKGNvbnN0IHVpbnQ4X3QgKilzcmMp Ow0KPiArCQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AobikgJiYgbiA9PSAxNikNCj4gKwkJCXJl dHVybiByZXQ7IC8qIGF2b2lkIChoYXJtbGVzcykgZHVwbGljYXRlIGNvcHkgKi8NCj4gIAkJcnRl X21vdjE2KCh1aW50OF90ICopZHN0IC0gMTYgKyBuLA0KPiAgCQkJCSAgKGNvbnN0IHVpbnQ4X3Qg KilzcmMgLSAxNiArIG4pOw0KPiAgCQlyZXR1cm4gcmV0Ow0KPiAgCX0NCj4gKwlpZiAoX19idWls dGluX2NvbnN0YW50X3AobikgJiYgbiA9PSA2NCkgew0KPiArCQlydGVfbW92NjQoKHVpbnQ4X3Qg Kilkc3QsIChjb25zdCB1aW50OF90ICopc3JjKTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ ICAJaWYgKG4gPD0gNjQpIHsNCj4gIAkJcnRlX21vdjMyKCh1aW50OF90ICopZHN0LCAoY29uc3Qg dWludDhfdCAqKXNyYyk7DQo+ICAJCXJ0ZV9tb3YzMigodWludDhfdCAqKWRzdCAtIDMyICsgbiwN Cj4gQEAgLTMxMyw4MCArMzMyLDE0IEBAIHJ0ZV9tZW1jcHlfZ2VuZXJpYyh2b2lkICpkc3QsIGNv bnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pDQo+ICAJZ290byBDT1BZX0JMT0NLXzEyOF9CQUNLNjM7 DQo+ICB9DQo+IA0KPiAtI2VsaWYgZGVmaW5lZCBfX0FWWDJfXw0KPiAtDQo+IC0jZGVmaW5lIEFM SUdOTUVOVF9NQVNLIDB4MUYNCj4gKyNlbGlmIGRlZmluZWQgX19BVlgyX18gfHwgXA0KPiArCQko ZGVmaW5lZCBfX0FWWF9fICYmICEoZGVmaW5lZChSVEVfVE9PTENIQUlOX0dDQykgJiYgKEdDQ19W RVJTSU9ODQo+IDwgMTEwMDAwKSkpDQo+IA0KPiAgLyoqDQo+IC0gKiBBVlgyIGltcGxlbWVudGF0 aW9uIGJlbG93DQo+ICsgKiBBVlgyIChhbmQgQVZYLCB1bmxlc3MgdG9vIG9sZCBHQ0MgdmVyc2lv bikgaW1wbGVtZW50YXRpb24gYmVsb3cNCj4gICAqLw0KPiANCj4gLS8qKg0KPiAtICogQ29weSAx NiBieXRlcyBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLA0KPiAtICogbG9jYXRpb25zIHNo b3VsZCBub3Qgb3ZlcmxhcC4NCj4gLSAqLw0KPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUg dm9pZA0KPiAtcnRlX21vdjE2KHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjKQ0KPiAt ew0KPiAtCV9fbTEyOGkgeG1tMDsNCj4gLQ0KPiAtCXhtbTAgPSBfbW1fbG9hZHVfc2kxMjgoKGNv bnN0IF9fbTEyOGkgKikoY29uc3Qgdm9pZCAqKXNyYyk7DQo+IC0JX21tX3N0b3JldV9zaTEyOCgo X19tMTI4aSAqKSh2b2lkICopZHN0LCB4bW0wKTsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gKiBD b3B5IDMyIGJ5dGVzIGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3RoZXIsDQo+IC0gKiBsb2NhdGlv bnMgc2hvdWxkIG5vdCBvdmVybGFwLg0KPiAtICovDQo+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lu bGluZSB2b2lkDQo+IC1ydGVfbW92MzIodWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMp DQo+IC17DQo+IC0JX19tMjU2aSB5bW0wOw0KPiAtDQo+IC0JeW1tMCA9IF9tbTI1Nl9sb2FkdV9z aTI1NigoY29uc3QgX19tMjU2aSAqKShjb25zdCB2b2lkICopc3JjKTsNCj4gLQlfbW0yNTZfc3Rv cmV1X3NpMjU2KChfX20yNTZpICopKHZvaWQgKilkc3QsIHltbTApOw0KPiAtfQ0KPiAtDQo+IC0v KioNCj4gLSAqIENvcHkgNjQgYnl0ZXMgZnJvbSBvbmUgbG9jYXRpb24gdG8gYW5vdGhlciwNCj4g LSAqIGxvY2F0aW9ucyBzaG91bGQgbm90IG92ZXJsYXAuDQo+IC0gKi8NCj4gLXN0YXRpYyBfX3J0 ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gLXJ0ZV9tb3Y2NCh1aW50OF90ICpkc3QsIGNvbnN0IHVp bnQ4X3QgKnNyYykNCj4gLXsNCj4gLQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3QgKyAwICogMzIs IChjb25zdCB1aW50OF90ICopc3JjICsgMCAqIDMyKTsNCj4gLQlydGVfbW92MzIoKHVpbnQ4X3Qg Kilkc3QgKyAxICogMzIsIChjb25zdCB1aW50OF90ICopc3JjICsgMSAqIDMyKTsNCj4gLX0NCj4g LQ0KPiAtLyoqDQo+IC0gKiBDb3B5IDEyOCBieXRlcyBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90 aGVyLA0KPiAtICogbG9jYXRpb25zIHNob3VsZCBub3Qgb3ZlcmxhcC4NCj4gLSAqLw0KPiAtc3Rh dGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiAtcnRlX21vdjEyOCh1aW50OF90ICpkc3Qs IGNvbnN0IHVpbnQ4X3QgKnNyYykNCj4gLXsNCj4gLQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3Qg KyAwICogMzIsIChjb25zdCB1aW50OF90ICopc3JjICsgMCAqIDMyKTsNCj4gLQlydGVfbW92MzIo KHVpbnQ4X3QgKilkc3QgKyAxICogMzIsIChjb25zdCB1aW50OF90ICopc3JjICsgMSAqIDMyKTsN Cj4gLQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3QgKyAyICogMzIsIChjb25zdCB1aW50OF90ICop c3JjICsgMiAqIDMyKTsNCj4gLQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3QgKyAzICogMzIsIChj b25zdCB1aW50OF90ICopc3JjICsgMyAqIDMyKTsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gKiBD b3B5IDI1NiBieXRlcyBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLA0KPiAtICogbG9jYXRp b25zIHNob3VsZCBub3Qgb3ZlcmxhcC4NCj4gLSAqLw0KPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19p bmxpbmUgdm9pZA0KPiAtcnRlX21vdjI1Nih1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNy YykNCj4gLXsNCj4gLQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3QgKyAwICogMzIsIChjb25zdCB1 aW50OF90ICopc3JjICsgMCAqIDMyKTsNCj4gLQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3QgKyAx ICogMzIsIChjb25zdCB1aW50OF90ICopc3JjICsgMSAqIDMyKTsNCj4gLQlydGVfbW92MzIoKHVp bnQ4X3QgKilkc3QgKyAyICogMzIsIChjb25zdCB1aW50OF90ICopc3JjICsgMiAqIDMyKTsNCj4g LQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3QgKyAzICogMzIsIChjb25zdCB1aW50OF90ICopc3Jj ICsgMyAqIDMyKTsNCj4gLQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3QgKyA0ICogMzIsIChjb25z dCB1aW50OF90ICopc3JjICsgNCAqIDMyKTsNCj4gLQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3Qg KyA1ICogMzIsIChjb25zdCB1aW50OF90ICopc3JjICsgNSAqIDMyKTsNCj4gLQlydGVfbW92MzIo KHVpbnQ4X3QgKilkc3QgKyA2ICogMzIsIChjb25zdCB1aW50OF90ICopc3JjICsgNiAqIDMyKTsN Cj4gLQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3QgKyA3ICogMzIsIChjb25zdCB1aW50OF90ICop c3JjICsgNyAqIDMyKTsNCj4gLX0NCj4gKyNkZWZpbmUgQUxJR05NRU5UX01BU0sgMHgxRg0KPiAN Cj4gIC8qKg0KPiAgICogQ29weSAxMjgtYnl0ZSBibG9ja3MgZnJvbSBvbmUgbG9jYXRpb24gdG8g YW5vdGhlciwNCj4gQEAgLTQzNywxNSArMzkwLDE0IEBAIHJ0ZV9tZW1jcHlfZ2VuZXJpYyh2b2lk ICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pDQo+ICAJLyoqDQo+ICAJICogRmFzdCB3 YXkgd2hlbiBjb3B5IHNpemUgZG9lc24ndCBleGNlZWQgMjU2IGJ5dGVzDQo+ICAJICovDQo+IC0J aWYgKG4gPD0gMzIpIHsNCj4gLQkJcnRlX21vdjE2KCh1aW50OF90ICopZHN0LCAoY29uc3QgdWlu dDhfdCAqKXNyYyk7DQo+IC0JCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCAtIDE2ICsgbiwNCj4g LQkJCQkoY29uc3QgdWludDhfdCAqKXNyYyAtIDE2ICsgbik7DQo+ICsJaWYgKF9fYnVpbHRpbl9j b25zdGFudF9wKG4pICYmIG4gPT0gMzIpIHsNCj4gKwkJcnRlX21vdjMyKCh1aW50OF90ICopZHN0 LCAoY29uc3QgdWludDhfdCAqKXNyYyk7DQo+ICAJCXJldHVybiByZXQ7DQo+ICAJfQ0KPiAtCWlm IChuIDw9IDQ4KSB7DQo+ICsJaWYgKG4gPD0gMzIpIHsNCj4gIAkJcnRlX21vdjE2KCh1aW50OF90 ICopZHN0LCAoY29uc3QgdWludDhfdCAqKXNyYyk7DQo+IC0JCXJ0ZV9tb3YxNigodWludDhfdCAq KWRzdCArIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDE2KTsNCj4gKwkJaWYgKF9fYnVpbHRp bl9jb25zdGFudF9wKG4pICYmIG4gPT0gMTYpDQo+ICsJCQlyZXR1cm4gcmV0OyAvKiBhdm9pZCAo aGFybWxlc3MpIGR1cGxpY2F0ZSBjb3B5ICovDQo+ICAJCXJ0ZV9tb3YxNigodWludDhfdCAqKWRz dCAtIDE2ICsgbiwNCj4gIAkJCQkoY29uc3QgdWludDhfdCAqKXNyYyAtIDE2ICsgbik7DQo+ICAJ CXJldHVybiByZXQ7DQo+IEBAIC01MTMsOTAgKzQ2NSwxMSBAQCBydGVfbWVtY3B5X2dlbmVyaWMo dm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQ0KPiANCj4gICNlbHNlIC8qIF9f QVZYNTEyRl9fICovDQo+IA0KPiAtI2RlZmluZSBBTElHTk1FTlRfTUFTSyAweDBGDQo+IC0NCj4g LS8qKg0KPiAtICogU1NFICYgQVZYIGltcGxlbWVudGF0aW9uIGJlbG93DQo+IC0gKi8NCj4gLQ0K PiAtLyoqDQo+IC0gKiBDb3B5IDE2IGJ5dGVzIGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3RoZXIs DQo+IC0gKiBsb2NhdGlvbnMgc2hvdWxkIG5vdCBvdmVybGFwLg0KPiAtICovDQo+IC1zdGF0aWMg X19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+IC1ydGVfbW92MTYodWludDhfdCAqZHN0LCBjb25z dCB1aW50OF90ICpzcmMpDQo+IC17DQo+IC0JX19tMTI4aSB4bW0wOw0KPiAtDQo+IC0JeG1tMCA9 IF9tbV9sb2FkdV9zaTEyOCgoY29uc3QgX19tMTI4aSAqKShjb25zdCB2b2lkICopc3JjKTsNCj4g LQlfbW1fc3RvcmV1X3NpMTI4KChfX20xMjhpICopKHZvaWQgKilkc3QsIHhtbTApOw0KPiAtfQ0K PiAtDQo+IC0vKioNCj4gLSAqIENvcHkgMzIgYnl0ZXMgZnJvbSBvbmUgbG9jYXRpb24gdG8gYW5v dGhlciwNCj4gLSAqIGxvY2F0aW9ucyBzaG91bGQgbm90IG92ZXJsYXAuDQo+IC0gKi8NCj4gLXN0 YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gLXJ0ZV9tb3YzMih1aW50OF90ICpkc3Qs IGNvbnN0IHVpbnQ4X3QgKnNyYykNCj4gLXsNCj4gLQlydGVfbW92MTYoKHVpbnQ4X3QgKilkc3Qg KyAwICogMTYsIChjb25zdCB1aW50OF90ICopc3JjICsgMCAqIDE2KTsNCj4gLQlydGVfbW92MTYo KHVpbnQ4X3QgKilkc3QgKyAxICogMTYsIChjb25zdCB1aW50OF90ICopc3JjICsgMSAqIDE2KTsN Cj4gLX0NCj4gLQ0KPiAgLyoqDQo+IC0gKiBDb3B5IDY0IGJ5dGVzIGZyb20gb25lIGxvY2F0aW9u IHRvIGFub3RoZXIsDQo+IC0gKiBsb2NhdGlvbnMgc2hvdWxkIG5vdCBvdmVybGFwLg0KPiAtICov DQo+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+IC1ydGVfbW92NjQodWludDhf dCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMpDQo+IC17DQo+IC0JcnRlX21vdjE2KCh1aW50OF90 ICopZHN0ICsgMCAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDAgKiAxNik7DQo+IC0JcnRl X21vdjE2KCh1aW50OF90ICopZHN0ICsgMSAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDEg KiAxNik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgMiAqIDE2LCAoY29uc3QgdWlu dDhfdCAqKXNyYyArIDIgKiAxNik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgMyAq IDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDMgKiAxNik7DQo+IC19DQo+IC0NCj4gLS8qKg0K PiAtICogQ29weSAxMjggYnl0ZXMgZnJvbSBvbmUgbG9jYXRpb24gdG8gYW5vdGhlciwNCj4gLSAq IGxvY2F0aW9ucyBzaG91bGQgbm90IG92ZXJsYXAuDQo+ICsgKiBTU0UgKGFuZCBBVlgsIHdpdGgg dG9vIG9sZCBHQ0MgdmVyc2lvbikgaW1wbGVtZW50YXRpb24gYmVsb3cNCj4gICAqLw0KPiAtc3Rh dGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiAtcnRlX21vdjEyOCh1aW50OF90ICpkc3Qs IGNvbnN0IHVpbnQ4X3QgKnNyYykNCj4gLXsNCj4gLQlydGVfbW92MTYoKHVpbnQ4X3QgKilkc3Qg KyAwICogMTYsIChjb25zdCB1aW50OF90ICopc3JjICsgMCAqIDE2KTsNCj4gLQlydGVfbW92MTYo KHVpbnQ4X3QgKilkc3QgKyAxICogMTYsIChjb25zdCB1aW50OF90ICopc3JjICsgMSAqIDE2KTsN Cj4gLQlydGVfbW92MTYoKHVpbnQ4X3QgKilkc3QgKyAyICogMTYsIChjb25zdCB1aW50OF90ICop c3JjICsgMiAqIDE2KTsNCj4gLQlydGVfbW92MTYoKHVpbnQ4X3QgKilkc3QgKyAzICogMTYsIChj b25zdCB1aW50OF90ICopc3JjICsgMyAqIDE2KTsNCj4gLQlydGVfbW92MTYoKHVpbnQ4X3QgKilk c3QgKyA0ICogMTYsIChjb25zdCB1aW50OF90ICopc3JjICsgNCAqIDE2KTsNCj4gLQlydGVfbW92 MTYoKHVpbnQ4X3QgKilkc3QgKyA1ICogMTYsIChjb25zdCB1aW50OF90ICopc3JjICsgNSAqIDE2 KTsNCj4gLQlydGVfbW92MTYoKHVpbnQ4X3QgKilkc3QgKyA2ICogMTYsIChjb25zdCB1aW50OF90 ICopc3JjICsgNiAqIDE2KTsNCj4gLQlydGVfbW92MTYoKHVpbnQ4X3QgKilkc3QgKyA3ICogMTYs IChjb25zdCB1aW50OF90ICopc3JjICsgNyAqIDE2KTsNCj4gLX0NCj4gDQo+IC0vKioNCj4gLSAq IENvcHkgMjU2IGJ5dGVzIGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3RoZXIsDQo+IC0gKiBsb2Nh dGlvbnMgc2hvdWxkIG5vdCBvdmVybGFwLg0KPiAtICovDQo+IC1zdGF0aWMgaW5saW5lIHZvaWQN Cj4gLXJ0ZV9tb3YyNTYodWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMpDQo+IC17DQo+ IC0JcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgMCAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNy YyArIDAgKiAxNik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgMSAqIDE2LCAoY29u c3QgdWludDhfdCAqKXNyYyArIDEgKiAxNik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICopZHN0 ICsgMiAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDIgKiAxNik7DQo+IC0JcnRlX21vdjE2 KCh1aW50OF90ICopZHN0ICsgMyAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDMgKiAxNik7 DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgNCAqIDE2LCAoY29uc3QgdWludDhfdCAq KXNyYyArIDQgKiAxNik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgNSAqIDE2LCAo Y29uc3QgdWludDhfdCAqKXNyYyArIDUgKiAxNik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICop ZHN0ICsgNiAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDYgKiAxNik7DQo+IC0JcnRlX21v djE2KCh1aW50OF90ICopZHN0ICsgNyAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDcgKiAx Nik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgOCAqIDE2LCAoY29uc3QgdWludDhf dCAqKXNyYyArIDggKiAxNik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgOSAqIDE2 LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDkgKiAxNik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90 ICopZHN0ICsgMTAgKiAxNiwgKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyAxMCAqIDE2KTsNCj4gLQly dGVfbW92MTYoKHVpbnQ4X3QgKilkc3QgKyAxMSAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyAr IDExICogMTYpOw0KPiAtCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCArIDEyICogMTYsIChjb25z dCB1aW50OF90ICopc3JjICsgMTIgKiAxNik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICopZHN0 ICsgMTMgKiAxNiwgKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyAxMyAqIDE2KTsNCj4gLQlydGVfbW92 MTYoKHVpbnQ4X3QgKilkc3QgKyAxNCAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDE0ICog MTYpOw0KPiAtCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCArIDE1ICogMTYsIChjb25zdCB1aW50 OF90ICopc3JjICsgMTUgKiAxNik7DQo+IC19DQo+ICsjZGVmaW5lIEFMSUdOTUVOVF9NQVNLIDB4 MEYNCj4gDQo+ICAvKioNCj4gICAqIE1hY3JvIGZvciBjb3B5aW5nIHVuYWxpZ25lZCBibG9jayBm cm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyIHdpdGgNCj4gY29uc3RhbnQgbG9hZCBvZmZzZXQs DQo+IEBAIC03MTIsMTcgKzU4NSwxNSBAQCBydGVfbWVtY3B5X2dlbmVyaWModm9pZCAqZHN0LCBj b25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQ0KPiAgCSAqLw0KPiAgCWlmIChuIDw9IDMyKSB7DQo+ ICAJCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCwgKGNvbnN0IHVpbnQ4X3QgKilzcmMpOw0KPiAt CQlydGVfbW92MTYoKHVpbnQ4X3QgKilkc3QgLSAxNiArIG4sIChjb25zdCB1aW50OF90ICopc3Jj IC0gMTYgKw0KPiBuKTsNCj4gLQkJcmV0dXJuIHJldDsNCj4gLQl9DQo+IC0JaWYgKG4gPD0gNDgp IHsNCj4gLQkJcnRlX21vdjMyKCh1aW50OF90ICopZHN0LCAoY29uc3QgdWludDhfdCAqKXNyYyk7 DQo+ICsJCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSAmJiBuID09IDE2KQ0KPiArCQkJcmV0 dXJuIHJldDsgLyogYXZvaWQgKGhhcm1sZXNzKSBkdXBsaWNhdGUgY29weSAqLw0KPiAgCQlydGVf bW92MTYoKHVpbnQ4X3QgKilkc3QgLSAxNiArIG4sIChjb25zdCB1aW50OF90ICopc3JjIC0gMTYg Kw0KPiBuKTsNCj4gIAkJcmV0dXJuIHJldDsNCj4gIAl9DQo+ICAJaWYgKG4gPD0gNjQpIHsNCj4g IAkJcnRlX21vdjMyKCh1aW50OF90ICopZHN0LCAoY29uc3QgdWludDhfdCAqKXNyYyk7DQo+IC0J CXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCArIDMyLCAoY29uc3QgdWludDhfdCAqKXNyYyArIDMy KTsNCj4gKwkJaWYgKG4gPiA0OCkNCj4gKwkJCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCArIDMy LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDMyKTsNCj4gIAkJcnRlX21vdjE2KCh1aW50OF90ICop ZHN0IC0gMTYgKyBuLCAoY29uc3QgdWludDhfdCAqKXNyYyAtIDE2ICsNCj4gbik7DQo+ICAJCXJl dHVybiByZXQ7DQo+ICAJfQ0KPiBAQCAtODI4LDggKzY5OSwxNCBAQCBydGVfbWVtY3B5X2FsaWdu ZWQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQ0KPiAgCX0NCj4gDQo+ICAJ LyogQ29weSAxNiA8PSBzaXplIDw9IDMyIGJ5dGVzICovDQo+ICsJaWYgKF9fYnVpbHRpbl9jb25z dGFudF9wKG4pICYmIG4gPT0gMzIpIHsNCj4gKwkJcnRlX21vdjMyKCh1aW50OF90ICopZHN0LCAo Y29uc3QgdWludDhfdCAqKXNyYyk7DQo+ICsJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiAgCWlmIChu IDw9IDMyKSB7DQo+ICAJCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCwgKGNvbnN0IHVpbnQ4X3Qg KilzcmMpOw0KPiArCQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AobikgJiYgbiA9PSAxNikNCj4g KwkJCXJldHVybiByZXQ7IC8qIGF2b2lkIChoYXJtbGVzcykgZHVwbGljYXRlIGNvcHkgKi8NCj4g IAkJcnRlX21vdjE2KCh1aW50OF90ICopZHN0IC0gMTYgKyBuLA0KPiAgCQkJCShjb25zdCB1aW50 OF90ICopc3JjIC0gMTYgKyBuKTsNCj4gDQo+IEBAIC04MzcsNiArNzE0LDEwIEBAIHJ0ZV9tZW1j cHlfYWxpZ25lZCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pDQo+ICAJfQ0K PiANCj4gIAkvKiBDb3B5IDMyIDwgc2l6ZSA8PSA2NCBieXRlcyAqLw0KPiArCWlmIChfX2J1aWx0 aW5fY29uc3RhbnRfcChuKSAmJiBuID09IDY0KSB7DQo+ICsJCXJ0ZV9tb3Y2NCgodWludDhfdCAq KWRzdCwgKGNvbnN0IHVpbnQ4X3QgKilzcmMpOw0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4g IAlpZiAobiA8PSA2NCkgew0KPiAgCQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3QsIChjb25zdCB1 aW50OF90ICopc3JjKTsNCj4gIAkJcnRlX21vdjMyKCh1aW50OF90ICopZHN0IC0gMzIgKyBuLA0K PiAtLQ0KPiAyLjE3LjENCg0K