From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4141 invoked by alias); 14 Jul 2014 02:58:08 -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 4129 invoked by uid 89); 14 Jul 2014 02:58:07 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-pd0-f171.google.com Received: from mail-pd0-f171.google.com (HELO mail-pd0-f171.google.com) (209.85.192.171) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Mon, 14 Jul 2014 02:58:03 +0000 Received: by mail-pd0-f171.google.com with SMTP id z10so2181063pdj.30 for ; Sun, 13 Jul 2014 19:58:02 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to :cc:subject:references:in-reply-to:content-type; bh=pDMfXvY/wwD5qPos0H7b+6VQRDxgQbBW6xZ/GBVCXxI=; b=hbs/9J2hpzzacydCXd7wyPnZUV1bkfSo34L5JcOjjgNOgxUQuzIN1luFuocWI3W7C7 Nw9BwgaVtDV5kl211QOOhXUBI5HagrWuFYMuOEZDbh9NnW5q1w9lzNX/oeRATkq7SpNP Ne6e2nP2RWIEh35zSPK8hGNHkw2lWgL5UJhzLjk23Fw8mVx3A3NtFKniBRy7Jzeko+Ta oTISdPCUhXNKiHdo42dgMciUMyMFJsA94b935NPh4IsEhr/stb18ctA1GBUlH7reDQa1 ncj4u021yoEhTrXgkBRFhf97nQNewd3FbgEd2u751EsVvEe6XDcwp8f5rvyzLa1QYfZF jp5g== X-Gm-Message-State: ALoCoQkXdbW5i9fuNEMiuqsYM7rdE+XHUDOOQOcRkDZ4EzruPyygEFR4uf67VCDtthQpIYSSWMXN X-Received: by 10.70.34.169 with SMTP id a9mr14206932pdj.28.1405306681972; Sun, 13 Jul 2014 19:58:01 -0700 (PDT) Received: from [10.1.1.4] (58-6-183-210.dyn.iinet.net.au. [58.6.183.210]) by mx.google.com with ESMTPSA id tf10sm9138115pbc.70.2014.07.13.19.57.59 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sun, 13 Jul 2014 19:58:01 -0700 (PDT) Message-ID: <53C34734.2080103@linaro.org> Date: Mon, 14 Jul 2014 02:58:00 -0000 From: Kugan User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: Richard Biener CC: Jakub Jelinek , "gcc-patches@gcc.gnu.org" Subject: Re: [PATCH 2/2] Enable elimination of zext/sext References: <53A9658F.2070304@linaro.org> <53A966BF.30806@linaro.org> <20140624122101.GX31640@tucnak.redhat.com> <53AA8501.809@linaro.org> <20140625083618.GZ31640@tucnak.redhat.com> <53BA4458.30804@linaro.org> <53BFD000.1030909@linaro.org> In-Reply-To: Content-Type: multipart/mixed; boundary="------------000203050505060808070300" X-IsSubscribed: yes X-SW-Source: 2014-07/txt/msg00931.txt.bz2 This is a multi-part message in MIME format. --------------000203050505060808070300 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Content-length: 4362 On 11/07/14 22:47, Richard Biener wrote: > On Fri, Jul 11, 2014 at 1:52 PM, Kugan > wrote: >> Thanks foe the review and suggestions. >> >> On 10/07/14 22:15, Richard Biener wrote: >>> On Mon, Jul 7, 2014 at 8:55 AM, Kugan wrote: >> >> [...] >> >>>> >>>> For -fwrapv, it is due to how PROMOTE_MODE is defined in arm back-end. >>>> In the test-case, a function (which has signed char return type) returns >>>> -1 in one of the paths. ARM PROMOTE_MODE changes that to 255 and relies >>>> on zero/sign extension generated by RTL again for the correct value. I >>>> saw some other targets also defining similar think. I am therefore >>>> skipping removing zero/sign extension if the ssa variable can be set to >>>> negative integer constants. >>> >>> Hm? I think you should rather check that you are removing a >>> sign-/zero-extension - PROMOTE_MODE tells you if it will sign- or >>> zero-extend. Definitely >>> >>> + /* In some architectures, negative integer constants are truncated and >>> + sign changed with target defined PROMOTE_MODE macro. This will impact >>> + the value range seen here and produce wrong code if zero/sign extensions >>> + are eliminated. Therefore, return false if this SSA can have negative >>> + integers. */ >>> + if (is_gimple_assign (stmt) >>> + && (TREE_CODE_CLASS (gimple_assign_rhs_code (stmt)) == tcc_unary)) >>> + { >>> + tree rhs1 = gimple_assign_rhs1 (stmt); >>> + if (TREE_CODE (rhs1) == INTEGER_CST >>> + && !TYPE_UNSIGNED (TREE_TYPE (ssa)) >>> + && tree_int_cst_compare (rhs1, integer_zero_node) == -1) >>> + return false; >>> >>> looks completely bogus ... (an unary op with a constant operand?) >>> instead you want to do sth like >> >> I see that unary op with a constant operand is not possible in gimple. >> What I wanted to check here is any sort of constant loads; but seems >> that will not happen in gimple. Is PHI statements the only possible >> statements where we will end up with such constants. > > No, in theory you can have > > ssa_1 = -1; > > but that's not unary but a GIMPLE_SINGLE_RHS and thus > gimple_assign_rhs_code (stmt) == INTEGER_CST. > >>> mode = TYPE_MODE (TREE_TYPE (ssa)); >>> rhs_uns = TYPE_UNSIGNED (TREE_TYPE (ssa)); >>> PROMOTE_MODE (mode, rhs_uns, TREE_TYPE (ssa)); >>> >>> instead of initializing rhs_uns from ssas type. That is, if >>> PROMOTE_MODE tells you to promote _not_ according to ssas sign then >>> honor that. >> >> This is triggered in pr43017.c in function foo for arm-none-linux-gnueabi. >> >> where, the gimple statement that cause this looks like: >> ..... >> # _3 = PHI <_17(7), -1(2)> >> bb43: >> return _3; >> >> ARM PROMOTE_MODE changes the sign for integer constants only and hence >> looking at the variable with PROMOTE_MODE is not changing the sign in >> this case. >> >> #define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \ >> if (GET_MODE_CLASS (MODE) == MODE_INT \ >> && GET_MODE_SIZE (MODE) < 4) \ >> { \ >> if (MODE == QImode) \ >> UNSIGNEDP = 1; \ >> else if (MODE == HImode) \ >> UNSIGNEDP = 1; \ >> (MODE) = SImode; \ >> } > > Where does it only apply for "constants"? It applies to all QImode and > HImode entities. oops, sorry. I don’t know what I was thinking or looking at when I wrote that :( It indeed fixes my problems. Thanks for that. Here is the modified patch. Bootstrapped and regression tested for 86_64-unknown-linux-gnu and arm-none-linux-gnueabi with no new regressions. Is this OK? Thanks, Kugan gcc/ 2014-07-14 Kugan Vivekanandarajah * calls.c (precompute_arguments): Check is_promoted_for_type and set the promoted mode. (is_promoted_for_type): New function. (expand_expr_real_1): Check is_promoted_for_type and set the promoted mode. * expr.h (is_promoted_for_type): New function definition. * cfgexpand.c (expand_gimple_stmt_1): Call emit_move_insn if SUBREG is promoted with SRP_SIGNED_AND_UNSIGNED. gcc/testsuite 2014-07-14 Kugan Vivekanandarajah * gcc.dg/zero_sign_ext_test.c: New test. --------------000203050505060808070300 Content-Type: text/plain; charset=UTF-8; name="p2.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="p2.txt" Content-length: 13144 ZGlmZiAtLWdpdCBhL2djYy9jYWxscy5jIGIvZ2NjL2NhbGxzLmMKaW5kZXgg YTNlNmZhYS4uZWFjNTEyZiAxMDA2NDQKLS0tIGEvZ2NjL2NhbGxzLmMKKysr IGIvZ2NjL2NhbGxzLmMKQEAgLTE0ODQsNyArMTQ4NCwxMCBAQCBwcmVjb21w dXRlX2FyZ3VtZW50cyAoaW50IG51bV9hY3R1YWxzLCBzdHJ1Y3QgYXJnX2Rh dGEgKmFyZ3MpCiAJICAgICAgYXJnc1tpXS5pbml0aWFsX3ZhbHVlCiAJCT0g Z2VuX2xvd3BhcnRfU1VCUkVHIChtb2RlLCBhcmdzW2ldLnZhbHVlKTsKIAkg ICAgICBTVUJSRUdfUFJPTU9URURfVkFSX1AgKGFyZ3NbaV0uaW5pdGlhbF92 YWx1ZSkgPSAxOwotCSAgICAgIFNVQlJFR19QUk9NT1RFRF9TRVQgKGFyZ3Nb aV0uaW5pdGlhbF92YWx1ZSwgYXJnc1tpXS51bnNpZ25lZHApOworCSAgICAg IGlmIChpc19wcm9tb3RlZF9mb3JfdHlwZSAoYXJnc1tpXS50cmVlX3ZhbHVl LCBtb2RlLCAhYXJnc1tpXS51bnNpZ25lZHApKQorCQlTVUJSRUdfUFJPTU9U RURfU0VUIChhcmdzW2ldLmluaXRpYWxfdmFsdWUsIFNSUF9TSUdORURfQU5E X1VOU0lHTkVEKTsKKwkgICAgICBlbHNlCisJCVNVQlJFR19QUk9NT1RFRF9T RVQgKGFyZ3NbaV0uaW5pdGlhbF92YWx1ZSwgYXJnc1tpXS51bnNpZ25lZHAp OwogCSAgICB9CiAJfQogICAgIH0KZGlmZiAtLWdpdCBhL2djYy9jZmdleHBh bmQuYyBiL2djYy9jZmdleHBhbmQuYwppbmRleCBmOThjMzIyLi5iMTQ2MjZj IDEwMDY0NAotLS0gYS9nY2MvY2ZnZXhwYW5kLmMKKysrIGIvZ2NjL2NmZ2V4 cGFuZC5jCkBAIC0zMzA5LDcgKzMzMDksMTMgQEAgZXhwYW5kX2dpbXBsZV9z dG10XzEgKGdpbXBsZSBzdG10KQogCQkJCQkgIEdFVF9NT0RFICh0YXJnZXQp LCB0ZW1wLCB1bnNpZ25lZHApOwogCQkgIH0KIAotCQljb252ZXJ0X21vdmUg KFNVQlJFR19SRUcgKHRhcmdldCksIHRlbXAsIHVuc2lnbmVkcCk7CisJCWlm ICgoU1VCUkVHX1BST01PVEVEX0dFVCAodGFyZ2V0KSA9PSBTUlBfU0lHTkVE X0FORF9VTlNJR05FRCkKKwkJICAgICYmIChHRVRfQ09ERSAodGVtcCkgPT0g U1VCUkVHKQorCQkgICAgJiYgKEdFVF9NT0RFICh0YXJnZXQpID09IEdFVF9N T0RFICh0ZW1wKSkKKwkJICAgICYmIChHRVRfTU9ERSAoU1VCUkVHX1JFRyAo dGFyZ2V0KSkgPT0gR0VUX01PREUgKFNVQlJFR19SRUcgKHRlbXApKSkpCisJ CSAgZW1pdF9tb3ZlX2luc24gKFNVQlJFR19SRUcgKHRhcmdldCksIFNVQlJF R19SRUcgKHRlbXApKTsKKwkJZWxzZQorCQkgIGNvbnZlcnRfbW92ZSAoU1VC UkVHX1JFRyAodGFyZ2V0KSwgdGVtcCwgdW5zaWduZWRwKTsKIAkgICAgICB9 CiAJICAgIGVsc2UgaWYgKG5vbnRlbXBvcmFsICYmIGVtaXRfc3RvcmVudF9p bnNuICh0YXJnZXQsIHRlbXApKQogCSAgICAgIDsKZGlmZiAtLWdpdCBhL2dj Yy9leHByLmMgYi9nY2MvZXhwci5jCmluZGV4IDczNTZlNzYuLmQyNWY1MDYg MTAwNjQ0Ci0tLSBhL2djYy9leHByLmMKKysrIGIvZ2NjL2V4cHIuYwpAQCAt NjgsNiArNjgsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENP UFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUgInRyZWUtc3NhLWFkZHJl c3MuaCIKICNpbmNsdWRlICJjZmdleHBhbmQuaCIKICNpbmNsdWRlICJidWls dGlucy5oIgorI2luY2x1ZGUgInRyZWUtc3NhLmgiCiAKICNpZm5kZWYgU1RB Q0tfUFVTSF9DT0RFCiAjaWZkZWYgU1RBQ0tfR1JPV1NfRE9XTldBUkQKQEAg LTkyMjQsNiArOTIyNSw2NSBAQCBleHBhbmRfZXhwcl9yZWFsXzIgKHNlcG9w cyBvcHMsIHJ0eCB0YXJnZXQsIGVudW0gbWFjaGluZV9tb2RlIHRtb2RlLAog fQogI3VuZGVmIFJFRFVDRV9CSVRfRklFTEQKIAorLyogUmV0dXJuIFRSVUUg aWYgdmFsdWUgaW4gU1NBIGlzIGFscmVhZHkgemVyby9zaWduIGV4dGVuZGVk IGZvciBsaHMgdHlwZQorICAgKHR5cGUgaGVyZSBpcyB0aGUgY29tYmluYXRp b24gb2YgTEhTX01PREUgYW5kIExIU19VTlMpIHVzaW5nIHZhbHVlIHJhbmdl CisgICBpbmZvcm1hdGlvbiBzdG9yZWQuICBSZXR1cm4gRkFMU0Ugb3RoZXJ3 aXNlLiAgKi8KK2Jvb2wKK2lzX3Byb21vdGVkX2Zvcl90eXBlICh0cmVlIHNz YSwgZW51bSBtYWNoaW5lX21vZGUgbGhzX21vZGUsIGJvb2wgbGhzX3VucykK K3sKKyAgd2lkZV9pbnQgdHlwZV9taW4sIHR5cGVfbWF4OworICB3aWRlX2lu dCBtaW4sIG1heCwgbGltaXQ7CisgIHVuc2lnbmVkIGludCBwcmVjOworICB0 cmVlIGxoc190eXBlOworICBib29sIHJoc191bnM7CisgIGVudW0gbWFjaGlu ZV9tb2RlIG1vZGU7CisKKyAgaWYgKHNzYSA9PSBOVUxMX1RSRUUKKyAgICAg IHx8IFRSRUVfQ09ERSAoc3NhKSAhPSBTU0FfTkFNRQorICAgICAgfHwgIUlO VEVHUkFMX1RZUEVfUCAoVFJFRV9UWVBFIChzc2EpKSkKKyAgICByZXR1cm4g ZmFsc2U7CisKKyAgLyogUmV0dXJuIEZBTFNFIGlmIHZhbHVlX3JhbmdlIGlz IG5vdCByZWNvcmRlZCBmb3IgU1NBLiAgKi8KKyAgaWYgKGdldF9yYW5nZV9p bmZvIChzc2EsICZtaW4sICZtYXgpICE9IFZSX1JBTkdFKQorICAgIHJldHVy biBmYWxzZTsKKworICAvKiBJbiBzb21lIGFyY2hpdGVjdHVyZXMsIG1vZGVz IGFyZSBwcm9tb3RlZCBhbmQgc2lnbiBjaGFuZ2VkIHdpdGgKKyAgICAgdGFy Z2V0IGRlZmluZWQgUFJPTU9URV9NT0RFIG1hY3JvLiAgSWYgUFJPTU9URV9N T0RFIHRlbGxzIHlvdSB0bworICAgICBwcm9tb3RlIF9ub3RfIGFjY29yZGlu ZyB0byBzc2EncyBzaWduIHRoZW4gaG9ub3VyIHRoYXQuICAqLworICBtb2Rl ID0gVFlQRV9NT0RFIChUUkVFX1RZUEUgKHNzYSkpOworICByaHNfdW5zID0g VFlQRV9VTlNJR05FRCAoVFJFRV9UWVBFIChzc2EpKTsKKyAgUFJPTU9URV9N T0RFIChtb2RlLCByaHNfdW5zLCBUUkVFX1RZUEUgKHNzYSkpOworCisgIGxo c190eXBlID0gbGFuZ19ob29rcy50eXBlcy50eXBlX2Zvcl9tb2RlIChsaHNf bW9kZSwgbGhzX3Vucyk7CisgIHByZWMgPSBtaW4uZ2V0X3ByZWNpc2lvbiAo KTsKKworICAvKiBTaWduZWQgbWF4aW11bSB2YWx1ZS4gICovCisgIGxpbWl0 ID0gd2lkZV9pbnQ6OmZyb20gKFRZUEVfTUFYX1ZBTFVFIChUUkVFX1RZUEUg KHNzYSkpLCBwcmVjLCBTSUdORUQpOworCisgIC8qIFNpZ25lZG5lc3Mgb2Yg TEhTIGFuZCBSSFMgZGlmZmVycyBidXQgdmFsdWVzIGluIHJhbmdlLiAgKi8K KyAgaWYgKChyaHNfdW5zICE9IGxoc191bnMpCisgICAgICAmJiAoKCFsaHNf dW5zICYmICF3aTo6bmVnX3AgKG1pbiwgVFlQRV9TSUdOIChsaHNfdHlwZSkp KQorCSAgfHwgKGxoc191bnMgJiYgKHdpOjpjbXAgKG1heCwgbGltaXQsIFRZ UEVfU0lHTiAoVFJFRV9UWVBFIChzc2EpKSkgPT0gLTEpKSkpCisgICAgbGhz X3VucyA9ICFsaHNfdW5zOworCisgIC8qIFNpZ25lZG5lc3Mgb2YgTEhTIGFu ZCBSSFMgc2hvdWxkIG1hdGNoLiAgKi8KKyAgaWYgKHJoc191bnMgIT0gbGhz X3VucykKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgdHlwZV9taW4gPSB3aWRl X2ludDo6ZnJvbSAoVFlQRV9NSU5fVkFMVUUgKGxoc190eXBlKSwgcHJlYywK KwkJCSAgICAgVFlQRV9TSUdOIChUUkVFX1RZUEUgKHNzYSkpKTsKKyAgdHlw ZV9tYXggPSB3aWRlX2ludDo6ZnJvbSAoVFlQRV9NQVhfVkFMVUUgKGxoc190 eXBlKSwgcHJlYywKKwkJCSAgICAgVFlQRV9TSUdOIChUUkVFX1RZUEUgKHNz YSkpKTsKKworICAvKiBDaGVjayBpZiB2YWx1ZXMgbGllcyBpbi1iZXR3ZWVu IHRoZSB0eXBlIHJhbmdlLiAgKi8KKyAgaWYgKCh3aTo6bmVnX3AgKG1heCwg VFlQRV9TSUdOIChUUkVFX1RZUEUgKHNzYSkpKQorICAgICAgIHx8ICh3aTo6 Y21wIChtYXgsIHR5cGVfbWF4LCBUWVBFX1NJR04gKFRSRUVfVFlQRSAoc3Nh KSkpICE9IDEpKQorICAgICAgJiYgKCF3aTo6bmVnX3AgKG1pbiwgVFlQRV9T SUdOIChUUkVFX1RZUEUgKHNzYSkpKQorCSAgfHwgKHdpOjpjbXAgKHR5cGVf bWluLCBtaW4sIFRZUEVfU0lHTiAoVFJFRV9UWVBFIChzc2EpKSkgIT0gMSkp KQorICAgIHJldHVybiB0cnVlOworCisgIHJldHVybiBmYWxzZTsKK30KIAog LyogUmV0dXJuIFRSVUUgaWYgZXhwcmVzc2lvbiBTVE1UIGlzIHN1aXRhYmxl IGZvciByZXBsYWNlbWVudC4gIAogICAgTmV2ZXIgY29uc2lkZXIgbWVtb3J5 IGxvYWRzIGFzIHJlcGxhY2VhYmxlLCBiZWNhdXNlIHRob3NlIGRvbid0IGV2 ZXIgbGVhZCAKQEAgLTk1MjcsNyArOTU4NywxMCBAQCBleHBhbmRfZXhwcl9y ZWFsXzEgKHRyZWUgZXhwLCBydHggdGFyZ2V0LCBlbnVtIG1hY2hpbmVfbW9k ZSB0bW9kZSwKIAogCSAgdGVtcCA9IGdlbl9sb3dwYXJ0X1NVQlJFRyAobW9k ZSwgZGVjbF9ydGwpOwogCSAgU1VCUkVHX1BST01PVEVEX1ZBUl9QICh0ZW1w KSA9IDE7Ci0JICBTVUJSRUdfUFJPTU9URURfU0VUICh0ZW1wLCB1bnNpZ25l ZHApOworCSAgaWYgKGlzX3Byb21vdGVkX2Zvcl90eXBlIChzc2FfbmFtZSwg bW9kZSwgIXVuc2lnbmVkcCkpCisJICAgIFNVQlJFR19QUk9NT1RFRF9TRVQg KHRlbXAsIFNSUF9TSUdORURfQU5EX1VOU0lHTkVEKTsKKwkgIGVsc2UKKwkg ICAgU1VCUkVHX1BST01PVEVEX1NFVCAodGVtcCwgdW5zaWduZWRwKTsKIAkg IHJldHVybiB0ZW1wOwogCX0KIApkaWZmIC0tZ2l0IGEvZ2NjL2V4cHIuaCBi L2djYy9leHByLmgKaW5kZXggNmExZDNhYi4uZTk5ZDAwMCAxMDA2NDQKLS0t IGEvZ2NjL2V4cHIuaAorKysgYi9nY2MvZXhwci5oCkBAIC00NDAsNiArNDQw LDcgQEAgZXh0ZXJuIHJ0eCBleHBhbmRfZXhwcl9yZWFsXzEgKHRyZWUsIHJ0 eCwgZW51bSBtYWNoaW5lX21vZGUsCiAJCQkgICAgICAgZW51bSBleHBhbmRf bW9kaWZpZXIsIHJ0eCAqLCBib29sKTsKIGV4dGVybiBydHggZXhwYW5kX2V4 cHJfcmVhbF8yIChzZXBvcHMsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsCiAJ CQkgICAgICAgZW51bSBleHBhbmRfbW9kaWZpZXIpOworZXh0ZXJuIGJvb2wg aXNfcHJvbW90ZWRfZm9yX3R5cGUgKHRyZWUsIGVudW0gbWFjaGluZV9tb2Rl LCBib29sKTsKIAogLyogR2VuZXJhdGUgY29kZSBmb3IgY29tcHV0aW5nIGV4 cHJlc3Npb24gRVhQLgogICAgQW4gcnR4IGZvciB0aGUgY29tcHV0ZWQgdmFs dWUgaXMgcmV0dXJuZWQuICBUaGUgdmFsdWUgaXMgbmV2ZXIgbnVsbC4KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3plcm9fc2lnbl9leHRf dGVzdC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvemVyb19zaWduX2V4dF90 ZXN0LmMKaW5kZXggZTY5ZGUyOS4uNmE1MjY3OCAxMDA2NDQKLS0tIGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvemVyb19zaWduX2V4dF90ZXN0LmMKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvemVyb19zaWduX2V4dF90ZXN0LmMKQEAg LTAsMCArMSwxMzYgQEAKK2V4dGVybiB2b2lkIGFib3J0ICh2b2lkKTsKKwor LyogeyBkZy1vcHRpb25zICItTzIiIH0gKi8KKy8qIHsgZGctZG8gcnVuIH0g Ki8KKworI2RlZmluZSBUWVBFX01BWCh0eXBlLCBzaWduKQlcCisgICgoIXNp Z24pID8gKCgxIDw8IChzaXplb2YgKHR5cGUpICogOCAtIDEpKSAtIDEpIDoJ XAorICAgKCgxIDw8IChzaXplb2YgKHR5cGUpICogOCkpIC0gMSkpCisjZGVm aW5lIFRZUEVfTUlOKHR5cGUsIHNpZ24pCVwKKyAgKCghc2lnbikgPyAtKDEg PDwgKHNpemVvZiAodHlwZSkgKiA4IC0gMSkpIDogMCkKKworI2RlZmluZSBU RVNUX0ZOKE5BTUUsIEFSR19UWVBFLCBSRVRfVFlQRSwgQ0FTVF9UWVBFLCBW QUwsIFZSX01JTiwgVlJfTUFYKVwKKyAgX19hdHRyaWJ1dGVfXygobm9pbmxp bmUsIG5vY2xvbmUpKSBSRVRfVFlQRQkJCQlcCisgICAgICBOQU1FIChBUkdf VFlQRSBhcmcpewkJCQkJCVwKKyAgICAgIFJFVF9UWVBFIHJldCA9IFZBTDsJ CQkJCQlcCisgICAgICBpZiAoYXJnICsgMSA8IFZSX01JTiB8fCBhcmcgKyAx ID4gVlJfTUFYKSByZXR1cm4gcmV0OwkJXAorICAgICAgLyogVmFsdWUgUmFu Z2Ugb2YgYXJnIGF0IHRoaXMgcG9pbnQgd2lsbCBiZSAgW1ZSX21pbiwgVlJf bWF4XS4gICovXAorICAgICAgYXJnID0gYXJnICsgVkFMOwkJCQkJCQlcCisg ICAgICByZXQgPSAoQ0FTVF9UWVBFKWFyZzsJCQkJCQlcCisgICAgICByZXR1 cm4gYXJnOwkJCQkJCQlcCisgIH0KKworLyogU2lnbmVkIHRvIHNpZ25lZCBj b252ZXJzaW9uIHdpdGggdmFsdWUgaW4tcmFuZ2UuICAqLworVEVTVF9GTiAo Zm9vMSwgc2hvcnQsIHNob3J0LCBjaGFyLCAxLCBUWVBFX01JTiAoY2hhciwg MCksIFRZUEVfTUFYIChjaGFyLCAwKSk7CitURVNUX0ZOIChmb28yLCBzaG9y dCwgc2hvcnQsIGNoYXIsIDEsIFRZUEVfTUlOIChjaGFyLCAwKSArIDEsXAor CVRZUEVfTUFYIChjaGFyLCAwKSAtIDEpOworCisvKiBTaWduZWQgdG8gc2ln bmVkIGNvbnZlcnNpb24gd2l0aCB2YWx1ZSBub3QgaW4tcmFuZ2UuICAqLwor VEVTVF9GTiAoZm9vMywgc2hvcnQsIHNob3J0LCBjaGFyLCAtMSwgVFlQRV9N SU4gKHNob3J0LCAwKSArIDEsICAxMDApOworVEVTVF9GTiAoZm9vNCwgc2hv cnQsIHNob3J0LCBjaGFyLCAxLCAxMiwgVFlQRV9NQVggKHNob3J0LCAwKSAr IDEpOworCisvKiBVbnNpZ25lZCB0byB1bnNpZ25lZCBjb252ZXJzaW9uIHdp dGggdmFsdWUgaW4tcmFuZ2UuICAqLworVEVTVF9GTiAoZm9vNSwgdW5zaWdu ZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBjaGFyLCAxLFwK KwlUWVBFX01JTiAoY2hhciwgMSkgKyAxLCBUWVBFX01BWCAoY2hhciwgMSkg LSAxKTsKK1RFU1RfRk4gKGZvbzYsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25l ZCBzaG9ydCwgdW5zaWduZWQgY2hhciwgMSxcCisJVFlQRV9NSU4gKGNoYXIs IDEpLCBUWVBFX01BWCAoY2hhciwgMSkpOworCisvKiBVbnNpZ25lZCB0byB1 bnNpZ25lZCBjb252ZXJzaW9uIHdpdGggdmFsdWUgbm90IGluLXJhbmdlLiAg Ki8KK1RFU1RfRk4gKGZvbzcsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBz aG9ydCwgdW5zaWduZWQgY2hhciwgMSxcCisJVFlQRV9NSU4gKHNob3J0LCAx KSArIDEsIFRZUEVfTUFYIChzaG9ydCwgMSkgLSAxKTsKK1RFU1RfRk4gKGZv bzgsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQg Y2hhciwgMSxcCisJVFlQRV9NSU4gKHNob3J0LCAxKSwgVFlQRV9NQVggKHNo b3J0LCAxKSk7CisKKy8qIFNpZ25lZCB0byB1bnNpZ25lZCBjb252ZXJzaW9u IHdpdGggdmFsdWUgcmFuZ2UgcG9zaXRpdmUuICAqLworVEVTVF9GTiAoZm9v OSwgc2hvcnQsIHNob3J0LCB1bnNpZ25lZCBjaGFyLCAtMSwgMSxcCisJVFlQ RV9NQVggKGNoYXIsIDEpIC0gMSk7CitURVNUX0ZOIChmb28xMCwgc2hvcnQs IHNob3J0LCB1bnNpZ25lZCBjaGFyLCAxLCAwLFwKKwlUWVBFX01BWCAoY2hh ciwgMSkpOworCisvKiBTaWduZWQgdG8gdW5zaWduZWQgY29udmVyc2lvbiB3 aXRoIHZhbHVlIHJhbmdlIG5lZ2F0aXZlLiAgKi8KK1RFU1RfRk4gKGZvbzEx LCBzaG9ydCwgc2hvcnQsIHVuc2lnbmVkIGNoYXIsIDEsXAorCVRZUEVfTUlO IChjaGFyLCAwKSArIDEsIFRZUEVfTUFYIChjaGFyLCAwKSAtIDEpOworVEVT VF9GTiAoZm9vMTIsIHNob3J0LCBzaG9ydCwgdW5zaWduZWQgY2hhciwgMSxc CisJVFlQRV9NSU4gKGNoYXIsIDApLCBUWVBFX01BWCAoY2hhciwgMCkpOwor CisvKiBVbnNpZ25lZCB0byBTaWduZWQgY29udmVyc2lvbiB3aXRoIHZhbHVl IHJhbmdlIGluIHNpZ25lZCBlcXVpdiByYW5nZS4gICovCitURVNUX0ZOIChm b28xMywgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LCBjaGFyLCAx LFwKKwlUWVBFX01JTiAoY2hhciwgMSkgKyAxLCBUWVBFX01BWCAoY2hhciwg MCkgLSAxKTsKK1RFU1RfRk4gKGZvbzE0LCB1bnNpZ25lZCBzaG9ydCwgdW5z aWduZWQgc2hvcnQsIGNoYXIsIDEsXAorCVRZUEVfTUlOIChjaGFyLCAxKSwg VFlQRV9NQVggKGNoYXIsIDApKTsKKworLyogVW5zaWduZWQgdG8gU2lnbmVk IGNvbnZlcnNpb24gd2l0aCB2YWx1ZSByYW5nZSBub3QtaW4gc2lnbmVkIHJh bmdlLiAgKi8KK1RFU1RfRk4gKGZvbzE1LCB1bnNpZ25lZCBzaG9ydCwgdW5z aWduZWQgc2hvcnQsIGNoYXIsIDEsXAorCVRZUEVfTUlOIChjaGFyLCAxKSAr IDEsIFRZUEVfTUFYIChjaGFyLCAxKSAtIDEpOworVEVTVF9GTiAoZm9vMTYs IHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwgY2hhciwgMSxcCisJ VFlQRV9NSU4gKGNoYXIsIDEpLCBUWVBFX01BWCAoY2hhciwgMSkpOworCitp bnQgbWFpbiAoKQoreworICAvKiBTaWduZWQgdG8gc2lnbmVkIGNvbnZlcnNp b24gd2l0aCB2YWx1ZSBpbi1yYW5nZS4gICovCisgIC8qIGFyZyArIDEuICAq LworICBpZiAoZm9vMSAoLTMyKSAhPSAtMzEpCisgICAgYWJvcnQgKCk7Cisg IC8qIGFyZyArIDEuICAqLworICBpZiAoZm9vMiAoMzIpICE9IDMzKQorICAg IGFib3J0ICgpOworCisgIC8qIFNpZ25lZCB0byBzaWduZWQgY29udmVyc2lv biB3aXRoIHZhbHVlIG5vdCBpbi1yYW5nZS4gICovCisgIC8qIGFyZyAtIDEu ICAqLworICBpZiAoZm9vMyAoLTUxMikgIT0gLTUxMykKKyAgICBhYm9ydCAo KTsKKyAgLyogYXJnICsgMS4gICovCisgIGlmIChmb280ICg1MTIpICE9IDUx MykKKyAgICBhYm9ydCAoKTsKKworICAvKiBVbnNpZ25lZCB0byB1bnNpZ25l ZCBjb252ZXJzaW9uIHdpdGggdmFsdWUgaW4tcmFuZ2UuICAqLworICAvKiBh cmcgKyAxLiAgKi8KKyAgaWYgKGZvbzUgKDY0KSAhPSA2NSkKKyAgICBhYm9y dCAoKTsKKyAgLyogYXJnICsgMS4gICovCisgIGlmIChmb282ICg2NCkgIT0g NjUpCisgICAgYWJvcnQgKCk7CisKKyAgLyogVW5zaWduZWQgdG8gdW5zaWdu ZWQgY29udmVyc2lvbiB3aXRoIHZhbHVlIG5vdCBpbi1yYW5nZS4gICovCisg IC8qIGFyZyArIDEuICAqLworICBpZiAoZm9vNyAoNTEyKSAhPSA1MTMpCisg ICAgYWJvcnQgKCk7CisgIC8qIGFyZyArIDEuICAqLworICBpZiAoZm9vOCAo NTEyKSAhPSA1MTMpCisgICAgYWJvcnQgKCk7CisKKyAgLyogU2lnbmVkIHRv IHVuc2lnbmVkIGNvbnZlcnNpb24gd2l0aCB2YWx1ZSByYW5nZSBwb3NpdGl2 ZS4gICovCisgIC8qIGFyZyAtIDEuICAqLworICBpZiAoZm9vOSAoMikgIT0g MSkKKyAgICBhYm9ydCAoKTsKKyAgLyogYXJnICsgMS4gICovCisgIGlmIChm b28xMCAoMikgIT0gMykKKyAgICBhYm9ydCAoKTsKKworICAvKiBTaWduZWQg dG8gdW5zaWduZWQgY29udmVyc2lvbiB3aXRoIHZhbHVlIHJhbmdlIG5lZ2F0 aXZlLiAgKi8KKyAgLyogYXJnICsgMS4gICovCisgIGlmIChmb28xMSAoLTEy NSkgIT0gLTEyNCkKKyAgICBhYm9ydCAoKTsKKyAgLyogYXJnICsgMS4gICov CisgIGlmIChmb28xMiAoLTEyNSkgIT0gLTEyNCkKKyAgICBhYm9ydCAoKTsK KworICAvKiBVbnNpZ25lZCB0byBTaWduZWQgY29udmVyc2lvbiB3aXRoIHZh bHVlIHJhbmdlIGluIHNpZ25lZCBlcXVpdiByYW5nZS4gICovCisgIC8qIGFy ZyArIDEuICAqLworICBpZiAoZm9vMTMgKDEyNSkgIT0gMTI2KQorICAgIGFi b3J0ICgpOworICAvKiBhcmcgKyAxLiAgKi8KKyAgaWYgKGZvbzE0ICgxMjUp ICE9IDEyNikKKyAgICBhYm9ydCAoKTsKKworICAvKiBVbnNpZ25lZCB0byBT aWduZWQgY29udmVyc2lvbiB3aXRoIHZhbHVlIHJhbmdlIG5vdC1pbiBzaWdu ZWQgcmFuZ2UuICAqLworICAvKiBhcmcgKyAxLiAgKi8KKyAgaWYgKGZvbzE1 ICgyNTApICE9IDI1MSkKKyAgICBhYm9ydCAoKTsKKyAgLyogYXJnICsgMS4g ICovCisgIGlmIChmb28xNiAoMjUwKSAhPSAyNTEpCisgICAgYWJvcnQgKCk7 CisKKyAgcmV0dXJuIDA7Cit9CisK --------------000203050505060808070300--