From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1874 invoked by alias); 5 Dec 2016 16:47:37 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 1854 invoked by uid 89); 5 Dec 2016 16:47:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-4.8 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=Matthew, white-space, radhakrishnan, Radhakrishnan X-HELO: foss.arm.com Received: from foss.arm.com (HELO foss.arm.com) (217.140.101.70) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 05 Dec 2016 16:47:26 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BCD55AD7; Mon, 5 Dec 2016 08:47:24 -0800 (PST) Received: from [10.2.206.251] (e107157-lin.cambridge.arm.com [10.2.206.251]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6B9863F483 for ; Mon, 5 Dec 2016 08:47:24 -0800 (PST) Subject: [arm-embedded][committed][PATCH 10/17] Refactor support code for NEON builtins. To: gcc-patches@gcc.gnu.org References: <573B28A3.9030603@foss.arm.com> <573B2D2D.4030507@foss.arm.com> From: "Andre Vieira (lists)" Message-ID: <58459A1B.50107@arm.com> Date: Mon, 05 Dec 2016 16:47:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------010508090402050107080909" X-IsSubscribed: yes X-SW-Source: 2016-12/txt/msg00348.txt.bz2 This is a multi-part message in MIME format. --------------010508090402050107080909 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-length: 2117 On 28/07/16 12:54, Ramana Radhakrishnan wrote: > On Tue, May 17, 2016 at 3:39 PM, Matthew Wahab > wrote: >> The ACLE intrinsics introduced to support the ARMv8.2 FP16 extensions >> require that intrinsics for scalar (VFP) instructions are available >> under different conditions from those for the NEON intrinsics. To >> support this, changes to the builtins support code are needed to enable >> the scalar intrinsics to be initialized and expanded independently of >> the NEON intrinsics. >> >> This patch prepares for this by refactoring some of the builtin support >> code so that it can be used for both the scalar and the NEON intrinsics. >> >> Tested the series for arm-none-linux-gnueabihf with native bootstrap and >> make check and for arm-none-eabi and armeb-none-eabi with make check on >> an ARMv8.2-A emulator. > > > OK. > > Ramana >> >> Ok for trunk? >> Matthew >> >> 2016-05-17 Matthew Wahab >> >> * config/arm/arm-builtins.c (ARM_BUILTIN_NEON_PATTERN_START): >> Change offset calculation. >> (arm_init_neon_builtin): New. >> (arm_init_builtins): Move body of a loop to the standalone >> function arm_init_neon_builtin. >> (arm_expand_neon_builtin_1): New. Update comment. Function body >> moved from arm_expand_neon_builtin with some white-space fixes. >> (arm_expand_neon_builtin): Move code into the standalone function >> arm_expand_neon_builtin_1. >> > Hi, Backported this to embedded-6-branch in revision r. gcc/ChangeLog.arm: 2016-12-05 Andre Vieira Backport from mainline 2016-09-23 Matthew Wahab * config/arm/arm-builtins.c (arm_init_neon_builtin): New. (arm_init_builtins): Move body of a loop to the standalone function arm_init_neon_builtin. (arm_expand_neon_builtin_1): New. Update comment. Function body moved from arm_neon_builtin with some white-space fixes. (arm_expand_neon_builtin): Move code into the standalone function arm_expand_neon_builtin_1. --------------010508090402050107080909 Content-Type: text/plain; charset=UTF-8; name="diff0" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="diff0" Content-length: 18178 ZGlmZiAtLWdpdCBhL2djYy9DaGFuZ2VMb2cuYXJtIGIvZ2NjL0NoYW5nZUxv Zy5hcm0KaW5kZXggODAwYTRiNjBlZmU3ZmU1YmE5MDc3MjE3YjdlYjEyNzFl OWUwNTE4MC4uZDljNzE5ODNjZjA1YzFmZTZiNzU3OGUyYzNkNDNhNTgxNDEy ZTcwOCAxMDA2NDQKLS0tIGEvZ2NjL0NoYW5nZUxvZy5hcm0KKysrIGIvZ2Nj L0NoYW5nZUxvZy5hcm0KQEAgLTEsNiArMSwxOSBAQAogMjAxNi0xMi0wNSAg QW5kcmUgVmllaXJhICA8YW5kcmUuc2ltb2VzZGlhc3ZpZWlyYUBhcm0uY29t PgogCiAJQmFja3BvcnQgZnJvbSBtYWlubGluZQorCTIwMTYtMDktMjMgIE1h dHRoZXcgV2FoYWIgIDxtYXR0aGV3LndhaGFiQGFybS5jb20+CisKKwkgKiBj b25maWcvYXJtL2FybS1idWlsdGlucy5jIChhcm1faW5pdF9uZW9uX2J1aWx0 aW4pOiBOZXcuCisJIChhcm1faW5pdF9idWlsdGlucyk6IE1vdmUgYm9keSBv ZiBhIGxvb3AgdG8gdGhlIHN0YW5kYWxvbmUKKwkgZnVuY3Rpb24gYXJtX2lu aXRfbmVvbl9idWlsdGluLgorCSAoYXJtX2V4cGFuZF9uZW9uX2J1aWx0aW5f MSk6IE5ldy4gIFVwZGF0ZSBjb21tZW50LiAgRnVuY3Rpb24gYm9keQorCSBt b3ZlZCBmcm9tIGFybV9uZW9uX2J1aWx0aW4gd2l0aCBzb21lIHdoaXRlLXNw YWNlIGZpeGVzLgorCSAoYXJtX2V4cGFuZF9uZW9uX2J1aWx0aW4pOiBNb3Zl IGNvZGUgaW50byB0aGUgc3RhbmRhbG9uZSBmdW5jdGlvbgorCSBhcm1fZXhw YW5kX25lb25fYnVpbHRpbl8xLgorCisyMDE2LTEyLTA1ICBBbmRyZSBWaWVp cmEgIDxhbmRyZS5zaW1vZXNkaWFzdmllaXJhQGFybS5jb20+CisKKwlCYWNr cG9ydCBmcm9tIG1haW5saW5lCiAJMjAxNi0xMi0wMiAgQW5kcmUgVmllaXJh ICA8YW5kcmUuc2ltb2VzZGlhc3ZpZWlyYUBhcm0uY29tPgogCQkgICAgVGhv bWFzIFByZXVkJ2hvbW1lCTx0aG9tYXMucHJldWRob21tZUBhcm0uY29tPgog CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9hcm0tYnVpbHRpbnMuYyBi L2djYy9jb25maWcvYXJtL2FybS1idWlsdGlucy5jCmluZGV4IGFjNTY2NDg3 MDZjZDgxYTM1ZmMzMmJkZTBiZjNmYzcyMzM4N2Y1ZDUuLmI3NDc4MzczMTNm OWVjMjg0OTYyNDVmMjUzMDcxYWM1YmQ4YjA4ZjkgMTAwNjQ0Ci0tLSBhL2dj Yy9jb25maWcvYXJtL2FybS1idWlsdGlucy5jCisrKyBiL2djYy9jb25maWcv YXJtL2FybS1idWlsdGlucy5jCkBAIC01NDUsNyArNTQ1LDcgQEAgZW51bSBh cm1fYnVpbHRpbnMKIH07CiAKICNkZWZpbmUgQVJNX0JVSUxUSU5fTkVPTl9Q QVRURVJOX1NUQVJUIFwKLSAgICAoQVJNX0JVSUxUSU5fTUFYIC0gQVJSQVlf U0laRSAobmVvbl9idWlsdGluX2RhdGEpKQorICAoQVJNX0JVSUxUSU5fTkVP Tl9CQVNFICsgMSkKIAogI3VuZGVmIENGCiAjdW5kZWYgVkFSMQpAQCAtODk3 LDYgKzg5NywxMTAgQEAgYXJtX2luaXRfc2ltZF9idWlsdGluX3NjYWxhcl90 eXBlcyAodm9pZCkKIAkJCQkJICAgICAiX19idWlsdGluX25lb25fdXRpIik7 CiB9CiAKKy8qIFNldCB1cCBhIE5FT04gYnVpbHRpbi4gICovCisKK3N0YXRp YyB2b2lkCithcm1faW5pdF9uZW9uX2J1aWx0aW4gKHVuc2lnbmVkIGludCBm Y29kZSwKKwkJICAgICAgIG5lb25fYnVpbHRpbl9kYXR1bSAqZCkKK3sKKyAg Ym9vbCBwcmludF90eXBlX3NpZ25hdHVyZV9wID0gZmFsc2U7CisgIGNoYXIg dHlwZV9zaWduYXR1cmVbU0lNRF9NQVhfQlVJTFRJTl9BUkdTXSA9IHsgMCB9 OworICBjaGFyIG5hbWVidWZbNjBdOworICB0cmVlIGZ0eXBlID0gTlVMTDsK KyAgdHJlZSBmbmRlY2wgPSBOVUxMOworCisgIGQtPmZjb2RlID0gZmNvZGU7 CisKKyAgLyogV2UgbXVzdCB0cmFjayB0d28gdmFyaWFibGVzIGhlcmUuICBv cF9udW0gaXMKKyAgICAgdGhlIG9wZXJhbmQgbnVtYmVyIGFzIGluIHRoZSBS VEwgcGF0dGVybi4gIFRoaXMgaXMKKyAgICAgcmVxdWlyZWQgdG8gYWNjZXNz IHRoZSBtb2RlIChlLmcuIFY0U0YgbW9kZSkgb2YgdGhlCisgICAgIGFyZ3Vt ZW50LCBmcm9tIHdoaWNoIHRoZSBiYXNlIHR5cGUgY2FuIGJlIGRlcml2ZWQu CisgICAgIGFyZ19udW0gaXMgYW4gaW5kZXggaW4gdG8gdGhlIHF1YWxpZmll cnMgZGF0YSwgd2hpY2gKKyAgICAgZ2l2ZXMgcXVhbGlmaWVycyB0byB0aGUg dHlwZSAoZS5nLiBjb25zdCB1bnNpZ25lZCkuCisgICAgIFRoZSByZWFzb24g dGhlc2UgdHdvIHZhcmlhYmxlcyBtYXkgZGlmZmVyIGJ5IG9uZSBpcyB0aGUK KyAgICAgdm9pZCByZXR1cm4gdHlwZS4gIFdoaWxlIGFsbCByZXR1cm4gdHlw ZXMgdGFrZSB0aGUgMHRoIGVudHJ5CisgICAgIGluIHRoZSBxdWFsaWZpZXJz IGFycmF5LCB0aGVyZSBpcyBubyBvcGVyYW5kIGZvciB0aGVtIGluIHRoZQor ICAgICBSVEwgcGF0dGVybi4gICovCisgIGludCBvcF9udW0gPSBpbnNuX2Rh dGFbZC0+Y29kZV0ubl9vcGVyYW5kcyAtIDE7CisgIGludCBhcmdfbnVtID0g ZC0+cXVhbGlmaWVyc1swXSAmIHF1YWxpZmllcl92b2lkCisgICAgPyBvcF9u dW0gKyAxCisgICAgOiBvcF9udW07CisgIHRyZWUgcmV0dXJuX3R5cGUgPSB2 b2lkX3R5cGVfbm9kZSwgYXJncyA9IHZvaWRfbGlzdF9ub2RlOworICB0cmVl IGVsdHlwZTsKKworICAvKiBCdWlsZCBhIGZ1bmN0aW9uIHR5cGUgZGlyZWN0 bHkgZnJvbSB0aGUgaW5zbl9kYXRhIGZvciB0aGlzCisgICAgIGJ1aWx0aW4u ICBUaGUgYnVpbGRfZnVuY3Rpb25fdHlwZSAoKSBmdW5jdGlvbiB0YWtlcyBj YXJlIG9mCisgICAgIHJlbW92aW5nIGR1cGxpY2F0ZXMgZm9yIHVzLiAgKi8K KyAgZm9yICg7IG9wX251bSA+PSAwOyBhcmdfbnVtLS0sIG9wX251bS0tKQor ICAgIHsKKyAgICAgIG1hY2hpbmVfbW9kZSBvcF9tb2RlID0gaW5zbl9kYXRh W2QtPmNvZGVdLm9wZXJhbmRbb3BfbnVtXS5tb2RlOworICAgICAgZW51bSBh cm1fdHlwZV9xdWFsaWZpZXJzIHF1YWxpZmllcnMgPSBkLT5xdWFsaWZpZXJz W2FyZ19udW1dOworCisgICAgICBpZiAocXVhbGlmaWVycyAmIHF1YWxpZmll cl91bnNpZ25lZCkKKwl7CisJICB0eXBlX3NpZ25hdHVyZVthcmdfbnVtXSA9 ICd1JzsKKwkgIHByaW50X3R5cGVfc2lnbmF0dXJlX3AgPSB0cnVlOworCX0K KyAgICAgIGVsc2UgaWYgKHF1YWxpZmllcnMgJiBxdWFsaWZpZXJfcG9seSkK Kwl7CisJICB0eXBlX3NpZ25hdHVyZVthcmdfbnVtXSA9ICdwJzsKKwkgIHBy aW50X3R5cGVfc2lnbmF0dXJlX3AgPSB0cnVlOworCX0KKyAgICAgIGVsc2UK Kwl0eXBlX3NpZ25hdHVyZVthcmdfbnVtXSA9ICdzJzsKKworICAgICAgLyog U2tpcCBhbiBpbnRlcm5hbCBvcGVyYW5kIGZvciB2Z2V0X3tsb3csIGhpZ2h9 LiAgKi8KKyAgICAgIGlmIChxdWFsaWZpZXJzICYgcXVhbGlmaWVyX2ludGVy bmFsKQorCWNvbnRpbnVlOworCisgICAgICAvKiBTb21lIGJ1aWx0aW5zIGhh dmUgZGlmZmVyZW50IHVzZXItZmFjaW5nIHR5cGVzCisJIGZvciBjZXJ0YWlu IGFyZ3VtZW50cywgZW5jb2RlZCBpbiBkLT5tb2RlLiAgKi8KKyAgICAgIGlm IChxdWFsaWZpZXJzICYgcXVhbGlmaWVyX21hcF9tb2RlKQorCW9wX21vZGUg PSBkLT5tb2RlOworCisgICAgICAvKiBGb3IgcG9pbnRlcnMsIHdlIHdhbnQg YSBwb2ludGVyIHRvIHRoZSBiYXNpYyB0eXBlCisJIG9mIHRoZSB2ZWN0b3Iu ICAqLworICAgICAgaWYgKHF1YWxpZmllcnMgJiBxdWFsaWZpZXJfcG9pbnRl ciAmJiBWRUNUT1JfTU9ERV9QIChvcF9tb2RlKSkKKwlvcF9tb2RlID0gR0VU X01PREVfSU5ORVIgKG9wX21vZGUpOworCisgICAgICBlbHR5cGUgPSBhcm1f c2ltZF9idWlsdGluX3R5cGUKKwkob3BfbW9kZSwKKwkgKHF1YWxpZmllcnMg JiBxdWFsaWZpZXJfdW5zaWduZWQpICE9IDAsCisJIChxdWFsaWZpZXJzICYg cXVhbGlmaWVyX3BvbHkpICE9IDApOworICAgICAgZ2NjX2Fzc2VydCAoZWx0 eXBlICE9IE5VTEwpOworCisgICAgICAvKiBBZGQgcXVhbGlmaWVycy4gICov CisgICAgICBpZiAocXVhbGlmaWVycyAmIHF1YWxpZmllcl9jb25zdCkKKwll bHR5cGUgPSBidWlsZF9xdWFsaWZpZWRfdHlwZSAoZWx0eXBlLCBUWVBFX1FV QUxfQ09OU1QpOworCisgICAgICBpZiAocXVhbGlmaWVycyAmIHF1YWxpZmll cl9wb2ludGVyKQorCWVsdHlwZSA9IGJ1aWxkX3BvaW50ZXJfdHlwZSAoZWx0 eXBlKTsKKworICAgICAgLyogSWYgd2UgaGF2ZSByZWFjaGVkIGFyZ19udW0g PT0gMCwgd2UgYXJlIGF0IGEgbm9uLXZvaWQKKwkgcmV0dXJuIHR5cGUuICBP dGhlcndpc2UsIHdlIGFyZSBzdGlsbCBwcm9jZXNzaW5nCisJIGFyZ3VtZW50 cy4gICovCisgICAgICBpZiAoYXJnX251bSA9PSAwKQorCXJldHVybl90eXBl ID0gZWx0eXBlOworICAgICAgZWxzZQorCWFyZ3MgPSB0cmVlX2NvbnMgKE5V TExfVFJFRSwgZWx0eXBlLCBhcmdzKTsKKyAgICB9CisKKyAgZnR5cGUgPSBi dWlsZF9mdW5jdGlvbl90eXBlIChyZXR1cm5fdHlwZSwgYXJncyk7CisKKyAg Z2NjX2Fzc2VydCAoZnR5cGUgIT0gTlVMTCk7CisKKyAgaWYgKHByaW50X3R5 cGVfc2lnbmF0dXJlX3ApCisgICAgc25wcmludGYgKG5hbWVidWYsIHNpemVv ZiAobmFtZWJ1ZiksICJfX2J1aWx0aW5fbmVvbl8lc18lcyIsCisJICAgICAg ZC0+bmFtZSwgdHlwZV9zaWduYXR1cmUpOworICBlbHNlCisgICAgc25wcmlu dGYgKG5hbWVidWYsIHNpemVvZiAobmFtZWJ1ZiksICJfX2J1aWx0aW5fbmVv bl8lcyIsCisJICAgICAgZC0+bmFtZSk7CisKKyAgZm5kZWNsID0gYWRkX2J1 aWx0aW5fZnVuY3Rpb24gKG5hbWVidWYsIGZ0eXBlLCBmY29kZSwgQlVJTFRf SU5fTUQsCisJCQkJIE5VTEwsIE5VTExfVFJFRSk7CisgIGFybV9idWlsdGlu X2RlY2xzW2Zjb2RlXSA9IGZuZGVjbDsKK30KKwogLyogU2V0IHVwIGFsbCB0 aGUgTkVPTiBidWlsdGlucywgZXZlbiBidWlsdGlucyBmb3IgaW5zdHJ1Y3Rp b25zIHRoYXQgYXJlIG5vdAogICAgaW4gdGhlIGN1cnJlbnQgdGFyZ2V0IElT QSB0byBhbGxvdyB0aGUgdXNlciB0byBjb21waWxlIHBhcnRpY3VsYXIgbW9k dWxlcwogICAgd2l0aCBkaWZmZXJlbnQgdGFyZ2V0IHNwZWNpZmljIG9wdGlv bnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgY29tbWFuZCBsaW5lCkBAIC05MjYs MTAzICsxMDMwLDggQEAgYXJtX2luaXRfbmVvbl9idWlsdGlucyAodm9pZCkK IAogICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSAobmVvbl9idWlsdGlu X2RhdGEpOyBpKyssIGZjb2RlKyspCiAgICAgewotICAgICAgYm9vbCBwcmlu dF90eXBlX3NpZ25hdHVyZV9wID0gZmFsc2U7Ci0gICAgICBjaGFyIHR5cGVf c2lnbmF0dXJlW1NJTURfTUFYX0JVSUxUSU5fQVJHU10gPSB7IDAgfTsKICAg ICAgIG5lb25fYnVpbHRpbl9kYXR1bSAqZCA9ICZuZW9uX2J1aWx0aW5fZGF0 YVtpXTsKLSAgICAgIGNoYXIgbmFtZWJ1Zls2MF07Ci0gICAgICB0cmVlIGZ0 eXBlID0gTlVMTDsKLSAgICAgIHRyZWUgZm5kZWNsID0gTlVMTDsKLQotICAg ICAgZC0+ZmNvZGUgPSBmY29kZTsKLQotICAgICAgLyogV2UgbXVzdCB0cmFj ayB0d28gdmFyaWFibGVzIGhlcmUuICBvcF9udW0gaXMKLQkgdGhlIG9wZXJh bmQgbnVtYmVyIGFzIGluIHRoZSBSVEwgcGF0dGVybi4gIFRoaXMgaXMKLQkg cmVxdWlyZWQgdG8gYWNjZXNzIHRoZSBtb2RlIChlLmcuIFY0U0YgbW9kZSkg b2YgdGhlCi0JIGFyZ3VtZW50LCBmcm9tIHdoaWNoIHRoZSBiYXNlIHR5cGUg Y2FuIGJlIGRlcml2ZWQuCi0JIGFyZ19udW0gaXMgYW4gaW5kZXggaW4gdG8g dGhlIHF1YWxpZmllcnMgZGF0YSwgd2hpY2gKLQkgZ2l2ZXMgcXVhbGlmaWVy cyB0byB0aGUgdHlwZSAoZS5nLiBjb25zdCB1bnNpZ25lZCkuCi0JIFRoZSBy ZWFzb24gdGhlc2UgdHdvIHZhcmlhYmxlcyBtYXkgZGlmZmVyIGJ5IG9uZSBp cyB0aGUKLQkgdm9pZCByZXR1cm4gdHlwZS4gIFdoaWxlIGFsbCByZXR1cm4g dHlwZXMgdGFrZSB0aGUgMHRoIGVudHJ5Ci0JIGluIHRoZSBxdWFsaWZpZXJz IGFycmF5LCB0aGVyZSBpcyBubyBvcGVyYW5kIGZvciB0aGVtIGluIHRoZQot CSBSVEwgcGF0dGVybi4gICovCi0gICAgICBpbnQgb3BfbnVtID0gaW5zbl9k YXRhW2QtPmNvZGVdLm5fb3BlcmFuZHMgLSAxOwotICAgICAgaW50IGFyZ19u dW0gPSBkLT5xdWFsaWZpZXJzWzBdICYgcXVhbGlmaWVyX3ZvaWQKLQkJICAg ICAgPyBvcF9udW0gKyAxCi0JCSAgICAgIDogb3BfbnVtOwotICAgICAgdHJl ZSByZXR1cm5fdHlwZSA9IHZvaWRfdHlwZV9ub2RlLCBhcmdzID0gdm9pZF9s aXN0X25vZGU7Ci0gICAgICB0cmVlIGVsdHlwZTsKLQotICAgICAgLyogQnVp bGQgYSBmdW5jdGlvbiB0eXBlIGRpcmVjdGx5IGZyb20gdGhlIGluc25fZGF0 YSBmb3IgdGhpcwotCSBidWlsdGluLiAgVGhlIGJ1aWxkX2Z1bmN0aW9uX3R5 cGUgKCkgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZgotCSByZW1vdmluZyBkdXBs aWNhdGVzIGZvciB1cy4gICovCi0gICAgICBmb3IgKDsgb3BfbnVtID49IDA7 IGFyZ19udW0tLSwgb3BfbnVtLS0pCi0JewotCSAgbWFjaGluZV9tb2RlIG9w X21vZGUgPSBpbnNuX2RhdGFbZC0+Y29kZV0ub3BlcmFuZFtvcF9udW1dLm1v ZGU7Ci0JICBlbnVtIGFybV90eXBlX3F1YWxpZmllcnMgcXVhbGlmaWVycyA9 IGQtPnF1YWxpZmllcnNbYXJnX251bV07Ci0KLQkgIGlmIChxdWFsaWZpZXJz ICYgcXVhbGlmaWVyX3Vuc2lnbmVkKQotCSAgICB7Ci0JICAgICAgdHlwZV9z aWduYXR1cmVbYXJnX251bV0gPSAndSc7Ci0JICAgICAgcHJpbnRfdHlwZV9z aWduYXR1cmVfcCA9IHRydWU7Ci0JICAgIH0KLQkgIGVsc2UgaWYgKHF1YWxp ZmllcnMgJiBxdWFsaWZpZXJfcG9seSkKLQkgICAgewotCSAgICAgIHR5cGVf c2lnbmF0dXJlW2FyZ19udW1dID0gJ3AnOwotCSAgICAgIHByaW50X3R5cGVf c2lnbmF0dXJlX3AgPSB0cnVlOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHR5 cGVfc2lnbmF0dXJlW2FyZ19udW1dID0gJ3MnOwotCi0JICAvKiBTa2lwIGFu IGludGVybmFsIG9wZXJhbmQgZm9yIHZnZXRfe2xvdywgaGlnaH0uICAqLwot CSAgaWYgKHF1YWxpZmllcnMgJiBxdWFsaWZpZXJfaW50ZXJuYWwpCi0JICAg IGNvbnRpbnVlOwotCi0JICAvKiBTb21lIGJ1aWx0aW5zIGhhdmUgZGlmZmVy ZW50IHVzZXItZmFjaW5nIHR5cGVzCi0JICAgICBmb3IgY2VydGFpbiBhcmd1 bWVudHMsIGVuY29kZWQgaW4gZC0+bW9kZS4gICovCi0JICBpZiAocXVhbGlm aWVycyAmIHF1YWxpZmllcl9tYXBfbW9kZSkKLQkgICAgICBvcF9tb2RlID0g ZC0+bW9kZTsKLQotCSAgLyogRm9yIHBvaW50ZXJzLCB3ZSB3YW50IGEgcG9p bnRlciB0byB0aGUgYmFzaWMgdHlwZQotCSAgICAgb2YgdGhlIHZlY3Rvci4g ICovCi0JICBpZiAocXVhbGlmaWVycyAmIHF1YWxpZmllcl9wb2ludGVyICYm IFZFQ1RPUl9NT0RFX1AgKG9wX21vZGUpKQotCSAgICBvcF9tb2RlID0gR0VU X01PREVfSU5ORVIgKG9wX21vZGUpOwotCi0JICBlbHR5cGUgPSBhcm1fc2lt ZF9idWlsdGluX3R5cGUKLQkJICAgICAob3BfbW9kZSwKLQkJICAgICAgKHF1 YWxpZmllcnMgJiBxdWFsaWZpZXJfdW5zaWduZWQpICE9IDAsCi0JCSAgICAg IChxdWFsaWZpZXJzICYgcXVhbGlmaWVyX3BvbHkpICE9IDApOwotCSAgZ2Nj X2Fzc2VydCAoZWx0eXBlICE9IE5VTEwpOwotCi0JICAvKiBBZGQgcXVhbGlm aWVycy4gICovCi0JICBpZiAocXVhbGlmaWVycyAmIHF1YWxpZmllcl9jb25z dCkKLQkgICAgZWx0eXBlID0gYnVpbGRfcXVhbGlmaWVkX3R5cGUgKGVsdHlw ZSwgVFlQRV9RVUFMX0NPTlNUKTsKLQotCSAgaWYgKHF1YWxpZmllcnMgJiBx dWFsaWZpZXJfcG9pbnRlcikKLQkgICAgICBlbHR5cGUgPSBidWlsZF9wb2lu dGVyX3R5cGUgKGVsdHlwZSk7Ci0KLQkgIC8qIElmIHdlIGhhdmUgcmVhY2hl ZCBhcmdfbnVtID09IDAsIHdlIGFyZSBhdCBhIG5vbi12b2lkCi0JICAgICBy ZXR1cm4gdHlwZS4gIE90aGVyd2lzZSwgd2UgYXJlIHN0aWxsIHByb2Nlc3Np bmcKLQkgICAgIGFyZ3VtZW50cy4gICovCi0JICBpZiAoYXJnX251bSA9PSAw KQotCSAgICByZXR1cm5fdHlwZSA9IGVsdHlwZTsKLQkgIGVsc2UKLQkgICAg YXJncyA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCBlbHR5cGUsIGFyZ3MpOwot CX0KLQotICAgICAgZnR5cGUgPSBidWlsZF9mdW5jdGlvbl90eXBlIChyZXR1 cm5fdHlwZSwgYXJncyk7Ci0KLSAgICAgIGdjY19hc3NlcnQgKGZ0eXBlICE9 IE5VTEwpOwotCi0gICAgICBpZiAocHJpbnRfdHlwZV9zaWduYXR1cmVfcCkK LQlzbnByaW50ZiAobmFtZWJ1Ziwgc2l6ZW9mIChuYW1lYnVmKSwgIl9fYnVp bHRpbl9uZW9uXyVzXyVzIiwKLQkJICBkLT5uYW1lLCB0eXBlX3NpZ25hdHVy ZSk7Ci0gICAgICBlbHNlCi0Jc25wcmludGYgKG5hbWVidWYsIHNpemVvZiAo bmFtZWJ1ZiksICJfX2J1aWx0aW5fbmVvbl8lcyIsCi0JCSAgZC0+bmFtZSk7 Ci0KLSAgICAgIGZuZGVjbCA9IGFkZF9idWlsdGluX2Z1bmN0aW9uIChuYW1l YnVmLCBmdHlwZSwgZmNvZGUsIEJVSUxUX0lOX01ELAotCQkJCSAgICAgTlVM TCwgTlVMTF9UUkVFKTsKLSAgICAgIGFybV9idWlsdGluX2RlY2xzW2Zjb2Rl XSA9IGZuZGVjbDsKKyAgICAgIGFybV9pbml0X25lb25fYnVpbHRpbiAoZmNv ZGUsIGQpOwogICAgIH0KIH0KIApAQCAtMjIyNCw0MCArMjIzMywxNiBAQCBj b25zdGFudF9hcmc6CiAgIHJldHVybiB0YXJnZXQ7CiB9CiAKLS8qIEV4cGFu ZCBhIE5lb24gYnVpbHRpbiwgaS5lLiB0aG9zZSByZWdpc3RlcmVkIG9ubHkg aWYgVEFSR0VUX05FT04gaG9sZHMuCi0gICBNb3N0IG9mIHRoZXNlIGFyZSAi c3BlY2lhbCIgYmVjYXVzZSB0aGV5IGRvbid0IGhhdmUgc3ltYm9saWMKLSAg IGNvbnN0YW50cyBkZWZpbmVkIHBlci1pbnN0cnVjdGlvbiBvciBwZXIgaW5z dHJ1Y3Rpb24tdmFyaWFudC4gSW5zdGVhZCwgdGhlCi0gICByZXF1aXJlZCBp bmZvIGlzIGxvb2tlZCB1cCBpbiB0aGUgdGFibGUgbmVvbl9idWlsdGluX2Rh dGEuICAqLworLyogRXhwYW5kIGEgbmVvbiBidWlsdGluLiAgVGhpcyBpcyBh bHNvIHVzZWQgZm9yIHZmcCBidWlsdGlucywgd2hpY2ggYmVoYXZlIGluCisg ICB0aGUgc2FtZSB3YXkuICBUaGVzZSBidWlsdGlucyBhcmUgInNwZWNpYWwi IGJlY2F1c2UgdGhleSBkb24ndCBoYXZlIHN5bWJvbGljCisgICBjb25zdGFu dHMgZGVmaW5lZCBwZXItaW5zdHJ1Y3Rpb24gb3IgcGVyIGluc3RydWN0aW9u LXZhcmlhbnQuICBJbnN0ZWFkLCB0aGUKKyAgIHJlcXVpcmVkIGluZm8gaXMg bG9va2VkIHVwIGluIHRoZSBORU9OX0JVSUxUSU5fREFUQSByZWNvcmQgdGhh dCBpcyBwYXNzZWQKKyAgIGludG8gdGhlIGZ1bmN0aW9uLiAgKi8KKwogc3Rh dGljIHJ0eAotYXJtX2V4cGFuZF9uZW9uX2J1aWx0aW4gKGludCBmY29kZSwg dHJlZSBleHAsIHJ0eCB0YXJnZXQpCithcm1fZXhwYW5kX25lb25fYnVpbHRp bl8xIChpbnQgZmNvZGUsIHRyZWUgZXhwLCBydHggdGFyZ2V0LAorCQkJICAg bmVvbl9idWlsdGluX2RhdHVtICpkKQogewotICAvKiBDaGVjayBpbiB0aGUg Y29udGV4dCBvZiB0aGUgZnVuY3Rpb24gbWFraW5nIHRoZSBjYWxsIHdoZXRo ZXIgdGhlCi0gICAgIGJ1aWx0aW4gaXMgc3VwcG9ydGVkLiAgKi8KLSAgaWYg KCEgVEFSR0VUX05FT04pCi0gICAgewotICAgICAgZmF0YWxfZXJyb3IgKGlu cHV0X2xvY2F0aW9uLAotCQkgICAiWW91IG11c3QgZW5hYmxlIE5FT04gaW5z dHJ1Y3Rpb25zIChlLmcuIC1tZmxvYXQtYWJpPXNvZnRmcCAtbWZwdT1uZW9u KSB0byB1c2UgdGhlc2UgaW50cmluc2ljcy4iKTsKLSAgICAgIHJldHVybiBj b25zdDBfcnR4OwotICAgIH0KLQotICBpZiAoZmNvZGUgPT0gQVJNX0JVSUxU SU5fTkVPTl9MQU5FX0NIRUNLKQotICAgIHsKLSAgICAgIC8qIEJ1aWx0aW4g aXMgb25seSB0byBjaGVjayBib3VuZHMgb2YgdGhlIGxhbmUgcGFzc2VkIHRv IHNvbWUgaW50cmluc2ljcwotCSB0aGF0IGFyZSBpbXBsZW1lbnRlZCB3aXRo IGdjYyB2ZWN0b3IgZXh0ZW5zaW9ucyBpbiBhcm1fbmVvbi5oLiAgKi8KLQot ICAgICAgdHJlZSBubGFuZXMgPSBDQUxMX0VYUFJfQVJHIChleHAsIDApOwot ICAgICAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChubGFuZXMpID09IElOVEVH RVJfQ1NUKTsKLSAgICAgIHJ0eCBsYW5lX2lkeCA9IGV4cGFuZF9ub3JtYWwg KENBTExfRVhQUl9BUkcgKGV4cCwgMSkpOwotICAgICAgaWYgKENPTlNUX0lO VF9QIChsYW5lX2lkeCkpCi0JbmVvbl9sYW5lX2JvdW5kcyAobGFuZV9pZHgs IDAsIFRSRUVfSU5UX0NTVF9MT1cgKG5sYW5lcyksIGV4cCk7Ci0gICAgICBl bHNlCi0JZXJyb3IgKCIlS2xhbmUgaW5kZXggbXVzdCBiZSBhIGNvbnN0YW50 IGltbWVkaWF0ZSIsIGV4cCk7Ci0gICAgICAvKiBEb24ndCBnZW5lcmF0ZSBh bnkgUlRMLiAgKi8KLSAgICAgIHJldHVybiBjb25zdDBfcnR4OwotICAgIH0K LQotICBuZW9uX2J1aWx0aW5fZGF0dW0gKmQgPQotCQkmbmVvbl9idWlsdGlu X2RhdGFbZmNvZGUgLSBBUk1fQlVJTFRJTl9ORU9OX1BBVFRFUk5fU1RBUlRd OwogICBlbnVtIGluc25fY29kZSBpY29kZSA9IGQtPmNvZGU7CiAgIGJ1aWx0 aW5fYXJnIGFyZ3NbU0lNRF9NQVhfQlVJTFRJTl9BUkdTICsgMV07CiAgIGlu dCBudW1fYXJncyA9IGluc25fZGF0YVtkLT5jb2RlXS5uX29wZXJhbmRzOwpA QCAtMjI3Myw4ICsyMjU4LDggQEAgYXJtX2V4cGFuZF9uZW9uX2J1aWx0aW4g KGludCBmY29kZSwgdHJlZSBleHAsIHJ0eCB0YXJnZXQpCiAgICAgICAvKiBX ZSBoYXZlIGZvdXIgYXJyYXlzIG9mIGRhdGEsIGVhY2ggaW5kZXhlZCBpbiBh IGRpZmZlcmVudCBmYXNoaW9uLgogCSBxdWFsaWZpZXJzIC0gZWxlbWVudCAw IGFsd2F5cyBkZXNjcmliZXMgdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlLgog CSBvcGVyYW5kcyAtIGVsZW1lbnQgMCBpcyBlaXRoZXIgdGhlIG9wZXJhbmQg Zm9yIHJldHVybiB2YWx1ZSAoaWYKLQkgICB0aGUgZnVuY3Rpb24gaGFzIGEg bm9uLXZvaWQgcmV0dXJuIHR5cGUpIG9yIHRoZSBvcGVyYW5kIGZvciB0aGUK LQkgICBmaXJzdCBhcmd1bWVudC4KKwkgdGhlIGZ1bmN0aW9uIGhhcyBhIG5v bi12b2lkIHJldHVybiB0eXBlKSBvciB0aGUgb3BlcmFuZCBmb3IgdGhlCisJ IGZpcnN0IGFyZ3VtZW50LgogCSBleHByX2FyZ3MgLSBlbGVtZW50IDAgYWx3 YXlzIGhvbGRzIHRoZSBmaXJzdCBhcmd1bWVudC4KIAkgYXJncyAtIGVsZW1l bnQgMCBpcyBhbHdheXMgdXNlZCBmb3IgdGhlIHJldHVybiB0eXBlLiAgKi8K ICAgICAgIGludCBxdWFsaWZpZXJzX2sgPSBrOwpAQCAtMjI5Niw3ICsyMjgx LDcgQEAgYXJtX2V4cGFuZF9uZW9uX2J1aWx0aW4gKGludCBmY29kZSwgdHJl ZSBleHAsIHJ0eCB0YXJnZXQpCiAJICBib29sIG9wX2NvbnN0X2ludF9wID0K IAkgICAgKENPTlNUX0lOVF9QIChhcmcpCiAJICAgICAmJiAoKmluc25fZGF0 YVtpY29kZV0ub3BlcmFuZFtvcGVyYW5kc19rXS5wcmVkaWNhdGUpCi0JCShh cmcsIGluc25fZGF0YVtpY29kZV0ub3BlcmFuZFtvcGVyYW5kc19rXS5tb2Rl KSk7CisJICAgICAoYXJnLCBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbb3Bl cmFuZHNfa10ubW9kZSkpOwogCSAgYXJnc1trXSA9IG9wX2NvbnN0X2ludF9w ID8gTkVPTl9BUkdfQ09OU1RBTlQgOiBORU9OX0FSR19DT1BZX1RPX1JFRzsK IAl9CiAgICAgICBlbHNlIGlmIChkLT5xdWFsaWZpZXJzW3F1YWxpZmllcnNf a10gJiBxdWFsaWZpZXJfcG9pbnRlcikKQEAgLTIzMDksOCArMjI5NCw0NyBA QCBhcm1fZXhwYW5kX25lb25fYnVpbHRpbiAoaW50IGZjb2RlLCB0cmVlIGV4 cCwgcnR4IHRhcmdldCkKICAgLyogVGhlIGludGVyZmFjZSB0byBhcm1fZXhw YW5kX25lb25fYXJncyBleHBlY3RzIGEgMCBpZgogICAgICB0aGUgZnVuY3Rp b24gaXMgdm9pZCwgYW5kIGEgMSBpZiBpdCBpcyBub3QuICAqLwogICByZXR1 cm4gYXJtX2V4cGFuZF9uZW9uX2FyZ3MKLQkgICh0YXJnZXQsIGQtPm1vZGUs IGZjb2RlLCBpY29kZSwgIWlzX3ZvaWQsIGV4cCwKLQkgICAmYXJnc1sxXSk7 CisgICAgKHRhcmdldCwgZC0+bW9kZSwgZmNvZGUsIGljb2RlLCAhaXNfdm9p ZCwgZXhwLAorICAgICAmYXJnc1sxXSk7Cit9CisKKy8qIEV4cGFuZCBhIE5l b24gYnVpbHRpbiwgaS5lLiB0aG9zZSByZWdpc3RlcmVkIG9ubHkgaWYgVEFS R0VUX05FT04gaG9sZHMuCisgICBNb3N0IG9mIHRoZXNlIGFyZSAic3BlY2lh bCIgYmVjYXVzZSB0aGV5IGRvbid0IGhhdmUgc3ltYm9saWMKKyAgIGNvbnN0 YW50cyBkZWZpbmVkIHBlci1pbnN0cnVjdGlvbiBvciBwZXIgaW5zdHJ1Y3Rp b24tdmFyaWFudC4gIEluc3RlYWQsIHRoZQorICAgcmVxdWlyZWQgaW5mbyBp cyBsb29rZWQgdXAgaW4gdGhlIHRhYmxlIG5lb25fYnVpbHRpbl9kYXRhLiAg Ki8KKworc3RhdGljIHJ0eAorYXJtX2V4cGFuZF9uZW9uX2J1aWx0aW4gKGlu dCBmY29kZSwgdHJlZSBleHAsIHJ0eCB0YXJnZXQpCit7CisgIGlmIChmY29k ZSA+PSBBUk1fQlVJTFRJTl9ORU9OX0JBU0UgJiYgISBUQVJHRVRfTkVPTikK KyAgICB7CisgICAgICBmYXRhbF9lcnJvciAoaW5wdXRfbG9jYXRpb24sCisJ CSAgICJZb3UgbXVzdCBlbmFibGUgTkVPTiBpbnN0cnVjdGlvbnMiCisJCSAg ICIgKGUuZy4gLW1mbG9hdC1hYmk9c29mdGZwIC1tZnB1PW5lb24pIgorCQkg ICAiIHRvIHVzZSB0aGVzZSBpbnRyaW5zaWNzLiIpOworICAgICAgcmV0dXJu IGNvbnN0MF9ydHg7CisgICAgfQorCisgIGlmIChmY29kZSA9PSBBUk1fQlVJ TFRJTl9ORU9OX0xBTkVfQ0hFQ0spCisgICAgeworICAgICAgLyogQnVpbHRp biBpcyBvbmx5IHRvIGNoZWNrIGJvdW5kcyBvZiB0aGUgbGFuZSBwYXNzZWQg dG8gc29tZSBpbnRyaW5zaWNzCisJIHRoYXQgYXJlIGltcGxlbWVudGVkIHdp dGggZ2NjIHZlY3RvciBleHRlbnNpb25zIGluIGFybV9uZW9uLmguICAqLwor CisgICAgICB0cmVlIG5sYW5lcyA9IENBTExfRVhQUl9BUkcgKGV4cCwgMCk7 CisgICAgICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKG5sYW5lcykgPT0gSU5U RUdFUl9DU1QpOworICAgICAgcnR4IGxhbmVfaWR4ID0gZXhwYW5kX25vcm1h bCAoQ0FMTF9FWFBSX0FSRyAoZXhwLCAxKSk7CisgICAgICBpZiAoQ09OU1Rf SU5UX1AgKGxhbmVfaWR4KSkKKwluZW9uX2xhbmVfYm91bmRzIChsYW5lX2lk eCwgMCwgVFJFRV9JTlRfQ1NUX0xPVyAobmxhbmVzKSwgZXhwKTsKKyAgICAg IGVsc2UKKwllcnJvciAoIiVLbGFuZSBpbmRleCBtdXN0IGJlIGEgY29uc3Rh bnQgaW1tZWRpYXRlIiwgZXhwKTsKKyAgICAgIC8qIERvbid0IGdlbmVyYXRl IGFueSBSVEwuICAqLworICAgICAgcmV0dXJuIGNvbnN0MF9ydHg7CisgICAg fQorCisgIG5lb25fYnVpbHRpbl9kYXR1bSAqZAorICAgID0gJm5lb25fYnVp bHRpbl9kYXRhW2Zjb2RlIC0gQVJNX0JVSUxUSU5fTkVPTl9QQVRURVJOX1NU QVJUXTsKKworICByZXR1cm4gYXJtX2V4cGFuZF9uZW9uX2J1aWx0aW5fMSAo ZmNvZGUsIGV4cCwgdGFyZ2V0LCBkKTsKIH0KIAogLyogRXhwYW5kIGFuIGV4 cHJlc3Npb24gRVhQIHRoYXQgY2FsbHMgYSBidWlsdC1pbiBmdW5jdGlvbiwK --------------010508090402050107080909--