From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg1-x52e.google.com (mail-pg1-x52e.google.com [IPv6:2607:f8b0:4864:20::52e]) by sourceware.org (Postfix) with ESMTPS id 629BD3858D20 for ; Tue, 18 Jul 2023 04:47:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 629BD3858D20 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com Received: by mail-pg1-x52e.google.com with SMTP id 41be03b00d2f7-557790487feso4057703a12.0 for ; Mon, 17 Jul 2023 21:47:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1689655672; x=1692247672; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=YXnJkVd62svg79QIEkeOVFqQwSihElh/Vqw6ziGTCOc=; b=RJCVgpoQfkeTz8GMPVvwr4yhp0/a+PsuvHmHxk/XPFISe1nnvacVITpj4HcsvkcEVY /mR8D86ztf5sNSezsZVEMA+82kqk8jClnCr9V1Bo2gLD6SgwkvmFGCA5JHXB5+uV5vXL LeBxYnmdTaprWhCMMTPdBm36S2B9ZbO+JTSCuUIZJ2IDi+nr2MK4bKV6kI6WM8wAckvE Zo2k8T8ulPvakXC+oTYrRzUQG75n/gcUTqlV4cCEjPmbq25m/tSp4qZJ3Lea6Uu7C2Id FhmujqL8k+HNFupX65hxuJuyHF1c0hjRoK7xRu1fQaiAaFy9cQghaP/lVxCcnq069lU6 E5wQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689655672; x=1692247672; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=YXnJkVd62svg79QIEkeOVFqQwSihElh/Vqw6ziGTCOc=; b=iTKKkZkbNZVLJ8TohGOJbYhjgNSFf7iFiUbKdMXi97cqMPyn75+wc1J7ALAB/LJTiM E5mtpoeVvpllxBDlHVdIOmlyddjCHoyahDEyvJ4ARMTwfJsLopYlL6d79DV+bKU8TO6r gFk6utl4O0GoOoMNX2EkaOf13LbZpaBD3C6JPeZnRIP/AuEFFD+2MpMSsWhQivi6ZE/9 N7p3zwESHeniwMjw1WJCsswE83hSFEguSwSSM3rLfSpnH1nSUbbX4OkLY+Jcnbwii6jj t6f0a4AeFDlCNXGVWnZWJ2OH/qsBdNBEWn8hejDTW3fpV410WSOh0vLVFF27/oYC2rDp 4dgw== X-Gm-Message-State: ABy/qLY0DO2WkKYGDvRsbQNyBxXQbxDAxyNAs295idM5f0FkFwdLKnGX sUPtng3Cu7PTgRNNP93aH8eKl4djevwYvDu8A0HanVODcHufpqFgbLI= X-Google-Smtp-Source: APBJJlEZgWdBDUrlsQRKoLd3OezSmqi0+wz/TuDDMcU+ZNqI2X3Oir6GaHOcoURLHoG6sLjxAdIAHgN33uBAnnalSHQ= X-Received: by 2002:a17:90b:4a43:b0:262:e912:5c75 with SMTP id lb3-20020a17090b4a4300b00262e9125c75mr12579124pjb.13.1689655672023; Mon, 17 Jul 2023 21:47:52 -0700 (PDT) MIME-Version: 1.0 From: Joern Rennecke Date: Tue, 18 Jul 2023 05:47:40 +0100 Message-ID: Subject: cpymem for RISCV with v extension To: GCC Patches Content-Type: multipart/mixed; boundary="0000000000001fe0750600bb9e9c" X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,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 List-Id: --0000000000001fe0750600bb9e9c Content-Type: text/plain; charset="UTF-8" As discussed on last week's patch call, this patch uses either a straight copy or an opaque pattern that emits the loop as assembly to optimize cpymem for the 'v' extension. I used Ju-Zhe Zhong's patch - starting in git with: Author: zhongjuzhe <66454988+zhongjuzhe@users.noreply.github.com> Date: Mon Mar 21 14:20:42 2022 +0800 PR for RVV support using splitted small chunks (#334) as a starting point, even though not all that much of the original code remains. Regression tested on x86_64-pc-linux-gnu X riscv-sim riscv-sim/-march=rv32imafdcv_zicsr_zifencei_zfh_zba_zbb_zbc_zbs_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/-mabi=ilp32f riscv-sim/-march=rv32imafdcv_zicsr_zifencei_zfh_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/-mabi=ilp32 riscv-sim/-march=rv32imafdcv_zicsr_zifencei_zfh_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/-mabi=ilp32f riscv-sim/-march=rv32imfdcv_zicsr_zifencei_zfh_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/-mabi=ilp32 riscv-sim/-march=rv64imafdcv_zicsr_zifencei_zfh_zba_zbb_zbc_zbs_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/-mabi=lp64d riscv-sim/-march=rv64imafdcv_zicsr_zifencei_zfh_zba_zbb_zbs_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/-mabi=lp64d riscv-sim/-march=rv64imafdcv_zicsr_zifencei_zfh_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/-mabi=lp64d --0000000000001fe0750600bb9e9c Content-Type: text/plain; charset="US-ASCII"; name="cpymem-diff-20230718.txt" Content-Disposition: attachment; filename="cpymem-diff-20230718.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lk7t26co0 MjAyMy0wNy0xMiAgSnUtWmhlIFpob25nIDxqdXpoZS56aG9uZ0ByaXZhaS5haT4KICAgICAgICAg ICAgSm9lcm4gUmVubmVja2UgIDxqb2Vybi5yZW5uZWNrZUBlbWJlY29zbS5jb20+CgoJKiBjb25m aWcvcmlzY3YvcmlzY3YtcHJvdG9zLmggKHJpc2N2X3ZlY3Rvcjo6ZXhwYW5kX2Jsb2NrX21vdmUp OgoJRGVjbGFyZS4KCSogY29uZmlnL3Jpc2N2L3Jpc2N2LXYuY2MgKHJpc2N2X3ZlY3Rvcjo6ZXhw YW5kX2Jsb2NrX21vdmUpOgoJTmV3IGZ1bmN0aW9uLgoJKiBjb25maWcvcmlzY3YvcmlzY3YubWQg KGNweW1lbXNpKTogVXNlIHJpc2N2X3ZlY3Rvcjo6ZXhwYW5kX2Jsb2NrX21vdmUuCgkqIGNvbmZp Zy9yaXNjdi92ZWN0b3IubWQgKEBjcHltZW1fc3RyYWlnaHQ8UDptb2RlPjxWX1dIT0xFOm1vZGU+ KToKCU5ldyBkZWZpbmVfaW5zbiBwYXR0ZXJucy4KCShAY3B5bWVtX2xvb3A8UDptb2RlPjxWX1dI T0xFOm1vZGU+KTogTGlrZXdpc2UuCgkoQGNweW1lbV9sb29wX2Zhc3Q8UDptb2RlPjxWX1dIT0xF Om1vZGU+KTogTGlrZXdpc2UuCgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi1w cm90b3MuaCBiL2djYy9jb25maWcvcmlzY3YvcmlzY3YtcHJvdG9zLmgKaW5kZXggMTZmYjhkYWJj YTAuLjQwOTY1YTAwNjgxIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXByb3Rv cy5oCisrKyBiL2djYy9jb25maWcvcmlzY3YvcmlzY3YtcHJvdG9zLmgKQEAgLTMwMSw2ICszMDEs NyBAQCBib29sIHNsaWRlMV9zZXc2NF9oZWxwZXIgKGludCwgbWFjaGluZV9tb2RlLCBtYWNoaW5l X21vZGUsCiAJCQkgIG1hY2hpbmVfbW9kZSwgcnR4ICopOwogcnR4IGdlbl9hdmxfZm9yX3NjYWxh cl9tb3ZlIChydHgpOwogdm9pZCBleHBhbmRfdHVwbGVfbW92ZSAocnR4ICopOworYm9vbCBleHBh bmRfYmxvY2tfbW92ZSAocnR4LCBydHgsIHJ0eCk7CiBtYWNoaW5lX21vZGUgcHJlZmVycmVkX3Np bWRfbW9kZSAoc2NhbGFyX21vZGUpOwogb3B0X21hY2hpbmVfbW9kZSBnZXRfbWFza19tb2RlICht YWNoaW5lX21vZGUpOwogdm9pZCBleHBhbmRfdmVjX3NlcmllcyAocnR4LCBydHgsIHJ0eCk7CmRp ZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXYuY2MgYi9nY2MvY29uZmlnL3Jpc2N2 L3Jpc2N2LXYuY2MKaW5kZXggYjQ4ODRhMzA4NzIuLmU2MTExMGZhM2FkIDEwMDY0NAotLS0gYS9n Y2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXYuY2MKKysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi12 LmNjCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAidG0tY29uc3Rycy5oIgogI2luY2x1ZGUg InJ0eC12ZWN0b3ItYnVpbGRlci5oIgogI2luY2x1ZGUgInRhcmdob29rcy5oIgorI2luY2x1ZGUg InByZWRpY3QuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHJpc2N2X3ZlY3RvcjsKIApAQCAtMjE2NCw2 ICsyMTY1LDE5MSBAQCBleHBhbmRfdHVwbGVfbW92ZSAocnR4ICpvcHMpCiAgICAgfQogfQogCisv KiBVc2VkIGJ5IGNweW1lbXNpIGluIHJpc2N2Lm1kIC4gICovCisKK2Jvb2wKK2V4cGFuZF9ibG9j a19tb3ZlIChydHggZGVzdF9pbiwgcnR4IHNyY19pbiwgcnR4IGxlbmd0aF9pbikKK3sKKyAgLyoK KyAgICBtZW1jcHk6CisJbXYgYTMsIGEwICAgICAgICAgICAgICAgICAgICAgICAjIENvcHkgZGVz dGluYXRpb24KKyAgICBsb29wOgorCXZzZXR2bGkgdDAsIGEyLCBlOCwgbTgsIHRhLCBtYSAgIyBW ZWN0b3JzIG9mIDhiCisJdmxlOC52IHYwLCAoYTEpICAgICAgICAgICAgICAgICAjIExvYWQgYnl0 ZXMKKwlhZGQgYTEsIGExLCB0MCAgICAgICAgICAgICAgICAgICMgQnVtcCBwb2ludGVyCisJc3Vi IGEyLCBhMiwgdDAgICAgICAgICAgICAgICAgICAjIERlY3JlbWVudCBjb3VudAorCXZzZTgudiB2 MCwgKGEzKSAgICAgICAgICAgICAgICAgIyBTdG9yZSBieXRlcworCWFkZCBhMywgYTMsIHQwICAg ICAgICAgICAgICAgICAgIyBCdW1wIHBvaW50ZXIKKwlibmV6IGEyLCBsb29wICAgICAgICAgICAg ICAgICAgICMgQW55IG1vcmU/CisJcmV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJl dHVybgorICAqLworICBpZiAoIVRBUkdFVF9WRUNUT1IpCisgICAgcmV0dXJuIGZhbHNlOworICBI T1NUX1dJREVfSU5UIHBvdGVudGlhbF9ldworICAgID0gKE1JTiAoTUlOIChNRU1fQUxJR04gKHNy Y19pbiksIE1FTV9BTElHTiAoZGVzdF9pbikpLCBCSVRTX1BFUl9XT1JEKQorICAgICAgIC8gQklU U19QRVJfVU5JVCk7CisgIG1hY2hpbmVfbW9kZSB2bW9kZSA9IFZPSURtb2RlOworICBib29sIG5l ZWRfbG9vcCA9IHRydWU7CisgIGJvb2wgc2l6ZV9wID0gb3B0aW1pemVfZnVuY3Rpb25fZm9yX3Np emVfcCAoY2Z1bik7CisgIHJ0eCBzcmMsIGRzdDsKKyAgcnR4IGVuZCA9IGdlbl9yZWdfcnR4IChQ bW9kZSk7CisgIHJ0eCB2ZWM7CisgIHJ0eCBsZW5ndGhfcnR4ID0gbGVuZ3RoX2luOworCisgIGlm IChDT05TVF9JTlRfUCAobGVuZ3RoX2luKSkKKyAgICB7CisgICAgICBIT1NUX1dJREVfSU5UIGxl bmd0aCA9IElOVFZBTCAobGVuZ3RoX2luKTsKKworICAgIC8qIEJ5IHVzaW5nIExNVUw9OCwgd2Ug Y2FuIGNvcHkgYXMgbWFueSBieXRlcyBpbiBvbmUgZ28gYXMgdGhlcmUKKyAgICAgICBhcmUgYml0 cyBpbiBhIHZlY3RvciByZWdpc3Rlci4gIElmIHRoZSBlbnRpcmUgYmxvY2sgdGh1cyBmaXRzLAor ICAgICAgIHdlIGRvbid0IG5lZWQgYSBsb29wLiAgKi8KKyAgICBpZiAobGVuZ3RoIDw9IFRBUkdF VF9NSU5fVkxFTikKKyAgICAgIHsKKwluZWVkX2xvb3AgPSBmYWxzZTsKKworCS8qIElmIGEgc2lu Z2xlIHNjYWxhciBsb2FkIC8gc3RvcmUgcGFpciBjYW4gZG8gdGhlIGpvYiwgbGVhdmUgaXQKKwkg ICB0byB0aGUgc2NhbGFyIGNvZGUgdG8gZG8gdGhhdC4gICovCisKKwlpZiAocG93MnBfaHdpIChs ZW5ndGgpICYmIGxlbmd0aCA8PSBwb3RlbnRpYWxfZXcpCisJICByZXR1cm4gZmFsc2U7CisgICAg ICB9CisKKyAgICAgIC8qIEZpbmQgdGhlIHZlY3RvciBtb2RlIHRvIHVzZS4gIFVzaW5nIHRoZSBs YXJnZXN0IHBvc3NpYmxlIGVsZW1lbnQKKwkgc2l6ZSBpcyBsaWtlbHkgdG8gZ2l2ZSBzbWFsbGVy IGNvbnN0YW50cywgYW5kIHRodXMgcG90ZW50aWFsbHkKKwkgcmVkdWNpbmcgY29kZSBzaXplLiAg SG93ZXZlciwgaWYgd2UgbmVlZCBhIGxvb3AsIHdlIG5lZWQgdG8gdXBkYXRlCisJIHRoZSBwb2lu dGVycywgYW5kIHRoYXQgaXMgbW9yZSBjb21wbGljYXRlZCB3aXRoIGEgbGFyZ2VyIGVsZW1lbnQK Kwkgc2l6ZSwgdW5sZXNzIHdlIHVzZSBhbiBpbW1lZGlhdGUsIHdoaWNoIHByZXZlbnRzIHVzIGZy b20gZHluYW1pY2FsbHkKKwkgdXNpbmcgdGhlIGxhcmdldHMgdHJhbnNmZXIgc2l6ZSB0aGF0IHRo ZSBoYXJ0IHN1cHBvcnRzLiAgQW5kIHRoZW4sCisJIHVubGVzcyB3ZSBrbm93IHRoZSAqZXhhY3Qq IHZlY3RvciBzaXplIG9mIHRoZSBoYXJ0LCB3ZSdkIG5lZWQKKwkgbXVsdGlwbGUgdnNldHZsaSAv IGJyYW5jaCBzdGF0ZW1lbnRzLCBzbyBpdCdzIG5vdCBldmVuIGEgc2l6ZSB3aW4uCisJIElmLCBp biB0aGUgZnV0dXJlLCB3ZSBmaW5kIGFuIFJJU0NWLVYgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBz bG93ZXIKKwkgZm9yIHNtYWxsIGVsZW1lbnQgd2lkdGhzLCB3ZSBtaWdodCBhbGxvdyBsYXJnZXIg ZWxlbWVudCB3aWR0aHMgZm9yCisJIGxvb3BzIHRvby4gICovCisgICAgICBpZiAobmVlZF9sb29w KQorCXBvdGVudGlhbF9ldyA9IDE7CisgICAgICBmb3IgKDsgcG90ZW50aWFsX2V3OyBwb3RlbnRp YWxfZXcgPj49IDEpCisJeworCSAgc2NhbGFyX2ludF9tb2RlIGVsZW1fbW9kZTsKKwkgIHVuc2ln bmVkIEhPU1RfV0lERV9JTlQgYml0cyA9IHBvdGVudGlhbF9ldyAqIEJJVFNfUEVSX1VOSVQ7CisJ ICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHBlcl9pdGVyOworCSAgSE9TVF9XSURFX0lOVCBudW5p dHM7CisKKwkgIGlmIChuZWVkX2xvb3ApCisJICAgIHBlcl9pdGVyID0gVEFSR0VUX01JTl9WTEVO OworCSAgZWxzZQorCSAgICBwZXJfaXRlciA9IGxlbmd0aDsKKwkgIG51bml0cyA9IHBlcl9pdGVy IC8gcG90ZW50aWFsX2V3OworCisJICAvKiBVbmxlc3Mgd2UgZ2V0IGFuIGltcGxlbWVudGF0aW9u IHRoYXQncyBzbG93IGZvciBzbWFsbCBlbGVtZW50CisJICAgICBzaXplIC8gbm9uLXdvcmQtYWxp Z25lZCBhY2Nlc3Nlcywgd2UgYXNzdW1lIHRoYXQgdGhlIGhhcmR3YXJlCisJICAgICBoYW5kbGVz IHRoaXMgd2VsbCwgYW5kIHdlIGRvbid0IHdhbnQgdG8gY29tcGxpY2F0ZSB0aGUgY29kZQorCSAg ICAgd2l0aCBzaGlmdGluZyB3b3JkIGNvbnRlbnRzIGFyb3VuZCBvciBoYW5kbGluZyBleHRyYSBi eXRlcyBhdAorCSAgICAgdGhlIHN0YXJ0IGFuZC9vciBlbmQuICBTbyB3ZSB3YW50IHRoZSB0b3Rh bCB0cmFuc2ZlciBzaXplIGFuZAorCSAgICAgYWxpZ25lbW50IHRvIGZpdCB3aXRoIHRoZSBlbGVt ZW50IHNpemUuICAqLworCSAgaWYgKGxlbmd0aCAlIHBvdGVudGlhbF9ldyAhPSAwCisJICAgICAg fHwgIWludF9tb2RlX2Zvcl9zaXplIChiaXRzLCAwKS5leGlzdHMgKCZlbGVtX21vZGUpKQorCSAg ICBjb250aW51ZTsKKwkgIC8qIEZpbmQgdGhlIG1vZGUgdG8gdXNlIGZvciB0aGUgY29weSBpbnNp ZGUgdGhlIGxvb3AgLSBvciB0aGUKKwkgICAgIHNvbGUgY29weSwgaWYgdGhlcmUgaXMgbm8gbG9v cC4gICovCisJICBpZiAoIW5lZWRfbG9vcCkKKwkgICAgeworCSAgICAgIC8qIFRyeSBpZiB3ZSBo YXZlIGFuIGV4YWN0IG1vZGUgZm9yIHRoZSBjb3B5LiAgKi8KKwkgICAgICBpZiAoZ2V0X3ZlY3Rv cl9tb2RlIChlbGVtX21vZGUsIG51bml0cykuZXhpc3RzICgmdm1vZGUpKQorCQlicmVhazsKKwkg ICAgICAvKiBXZSBtaWdodCBoYXZlIGFuIG9kZCB0cmFuc2ZlciBzaXplLiAgVHJ5IHRvIHJvdW5k IGl0IHVwIHRvCisJCSBhIHBvd2VyIG9mIHR3byB0byBnZXQgYSB2YWxpZCB2ZWN0b3IgbW9kZSBm b3IgYSBjbG9iYmVyLiAgKi8KKwkgICAgICBmb3IgKG51bml0cyA9IDFVTEwgPDwgY2VpbF9sb2cy IChudW5pdHMpOworCQkgICBudW5pdHMgPD0gVEFSR0VUX01JTl9WTEVOOworCQkgICBudW5pdHMg PDw9IDEpCisJCWlmIChnZXRfdmVjdG9yX21vZGUgKGVsZW1fbW9kZSwgbnVuaXRzKS5leGlzdHMg KCZ2bW9kZSkpCisJCSAgYnJlYWs7CisKKwkgICAgICBpZiAodm1vZGUgIT0gVk9JRG1vZGUpCisJ CWJyZWFrOworCSAgICB9CisKKwkgIC8vIFRoZSBWTngqP0kgbW9kZXMgaGF2ZSBhIGZhY3RvciBv ZiByaXNjdl92ZWN0b3JfY2h1bmtzIGZvciBudW5pdHMuCisJICBpZiAoZ2V0X3ZlY3Rvcl9tb2Rl IChlbGVtX21vZGUsCisJCQkgICAgICAgVEFSR0VUX01JTl9WTEVOIC8gcG90ZW50aWFsX2V3CisJ CQkgICAgICAgKiByaXNjdl92ZWN0b3JfY2h1bmtzKS5leGlzdHMgKCZ2bW9kZSkpCisJICAgIGJy ZWFrOworCisJICAvKiBXZSBtYXkgZ2V0IGhlcmUgaWYgd2UgdHJpZWQgYW4gZWxlbWVudCBzaXpl IHRoYXQncyBsYXJnZXIgdGhhbgorCSAgICAgdGhlIGhhcmR3YXJlIHN1cHBvcnRzLCBidXQgd2Ug c2hvdWxkIGF0IGxlYXN0IGZpbmQgYSBzdWl0YWJsZQorCSAgICAgYnl0ZSB2ZWN0b3IgbW9kZS4g ICovCisJICBnY2NfYXNzZXJ0IChwb3RlbnRpYWxfZXcgPiAxKTsKKwl9CisgICAgICBpZiAocG90 ZW50aWFsX2V3ID4gMSkKKwlsZW5ndGhfcnR4ID0gR0VOX0lOVCAobGVuZ3RoIC8gcG90ZW50aWFs X2V3KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB2bW9kZSA9IChnZXRfdmVjdG9yX21v ZGUgKFFJbW9kZSwgVEFSR0VUX01JTl9WTEVOICogcmlzY3ZfdmVjdG9yX2NodW5rcykKKwkgICAg ICAgLnJlcXVpcmUgKCkpOworICAgIH0KKworICAvKiBBIG1lbWNweSBsaWJjYWxsIGluIHRoZSB3 b3JzdCBjYXNlIHRha2VzIDMgaW5zdHJ1Y3Rpb25zIHRvIHByZXBhcmUgdGhlCisgICAgIGFyZ3Vt ZW50cyArIDEgZm9yIHRoZSBjYWxsLiAgV2hlbiBSVlYgc2hvdWxkIHRha2UgNyBpbnN0cnVjdGlv bnMgYW5kCisgICAgIHdlJ3JlIG9wdGltaXppbmcgZm9yIHNpemUgYSBsaWJjYWxsIG1heSBiZSBw cmVmZXJhYmxlLiAgKi8KKyAgaWYgKHNpemVfcCAmJiBuZWVkX2xvb3ApCisgICAgcmV0dXJuIGZh bHNlOworCisgIC8qIElmIHdlIGRvbid0IG5lZWQgYSBsb29wIGFuZCBoYXZlIGEgc3VpdGFibGUg bW9kZSB0byBkZXNjcmliZSB0aGUgc2l6ZSwKKyAgICAganVzdCBkbyBhIGxvYWQgLyBzdG9yZSBw YWlyIGFuZCBsZWF2ZSBpdCB1cCB0byB0aGUgbGF0ZXIgbGF6eSBjb2RlCisgICAgIG1vdGlvbiBw YXNzIHRvIGluc2VydCB0aGUgYXBwcm9wcmlhdGUgdnNldHZsaS4gICovCisgIGlmICghbmVlZF9s b29wICYmIGtub3duX2VxIChHRVRfTU9ERV9TSVpFICh2bW9kZSksIElOVFZBTCAobGVuZ3RoX2lu KSkpCisgICAgeworICAgICAgdmVjID0gZ2VuX3JlZ19ydHggKHZtb2RlKTsKKyAgICAgIHNyYyA9 IGNoYW5nZV9hZGRyZXNzIChzcmNfaW4sIHZtb2RlLCBOVUxMKTsKKyAgICAgIGRzdCA9IGNoYW5n ZV9hZGRyZXNzIChkZXN0X2luLCB2bW9kZSwgTlVMTCk7CisgICAgICBlbWl0X21vdmVfaW5zbiAo dmVjLCBzcmMpOworICAgICAgZW1pdF9tb3ZlX2luc24gKGRzdCwgdmVjKTsKKyAgICAgIHJldHVy biB0cnVlOworICAgIH0KKworICBpZiAoQ09OU1RfUE9MWV9JTlRfUCAobGVuZ3RoX3J0eCkpCisg ICAgeworICAgICAgaWYgKEdFVF9NT0RFIChsZW5ndGhfcnR4KSAhPSBQbW9kZSkKKwl7CisJICBw b2x5X2ludDY0IHZhbHVlID0gcnR4X3RvX3BvbHlfaW50NjQgKGxlbmd0aF9ydHgpOworCSAgZW1p dF9pbnNuIChnZW5fcnR4X1NFVCAoZW5kLAorCQkJCSAgZ2VuX2ludF9tb2RlIChwb2x5X2ludDY0 ICh2YWx1ZS5jb2VmZnNbMF0sCisJCQkJCQkJICAgIHZhbHVlLmNvZWZmc1sxXSksCisJCQkJCQlQ bW9kZSkpKTsKKwl9CisgICAgICBlbHNlCisJZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAoZW5kLCBs ZW5ndGhfcnR4KSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKEdFVF9NT0RFIChs ZW5ndGhfcnR4KSAhPSBQbW9kZSkKKwlyaXNjdl9lbWl0X21vdmUgKGVuZCwgZ2VuX2xvd3BhcnQg KFBtb2RlLCBsZW5ndGhfcnR4KSk7CisgICAgICBlbHNlCisJcmlzY3ZfZW1pdF9tb3ZlIChlbmQs IGxlbmd0aF9ydHgpOworICAgIH0KKworICAvKiBNb3ZlIHRoZSBhZGRyZXNzIGludG8gc2NyYXRj aCByZWdpc3RlcnMuICAqLworICBkc3QgPSBjb3B5X2FkZHJfdG9fcmVnIChYRVhQIChkZXN0X2lu LCAwKSk7CisgIHNyYyA9IGNvcHlfYWRkcl90b19yZWcgKFhFWFAgKHNyY19pbiwgMCkpOworCisg IC8qIFNpbmNlIHdlIGhhdmVuJ3QgaW1wbGVtZW50ZWQgVkxBIGhhbmRsaW5nIGluIGdlbmVyYWws IHdlIGVtaXQKKyAgICAgb3BhcXVlIHBhdHRlcm5zIHRoYXQgb3V0cHV0IHRoZSBhcHByb3ByaWF0 ZSBpbnN0cnVjdGlvbnMuICAqLworICBpZiAoIW5lZWRfbG9vcCkKKyAgICBlbWl0X2luc24gKGdl bl9jcHltZW1fc3RyYWlnaHQgKFBtb2RlLCB2bW9kZSwgZHN0LCBzcmMsIGVuZCkpOworICAvKiBU aGUgKl9mYXN0IHBhdHRlcm4gbmVlZHMgMTMgaW5zdHJ1Y3Rpb25zIGluc3RlYWQgb2YgNywgYW5k CisgICAgIGNvbnNpZGVyaW5nIHRoYXQgdGhpcyBjb2RlIGlzIHVzdWFsbHkgbWVtb3J5LWNvbnN0 cmFpbnRlZCwgbGltaXQgdGhpcworICAgICB0byAtTzMuICA/Pz8gSXQgd291bGQgbWFrZSBzZW5z ZSB0byBkaWZmZXJlbnRpYXRlIGhlcmUgYmV0d2VlbiBpbi1vcmRlcgorICAgICBhbmQgT09PIG1p Y3JvYXJjaGl0ZWN0dXJlcy4gICovCisgIGVsc2UgaWYgKCFzaXplX3AgJiYgb3B0aW1pemUgPj0g MykKKyAgICBlbWl0X2luc24gKGdlbl9jcHltZW1fbG9vcF9mYXN0IChQbW9kZSwgdm1vZGUsIGRz dCwgc3JjLCBlbmQpKTsKKyAgZWxzZQorICAgIGVtaXRfaW5zbiAoZ2VuX2NweW1lbV9sb29wIChQ bW9kZSwgdm1vZGUsIGRzdCwgc3JjLCBlbmQpKTsKKworICAvKiBBIG5vcCB0byBhdHRhY2ggbm90 ZXMgdG8uICAqLworICBlbWl0X2luc24gKGdlbl9ub3AgKCkpOworICByZXR1cm4gdHJ1ZTsKK30K KwogLyogUmV0dXJuIHRoZSB2ZWN0b3JpemF0aW9uIG1hY2hpbmUgbW9kZSBmb3IgUlZWIGFjY29y ZGluZyB0byBMTVVMLiAgKi8KIG1hY2hpbmVfbW9kZQogcHJlZmVycmVkX3NpbWRfbW9kZSAoc2Nh bGFyX21vZGUgbW9kZSkKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YubWQgYi9n Y2MvY29uZmlnL3Jpc2N2L3Jpc2N2Lm1kCmluZGV4IDdlZGVmMWZiNTQ2Li40ZTU5NmY0MjU3NiAx MDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5tZAorKysgYi9nY2MvY29uZmlnL3Jp c2N2L3Jpc2N2Lm1kCkBAIC0yMTQxLDcgKzIxNDEsOSBAQAogCSAgICAgICh1c2UgKG1hdGNoX29w ZXJhbmQ6U0kgMyAiY29uc3RfaW50X29wZXJhbmQiKSldKV0KICAgIiIKIHsKLSAgaWYgKHJpc2N2 X2V4cGFuZF9ibG9ja19tb3ZlIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJd KSkKKyAgaWYgKHJpc2N2X3ZlY3Rvcjo6ZXhwYW5kX2Jsb2NrX21vdmUgKG9wZXJhbmRzWzBdLCBv cGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pKQorICAgIERPTkU7CisgIGVsc2UgaWYgKHJpc2N2X2V4 cGFuZF9ibG9ja19tb3ZlIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSkK ICAgICBET05FOwogICBlbHNlCiAgICAgRkFJTDsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcmlz Y3YvdmVjdG9yLm1kIGIvZ2NjL2NvbmZpZy9yaXNjdi92ZWN0b3IubWQKaW5kZXggMjE1ZWNiOWNi NTguLmVlZTU4YThmZjcxIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL3Jpc2N2L3ZlY3Rvci5tZAor KysgYi9nY2MvY29uZmlnL3Jpc2N2L3ZlY3Rvci5tZApAQCAtODM3LDYgKzgzNyw5NyBAQAogICBb KHNldF9hdHRyICJ0eXBlIiAidm1vdix2bGRlLHZzdGUiKQogICAgKHNldF9hdHRyICJtb2RlIiAi PFZUOk1PREU+IildKQogCis7OyBUaGUgKHVzZSAoYW5kIChtYXRjaF9kdXAgMSkgKGNvbnN0X2lu dCAxMjcpKSkgaXMgaGVyZSB0byBwcmV2ZW50IHRoZQorOzsgb3B0aW1pemVycyBmcm9tIGNoYW5n aW5nIGNweW1lbV9sb29wXyogaW50byB0aGlzLgorKGRlZmluZV9pbnNuICJAY3B5bWVtX3N0cmFp Z2h0PFA6bW9kZT48Vl9XSE9MRTptb2RlPiIKKyAgWyhzZXQgKG1lbTpCTEsgKG1hdGNoX29wZXJh bmQ6UCAwICJyZWdpc3Rlcl9vcGVyYW5kIiAicixyIikpCisJKG1lbTpCTEsgKG1hdGNoX29wZXJh bmQ6UCAxICJyZWdpc3Rlcl9vcGVyYW5kIiAicixyIikpKQorCSh1c2UgKGFuZCAobWF0Y2hfZHVw IDEpIChjb25zdF9pbnQgMTI3KSkpCisgICAodXNlIChtYXRjaF9vcGVyYW5kOlAgMiAicmVnX29y X2ludF9vcGVyYW5kIiAicixLIikpCisgICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpWX1dIT0xF IDMgIj0mdnIsJnZyIikpCisgICAoY2xvYmJlciAocmVnOlNJIFZMX1JFR05VTSkpCisgICAoY2xv YmJlciAocmVnOlNJIFZUWVBFX1JFR05VTSkpXQorICAiVEFSR0VUX1ZFQ1RPUiIKKyAgIkB2c2V0 dmxpIHplcm8sJTIsZTxzZXc+LG04LHRhLG1hXDt2bGU8c2V3Pi52ICUzLCglMSlcO3ZzZTxzZXc+ LnYgJTMsKCUwKQorICAgdnNldGl2bGkgemVybywlMixlPHNldz4sbTgsdGEsbWFcO3ZsZTxzZXc+ LnYgJTMsKCUxKVw7dnNlPHNldz4udiAlMywoJTApIgorKQorCisoZGVmaW5lX2luc24gIkBjcHlt ZW1fbG9vcDxQOm1vZGU+PFZfV0hPTEU6bW9kZT4iCisgIFsoc2V0IChtZW06QkxLIChtYXRjaF9v cGVyYW5kOlAgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikpCisJKG1lbTpCTEsgKG1hdGNoX29w ZXJhbmQ6UCAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiK3IiKSkpCisgICAodXNlIChtYXRjaF9vcGVy YW5kOlAgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikpCisgICAoY2xvYmJlciAobWF0Y2hfc2Ny YXRjaDpWX1dIT0xFIDMgIj0mdnIiKSkKKyAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlAgNCAi PSZyIikpCisgICAoY2xvYmJlciAobWF0Y2hfZHVwIDApKQorICAgKGNsb2JiZXIgKG1hdGNoX2R1 cCAxKSkKKyAgIChjbG9iYmVyIChtYXRjaF9kdXAgMikpCisgICAoY2xvYmJlciAocmVnOlNJIFZM X1JFR05VTSkpCisgICAoY2xvYmJlciAocmVnOlNJIFZUWVBFX1JFR05VTSkpXQorICAiVEFSR0VU X1ZFQ1RPUiIKK3sgb3V0cHV0X2FzbV9pbnNuICgiXG4wOlx0IiAidnNldHZsaSAlNCwlMixlPHNl dz4sbTgsdGEsbWFcOyIKKwkJICAgInZsZTxzZXc+LnYgJTMsKCUxKVw7IgorCQkgICAic3ViICUy LCUyLCU0Iiwgb3BlcmFuZHMpOworICBpZiAoPHNldz4gIT0gOCkKKyAgICB7CisgICAgICBydHgg eG9wWzJdOworICAgICAgeG9wWzBdID0gb3BlcmFuZHNbNF07CisgICAgICB4b3BbMV0gPSBHRU5f SU5UIChleGFjdF9sb2cyICg8c2V3Pi84KSk7CisgICAgICBvdXRwdXRfYXNtX2luc24gKCJzbGxp ICUwLCUwLCUxIiwgeG9wKTsKKyAgICB9CisgIG91dHB1dF9hc21faW5zbiAoImFkZCAlMSwlMSwl NFw7IgorCQkgICAidnNlPHNldz4udiAlMywoJTApXDsiCisJCSAgICJhZGQgJTAsJTAsJTRcOyIK KwkJICAgImJuZXogJTIsMGIiLCBvcGVyYW5kcyk7CisgIHJldHVybiAiIjsKK30pCisKKzs7IFRo aXMgcGF0dGVybiAoYXQgYmx0dSkgYXNzdW1lcyBwb2ludGVycyBjYW4gYmUgdHJlYXRlZCBhcyB1 bnNpZ25lZCwKKzs7IGkuZS4gIG9iamVjdHMgY2FuJ3Qgc3RyYWRkbGUgMHhmZmZmZmZmZmZmZmZm ZmZmIC8gMHgwMDAwMDAwMDAwMDAwMDAwIC4KKyhkZWZpbmVfaW5zbiAiQGNweW1lbV9sb29wX2Zh c3Q8UDptb2RlPjxWX1dIT0xFOm1vZGU+IgorICBbKHNldCAobWVtOkJMSyAobWF0Y2hfb3BlcmFu ZDpQIDAgInJlZ2lzdGVyX29wZXJhbmQiICIrciIpKQorCShtZW06QkxLIChtYXRjaF9vcGVyYW5k OlAgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikpKQorICAgKHVzZSAobWF0Y2hfb3BlcmFuZDpQ IDIgInJlZ2lzdGVyX29wZXJhbmQiICIrciIpKQorICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6 Vl9XSE9MRSAzICI9JnZyIikpCisgICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpQIDQgIj0mciIp KQorICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UCA1ICI9JnIiKSkKKyAgIChjbG9iYmVyICht YXRjaF9zY3JhdGNoOlAgNiAiPSZyIikpCisgICAoY2xvYmJlciAobWF0Y2hfZHVwIDApKQorICAg KGNsb2JiZXIgKG1hdGNoX2R1cCAxKSkKKyAgIChjbG9iYmVyIChtYXRjaF9kdXAgMikpCisgICAo Y2xvYmJlciAocmVnOlNJIFZMX1JFR05VTSkpCisgICAoY2xvYmJlciAocmVnOlNJIFZUWVBFX1JF R05VTSkpXQorICAiVEFSR0VUX1ZFQ1RPUiIKK3sKKyAgb3V0cHV0X2FzbV9pbnNuICgidnNldHZs aSAlNCwlMixlPHNldz4sbTgsdGEsbWFcOyIKKwkJICAgImJlcSAlNCwlMiwxZlw7IgorCQkgICAi YWRkICU1LCUwLCUyXDsiCisJCSAgICJzdWIgJTYsJTUsJTQiLCBvcGVyYW5kcyk7CisgIGlmICg8 c2V3PiAhPSA4KQorICAgIHsKKyAgICAgIHJ0eCB4b3BbMl07CisgICAgICB4b3BbMF0gPSBvcGVy YW5kc1s0XTsKKyAgICAgIHhvcFsxXSA9IEdFTl9JTlQgKGV4YWN0X2xvZzIgKDxzZXc+LzgpKTsK KyAgICAgIG91dHB1dF9hc21faW5zbiAoInNsbGkgJTAsJTAsJTEiLCB4b3ApOworICAgIH0KKyAg b3V0cHV0X2FzbV9pbnNuICgiXG4wOlx0IiAidmxlPHNldz4udiAlMywoJTEpXDsiCisJCSAgICJh ZGQgJTEsJTEsJTRcOyIKKwkJICAgInZzZTxzZXc+LnYgJTMsKCUwKVw7IgorCQkgICAiYWRkICUw LCUwLCU0XDsiCisJCSAgICJibHR1ICUwLCU2LDBiXDsiCisJCSAgICJzdWIgJTUsJTUsJTAiLCBv cGVyYW5kcyk7CisgIGlmICg8c2V3PiAhPSA4KQorICAgIHsKKyAgICAgIHJ0eCB4b3BbMl07Cisg ICAgICB4b3BbMF0gPSBvcGVyYW5kc1s0XTsKKyAgICAgIHhvcFsxXSA9IEdFTl9JTlQgKGV4YWN0 X2xvZzIgKDxzZXc+LzgpKTsKKyAgICAgIG91dHB1dF9hc21faW5zbiAoInNybGkgJTAsJTAsJTEi LCB4b3ApOworICAgIH0KKyAgb3V0cHV0X2FzbV9pbnNuICgidnNldHZsaSAlNCwlNSxlPHNldz4s bTgsdGEsbWFcbiIKKwkgICAgIjE6XHQiICJ2bGU8c2V3Pi52ICUzLCglMSlcOyIKKwkJICAgInZz ZTxzZXc+LnYgJTMsKCUwKSIsIG9wZXJhbmRzKTsKKyAgcmV0dXJuICIiOworfSkKKwogOzsgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIDs7IC0tLS0gRHVwbGljYXRlIE9wZXJhdGlvbnMKIDs7IC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== --0000000000001fe0750600bb9e9c--