From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 8FDAA3858412 for ; Thu, 23 Feb 2023 16:39:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8FDAA3858412 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1677170398; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=W5oFcJzrNc/Iywrh3apvHB0cZKs4qPMbT/BEI6fig/Y=; b=K7T3MS0b5bg+LUYOqPEDVN4X5kArxugVgX7c+ktcZmuL7tsv0OPcYAjOR5aK4+0yZ2preH SmvhnlUt5Fnd/nkEEISRYwE42gl0I/dNErseYF4mG4FPlckjZrflxotN0J6J0FggLsrWOd 7JSdGuvm5FeMyNC8KqFOFh1LSfcT4NA= Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-552-sciSubZkMbWsASOrmdjzFw-1; Thu, 23 Feb 2023 11:39:57 -0500 X-MC-Unique: sciSubZkMbWsASOrmdjzFw-1 Received: by mail-qt1-f200.google.com with SMTP id g10-20020ac8070a000000b003b849aa2cd6so5340457qth.15 for ; Thu, 23 Feb 2023 08:39:57 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=W/D96IbTsmb05SF3PT3ZFU3PeyH1q3tDG53HEDaHOiE=; b=6UCyDA7qgmTpF1vGYqykM9NjKYF/YWlMW1ZZ7RboLsWG0/NyPD5UJBdpLe6wKfm1NK lvEBokjiGR3WYOne1hVTNIkl6MMbZjo6BsziMz/uBHOHrTGqEk6ubiDXkcJSN4DhNIL5 Zb9c0bXYtkttd0GNMZ4D4Ra74zOyryKlEPWi9947ZRyodmy/thCTzzAnkXCvv8NTrJCS roFDwX50ZKjfo7xHmqxNMmbCTeq2Xj8c9FR71SD9tq0BJ4tGFuVzLPBbDhlxG1ovWOjp Wt+QrEJfDeO6Oa/BpyQ0JwCzq24+I6P2Iz62Rfo0zHR2GTl4kEKXFqNYJemChl8AZUio ktBw== X-Gm-Message-State: AO0yUKUOAypRl8OUBCLQ101g4uT1WC51XsI6x5bSb1ep0riPVb8dfGIo LXC+GL9xw6G8TD8lNdcuJRvSghg+346/B1LaEEMJLwkY/5VJ4Q0qMH3RKAzlyz+gaAd7yux4H4l bdRgWRFbnbKoXEwSzQA== X-Received: by 2002:a05:622a:452:b0:3b9:f4a0:e600 with SMTP id o18-20020a05622a045200b003b9f4a0e600mr23455402qtx.60.1677170395876; Thu, 23 Feb 2023 08:39:55 -0800 (PST) X-Google-Smtp-Source: AK7set/aPVqWI8JB0k9LqIchkFX/rFvydMSwfIHsQbp133QchBiP4VEVOFZZUppf5ZfZXr6MdhGG+Q== X-Received: by 2002:a05:622a:452:b0:3b9:f4a0:e600 with SMTP id o18-20020a05622a045200b003b9f4a0e600mr23455183qtx.60.1677170393784; Thu, 23 Feb 2023 08:39:53 -0800 (PST) Received: from ?IPV6:2607:fea8:a263:f600::de2a? ([2607:fea8:a263:f600::de2a]) by smtp.gmail.com with ESMTPSA id x199-20020a3763d0000000b0073b587194d0sm4809980qkb.104.2023.02.23.08.39.52 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 23 Feb 2023 08:39:53 -0800 (PST) Message-ID: <46f59672-9e6b-81a0-fccc-a4aa0c9c31b2@redhat.com> Date: Thu, 23 Feb 2023 11:39:51 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.0 Subject: Re: [PATCH 1/2]middle-end: Fix wrong overmatching of div-bitmask by using new optabs [PR108583] To: Tamar Christina , Richard Biener , Richard Sandiford Cc: Tamar Christina via Gcc-patches , nd , "jlaw@ventanamicro.com" References: <77142b9b-7af8-eb04-e596-6dd2f97aff9a@redhat.com> <9378f3fb-0538-45fd-5066-1920de50e6c9@redhat.com> From: Andrew MacLeod In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------rKM2L0Gr2BW4bHH0E3pV4Qo8" Content-Language: en-US X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------rKM2L0Gr2BW4bHH0E3pV4Qo8 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2/23/23 03:36, Tamar Christina wrote: > Hi Andrew, > >>>> Oh yeah, and in case you haven't figured it out on your own, you'll >>>> have to remove WIDEN_MULT_EXPR from the range-ops init table.   This >>>> non-standard mechanism only gets checked if there is no standard >>>> range-op table entry for the tree code :-P >>>> >>> Hmm it looks like it'll work, but it keeps segfaulting in: >>> >>> bool >>> range_op_handler::fold_range (vrange &r, tree type, >>> const vrange &lh, >>> const vrange &rh, >>> relation_trio rel) const >>> { >>> gcc_checking_assert (m_valid); >>> if (m_int) >>> return m_int->fold_range (as_a (r), type, >>> as_a (lh), >>> as_a (rh), rel); >>> >>> while trying to call fold_range. >>> >>> But m_int is set to the right instance. Probably something I'm >>> missing, I'll double check it all. >>> >> Hmm.  whats your class operator_widen_mult* look like? what are you >> inheriting from?   Send me your patch and I'll have a look if you want. this is >> somewhat  new territory :-) > I've attached the patch, and my testcase is: > > int decMultiplyOp_zacc, decMultiplyOp_iacc; > int *decMultiplyOp_lp; > void decMultiplyOp() { > decMultiplyOp_lp = &decMultiplyOp_zacc; > for (; decMultiplyOp_lp < &decMultiplyOp_zacc + decMultiplyOp_iacc; > decMultiplyOp_lp++) > *decMultiplyOp_lp = 0; > } > > And compiling with aarch64-none-elf-gcc -O2 zero.c -S -o - -Werror=stringop-overflow > > Also to explain a bit on why we're only seeing this now: > > The original sequence for most of the pipeline is based on a cast and multiplication > > # RANGE [irange] long unsigned int [0, 2147483647][18446744071562067968, +INF] > _14 = (long unsigned intD.11) decMultiplyOp_iacc.2_13; > # RANGE [irange] long unsigned int [0, 8589934588][18446744065119617024, 18446744073709551612] NONZERO 0xfffffffffffffffc > _15 = _14 * 4; > > But things like widening multiply are quite common, so some ISAs have it on scalars as well, not just vectors. > So there's a pass widening_mul that runs late for these targets. This replaces the above with > > # RANGE [irange] long unsigned int [0, 8589934588][18446744065119617024, 18446744073709551612] NONZERO 0xfffffffffffffffc > _15 = decMultiplyOp_iacc.2_13 w* 4; > > And copies over the final range from the original expression. > > After that there are passes like the warning passes that try to requery ranged to see if any optimization has changed them. > Before my attempt to support *w this would just return VARYING and it would only use the old range. > > Now however, without taking care to sign extend when appropriate the MIN range changes from a negative value to a large > positive one when we increase the precision. So passes that re-query late get the wrong range. That's why for instance in this case > we get an incorrect warning generated. > > Thanks for the help! > > Tamar > >> I cant imagine it being a linkage thing between the 2 files since the operator is >> defined in another file and the address taken in this one? >> that should work, but strange that cant make the call... >> >> Andrew It is some sort of linkage/vtable thing.  The fix.diff patch applied on top of what you have will fix the fold issue. This'll do for now until I formalize how this is going to work goign forward. Inheriting from operator_mult is also going to be hazardous because it also has an op1_range and op2_range...  you should at least define those and return VARYING to avoid other issues.  Same thing applies to widen_plus I think, and it has relation processing and other things as well.  Your widen operands are not what those classes expect, so I think you probably just want a fresh range operator. It also looks like the mult operation is sign/zero extending both upper bounds, and neither lower bound..   I think that should be the LH upper and lower bound? I've attached a second patch  (newversion.patch) which incorporates my fix, the fix to the sign of only op1's bounds,  as well as a simplification of the classes to not inherit from operator_mult/plus..   I think this still does what you want?  and it wont get you into unexpected trouble later :-) let me know if this is still doing what you are expecting... Andrew --------------rKM2L0Gr2BW4bHH0E3pV4Qo8 Content-Type: text/x-patch; charset=UTF-8; name="fix.diff" Content-Disposition: attachment; filename="fix.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtcmFuZ2Utb3AuY2MgYi9nY2MvZ2ltcGxlLXJhbmdlLW9w LmNjCmluZGV4IDgxMDg5ODc2ZDMwLi44MjRlMDMzOGYzNCAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBs ZS1yYW5nZS1vcC5jYworKysgYi9nY2MvZ2ltcGxlLXJhbmdlLW9wLmNjCkBAIC03NzcsOCArNzc3 LDYgQEAgZ2ltcGxlX3JhbmdlX29wX2hhbmRsZXI6Om1heWJlX25vbl9zdGFuZGFyZCAoKQogICAg ICAgewogCWNhc2UgV0lERU5fTVVMVF9FWFBSOgogCXsKLQkgIGV4dGVybiBjbGFzcyByYW5nZV9v cGVyYXRvciAmb3Bfd2lkZW5fbXVsdF9zaWduZWQ7Ci0JICBleHRlcm4gY2xhc3MgcmFuZ2Vfb3Bl cmF0b3IgJm9wX3dpZGVuX211bHRfdW5zaWduZWQ7CiAJICBtX3ZhbGlkID0gdHJ1ZTsKIAkgIG1f b3AxID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChtX3N0bXQpOwogCSAgbV9vcDIgPSBnaW1wbGVfYXNz aWduX3JoczIgKG1fc3RtdCk7CkBAIC03ODgsOSArNzg2LDkgQEAgZ2ltcGxlX3JhbmdlX29wX2hh bmRsZXI6Om1heWJlX25vbl9zdGFuZGFyZCAoKQogCSAgICBzdGQ6OnN3YXAgKG1fb3AxLCBtX29w Mik7CiAKIAkgIGlmIChzaWduZWQxIHx8IHNpZ25lZDIpCi0JICAgIG1faW50ID0gJm9wX3dpZGVu X211bHRfc2lnbmVkOworCSAgICBtX2ludCA9IHB0cl9vcF93aWRlbl9tdWx0X3NpZ25lZDsKIAkg IGVsc2UKLQkgICAgbV9pbnQgPSAmb3Bfd2lkZW5fbXVsdF91bnNpZ25lZDsKKwkgICAgbV9pbnQg PSBwdHJfb3Bfd2lkZW5fbXVsdF91bnNpZ25lZDsKIAkgIGJyZWFrOwogCX0KIAlkZWZhdWx0Ogpk aWZmIC0tZ2l0IGEvZ2NjL3JhbmdlLW9wLmNjIGIvZ2NjL3JhbmdlLW9wLmNjCmluZGV4IGMxNWJk ODNiMDc3Li5iYWNlOTE1YjI1NiAxMDA2NDQKLS0tIGEvZ2NjL3JhbmdlLW9wLmNjCisrKyBiL2dj Yy9yYW5nZS1vcC5jYwpAQCAtMjA3Miw2ICsyMDcyLDcgQEAgcHVibGljOgogCQkJCWNvbnN0IHdp ZGVfaW50ICZ3MCwgY29uc3Qgd2lkZV9pbnQgJncxKQogICAgIGNvbnN0OwogfSBvcF93aWRlbl9t dWx0X3NpZ25lZDsKK3JhbmdlX29wZXJhdG9yICpwdHJfb3Bfd2lkZW5fbXVsdF9zaWduZWQgPSAm b3Bfd2lkZW5fbXVsdF9zaWduZWQ7CiAKIHZvaWQKIG9wZXJhdG9yX3dpZGVuX211bHRfc2lnbmVk Ojp3aV9mb2xkIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKQEAgLTIxMTksNiArMjEyMCw3IEBAIHB1 YmxpYzoKIAkJCQljb25zdCB3aWRlX2ludCAmdzAsIGNvbnN0IHdpZGVfaW50ICZ3MSkKICAgICBj b25zdDsKIH0gb3Bfd2lkZW5fbXVsdF91bnNpZ25lZDsKK3JhbmdlX29wZXJhdG9yICpwdHJfb3Bf d2lkZW5fbXVsdF91bnNpZ25lZCA9ICZvcF93aWRlbl9tdWx0X3Vuc2lnbmVkOwogCiB2b2lkCiBv cGVyYXRvcl93aWRlbl9tdWx0X3Vuc2lnbmVkOjp3aV9mb2xkIChpcmFuZ2UgJnIsIHRyZWUgdHlw ZSwKZGlmZiAtLWdpdCBhL2djYy9yYW5nZS1vcC5oIGIvZ2NjL3JhbmdlLW9wLmgKaW5kZXggZjAw Yjc0N2YwOGEuLjVmZTQ2MzIzNGFlIDEwMDY0NAotLS0gYS9nY2MvcmFuZ2Utb3AuaAorKysgYi9n Y2MvcmFuZ2Utb3AuaApAQCAtMzExLDQgKzMxMSw2IEBAIHByaXZhdGU6CiAvLyBUaGlzIGhvbGRz IHRoZSByYW5nZSBvcCB0YWJsZSBmb3IgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucy4KIGV4dGVy biBmbG9hdGluZ19vcF90YWJsZSAqZmxvYXRpbmdfdHJlZV90YWJsZTsKIAorZXh0ZXJuIHJhbmdl X29wZXJhdG9yICpwdHJfb3Bfd2lkZW5fbXVsdF9zaWduZWQ7CitleHRlcm4gcmFuZ2Vfb3BlcmF0 b3IgKnB0cl9vcF93aWRlbl9tdWx0X3Vuc2lnbmVkOwogI2VuZGlmIC8vIEdDQ19SQU5HRV9PUF9I Cg== --------------rKM2L0Gr2BW4bHH0E3pV4Qo8 Content-Type: text/x-patch; charset=UTF-8; name="newversion.patch" Content-Disposition: attachment; filename="newversion.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtcmFuZ2Utb3AuY2MgYi9nY2MvZ2ltcGxlLXJhbmdlLW9w LmNjCmluZGV4IGQ5ZGZkYzU2OTM5Li44MjRlMDMzOGYzNCAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBs ZS1yYW5nZS1vcC5jYworKysgYi9nY2MvZ2ltcGxlLXJhbmdlLW9wLmNjCkBAIC0xNzksNiArMTc5 LDggQEAgZ2ltcGxlX3JhbmdlX29wX2hhbmRsZXI6OmdpbXBsZV9yYW5nZV9vcF9oYW5kbGVyIChn aW1wbGUgKnMpCiAgIC8vIHN0YXRlbWVudHMuCiAgIGlmIChpc19hIDxnY2FsbCAqPiAobV9zdG10 KSkKICAgICBtYXliZV9idWlsdGluX2NhbGwgKCk7CisgIGVsc2UKKyAgICBtYXliZV9ub25fc3Rh bmRhcmQgKCk7CiB9CiAKIC8vIENhbGN1bGF0ZSB3aGF0IHdlIGNhbiBkZXRlcm1pbmUgb2YgdGhl IHJhbmdlIG9mIHRoaXMgdW5hcnkKQEAgLTc2NCw2ICs3NjYsMzYgQEAgcHVibGljOgogICB9CiB9 IG9wX2Nmbl9wYXJpdHk7CiAKKy8vIFNldCB1cCBhIGdpbXBsZV9yYW5nZV9vcF9oYW5kbGVyIGZv ciBhbnkgbm9uc3RhbmRhcmQgZnVuY3Rpb24gd2hpY2ggY2FuIGJlCisvLyBzdXBwb3J0ZWQgdmlh IHJhbmdlLW9wcy4KKwordm9pZAorZ2ltcGxlX3JhbmdlX29wX2hhbmRsZXI6Om1heWJlX25vbl9z dGFuZGFyZCAoKQoreworICBpZiAoZ2ltcGxlX2NvZGUgKG1fc3RtdCkgPT0gR0lNUExFX0FTU0lH TikKKyAgICBzd2l0Y2ggKGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKG1fc3RtdCkpCisgICAgICB7 CisJY2FzZSBXSURFTl9NVUxUX0VYUFI6CisJeworCSAgbV92YWxpZCA9IHRydWU7CisJICBtX29w MSA9IGdpbXBsZV9hc3NpZ25fcmhzMSAobV9zdG10KTsKKwkgIG1fb3AyID0gZ2ltcGxlX2Fzc2ln bl9yaHMyIChtX3N0bXQpOworCSAgYm9vbCBzaWduZWQxID0gVFlQRV9TSUdOIChUUkVFX1RZUEUg KG1fb3AxKSkgPT0gU0lHTkVEOworCSAgYm9vbCBzaWduZWQyID0gVFlQRV9TSUdOIChUUkVFX1RZ UEUgKG1fb3AyKSkgPT0gU0lHTkVEOworCSAgaWYgKHNpZ25lZDIgJiYgIXNpZ25lZDEpCisJICAg IHN0ZDo6c3dhcCAobV9vcDEsIG1fb3AyKTsKKworCSAgaWYgKHNpZ25lZDEgfHwgc2lnbmVkMikK KwkgICAgbV9pbnQgPSBwdHJfb3Bfd2lkZW5fbXVsdF9zaWduZWQ7CisJICBlbHNlCisJICAgIG1f aW50ID0gcHRyX29wX3dpZGVuX211bHRfdW5zaWduZWQ7CisJICBicmVhazsKKwl9CisJZGVmYXVs dDoKKwkgIGJyZWFrOworICAgICAgfQorfQorCiAvLyBTZXQgdXAgYSBnaW1wbGVfcmFuZ2Vfb3Bf aGFuZGxlciBmb3IgYW55IGJ1aWx0IGluIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZQogLy8gc3VwcG9y dGVkIHZpYSByYW5nZS1vcHMuCiAKZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtcmFuZ2Utb3AuaCBi L2djYy9naW1wbGUtcmFuZ2Utb3AuaAppbmRleCA3NDNiODU4MTI2ZS4uMWJmNjNjNWNlNmYgMTAw NjQ0Ci0tLSBhL2djYy9naW1wbGUtcmFuZ2Utb3AuaAorKysgYi9nY2MvZ2ltcGxlLXJhbmdlLW9w LmgKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgogCQkgcmVsYXRpb25fdHJpbyA9IFRSSU9fVkFS WUlORyk7CiBwcml2YXRlOgogICB2b2lkIG1heWJlX2J1aWx0aW5fY2FsbCAoKTsKKyAgdm9pZCBt YXliZV9ub25fc3RhbmRhcmQgKCk7CiAgIGdpbXBsZSAqbV9zdG10OwogICB0cmVlIG1fb3AxLCBt X29wMjsKIH07CmRpZmYgLS1naXQgYS9nY2MvcmFuZ2Utb3AuY2MgYi9nY2MvcmFuZ2Utb3AuY2MK aW5kZXggNWM2N2JjZTZkM2EuLjdjZDE5YTkyZDAwIDEwMDY0NAotLS0gYS9nY2MvcmFuZ2Utb3Au Y2MKKysrIGIvZ2NjL3JhbmdlLW9wLmNjCkBAIC0xNTU2LDYgKzE1NTYsMzQgQEAgb3BlcmF0b3Jf cGx1czo6b3AyX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKICAgcmV0dXJuIG9wMV9yYW5n ZSAociwgdHlwZSwgbGhzLCBvcDEsIHJlbC5zd2FwX29wMV9vcDIgKCkpOwogfQogCitjbGFzcyBv cGVyYXRvcl93aWRlbl9wbHVzIDogcHVibGljIHJhbmdlX29wZXJhdG9yCit7CitwdWJsaWM6Cisg IHZpcnR1YWwgdm9pZCB3aV9mb2xkIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKKwkJCWNvbnN0IHdp ZGVfaW50ICZsaF9sYiwKKwkJCWNvbnN0IHdpZGVfaW50ICZsaF91YiwKKwkJCWNvbnN0IHdpZGVf aW50ICZyaF9sYiwKKwkJCWNvbnN0IHdpZGVfaW50ICZyaF91YikgY29uc3Q7Cit9IG9wX3dpZGVu X3BsdXM7CisKK3ZvaWQKK29wZXJhdG9yX3dpZGVuX3BsdXM6OndpX2ZvbGQgKGlyYW5nZSAmciwg dHJlZSB0eXBlLAorCQkJY29uc3Qgd2lkZV9pbnQgJmxoX2xiLCBjb25zdCB3aWRlX2ludCAmbGhf dWIsCisJCQljb25zdCB3aWRlX2ludCAmcmhfbGIsIGNvbnN0IHdpZGVfaW50ICZyaF91YikgY29u c3QKK3sKKyAgIHdpOjpvdmVyZmxvd190eXBlIG92X2xiLCBvdl91YjsKKyAgIHNpZ25vcCBzID0g VFlQRV9TSUdOICh0eXBlKTsKKworICAgd2lkZV9pbnQgbGhfd2xiID0gd2lkZV9pbnQ6OmZyb20g KGxoX2xiLCB3aTo6Z2V0X3ByZWNpc2lvbiAobGhfbGIpICogMiwgcyk7CisgICB3aWRlX2ludCBy aF93bGIgPSB3aWRlX2ludDo6ZnJvbSAocmhfbGIsIHdpOjpnZXRfcHJlY2lzaW9uIChyaF9sYikg KiAyLCBzKTsKKyAgIHdpZGVfaW50IGxoX3d1YiA9IHdpZGVfaW50Ojpmcm9tIChsaF91Yiwgd2k6 OmdldF9wcmVjaXNpb24gKGxoX3ViKSAqIDIsIHMpOworICAgd2lkZV9pbnQgcmhfd3ViID0gd2lk ZV9pbnQ6OmZyb20gKHJoX3ViLCB3aTo6Z2V0X3ByZWNpc2lvbiAocmhfdWIpICogMiwgcyk7CisK KyAgIHdpZGVfaW50IG5ld19sYiA9IHdpOjphZGQgKGxoX3dsYiwgcmhfd2xiLCBzLCAmb3ZfbGIp OworICAgd2lkZV9pbnQgbmV3X3ViID0gd2k6OmFkZCAobGhfd3ViLCByaF93dWIsIHMsICZvdl91 Yik7CisKKyAgIHIgPSBpbnRfcmFuZ2U8Mj4gKHR5cGUsIG5ld19sYiwgbmV3X3ViKTsKK30KIAog Y2xhc3Mgb3BlcmF0b3JfbWludXMgOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3IKIHsKQEAgLTIwMzEs NiArMjA1OSw3MCBAQCBvcGVyYXRvcl9tdWx0Ojp3aV9mb2xkIChpcmFuZ2UgJnIsIHRyZWUgdHlw ZSwKICAgICB9CiB9CiAKK2NsYXNzIG9wZXJhdG9yX3dpZGVuX211bHRfc2lnbmVkIDogcHVibGlj IHJhbmdlX29wZXJhdG9yCit7CitwdWJsaWM6CisgIHZpcnR1YWwgdm9pZCB3aV9mb2xkIChpcmFu Z2UgJnIsIHRyZWUgdHlwZSwKKwkJCWNvbnN0IHdpZGVfaW50ICZsaF9sYiwKKwkJCWNvbnN0IHdp ZGVfaW50ICZsaF91YiwKKwkJCWNvbnN0IHdpZGVfaW50ICZyaF9sYiwKKwkJCWNvbnN0IHdpZGVf aW50ICZyaF91YikKKyAgICBjb25zdDsKK30gb3Bfd2lkZW5fbXVsdF9zaWduZWQ7CityYW5nZV9v cGVyYXRvciAqcHRyX29wX3dpZGVuX211bHRfc2lnbmVkID0gJm9wX3dpZGVuX211bHRfc2lnbmVk OworCit2b2lkCitvcGVyYXRvcl93aWRlbl9tdWx0X3NpZ25lZDo6d2lfZm9sZCAoaXJhbmdlICZy LCB0cmVlIHR5cGUsCisJCQkJICAgICBjb25zdCB3aWRlX2ludCAmbGhfbGIsCisJCQkJICAgICBj b25zdCB3aWRlX2ludCAmbGhfdWIsCisJCQkJICAgICBjb25zdCB3aWRlX2ludCAmcmhfbGIsCisJ CQkJICAgICBjb25zdCB3aWRlX2ludCAmcmhfdWIpIGNvbnN0Cit7CisgIHNpZ25vcCBzID0gVFlQ RV9TSUdOICh0eXBlKTsKKworICB3aWRlX2ludCBsaF93bGIgPSB3aWRlX2ludDo6ZnJvbSAobGhf bGIsIHdpOjpnZXRfcHJlY2lzaW9uIChsaF9sYikgKiAyLCBTSUdORUQpOworICB3aWRlX2ludCBs aF93dWIgPSB3aWRlX2ludDo6ZnJvbSAobGhfdWIsIHdpOjpnZXRfcHJlY2lzaW9uIChsaF91Yikg KiAyLCBTSUdORUQpOworICB3aWRlX2ludCByaF93bGIgPSB3aWRlX2ludDo6ZnJvbSAocmhfbGIs IHdpOjpnZXRfcHJlY2lzaW9uIChyaF9sYikgKiAyLCBzKTsKKyAgd2lkZV9pbnQgcmhfd3ViID0g d2lkZV9pbnQ6OmZyb20gKHJoX3ViLCB3aTo6Z2V0X3ByZWNpc2lvbiAocmhfdWIpICogMiwgcyk7 CisKKyAgLyogV2UgZG9uJ3QgZXhwZWN0IGEgd2lkZW5pbmcgbXVsdGlwbGljYXRpb24gdG8gYmUg YWJsZSB0byBvdmVyZmxvdyBidXQgcmFuZ2UKKyAgICAgY2FsY3VsYXRpb25zIGZvciBtdWx0aXBs aWNhdGlvbnMgYXJlIGNvbXBsaWNhdGVkLiAgQWZ0ZXIgd2lkZW5pbmcgdGhlCisgICAgIG9wZXJh bmRzIGxldHMgY2FsbCB0aGUgYmFzZSBjbGFzcy4gICovCisgIHJldHVybiBvcF9tdWx0LndpX2Zv bGQgKHIsIHR5cGUsIGxoX3dsYiwgbGhfd3ViLCByaF93bGIsIHJoX3d1Yik7Cit9CisKKworY2xh c3Mgb3BlcmF0b3Jfd2lkZW5fbXVsdF91bnNpZ25lZCA6IHB1YmxpYyByYW5nZV9vcGVyYXRvcgor eworcHVibGljOgorICB2aXJ0dWFsIHZvaWQgd2lfZm9sZCAoaXJhbmdlICZyLCB0cmVlIHR5cGUs CisJCQljb25zdCB3aWRlX2ludCAmbGhfbGIsCisJCQljb25zdCB3aWRlX2ludCAmbGhfdWIsCisJ CQljb25zdCB3aWRlX2ludCAmcmhfbGIsCisJCQljb25zdCB3aWRlX2ludCAmcmhfdWIpCisgICAg Y29uc3Q7Cit9IG9wX3dpZGVuX211bHRfdW5zaWduZWQ7CityYW5nZV9vcGVyYXRvciAqcHRyX29w X3dpZGVuX211bHRfdW5zaWduZWQgPSAmb3Bfd2lkZW5fbXVsdF91bnNpZ25lZDsKKwordm9pZAor b3BlcmF0b3Jfd2lkZW5fbXVsdF91bnNpZ25lZDo6d2lfZm9sZCAoaXJhbmdlICZyLCB0cmVlIHR5 cGUsCisJCQkJICAgICAgIGNvbnN0IHdpZGVfaW50ICZsaF9sYiwKKwkJCQkgICAgICAgY29uc3Qg d2lkZV9pbnQgJmxoX3ViLAorCQkJCSAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfbGIsCisJCQkJ ICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF91YikgY29uc3QKK3sKKyAgc2lnbm9wIHMgPSBUWVBF X1NJR04gKHR5cGUpOworCisgIHdpZGVfaW50IGxoX3dsYiA9IHdpZGVfaW50Ojpmcm9tIChsaF9s Yiwgd2k6OmdldF9wcmVjaXNpb24gKGxoX2xiKSAqIDIsIFVOU0lHTkVEKTsKKyAgd2lkZV9pbnQg bGhfd3ViID0gd2lkZV9pbnQ6OmZyb20gKGxoX3ViLCB3aTo6Z2V0X3ByZWNpc2lvbiAobGhfdWIp ICogMiwgVU5TSUdORUQpOworICB3aWRlX2ludCByaF93bGIgPSB3aWRlX2ludDo6ZnJvbSAocmhf bGIsIHdpOjpnZXRfcHJlY2lzaW9uIChyaF9sYikgKiAyLCBzKTsKKyAgd2lkZV9pbnQgcmhfd3Vi ID0gd2lkZV9pbnQ6OmZyb20gKHJoX3ViLCB3aTo6Z2V0X3ByZWNpc2lvbiAocmhfdWIpICogMiwg cyk7CisKKyAgLyogV2UgZG9uJ3QgZXhwZWN0IGEgd2lkZW5pbmcgbXVsdGlwbGljYXRpb24gdG8g YmUgYWJsZSB0byBvdmVyZmxvdyBidXQgcmFuZ2UKKyAgICAgY2FsY3VsYXRpb25zIGZvciBtdWx0 aXBsaWNhdGlvbnMgYXJlIGNvbXBsaWNhdGVkLiAgQWZ0ZXIgd2lkZW5pbmcgdGhlCisgICAgIG9w ZXJhbmRzIGxldHMgY2FsbCB0aGUgYmFzZSBjbGFzcy4gICovCisgIHJldHVybiBvcF9tdWx0Lndp X2ZvbGQgKHIsIHR5cGUsIGxoX3dsYiwgbGhfd3ViLCByaF93bGIsIHJoX3d1Yik7Cit9CiAKIGNs YXNzIG9wZXJhdG9yX2RpdiA6IHB1YmxpYyBjcm9zc19wcm9kdWN0X29wZXJhdG9yCiB7CkBAIC00 NDczLDYgKzQ1NjUsNyBAQCBpbnRlZ3JhbF90YWJsZTo6aW50ZWdyYWxfdGFibGUgKCkKICAgc2V0 IChHVF9FWFBSLCBvcF9ndCk7CiAgIHNldCAoR0VfRVhQUiwgb3BfZ2UpOwogICBzZXQgKFBMVVNf RVhQUiwgb3BfcGx1cyk7CisgIHNldCAoV0lERU5fUExVU19FWFBSLCBvcF93aWRlbl9wbHVzKTsK ICAgc2V0IChNSU5VU19FWFBSLCBvcF9taW51cyk7CiAgIHNldCAoTUlOX0VYUFIsIG9wX21pbik7 CiAgIHNldCAoTUFYX0VYUFIsIG9wX21heCk7CmRpZmYgLS1naXQgYS9nY2MvcmFuZ2Utb3AuaCBi L2djYy9yYW5nZS1vcC5oCmluZGV4IGYwMGI3NDdmMDhhLi41ZmU0NjMyMzRhZSAxMDA2NDQKLS0t IGEvZ2NjL3JhbmdlLW9wLmgKKysrIGIvZ2NjL3JhbmdlLW9wLmgKQEAgLTMxMSw0ICszMTEsNiBA QCBwcml2YXRlOgogLy8gVGhpcyBob2xkcyB0aGUgcmFuZ2Ugb3AgdGFibGUgZm9yIGZsb2F0aW5n IHBvaW50IG9wZXJhdGlvbnMuCiBleHRlcm4gZmxvYXRpbmdfb3BfdGFibGUgKmZsb2F0aW5nX3Ry ZWVfdGFibGU7CiAKK2V4dGVybiByYW5nZV9vcGVyYXRvciAqcHRyX29wX3dpZGVuX211bHRfc2ln bmVkOworZXh0ZXJuIHJhbmdlX29wZXJhdG9yICpwdHJfb3Bfd2lkZW5fbXVsdF91bnNpZ25lZDsK ICNlbmRpZiAvLyBHQ0NfUkFOR0VfT1BfSAo= --------------rKM2L0Gr2BW4bHH0E3pV4Qo8--