From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) by sourceware.org (Postfix) with ESMTPS id A4FC93858C2F for ; Mon, 17 Apr 2023 17:53:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A4FC93858C2F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pj1-x1032.google.com with SMTP id x8-20020a17090a6b4800b002474c5d3367so8901427pjl.2 for ; Mon, 17 Apr 2023 10:53:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681754032; x=1684346032; h=in-reply-to:content-language:references:cc:to:subject:from :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=dZt77SzXW/Qoya9B8MO3T11BgQ1kzqrTfOlYbCK4D9Y=; b=YmfHtsakPeecEh4LB9TJEe30FKx+JnlfP9ZbFKPv+Rcstk1JYhnqRRjn3ppajRaUye TR2Lg/0AgB3KbFbRSDqmlLcVFnM0BYRgB39NWGYjHGPR+A598QTN5zpsF5AIJH/IWwOK 3gbVoZPZi+iWX5HgOBb6FoubBGphBibzdXIj35LjlZREPBI9A8sItapOIyC+vQbw/dUg 7VW+MkTmma4yEFiRgHf3GUqax2e1hoko2ee2ZBTjm39ZnPt4qnF4ChiMkt6T6cqUpUQW v81r0iaMALGm2fFvYQVS6qeYh7oDj7Te2MntDcpx7G+8J9d7OGbtB7iV1z4TRKN0XBx8 yS9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681754032; x=1684346032; h=in-reply-to:content-language:references:cc:to:subject:from :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=dZt77SzXW/Qoya9B8MO3T11BgQ1kzqrTfOlYbCK4D9Y=; b=dE/WWvOgcuzLPmiyyX9qb+M2+SVbRVhgkcsRt3SVzKn5SyV2qQZ37qLWYIFcM/fMoe p2P+BJrAL8zzN+5w/sB4AX0fodD0+LwREAHkwyGusgAKoP9318KfpvTwCEG99auyq/8d +0nFmHVi4gdw3AcbCZEZwgl3ekNl1mCx9aHFj3h3ZO+6dJEKZNLeMEN6KL1Yj4Ie8Ina RvlSFxGoR5LTuKfflm2yA+PKasjF+jUvxnj6xrycL2P4USKCYbso4QuwWS7Lb+14L5sU o1YAsgdInLtsNpUB28IVsWz3UvvvVIztLjJMGwn1ybfntYwDFBvFKdvTAiID6rXxOnBr 9pcg== X-Gm-Message-State: AAQBX9dm92oLNWekIe7YRn+x8uhoKu3DJ/UsO0KR+0Ay4MGi7aUrJP1E VEbB9xyqmtsU1fODU1g9bmw= X-Google-Smtp-Source: AKy350ZLpoaLGVcbIGzJ+AEUigRA672esqgpjBzywR+ZSC2e6YS/qmSfRs1J1Ycolbr9dX2ddMsGsQ== X-Received: by 2002:a17:903:11d0:b0:1a6:9671:253e with SMTP id q16-20020a17090311d000b001a69671253emr16437894plh.47.1681754032157; Mon, 17 Apr 2023 10:53:52 -0700 (PDT) Received: from ?IPV6:2601:681:8600:13d0::f0a? ([2601:681:8600:13d0::f0a]) by smtp.gmail.com with ESMTPSA id iy11-20020a170903130b00b001a642d5fa0bsm7994695plb.181.2023.04.17.10.53.50 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 17 Apr 2023 10:53:51 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------HEAqsDToPgI4LGWXln37oWz4" Message-ID: <219ae2ab-78bd-c84f-d162-2e5f3fc71aa6@gmail.com> Date: Mon, 17 Apr 2023 11:53:50 -0600 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 From: Jeff Law Subject: Re: [PATCH v2 1/1] RISC-V: Optimze the reverse conditions of rotate shift To: Feng Wang , gcc-patches@gcc.gnu.org Cc: kito.cheng@gmail.com, palmer@dabbelt.com References: <20221206091153.27281-1-wangfeng@eswincomputing.com> <20221206091153.27281-2-wangfeng@eswincomputing.com> Content-Language: en-US In-Reply-To: <20221206091153.27281-2-wangfeng@eswincomputing.com> X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,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: This is a multi-part message in MIME format. --------------HEAqsDToPgI4LGWXln37oWz4 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 12/6/22 02:11, Feng Wang wrote: > From: wangfeng > > There is no Immediate operand of ins "rol" according to the B-ext, > so the immediate operand should be loaded into register at first. > But we can convert it to the ins "rori" or "roriw", and then one > immediate load ins can be reduced. > So I added some conditions when reverse the rotate shift during RTL > expansion and RTL optimization.Reverse if the below two conditions > are met at the same time, > 1. The current insn_code doesn't exist or it's operand doesn't match, > or the shift amount is beyond the half size of the machine mode; > 2. The reversed insn_code exists and it's operand matches. > > Please refer to the following use cases: > unsigned long foo2(unsigned long rs1) > { > return (rs1 << 10) | (rs1 >> 54); > } > > The compiler result is: > li a1,10 > rol a0,a0,a1 > > This patch will generate one ins > rori a0,a0,54 > > At the same time I add the missing "roriw" ins RTL pattern > > Pass the linux-rv32imafdc-ilp32d-medany,linux-rv64imafdc-lp64d-medany, > newlib-rv32imafc-ilp32f-medany and newlib-rv64imafdc-lp64d-medany regression. > > gcc/ChangeLog: > > * config/riscv/bitmanip.md: Add "roriw" insn output > * expmed.cc (expand_shift_1):Call reverse_rotate_by_imm_p to judge > whether reverse the rotate direction when GIMPLE to RTL. > * rtl.h (reverse_rotate_by_imm_p): Add function declartion > * simplify-rtx.cc (reverse_rotate_by_imm_p): Add a function to judge > whether reverse rotate shift direction when simplify rtx. > Reverse if the below two conditions are met at the same time, > 1. The current insn_code doesn't exist or it's operand doesn't match, > or the shift amount is beyond the half size of the machine mode; > 2. The reversed insn_code exists and it's operand matches. > > gcc/testsuite/ChangeLog: > > * gcc.target/riscv/zbb-rol-ror-04.c: New test. > * gcc.target/riscv/zbb-rol-ror-05.c: New test. > * gcc.target/riscv/zbb-rol-ror-06.c: New test. > * gcc.target/riscv/zbb-rol-ror-07.c: New test. So I was waiting on test results to say this is ready for gcc-14 with some minor edits. By the time those test results landed, gcc-14 has partially opened up. Soo... I updated various comments to hopefully make things clearer and adjusted the logic slightly in reverse_rotate_by_imm_p. Bootstrapped and regression tested on riscv64. Pushed to the trunk. Jeff --------------HEAqsDToPgI4LGWXln37oWz4 Content-Type: text/plain; charset=UTF-8; name="P" Content-Disposition: attachment; filename="P" Content-Transfer-Encoding: base64 Y29tbWl0IDBjY2Y1MjBkMzQ5YTgyZGFmY2EwZGViM2QzMDdhMTA4MGU4NTg5YTAKQXV0aG9y OiBGZW5nIFdhbmcgPHdhbmdmZW5nQGVzd2luY29tcHV0aW5nLmNvbT4KRGF0ZTogICBTYXQg QXByIDE1IDEwOjExOjE1IDIwMjMgLTA2MDAKCiAgICBSSVNDLVY6IE9wdGltemUgdGhlIHJl dmVyc2UgY29uZGl0aW9ucyBvZiByb3RhdGUgc2hpZnQKICAgIAogICAgZ2NjL0NoYW5nZUxv ZzoKICAgIAogICAgICAgICAgICAqIGNvbmZpZy9yaXNjdi9iaXRtYW5pcC5tZCAocm90cnNp M19zZXh0KTogU3VwcG9ydCBnZW5lcmF0aW5nCiAgICAgICAgICAgIHJvcml3IGZvciBjb25z dGFudCBjb3VudHMuCiAgICAgICAgICAgICogcnRsLmggKHJldmVyc2Vfcm90YXRlX2J5X2lt bV9wKTogQWRkIGZ1bmN0aW9uIGRlY2xhcnRpb24KICAgICAgICAgICAgKiBzaW1wbGlmeS1y dHguY2MgKHJldmVyc2Vfcm90YXRlX2J5X2ltbV9wKTogTmV3IGZ1bmN0aW9uLgogICAgICAg ICAgICAoc2ltcGxpZnlfY29udGV4dDo6c2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbl8xKTog VXNlIGl0LgogICAgICAgICAgICAqIGV4cG1lZC5jYyAoZXhwYW5kX3NoaWZ0XzEpOiBMaWtl d2lzZS4KICAgIAogICAgZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6CiAgICAKICAgICAgICAg ICAgKiBnY2MudGFyZ2V0L3Jpc2N2L3piYi1yb2wtcm9yLTA0LmM6IE5ldyB0ZXN0LgogICAg ICAgICAgICAqIGdjYy50YXJnZXQvcmlzY3YvemJiLXJvbC1yb3ItMDUuYzogTmV3IHRlc3Qu CiAgICAgICAgICAgICogZ2NjLnRhcmdldC9yaXNjdi96YmItcm9sLXJvci0wNi5jOiBOZXcg dGVzdC4KICAgICAgICAgICAgKiBnY2MudGFyZ2V0L3Jpc2N2L3piYi1yb2wtcm9yLTA3LmM6 IE5ldyB0ZXN0LgoKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcmlzY3YvYml0bWFuaXAubWQg Yi9nY2MvY29uZmlnL3Jpc2N2L2JpdG1hbmlwLm1kCmluZGV4IDdhYTU5MTY4OWJhLi4wNjI5 NjhkNDc5ZiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi9iaXRtYW5pcC5tZAorKysg Yi9nY2MvY29uZmlnL3Jpc2N2L2JpdG1hbmlwLm1kCkBAIC0zMjIsOSArMzIyLDkgQEAKIChk ZWZpbmVfaW5zbiAiKnJvdHJzaTNfc2V4dCIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKIAkoc2lnbl9leHRlbmQ6REkgKHJvdGF0ZXJ0 OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKLQkJCQkg ICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKSldCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJh cml0aF9vcGVyYW5kIiAickkiKSkpKV0KICAgIlRBUkdFVF82NEJJVCAmJiAoVEFSR0VUX1pC QiB8fCBUQVJHRVRfWkJLQikiCi0gICJyb3J3XHQlMCwlMSwlMiIKKyAgInJvciVpMiV+XHQl MCwlMSwlMiIKICAgWyhzZXRfYXR0ciAidHlwZSIgImJpdG1hbmlwIildKQogCiAoZGVmaW5l X2luc24gInJvdGxzaTMiCmRpZmYgLS1naXQgYS9nY2MvZXhwbWVkLmNjIGIvZ2NjL2V4cG1l ZC5jYwppbmRleCAxNTUzZWE4ZTMxZS4uZmJkNGNlMmQ0MmYgMTAwNjQ0Ci0tLSBhL2djYy9l eHBtZWQuY2MKKysrIGIvZ2NjL2V4cG1lZC5jYwpAQCAtMjUzNSwxNCArMjUzNSwxMCBAQCBl eHBhbmRfc2hpZnRfMSAoZW51bSB0cmVlX2NvZGUgY29kZSwgbWFjaGluZV9tb2RlIG1vZGUs IHJ0eCBzaGlmdGVkLAogCW9wMSA9IFNVQlJFR19SRUcgKG9wMSk7CiAgICAgfQogCi0gIC8q IENhbm9uaWNhbGl6ZSByb3RhdGVzIGJ5IGNvbnN0YW50IGFtb3VudC4gIElmIG9wMSBpcyBi aXRzaXplIC8gMiwKLSAgICAgcHJlZmVyIGxlZnQgcm90YXRpb24sIGlmIG9wMSBpcyBmcm9t IGJpdHNpemUgLyAyICsgMSB0bwotICAgICBiaXRzaXplIC0gMSwgdXNlIG90aGVyIGRpcmVj dGlvbiBvZiByb3RhdGUgd2l0aCAxIC4uIGJpdHNpemUgLyAyIC0gMQotICAgICBhbW91bnQg aW5zdGVhZC4gICovCi0gIGlmIChyb3RhdGUKLSAgICAgICYmIENPTlNUX0lOVF9QIChvcDEp Ci0gICAgICAmJiBJTl9SQU5HRSAoSU5UVkFMIChvcDEpLCBHRVRfTU9ERV9CSVRTSVpFIChz Y2FsYXJfbW9kZSkgLyAyICsgbGVmdCwKLQkJICAgR0VUX01PREVfQklUU0laRSAoc2NhbGFy X21vZGUpIC0gMSkpCisgIC8qIENhbm9uaWNhbGl6ZSByb3RhdGVzIGJ5IGNvbnN0YW50IGFt b3VudC4gIFdlIG1heSBjYW5vbmljYWxpemUKKyAgICAgdG8gcmVkdWNlIHRoZSBpbW1lZGlh dGUgb3IgaWYgdGhlIElTQSBjYW4gcm90YXRlIGJ5IGNvbnN0YW50cworICAgICBpbiBvbmx5 IG9uIGRpcmVjdGlvbi4gICovCisgIGlmIChyb3RhdGUgJiYgcmV2ZXJzZV9yb3RhdGVfYnlf aW1tX3AgKHNjYWxhcl9tb2RlLCBsZWZ0LCBvcDEpKQogICAgIHsKICAgICAgIG9wMSA9IGdl bl9pbnRfc2hpZnRfYW1vdW50IChtb2RlLCAoR0VUX01PREVfQklUU0laRSAoc2NhbGFyX21v ZGUpCiAJCQkJCSAtIElOVFZBTCAob3AxKSkpOwpkaWZmIC0tZ2l0IGEvZ2NjL3J0bC5oIGIv Z2NjL3J0bC5oCmluZGV4IDUyZjA0MTlhZjI5Li42MDg1MmFlZWNkOCAxMDA2NDQKLS0tIGEv Z2NjL3J0bC5oCisrKyBiL2djYy9ydGwuaApAQCAtMzU2Niw2ICszNTY2LDcgQEAgZXh0ZXJu IGJvb2wgdmFsX3NpZ25iaXRfa25vd25fc2V0X3AgKG1hY2hpbmVfbW9kZSwKIAkJCQkgICAg IHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpOwogZXh0ZXJuIGJvb2wgdmFsX3NpZ25iaXRfa25v d25fY2xlYXJfcCAobWFjaGluZV9tb2RlLAogCQkJCSAgICAgICB1bnNpZ25lZCBIT1NUX1dJ REVfSU5UKTsKK2V4dGVybiBib29sIHJldmVyc2Vfcm90YXRlX2J5X2ltbV9wIChtYWNoaW5l X21vZGUsIHVuc2lnbmVkIGludCwgcnR4KTsKIAogLyogSW4gcmVnaW5mby5jYyAgKi8KIGV4 dGVybiBtYWNoaW5lX21vZGUgY2hvb3NlX2hhcmRfcmVnX21vZGUgKHVuc2lnbmVkIGludCwg dW5zaWduZWQgaW50LApkaWZmIC0tZ2l0IGEvZ2NjL3NpbXBsaWZ5LXJ0eC5jYyBiL2djYy9z aW1wbGlmeS1ydHguY2MKaW5kZXggZWU3NTA3OTkxN2YuLmM1N2ZmMzMyMGVlIDEwMDY0NAot LS0gYS9nY2Mvc2ltcGxpZnktcnR4LmNjCisrKyBiL2djYy9zaW1wbGlmeS1ydHguY2MKQEAg LTI3NDEsNiArMjc0MSw0NCBAQCBzaW1wbGlmeV9jb250ZXh0OjpzaW1wbGlmeV9kaXN0cmli dXRpdmVfb3BlcmF0aW9uIChydHhfY29kZSBjb2RlLAogICByZXR1cm4gTlVMTF9SVFg7CiB9 CiAKKy8qIFJldHVybiBUUlVFIGlmIGEgcm90YXRlIGluIG1vZGUgTU9ERSB3aXRoIGEgY29u c3RhbnQgY291bnQgaW4gT1AxCisgICBzaG91bGQgYmUgcmV2ZXJzZWQuCisKKyAgIElmIHRo ZSByb3RhdGUgc2hvdWxkIG5vdCBiZSByZXZlcnNlZCwgcmV0dXJuIEZBTFNFLgorCisgICBM RUZUIGluZGljYXRlcyBpZiB0aGlzIGlzIGEgcm90YXRlIGxlZnQgb3IgYSByb3RhdGUgcmln aHQuICAqLworCitib29sCityZXZlcnNlX3JvdGF0ZV9ieV9pbW1fcCAobWFjaGluZV9tb2Rl IG1vZGUsIHVuc2lnbmVkIGludCBsZWZ0LCBydHggb3AxKQoreworICBpZiAoIUNPTlNUX0lO VF9QIChvcDEpKQorICAgIHJldHVybiBmYWxzZTsKKworICAvKiBTb21lIHRhcmdldHMgbWF5 IG9ubHkgYmUgYWJsZSB0byByb3RhdGUgYnkgYSBjb25zdGFudAorICAgICBpbiBvbmUgZGly ZWN0aW9uLiAgU28gd2UgbmVlZCB0byBxdWVyeSB0aGUgb3B0YWIgaW50ZXJmYWNlCisgICAg IHRvIHNlZSB3aGF0IGlzIHBvc3NpYmxlLiAgKi8KKyAgb3B0YWIgYmlub3B0YWIgPSBsZWZ0 ID8gcm90bF9vcHRhYiA6IHJvdHJfb3B0YWI7CisgIG9wdGFiIHJlX2Jpbm9wdGFiID0gbGVm dCA/IHJvdHJfb3B0YWIgOiByb3RsX29wdGFiOworICBlbnVtIGluc25fY29kZSBpY29kZSA9 IG9wdGFiX2hhbmRsZXIgKGJpbm9wdGFiLCBtb2RlKTsKKyAgZW51bSBpbnNuX2NvZGUgcmVf aWNvZGUgPSBvcHRhYl9oYW5kbGVyIChyZV9iaW5vcHRhYiwgbW9kZSk7CisKKyAgLyogSWYg dGhlIHRhcmdldCBjYW4gbm90IHN1cHBvcnQgdGhlIHJldmVyc2VkIG9wdGFiLCB0aGVuIHRo ZXJlCisgICAgIGlzIG5vdGhpbmcgdG8gZG8uICAqLworICBpZiAocmVfaWNvZGUgPT0gQ09E RV9GT1Jfbm90aGluZykKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgLyogSWYgdGhlIHRhcmdl dCBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgcm90YXRlLWJ5LWltbWVkaWF0ZSwK KyAgICAgdGhlbiB3ZSB3YW50IHRvIHRyeSByZXZlcnNpbmcgdGhlIHJvdGF0ZS4gIFdlIGFs c28gd2FudCB0byB0cnkKKyAgICAgcmV2ZXJzaW5nIHRvIG1pbmltaXplIHRoZSBjb3VudC4g ICovCisgIGlmICgoaWNvZGUgPT0gQ09ERV9GT1Jfbm90aGluZykKKyAgICAgIHx8ICghaW5z bl9vcGVyYW5kX21hdGNoZXMgKGljb2RlLCAyLCBvcDEpKQorICAgICAgfHwgKElOX1JBTkdF IChJTlRWQUwgKG9wMSksCisJCSAgICBHRVRfTU9ERV9VTklUX1BSRUNJU0lPTiAobW9kZSkg LyAyICsgbGVmdCwKKwkJICAgIEdFVF9NT0RFX1VOSVRfUFJFQ0lTSU9OIChtb2RlKSAtIDEp KSkKKyAgICByZXR1cm4gKGluc25fb3BlcmFuZF9tYXRjaGVzIChyZV9pY29kZSwgMiwgb3Ax KSk7CisgIHJldHVybiBmYWxzZTsKK30KKwogLyogU3Vicm91dGluZSBvZiBzaW1wbGlmeV9i aW5hcnlfb3BlcmF0aW9uLiAgU2ltcGxpZnkgYSBiaW5hcnkgb3BlcmF0aW9uCiAgICBDT0RF IHdpdGggcmVzdWx0IG1vZGUgTU9ERSwgb3BlcmF0aW5nIG9uIE9QMCBhbmQgT1AxLiAgSWYg T1AwIGFuZC9vcgogICAgT1AxIGFyZSBjb25zdGFudCBwb29sIHJlZmVyZW5jZXMsIFRSVUVP UDAgYW5kIFRSVUVPUDEgcmVwcmVzZW50IHRoZQpAQCAtNDA5OCwxNSArNDEzNiwxMCBAQCBz aW1wbGlmeV9jb250ZXh0OjpzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uXzEgKHJ0eF9jb2Rl IGNvZGUsCiAgICAgY2FzZSBST1RBVEU6CiAgICAgICBpZiAodHJ1ZW9wMSA9PSBDT05TVDBf UlRYIChtb2RlKSkKIAlyZXR1cm4gb3AwOwotICAgICAgLyogQ2Fub25pY2FsaXplIHJvdGF0 ZXMgYnkgY29uc3RhbnQgYW1vdW50LiAgSWYgb3AxIGlzIGJpdHNpemUgLyAyLAotCSBwcmVm ZXIgbGVmdCByb3RhdGlvbiwgaWYgb3AxIGlzIGZyb20gYml0c2l6ZSAvIDIgKyAxIHRvCi0J IGJpdHNpemUgLSAxLCB1c2Ugb3RoZXIgZGlyZWN0aW9uIG9mIHJvdGF0ZSB3aXRoIDEgLi4g Yml0c2l6ZSAvIDIgLSAxCi0JIGFtb3VudCBpbnN0ZWFkLiAgKi8KKyAgICAgIC8qIENhbm9u aWNhbGl6ZSByb3RhdGVzIGJ5IGNvbnN0YW50IGFtb3VudC4gIElmIHRoZSBjb25kaXRpb24g b2YKKwkgcmV2ZXJzaW5nIGRpcmVjdGlvbiBpcyBtZXQsIHRoZW4gcmV2ZXJzZSB0aGUgZGly ZWN0aW9uLiAqLwogI2lmIGRlZmluZWQoSEFWRV9yb3RhdGUpICYmIGRlZmluZWQoSEFWRV9y b3RhdGVydCkKLSAgICAgIGlmIChDT05TVF9JTlRfUCAodHJ1ZW9wMSkKLQkgICYmIElOX1JB TkdFIChJTlRWQUwgKHRydWVvcDEpLAotCQkgICAgICAgR0VUX01PREVfVU5JVF9QUkVDSVNJ T04gKG1vZGUpIC8gMiArIChjb2RlID09IFJPVEFURSksCi0JCSAgICAgICBHRVRfTU9ERV9V TklUX1BSRUNJU0lPTiAobW9kZSkgLSAxKSkKKyAgICAgIGlmIChyZXZlcnNlX3JvdGF0ZV9i eV9pbW1fcCAobW9kZSwgKGNvZGUgPT0gUk9UQVRFKSwgdHJ1ZW9wMSkpCiAJewogCSAgaW50 IG5ld19hbW91bnQgPSBHRVRfTU9ERV9VTklUX1BSRUNJU0lPTiAobW9kZSkgLSBJTlRWQUwg KHRydWVvcDEpOwogCSAgcnR4IG5ld19hbW91bnRfcnR4ID0gZ2VuX2ludF9zaGlmdF9hbW91 bnQgKG1vZGUsIG5ld19hbW91bnQpOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L3Jpc2N2L3piYi1yb2wtcm9yLTA0LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvcmlzY3YvemJiLXJvbC1yb3ItMDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uMDgwNTM0ODRjYjIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvcmlzY3YvemJiLXJvbC1yb3ItMDQuYwpAQCAtMCwwICsxLDUyIEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItbWFyY2g9cnY2 NGdjX3piYiAtbWFiaT1scDY0ZCAtZm5vLWx0byAtTzIiIH0gKi8KKy8qIHsgZGctc2tpcC1p ZiAiIiB7ICotKi0qIH0geyAiLWciIH0gfSAqLworLyogeyBkZy1maW5hbCB7IGNoZWNrLWZ1 bmN0aW9uLWJvZGllcyAiKioiICIiIH0gfSAqLworCisvKgorKipmb28xOgorKioJcm9yaQlh MCxhMCwzNAorKioJcmV0CisqLwordW5zaWduZWQgbG9uZyBmb28xICh1bnNpZ25lZCBsb25n IHJzMSkKK3sgcmV0dXJuIChyczEgPj4gKDM0KSkgfCAocnMxIDw8IDMwKTsgfQorCisvKgor Kipmb28yOgorKioJcm9yaQlhMCxhMCw1NAorKioJcmV0CisqLwordW5zaWduZWQgbG9uZyBm b28yKHVuc2lnbmVkIGxvbmcgcnMxKQoreworICAgIHJldHVybiAocnMxIDw8IDEwKSB8IChy czEgPj4gNTQpOworfQorCisvKgorKipmb28zOgorKioJcm9yaXcJYTAsYTAsMjAKKyoqCXJl dAorKi8KK3Vuc2lnbmVkIGludCBmb28zKHVuc2lnbmVkIGludCByczEpCit7CisgICAgcmV0 dXJuIChyczEgPj4gMjApIHwgKHJzMSA8PCAxMik7Cit9CisKKy8qCisqKmZvbzQ6CisqKgly b3JpdwlhMCxhMCwyMgorKioJcmV0CisqLwordW5zaWduZWQgaW50IGZvbzQodW5zaWduZWQg aW50IHJzMSkKK3sKKyAgICByZXR1cm4gKHJzMSA8PCAxMCkgfCAocnMxID4+IDIyKTsKK30K KworLyoKKyoqZm9vNToKKyoqCXJvcncJYTAsYTAsYTEKKyoqCXJldAorKi8KK3Vuc2lnbmVk IGludCBmb281KHVuc2lnbmVkIGludCByczEsIHVuc2lnbmVkIGludCByczIpCit7CisgICAg cmV0dXJuIChyczEgPj4gcnMyKSB8IChyczEgPDwgKDMyIC0gcnMyKSk7Cit9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvemJiLXJvbC1yb3ItMDUuYyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi96YmItcm9sLXJvci0wNS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NTA5MGIxYjBmYwotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi96YmItcm9sLXJv ci0wNS5jCkBAIC0wLDAgKzEsMjQgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1tYXJjaD1ydjMyZ2NfemJiIC1tYWJpPWlscDMyIC1mbm8tbHRvIC1P MiIgfSAqLworLyogeyBkZy1za2lwLWlmICIiIHsgKi0qLSogfSB7ICItZyIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgY2hlY2stZnVuY3Rpb24tYm9kaWVzICIqKiIgIiIgfSB9ICovCisK Ky8qCisqKmZvbzE6CisqKglyb3JpCWEwLGEwLDIwCisqKglyZXQKKyovCit1bnNpZ25lZCBp bnQgZm9vMSh1bnNpZ25lZCBpbnQgcnMxKQoreworICAgIHJldHVybiAocnMxID4+IDIwKSB8 IChyczEgPDwgMTIpOworfQorCisvKgorKipmb28yOgorKioJcm9yaQlhMCxhMCwyMgorKioJ cmV0CisqLwordW5zaWduZWQgaW50IGZvbzIodW5zaWduZWQgaW50IHJzMSkKK3sKKyAgICBy ZXR1cm4gKHJzMSA8PCAxMCkgfCAocnMxID4+IDIyKTsKK30KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi96YmItcm9sLXJvci0wNi5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3piYi1yb2wtcm9yLTA2LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjcwYjc5YWJiNmVkCi0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3piYi1yb2wtcm9yLTA2LmMKQEAg LTAsMCArMSwzNiBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLW1hcmNoPXJ2NjRnY196YmIgLW1hYmk9bHA2NGQgLWZuby1sdG8gLU8yIiB9ICovCisv KiB7IGRnLXNraXAtaWYgIiIgeyAqLSotKiB9IHsgIi1nIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBjaGVjay1mdW5jdGlvbi1ib2RpZXMgIioqIiAiIiB9IH0gKi8KKworLyoKKyoqZm9v MToKKyoqCXJvcml3CWEwLGEwLDE0CisqKglyZXQKKyovCit1bnNpZ25lZCBpbnQgZm9vMSAo dW5zaWduZWQgaW50IHJzMSkKK3sgcmV0dXJuICgocnMxID4+IDE0KSB8IChyczEgPDwgMTgp KTsgfQorCisvKgorKipmb28yOgorKioJcm9yaXcJYTAsYTAsMTgKKyoqCXJldAorKi8KK3Vu c2lnbmVkIGludCBmb28yICh1bnNpZ25lZCBpbnQgcnMxKQoreyByZXR1cm4gKChyczEgPj4g MTgpIHwgKHJzMSA8PCAxNCkpOyB9CisKKy8qCisqKmZvbzM6CisqKglyb3JpdwlhMCxhMCwx OAorKioJcmV0CisqLwordW5zaWduZWQgaW50IGZvbzMgKHVuc2lnbmVkIGludCByczEpCit7 IHJldHVybiAoKHJzMSA8PCAxNCkgfCAocnMxID4+IDE4KSk7IH0KKworLyoKKyoqZm9vNDoK KyoqCXJvcml3CWEwLGEwLDE0CisqKglyZXQKKyovCit1bnNpZ25lZCBpbnQgZm9vNCAodW5z aWduZWQgaW50IHJzMSkKK3sgcmV0dXJuICgocnMxIDw8IDE4KSB8IChyczEgPj4gMTQpKTsg fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9yaXNjdi96YmItcm9sLXJvci0wNy5jIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L3Jpc2N2L3piYi1yb2wtcm9yLTA3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjNiNmFiMzg1YTg1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3piYi1yb2wtcm9yLTA3LmMKQEAgLTAsMCAr MSw2NCBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1h cmNoPXJ2NjRnY196YmIgLW1hYmk9bHA2NGQgLWZuby1sdG8gLU8yIiB9ICovCisvKiB7IGRn LXNraXAtaWYgIiIgeyAqLSotKiB9IHsgIi1nIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBj aGVjay1mdW5jdGlvbi1ib2RpZXMgIioqIiAiIiB9IH0gKi8KKworLyoKKyoqZm9vMToKKyoq CXJvcmkJYTAsYTAsMzQKKyoqCXJldAorKi8KK3Vuc2lnbmVkIGxvbmcgZm9vMSAodW5zaWdu ZWQgbG9uZyByczEpCit7CisgICAgdW5zaWduZWQgbG9uZyB0ZW1wdDsKKyAgICB0ZW1wdCA9 IHJzMSA+PiAzMDsKKyAgICB0ZW1wdCA9IHRlbXB0IDw8IDI7CisgICAgdGVtcHQgPSB0ZW1w dCA+PiA2OworICAgIHJzMSA9IHRlbXB0IHwgKHJzMSA8PCAzMCk7CisgICAgcmV0dXJuIHJz MSA7IAorfQorCisvKgorKipmb28yOgorKioJcm9yaQlhMCxhMCwyNAorKioJcmV0CisqLwor dW5zaWduZWQgbG9uZyBmb28yICh1bnNpZ25lZCBsb25nIHJzMSkKK3sKKyAgICB1bnNpZ25l ZCBsb25nIHRlbXB0OworICAgIHRlbXB0ID0gcnMxID4+IDIwOworICAgIHRlbXB0ID0gdGVt cHQgPDwgMjsKKyAgICB0ZW1wdCA9IHRlbXB0ID4+IDY7CisgICAgcnMxID0gdGVtcHQgfCAo cnMxIDw8IDQwKTsKKyAgICByZXR1cm4gcnMxIDsgCit9CisKKy8qCisqKmZvbzM6CisqKgly b3JpCWEwLGEwLDQwCisqKglyZXQKKyovCit1bnNpZ25lZCBsb25nIGZvbzMgKHVuc2lnbmVk IGxvbmcgcnMxKQoreworICAgIHVuc2lnbmVkIGxvbmcgdGVtcHQ7CisgICAgdGVtcHQgPSBy czEgPDwgMjA7CisgICAgdGVtcHQgPSB0ZW1wdCA+PiAyOworICAgIHRlbXB0ID0gdGVtcHQg PDwgNjsKKyAgICByczEgPSB0ZW1wdCB8IChyczEgPj4gNDApOworICAgIHJldHVybiByczEg OyAKK30KKworLyoKKyoqZm9vNDoKKyoqCXJvcmkJYTAsYTAsMjAKKyoqCXJldAorKi8KK3Vu c2lnbmVkIGxvbmcgZm9vNCAodW5zaWduZWQgbG9uZyByczEpCit7CisgICAgdW5zaWduZWQg bG9uZyB0ZW1wdDsKKyAgICB0ZW1wdCA9IHJzMSA8PCA0MDsKKyAgICB0ZW1wdCA9IHRlbXB0 ID4+IDI7CisgICAgdGVtcHQgPSB0ZW1wdCA8PCA2OworICAgIHJzMSA9IHRlbXB0IHwgKHJz MSA+PiAyMCk7CisgICAgcmV0dXJuIHJzMSA7IAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUK --------------HEAqsDToPgI4LGWXln37oWz4--