From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) by sourceware.org (Postfix) with ESMTPS id 078593858436 for ; Wed, 17 Aug 2022 12:39:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 078593858436 Received: by mail-ed1-x534.google.com with SMTP id w3so17330311edc.2 for ; Wed, 17 Aug 2022 05:39:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc; bh=RHq+5dQlDnX5MFnWikyZcW48YqebR1jCcpcUTncLEGw=; b=Uk/K47HdiJmMzoJO3f5BBbycKfz8yjPyrm9htx89nj5+xSMFL43jW3qDwHJFyivaDv 3Sa3Zv2ok4B8vvj0DI0HalIyLhAAVyTOH+IxfxBZ8h9sC+Ab4qhff+YU2PvbvEL8vQS8 X0GptI8zpGap+QgdOhVBUaOmhyZ6nO/YrdPjZ0snOs7JxnJTWI0AbN5SFufFN9I57MAu s/7VX/YOvRBfxGpVZOA/AypBKsqK0gGZz2c+rcf5YPwFW8PGNHZB0XjSSWkjuHWDd8eO 1x9orZtBVJ0hfo5zqx2O4bJB5xKTZECe8QA7tFIv2C9rLVoMx3LqAfnxlKSluGd2BsZ9 CWNQ== X-Gm-Message-State: ACgBeo2JFtAV7W2YNze8iaR5juaWisOruY0Lf4poPJl9JhEU1U3uTzOa 60MG+D4r+HDpt9zgFA7KDvaBdmrEpNq1nECP/02pNI/hgbii3Q== X-Google-Smtp-Source: AA6agR6JvWsCBMxVS9z9jA9+C4GS0fJRVbsNhE6K+C3mNDEjrZR+cGwlmuQsZSaVG37INkCvovJek0fE9Gjh3Skf+IE= X-Received: by 2002:a05:6402:331f:b0:43d:931c:6945 with SMTP id e31-20020a056402331f00b0043d931c6945mr22795057eda.199.1660739976676; Wed, 17 Aug 2022 05:39:36 -0700 (PDT) MIME-Version: 1.0 From: Prathamesh Kulkarni Date: Wed, 17 Aug 2022 18:09:01 +0530 Message-ID: Subject: Extend fold_vec_perm to fold VEC_PERM_EXPR in VLA manner To: gcc Patches , Richard Biener , Richard Sandiford Content-Type: multipart/mixed; boundary="0000000000005ff77105e66f2846" X-Spam-Status: No, score=-8.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SCC_10_SHORT_WORD_LINES, SCC_5_SHORT_WORD_LINES, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Aug 2022 12:39:40 -0000 --0000000000005ff77105e66f2846 Content-Type: text/plain; charset="UTF-8" Hi, The attached prototype patch extends fold_vec_perm to fold VEC_PERM_EXPR in VLA manner, and currently handles the following cases: (a) fixed len arg0, arg1 and fixed len sel. (b) fixed len arg0, arg1 and vla sel (c) vla arg0, arg1 and vla sel with arg0, arg1 being VECTOR_CST. It seems to work for the VLA tests written in test_vec_perm_vla_folding (), and am working thru the fallout observed in regression testing. Does the approach taken in the patch look in the right direction ? I am not sure if I have got the conversion from "sel_index" to index of either arg0, or arg1 entirely correct. I would be grateful for suggestions on the patch. Thanks, Prathamesh --0000000000005ff77105e66f2846 Content-Type: text/plain; charset="US-ASCII"; name="fold-vec-perm-1.txt" Content-Disposition: attachment; filename="fold-vec-perm-1.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l6xljsq40 ZGlmZiAtLWdpdCBhL2djYy9mb2xkLWNvbnN0LmNjIGIvZ2NjL2ZvbGQtY29uc3QuY2MKaW5kZXgg NGY0ZWM4MWM4ZDQuLjVlMTIyNjAyMTFlIDEwMDY0NAotLS0gYS9nY2MvZm9sZC1jb25zdC5jYwor KysgYi9nY2MvZm9sZC1jb25zdC5jYwpAQCAtODUsNiArODUsOSBAQCBhbG9uZyB3aXRoIEdDQzsg c2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUgInZlYy1wZXJtLWlu ZGljZXMuaCIKICNpbmNsdWRlICJhc2FuLmgiCiAjaW5jbHVkZSAiZ2ltcGxlLXJhbmdlLmgiCisj aW5jbHVkZSAidHJlZS1wcmV0dHktcHJpbnQuaCIKKyNpbmNsdWRlICJnaW1wbGUtcHJldHR5LXBy aW50LmgiCisjaW5jbHVkZSAicHJpbnQtdHJlZS5oIgogCiAvKiBOb256ZXJvIGlmIHdlIGFyZSBm b2xkaW5nIGNvbnN0YW50cyBpbnNpZGUgYW4gaW5pdGlhbGl6ZXIgb3IgYSBDKysKICAgIG1hbmlm ZXN0bHktY29uc3RhbnQtZXZhbHVhdGVkIGNvbnRleHQ7IHplcm8gb3RoZXJ3aXNlLgpAQCAtMTA0 OTYsNDAgKzEwNDk5LDYgQEAgZm9sZF9tdWx0X3pjb25qeiAobG9jYXRpb25fdCBsb2MsIHRyZWUg dHlwZSwgdHJlZSBleHByKQogCQkJICBidWlsZF96ZXJvX2NzdCAoaXR5cGUpKTsKIH0KIAotCi0v KiBIZWxwZXIgZnVuY3Rpb24gZm9yIGZvbGRfdmVjX3Blcm0uICBTdG9yZSBlbGVtZW50cyBvZiBW RUNUT1JfQ1NUIG9yCi0gICBDT05TVFJVQ1RPUiBBUkcgaW50byBhcnJheSBFTFRTLCB3aGljaCBo YXMgTkVMVFMgZWxlbWVudHMsIGFuZCByZXR1cm4KLSAgIHRydWUgaWYgc3VjY2Vzc2Z1bC4gICov Ci0KLXN0YXRpYyBib29sCi12ZWNfY3N0X2N0b3JfdG9fYXJyYXkgKHRyZWUgYXJnLCB1bnNpZ25l ZCBpbnQgbmVsdHMsIHRyZWUgKmVsdHMpCi17Ci0gIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgaSwg bnVuaXRzOwotCi0gIGlmIChUUkVFX0NPREUgKGFyZykgPT0gVkVDVE9SX0NTVAotICAgICAgJiYg VkVDVE9SX0NTVF9ORUxUUyAoYXJnKS5pc19jb25zdGFudCAoJm51bml0cykpCi0gICAgewotICAg ICAgZm9yIChpID0gMDsgaSA8IG51bml0czsgKytpKQotCWVsdHNbaV0gPSBWRUNUT1JfQ1NUX0VM VCAoYXJnLCBpKTsKLSAgICB9Ci0gIGVsc2UgaWYgKFRSRUVfQ09ERSAoYXJnKSA9PSBDT05TVFJV Q1RPUikKLSAgICB7Ci0gICAgICBjb25zdHJ1Y3Rvcl9lbHQgKmVsdDsKLQotICAgICAgRk9SX0VB Q0hfVkVDX1NBRkVfRUxUIChDT05TVFJVQ1RPUl9FTFRTIChhcmcpLCBpLCBlbHQpCi0JaWYgKGkg Pj0gbmVsdHMgfHwgVFJFRV9DT0RFIChUUkVFX1RZUEUgKGVsdC0+dmFsdWUpKSA9PSBWRUNUT1Jf VFlQRSkKLQkgIHJldHVybiBmYWxzZTsKLQllbHNlCi0JICBlbHRzW2ldID0gZWx0LT52YWx1ZTsK LSAgICB9Ci0gIGVsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0gIGZvciAoOyBpIDwgbmVsdHM7IGkr KykKLSAgICBlbHRzW2ldCi0gICAgICA9IGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChUUkVFX1RZ UEUgKGFyZykpLCBpbnRlZ2VyX3plcm9fbm9kZSk7Ci0gIHJldHVybiB0cnVlOwotfQotCiAvKiBB dHRlbXB0IHRvIGZvbGQgdmVjdG9yIHBlcm11dGF0aW9uIG9mIEFSRzAgYW5kIEFSRzEgdmVjdG9y cyB1c2luZyBTRUwKICAgIHNlbGVjdG9yLiAgUmV0dXJuIHRoZSBmb2xkZWQgVkVDVE9SX0NTVCBv ciBDT05TVFJVQ1RPUiBpZiBzdWNjZXNzZnVsLAogICAgTlVMTF9UUkVFIG90aGVyd2lzZS4gICov CkBAIC0xMDUzNyw0NSArMTA1MDYsMTQ5IEBAIHZlY19jc3RfY3Rvcl90b19hcnJheSAodHJlZSBh cmcsIHVuc2lnbmVkIGludCBuZWx0cywgdHJlZSAqZWx0cykKIHRyZWUKIGZvbGRfdmVjX3Blcm0g KHRyZWUgdHlwZSwgdHJlZSBhcmcwLCB0cmVlIGFyZzEsIGNvbnN0IHZlY19wZXJtX2luZGljZXMg JnNlbCkKIHsKLSAgdW5zaWduZWQgaW50IGk7Ci0gIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgbmVs dHM7Ci0gIGJvb2wgbmVlZF9jdG9yID0gZmFsc2U7CisgIHBvbHlfdWludDY0IGFyZzBfbGVuID0g VFlQRV9WRUNUT1JfU1VCUEFSVFMgKFRSRUVfVFlQRSAoYXJnMCkpOworICBwb2x5X3VpbnQ2NCBh cmcxX2xlbiA9IFRZUEVfVkVDVE9SX1NVQlBBUlRTIChUUkVFX1RZUEUgKGFyZzEpKTsKKworICBn Y2NfYXNzZXJ0IChrbm93bl9lcSAoVFlQRV9WRUNUT1JfU1VCUEFSVFMgKHR5cGUpLAorCQkJc2Vs Lmxlbmd0aCAoKSkpOworICBnY2NfYXNzZXJ0IChrbm93bl9lcSAoYXJnMF9sZW4sIGFyZzFfbGVu KSk7CiAKLSAgaWYgKCFzZWwubGVuZ3RoICgpLmlzX2NvbnN0YW50ICgmbmVsdHMpKQotICAgIHJl dHVybiBOVUxMX1RSRUU7Ci0gIGdjY19hc3NlcnQgKGtub3duX2VxIChUWVBFX1ZFQ1RPUl9TVUJQ QVJUUyAodHlwZSksIG5lbHRzKQotCSAgICAgICYmIGtub3duX2VxIChUWVBFX1ZFQ1RPUl9TVUJQ QVJUUyAoVFJFRV9UWVBFIChhcmcwKSksIG5lbHRzKQotCSAgICAgICYmIGtub3duX2VxIChUWVBF X1ZFQ1RPUl9TVUJQQVJUUyAoVFJFRV9UWVBFIChhcmcxKSksIG5lbHRzKSk7CiAgIGlmIChUUkVF X1RZUEUgKFRSRUVfVFlQRSAoYXJnMCkpICE9IFRSRUVfVFlQRSAodHlwZSkKICAgICAgIHx8IFRS RUVfVFlQRSAoVFJFRV9UWVBFIChhcmcxKSkgIT0gVFJFRV9UWVBFICh0eXBlKSkKICAgICByZXR1 cm4gTlVMTF9UUkVFOwogCi0gIHRyZWUgKmluX2VsdHMgPSBYQUxMT0NBVkVDICh0cmVlLCBuZWx0 cyAqIDIpOwotICBpZiAoIXZlY19jc3RfY3Rvcl90b19hcnJheSAoYXJnMCwgbmVsdHMsIGluX2Vs dHMpCi0gICAgICB8fCAhdmVjX2NzdF9jdG9yX3RvX2FycmF5IChhcmcxLCBuZWx0cywgaW5fZWx0 cyArIG5lbHRzKSkKKyAgdW5zaWduZWQgaW5wdXRfbnBhdHRlcm5zID0gMDsKKyAgdW5zaWduZWQg b3V0X25wYXR0ZXJucyA9IHNlbC5lbmNvZGluZyAoKS5ucGF0dGVybnMgKCk7CisgIHVuc2lnbmVk IG91dF9uZWx0c19wZXJfcGF0dGVybiA9IHNlbC5lbmNvZGluZyAoKS5uZWx0c19wZXJfcGF0dGVy biAoKTsKKworICAvKiBGSVhNRTogSG93IHRvIHJlc2hhcGUgZml4ZWQgbGVuZ3RoIHZlY3Rvcl9j c3QsIHNvIHRoYXQKKyAgICAgbnBhdHRlcm5zID09IHZlY3Rvci5sZW5ndGggKCkgYW5kIG5lbHRz X3Blcl9wYXR0ZXJuID09IDEgPworICAgICBJdCBzZWVtcyB0aGUgdmVjdG9yIGlzIGNhbm9uaWNh bGl6ZWQgdG8gbWluaW1pemUgbnBhdHRlcm5zLiAgKi8KKworICBpZiAoYXJnMF9sZW4uaXNfY29u c3RhbnQgKCkpCisgICAgeworICAgICAgLyogSWYgYXJnMCwgYXJnMSBhcmUgZml4ZWQgd2lkdGgg dmVjdG9ycywgYW5kIHNlbCBpcyBWTEEsCisgICAgICAgICBlbnN1cmUgdGhhdCBpdCBpcyBhIGR1 cCBzZXF1ZW5jZSBhbmQgaGFzIHNhbWUgcGVyaW9kCisJIGFzIGlucHV0IHZlY3Rvci4gICovCisK KyAgICAgIGlmICghc2VsLmxlbmd0aCAoKS5pc19jb25zdGFudCAoKQorCSAgJiYgKHNlbC5lbmNv ZGluZyAoKS5uZWx0c19wZXJfcGF0dGVybiAoKSA+IDIKKwkgICAgICB8fCAha25vd25fZXEgKGFy ZzBfbGVuLCBzZWwuZW5jb2RpbmcgKCkubnBhdHRlcm5zICgpKSkpCisJcmV0dXJuIE5VTExfVFJF RTsKKworICAgICAgaW5wdXRfbnBhdHRlcm5zID0gYXJnMF9sZW4udG9fY29uc3RhbnQgKCk7CisK KyAgICAgIGlmIChzZWwubGVuZ3RoICgpLmlzX2NvbnN0YW50ICgpKQorCXsKKwkgIG91dF9ucGF0 dGVybnMgPSBzZWwubGVuZ3RoICgpLnRvX2NvbnN0YW50ICgpOworCSAgb3V0X25lbHRzX3Blcl9w YXR0ZXJuID0gMTsKKwl9CisgICAgfQorICBlbHNlIGlmIChUUkVFX0NPREUgKGFyZzApID09IFZF Q1RPUl9DU1QKKwkgICAmJiBUUkVFX0NPREUgKGFyZzEpID09IFZFQ1RPUl9DU1QpCisgICAgewor ICAgICAgdW5zaWduZWQgbnBhdHRlcm5zID0gVkVDVE9SX0NTVF9OUEFUVEVSTlMgKGFyZzApOwor ICAgICAgdW5zaWduZWQgaW5wdXRfbmVsdHNfcGVyX3BhdHRlcm4gPSBWRUNUT1JfQ1NUX05FTFRT X1BFUl9QQVRURVJOIChhcmcwKTsKKworICAgICAgLyogSWYgYXJnMCwgYXJnMSBhcmUgVkxBLCB0 aGVuIGVuc3VyZSB0aGF0LAorCSAoYSkgc2VsIGFsc28gaGFzIHNhbWUgbGVuZ3RoIGFzIGlucHV0 IHZlY3RvcnMuCisJIChiKSBhcmcwIGFuZCBhcmcxIGhhdmUgc2FtZSBlbmNvZGluZy4KKwkgKGMp IHNlbCBoYXMgc2FtZSBudW1iZXIgb2YgcGF0dGVybnMgYXMgaW5wdXQgdmVjdG9ycy4KKwkgKGQp IGlmIHNlbCBpcyBhIHN0ZXBwZWQgc2VxdWVuY2UsIHRoZW4gaXQgaGFzIHNhbWUKKwkgICAgIGVu Y29kaW5nIGFzIGlucHV0IHZlY3RvcnMuICAqLworCisgICAgICBpZiAoIWtub3duX2VxIChhcmcw X2xlbiwgc2VsLmxlbmd0aCAoKSkKKwkgIHx8IG5wYXR0ZXJucyAhPSBWRUNUT1JfQ1NUX05QQVRU RVJOUyAoYXJnMSkKKwkgIHx8IGlucHV0X25lbHRzX3Blcl9wYXR0ZXJuICE9IFZFQ1RPUl9DU1Rf TkVMVFNfUEVSX1BBVFRFUk4gKGFyZzEpCisJICB8fCBucGF0dGVybnMgIT0gc2VsLmVuY29kaW5n ICgpLm5wYXR0ZXJucyAoKQorCSAgfHwgKHNlbC5lbmNvZGluZyAoKS5uZWx0c19wZXJfcGF0dGVy biAoKSA+IDIKKwkgICAgICAmJiBzZWwuZW5jb2RpbmcgKCkubmVsdHNfcGVyX3BhdHRlcm4gKCkg IT0gaW5wdXRfbmVsdHNfcGVyX3BhdHRlcm4pKQorCXJldHVybiBOVUxMX1RSRUU7CisKKyAgICAg IGlucHV0X25wYXR0ZXJucyA9IG5wYXR0ZXJuczsKKyAgICB9CisgIGVsc2UKICAgICByZXR1cm4g TlVMTF9UUkVFOwogCi0gIHRyZWVfdmVjdG9yX2J1aWxkZXIgb3V0X2VsdHMgKHR5cGUsIG5lbHRz LCAxKTsKLSAgZm9yIChpID0gMDsgaSA8IG5lbHRzOyBpKyspCisgIHRyZWVfdmVjdG9yX2J1aWxk ZXIgb3V0X2VsdHNfYnVpbGRlciAodHlwZSwgb3V0X25wYXR0ZXJucywKKwkJCQkJb3V0X25lbHRz X3Blcl9wYXR0ZXJuKTsKKyAgYm9vbCBuZWVkX2N0b3IgPSBmYWxzZTsKKyAgdW5zaWduZWQgb3V0 X2VuY29kZWRfbmVsdHMgPSBvdXRfbnBhdHRlcm5zICogb3V0X25lbHRzX3Blcl9wYXR0ZXJuOwor CisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvdXRfZW5jb2RlZF9uZWx0czsgaSsrKQogICAg IHsKLSAgICAgIEhPU1RfV0lERV9JTlQgaW5kZXg7Ci0gICAgICBpZiAoIXNlbFtpXS5pc19jb25z dGFudCAoJmluZGV4KSkKKyAgICAgIEhPU1RfV0lERV9JTlQgc2VsX2luZGV4OworICAgICAgaWYg KCFzZWxbaV0uaXNfY29uc3RhbnQgKCZzZWxfaW5kZXgpKQogCXJldHVybiBOVUxMX1RSRUU7Ci0g ICAgICBpZiAoIUNPTlNUQU5UX0NMQVNTX1AgKGluX2VsdHNbaW5kZXhdKSkKLQluZWVkX2N0b3Ig PSB0cnVlOwotICAgICAgb3V0X2VsdHMucXVpY2tfcHVzaCAodW5zaGFyZV9leHByIChpbl9lbHRz W2luZGV4XSkpOworCisgICAgICAvKiBDb252ZXJ0IHNlbF9pbmRleCB0byBpbmRleCBvZiBlaXRo ZXIgYXJnMCBvciBhcmcxLgorCSBGb3IgZWc6CisJIGFyZzA6IHthMCwgYjAsIGExLCBiMSwgYTEg KyBTLCBiMSArIFMsIC4uLn0KKwkgYXJnMToge2MwLCBkMCwgYzEsIGQxLCBjMSArIFMsIGQxICsg UywgLi4ufQorCSBCb3RoIGhhdmUgbnBhdHRlcm5zID09IDIsIG5lbHRzX3Blcl9wYXR0ZXJuID09 IDMuCisJIFRoZW4gdGhlIGNvbWJpbmVkIHZlY3RvciB3b3VsZCBiZToKKwkge2EwLCBiMCwgYzAs IGQwLCBhMSwgYjEsIGMxLCBkMSwgYTEgKyBTLCBiMSArIFMsIGMxICsgUywgZDEgKyBTLCAuLi4g fQorCSBUaGlzIGNvbWJpbmVkIHZlY3RvciB3aWxsIGhhdmUsCisJIG5wYXR0ZXJucyA9IDIgKiBp bnB1dF9ucGF0dGVybnMgPT0gNC4KKwkgc2VsX2luZGV4IGlzIHVzZWQgdG8gaW5kZXggdGhpcyBh Ym92ZSBjb21iaW5lZCB2ZWN0b3IuCisKKwkgU2luY2Ugd2UgZG9uJ3QgZXhwbGljaXRseSBidWls ZCB0aGUgY29tYmluZWQgdmVjdG9yLCB3ZSBjb252ZXJ0CisJIHNlbF9pbmRleCB0byBjb3JyZXNw b25kaW5nIGluZGV4IGZvciBlaXRoZXIgYXJnMCBvciBhcmcxLgorCSBGb3IgZWcsIGlmIHNlbF9p bmRleCA9PSA3LAorCSBwYXR0ZXJuID0gNyAlIDQgPT0gMy4KKwkgU2luY2UgcGF0dGVybiA+IGlu cHV0X25wYXR0ZXJucywgdGhlIGVsZW0gd2lsbCBjb21lIGZyb206CisJIHBhdHRlcm4gPSAzIC0g aW5wdXRfbnBhdHRlcm5zIGllLCBwYXR0ZXJuIDEgZnJvbSBhcmcxLgorCSBlbGVtX2luZGV4X2lu X3BhdHRlcm4gPSA3IC8gNCA9PSAxLgorCSBTbyB0aGUgYWN0dWFsIGluZGV4IG9mIHRoZSBlbGVt ZW50IGluIGFyZzEgd291bGQgYmU6IDEgKyAoMSAqIDIpID09IDMuCisJIFNvLCBzZWxfaW5kZXgg PT0gNyBjb3JyZXNwb25kcyB0byBhcmcxWzNdLCBpZSwgZDEuICAqLworCisgICAgICB1bnNpZ25l ZCBwYXR0ZXJuID0gc2VsX2luZGV4ICUgKDIgKiBpbnB1dF9ucGF0dGVybnMpOworICAgICAgdW5z aWduZWQgZWxlbV9pbmRleF9pbl9wYXR0ZXJuID0gc2VsX2luZGV4IC8gKDIgKiBpbnB1dF9ucGF0 dGVybnMpOworICAgICAgdHJlZSBhcmc7CisgICAgICBpZiAocGF0dGVybiA8IGlucHV0X25wYXR0 ZXJucykKKwlhcmcgPSBhcmcwOworICAgICAgZWxzZQorCXsKKwkgIGFyZyA9IGFyZzE7CisJICBw YXR0ZXJuIC09IGlucHV0X25wYXR0ZXJuczsKKwl9CisKKyAgICAgIHVuc2lnbmVkIGVsZW1faW5k ZXggPSAoZWxlbV9pbmRleF9pbl9wYXR0ZXJuICogaW5wdXRfbnBhdHRlcm5zKSArIHBhdHRlcm47 CisgICAgICB0cmVlIGVsZW07CisgICAgICBpZiAoVFJFRV9DT0RFIChhcmcpID09IFZFQ1RPUl9D U1QpCisJeworCSAgLyogSWYgYXJnIGlzIGZpeGVkIHdpZHRoIHZlY3RvciwgYW5kIGVsZW1faW5k ZXggZ29lcyBvdXQgb2YgcmFuZ2UsCisJICAgICB0aGVuIHJldHVybiBOVUxMX1RSRUUuICAqLwor CSAgaWYgKFRZUEVfVkVDVE9SX1NVQlBBUlRTIChUUkVFX1RZUEUgKGFyZykpLmlzX2NvbnN0YW50 ICgpCisJICAgICAgJiYgZWxlbV9pbmRleCA+IHZlY3Rvcl9jc3RfZW5jb2RlZF9uZWx0cyAoYXJn KSkKKwkgICAgcmV0dXJuIE5VTExfVFJFRTsKKwkgIGVsZW0gPSB2ZWN0b3JfY3N0X2VsdCAoYXJn LCBlbGVtX2luZGV4KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgZ2NjX2Fzc2VydCAoVFJFRV9D T0RFIChhcmcpID09IENPTlNUUlVDVE9SKTsKKwkgIGlmIChlbGVtX2luZGV4ID49IENPTlNUUlVD VE9SX05FTFRTIChhcmcpKQorCSAgICByZXR1cm4gTlVMTF9UUkVFOworCSAgZWxlbSA9IENPTlNU UlVDVE9SX0VMVCAoYXJnLCBlbGVtX2luZGV4KS0+dmFsdWU7CisJICBpZiAoVkVDVE9SX1RZUEVf UCAoVFJFRV9UWVBFIChlbGVtKSkpCisJICAgIHJldHVybiBOVUxMX1RSRUU7CisJICBuZWVkX2N0 b3IgPSB0cnVlOworCX0KKworICAgICAgb3V0X2VsdHNfYnVpbGRlci5xdWlja19wdXNoICh1bnNo YXJlX2V4cHIgKGVsZW0pKTsKICAgICB9CiAKICAgaWYgKG5lZWRfY3RvcikKICAgICB7CiAgICAg ICB2ZWM8Y29uc3RydWN0b3JfZWx0LCB2YV9nYz4gKnY7Ci0gICAgICB2ZWNfYWxsb2MgKHYsIG5l bHRzKTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBuZWx0czsgaSsrKQotCUNPTlNUUlVDVE9SX0FQ UEVORF9FTFQgKHYsIE5VTExfVFJFRSwgb3V0X2VsdHNbaV0pOworICAgICAgdmVjX2FsbG9jICh2 LCBvdXRfZW5jb2RlZF9uZWx0cyk7CisKKyAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBv dXRfZW5jb2RlZF9uZWx0czsgaSsrKQorCUNPTlNUUlVDVE9SX0FQUEVORF9FTFQgKHYsIE5VTExf VFJFRSwgb3V0X2VsdHNfYnVpbGRlcltpXSk7CiAgICAgICByZXR1cm4gYnVpbGRfY29uc3RydWN0 b3IgKHR5cGUsIHYpOwogICAgIH0KLSAgZWxzZQotICAgIHJldHVybiBvdXRfZWx0cy5idWlsZCAo KTsKKworICByZXR1cm4gb3V0X2VsdHNfYnVpbGRlci5idWlsZCAoKTsKIH0KIAogLyogVHJ5IHRv IGZvbGQgYSBwb2ludGVyIGRpZmZlcmVuY2Ugb2YgdHlwZSBUWVBFIHR3byBhZGRyZXNzIGV4cHJl c3Npb25zIG9mCkBAIC0xNjkxMiw2ICsxNjk4NSw5MSBAQCB0ZXN0X3ZlY19kdXBsaWNhdGVfZm9s ZGluZyAoKQogICBBU1NFUlRfVFJVRSAob3BlcmFuZF9lcXVhbF9wIChkdXA1X2V4cHIsIGR1cDVf Y3N0LCAwKSk7CiB9CiAKK3N0YXRpYyB0cmVlCitidWlsZF92ZWNfaW50X2NzdCAodW5zaWduZWQg bnBhdHRlcm5zLCB1bnNpZ25lZCBuZWx0c19wZXJfcGF0dGVybiwKKwkJICAgaW50ICplbmNvZGVk X2VsZW1zKQoreworICBzY2FsYXJfaW50X21vZGUgaW50X21vZGUgPSBTQ0FMQVJfSU5UX1RZUEVf TU9ERSAoaW50ZWdlcl90eXBlX25vZGUpOworICBtYWNoaW5lX21vZGUgdm1vZGUgPSB0YXJnZXRt LnZlY3Rvcml6ZS5wcmVmZXJyZWRfc2ltZF9tb2RlIChpbnRfbW9kZSk7CisgIHBvbHlfdWludDY0 IG51bml0cyA9IEdFVF9NT0RFX05VTklUUyAodm1vZGUpOworICB0cmVlIHZlY3R5cGUgPSBidWls ZF92ZWN0b3JfdHlwZSAoaW50ZWdlcl90eXBlX25vZGUsIG51bml0cyk7CisKKyAgdHJlZV92ZWN0 b3JfYnVpbGRlciBidWlsZGVyICh2ZWN0eXBlLCBucGF0dGVybnMsIG5lbHRzX3Blcl9wYXR0ZXJu KTsKKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5wYXR0ZXJucyAqIG5lbHRzX3Blcl9wYXR0 ZXJuOyBpKyspCisgICAgYnVpbGRlci5xdWlja19wdXNoIChidWlsZF9pbnRfY3N0IChpbnRlZ2Vy X3R5cGVfbm9kZSwgZW5jb2RlZF9lbGVtc1tpXSkpOworICByZXR1cm4gYnVpbGRlci5idWlsZCAo KTsKK30KKworc3RhdGljIHZvaWQKK3ZwZV92ZXJpZnlfcmVzICh0cmVlIHJlcywgdW5zaWduZWQg bnBhdHRlcm5zLCB1bnNpZ25lZCBuZWx0c19wZXJfcGF0dGVybiwKKwkJaW50ICplbmNvZGVkX2Vs ZW1zKQoreworICBBU1NFUlRfVFJVRSAocmVzICE9IE5VTExfVFJFRSk7CisgIEFTU0VSVF9UUlVF IChWRUNUT1JfQ1NUX05QQVRURVJOUyAocmVzKSA9PSBucGF0dGVybnMpOworICBBU1NFUlRfVFJV RSAoVkVDVE9SX0NTVF9ORUxUU19QRVJfUEFUVEVSTiAocmVzKSA9PSBuZWx0c19wZXJfcGF0dGVy bik7CisKKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5wYXR0ZXJucyAqIG5lbHRzX3Blcl9w YXR0ZXJuOyBpKyspCisgICAgQVNTRVJUX1RSVUUgKHdpOjp0b193aWRlIChWRUNUT1JfQ1NUX0VM VCAocmVzLCBpKSkKKwkJCSAgICAgID09IGVuY29kZWRfZWxlbXNbaV0pOworfQorCitzdGF0aWMg dm9pZAordGVzdF92ZWNfcGVybV92bGFfZm9sZGluZyAoKQoreworICAvKiBGb3IgYWxsIGNhc2Vz CisgICAgIGFyZzA6IHsxLCAxMSwgMjEsIDMxLCAyLCAxMiwgMjIsIDMyLCAzLCAxMywgMjMsIDMz LCAuLi59LCBucGF0dGVybnMgPT0gNCwgbmVsdHNfcGVyX3BhdHRlcm4gPT0gMy4KKyAgICAgYXJn MTogezQxLCA1MSwgNjEsIDcxLCA0MiwgNTIsIDYyLCA3MiwgNDMsIDUzLCA2MywgNzMgLi4ufSwg bnBhdHRlcm5zID09IDQsIG5lbHRzX3Blcl9wYXR0ZXJuID09IDMuICAqLworCisgIGludCBhcmcw X2VsZW1zW10gPSB7IDEsIDExLCAyMSwgMzEsIDIsIDEyLCAyMiwgMzIsIDMsIDEzLCAyMywgMzMg fTsKKyAgdHJlZSBhcmcwID0gYnVpbGRfdmVjX2ludF9jc3QgKDQsIDMsIGFyZzBfZWxlbXMpOwor CisgIGludCBhcmcxX2VsZW1zW10gPSB7IDQxLCA1MSwgNjEsIDcxLCA0MiwgNTIsIDYyLCA3Miwg NDMsIDUzLCA2MywgNzMgfTsKKyAgdHJlZSBhcmcxID0gYnVpbGRfdmVjX2ludF9jc3QgKDQsIDMs IGFyZzFfZWxlbXMpOworCisgIGlmIChUWVBFX1ZFQ1RPUl9TVUJQQVJUUyAoVFJFRV9UWVBFIChh cmcwKSkuaXNfY29uc3RhbnQgKCkKKyAgICAgIHx8IFRZUEVfVkVDVE9SX1NVQlBBUlRTIChUUkVF X1RZUEUgKGFyZzEpKS5pc19jb25zdGFudCAoKSkKKyAgICByZXR1cm47CisKKyAgLyogQ2FzZSAx OiBEdXAgbWFzayBzZXF1ZW5jZS4KKyAgICAgbWFzayA9IHswLCA5LCAzLCAxMSwgLi4ufSwgbnBh dHRlcm5zID09IDQsIG5lbHRzX3Blcl9wYXR0ZXJuID09IDEuCisgICAgIGV4cGVjdGVkIHJlc3Vs dDogezEsIDIxLCAzMSwgMzIsIC4uLn0sIG5wYXR0ZXJucyA9PSA0LCBuZWx0c19wZXJfcGF0dGVy biA9PSAxLiAgKi8KKyAgeworICAgIGludCBtYXNrX2VsZW1zW10gPSB7MCwgOSwgMywgMTJ9Owor ICAgIHRyZWUgbWFzayA9IGJ1aWxkX3ZlY19pbnRfY3N0ICg0LCAxLCBtYXNrX2VsZW1zKTsKKyAg ICBpZiAoVFlQRV9WRUNUT1JfU1VCUEFSVFMgKFRSRUVfVFlQRSAobWFzaykpLmlzX2NvbnN0YW50 ICgpKQorICAgICAgcmV0dXJuOworICAgIHRyZWUgcmVzID0gZm9sZF90ZXJuYXJ5IChWRUNfUEVS TV9FWFBSLCBUUkVFX1RZUEUgKGFyZzApLCBhcmcwLCBhcmcxLCBtYXNrKTsKKyAgICBpbnQgcmVz X2VuY29kZWRfZWxlbXNbXSA9IHsxLCAxMiwgMzEsIDQyfTsKKyAgICB2cGVfdmVyaWZ5X3JlcyAo cmVzLCA0LCAxLCByZXNfZW5jb2RlZF9lbGVtcyk7CisgIH0KKworICAvKiBDYXNlIDI6CisgICAg IG1hc2sgPSB7MCwgNCwgMSwgNSwgOCwgMTIsIDksIDEzIC4uLn0sIG5wYXR0ZXJucyA9PSA0LCBu ZWx0c19wZXJfcGF0dGVybiA9PSAyLgorICAgICBleHBlY3RlZCByZXN1bHQ6IHsxLCA0MSwgMTEs IDUxLCAyLCAxMiwgNDIsIDUyLCAuLi59LCBucGF0dGVybnMgPT0gNCwgbmVsdHNfcGVyX3BhdHRl cm4gPT0gMi4gICovCisgIHsKKyAgICBpbnQgbWFza19lbGVtc1tdID0gezAsIDQsIDEsIDUsIDgs IDEyLCA5LCAxM307CisgICAgdHJlZSBtYXNrID0gYnVpbGRfdmVjX2ludF9jc3QgKDQsIDIsIG1h c2tfZWxlbXMpOworICAgIGlmIChUWVBFX1ZFQ1RPUl9TVUJQQVJUUyAoVFJFRV9UWVBFIChtYXNr KSkuaXNfY29uc3RhbnQgKCkpCisgICAgICByZXR1cm47CisgICAgdHJlZSByZXMgPSBmb2xkX3Rl cm5hcnkgKFZFQ19QRVJNX0VYUFIsIFRSRUVfVFlQRSAoYXJnMCksIGFyZzAsIGFyZzEsIG1hc2sp OworICAgIGludCByZXNfZW5jb2RlZF9lbGVtc1tdID0gezEsIDQxLCAxMSwgNTEsIDIsIDQyLCAx MiwgNTJ9OworICAgIHZwZV92ZXJpZnlfcmVzIChyZXMsIDQsIDIsIHJlc19lbmNvZGVkX2VsZW1z KTsKKyAgfQorCisgIC8qIENhc2UgMzogU3RlcHBlZCBtYXNrIHNlcXVlbmNlLgorICAgICBtYXNr ID0gezAsIDQsIDEsIDUsIDgsIDEyLCA5LCAxMywgMTYsIDIwLCAxNywgMjF9LCBucGF0dGVybnMg PT0gNCwgbmVsdHNfcGVyX3BhdHRlcm4gPT0gMy4KKyAgICAgZXhwZWN0ZWQgcmVzdWx0ID0gezEs IDQxLCAxMSwgNTEsIDIsIDQyLCAxMiwgNTIsIDMsIDQzLCAxMywgNTMgLi4ufSwgbnBhdHRlcm5z ID09IDQsIG5lbHRzX3Blcl9wYXR0ZXJuID09IDMuICAqLworICB7CisgICAgaW50IG1hc2tfZWxl bXNbXSA9IHswLCA0LCAxLCA1LCA4LCAxMiwgOSwgMTMsIDE2LCAyMCwgMTcsIDIxfTsKKyAgICB0 cmVlIG1hc2sgPSBidWlsZF92ZWNfaW50X2NzdCAoNCwgMywgbWFza19lbGVtcyk7CisgICAgaWYg KFRZUEVfVkVDVE9SX1NVQlBBUlRTIChUUkVFX1RZUEUgKG1hc2spKS5pc19jb25zdGFudCAoKSkK KyAgICAgIHJldHVybjsKKyAgICB0cmVlIHJlcyA9IGZvbGRfdGVybmFyeSAoVkVDX1BFUk1fRVhQ UiwgVFJFRV9UWVBFIChhcmcwKSwgYXJnMCwgYXJnMSwgbWFzayk7CisgICAgaW50IHJlc19lbmNv ZGVkX2VsZW1zW10gPSB7MSwgNDEsIDExLCA1MSwgMiwgNDIsIDEyLCA1MiwgMywgNDMsIDEzLCA1 M307CisgICAgdnBlX3ZlcmlmeV9yZXMgKHJlcywgNCwgMywgcmVzX2VuY29kZWRfZWxlbXMpOwor ICB9Cit9CisKIC8qIFJ1biBhbGwgb2YgdGhlIHNlbGZ0ZXN0cyB3aXRoaW4gdGhpcyBmaWxlLiAg Ki8KIAogdm9pZApAQCAtMTY5MjAsNiArMTcwNzgsNyBAQCBmb2xkX2NvbnN0X2NjX3Rlc3RzICgp CiAgIHRlc3RfYXJpdGhtZXRpY19mb2xkaW5nICgpOwogICB0ZXN0X3ZlY3Rvcl9mb2xkaW5nICgp OwogICB0ZXN0X3ZlY19kdXBsaWNhdGVfZm9sZGluZyAoKTsKKyAgdGVzdF92ZWNfcGVybV92bGFf Zm9sZGluZyAoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ugc2VsZnRlc3QK --0000000000005ff77105e66f2846--