From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-vs1-xe2e.google.com (mail-vs1-xe2e.google.com [IPv6:2607:f8b0:4864:20::e2e]) by sourceware.org (Postfix) with ESMTPS id 83718386F820 for ; Thu, 3 Sep 2020 09:38:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 83718386F820 Received: by mail-vs1-xe2e.google.com with SMTP id y194so1376190vsc.4 for ; Thu, 03 Sep 2020 02:38:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=55GFwM3yBN4AC13fMvKS/s/4NcT82sH/EPRy9zuR8nA=; b=boXdiSphQywNaB/VXg/gjVge8g8WOuMopdoAuvOILk6Zvi72iMzSi6J8km+RJiX8wx fRU3NHUsWFkdFHhbxoiVLwR752daTfSwFYmgL73zpO4R/anQPLsZHVjtBSQh6MwOWOl6 +rAuLPdXP62S1Q25623wJuiUpCkbyE8Ht1gJMPvLXanxXi6sm1NWgrW6UK3GCQk0KmgB TpdzT5K/4iAdvXnSk3uPnjG27jVkzqwLdqFVfQGugYKdbXD6+NeKAwqZNJudJpybVqRR vQDcftslOuICyeadfhUsprEDiH5HS6xi+5THEnI+oWJnbKuyyneyJ/YdWOZnH1ne1fHI kPuQ== X-Gm-Message-State: AOAM5321zrdFcdhbm79v19JBrQRw7Lt8lUAw6EVugizw8eupwt4HtBGf dPbL4h7TZkTpQrppSUwsaxHAZF82f648hdjYu9Xua3PQ X-Google-Smtp-Source: ABdhPJx5tL5AEyJWeeFmbr3FiPLUM6quSEqihp9GD5SkQPLgnZCFRi4aMKULoIiZGUPRySt1KzRT50m8g2DFm7wcT44= X-Received: by 2002:a67:ecc6:: with SMTP id i6mr911427vsp.25.1599125937801; Thu, 03 Sep 2020 02:38:57 -0700 (PDT) MIME-Version: 1.0 From: Hongtao Liu Date: Thu, 3 Sep 2020 17:39:50 +0800 Message-ID: Subject: [PATCH] Optimize comparison between result of us_minus and 0. To: GCC Patches , Kirill Yukhin Content-Type: multipart/mixed; boundary="000000000000799d5505ae65859e" X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Thu, 03 Sep 2020 09:38:59 -0000 --000000000000799d5505ae65859e Content-Type: text/plain; charset="UTF-8" Hi: Add define_peephole2 to perform optimization like bellow: +/* Optimize for TARGET_AVX512F + vpsubusw op1, op2, dst1; + vxorps xmm, xmm, dst2; ----> vpcmpleuw op1, op2, dst3 + vpcmpeqw dst1, dst2, dst3 */ and +/* Optimize for target above TARGET_SSE4_1 + vpsubusw op1, op2, dst1; vpminuw op1, op2, dst1 + vpxor xmm, xmm, dst2; ----> vpcmpeqw op1, dst1, dst3 + vpcmpeqw dst1, dst2, dst3 */ Bootstrap is ok, regression test is ok for i386/x86-64 backend. Ok for trunk? gcc/ChangeLog: PR target/96906 * config/i386/sse.md (VI12_128_256): New mode iterator. (define_peephole2): Optimize comparison between result of us_minus and 0, it could be optimized to "vpcmplequ" for AVX512 or "pminu + cmpeq" for target above TARGET_SSE4_1. gcc/testsuite/ChangeLog: * gcc.target/i386/avx2-pr96906-1.c: New test. * gcc.target/i386/avx512f-pr96906-1.c: New test. * gcc.target/i386/sse2-pr96906.c: New test. * gcc.target/i386/sse4_1-pr96906-1.c: New test. -- BR, Hongtao --000000000000799d5505ae65859e Content-Type: application/x-patch; name="0001-Optimize-__builtin_ia32_psubusw128-compared-to-0-to-.patch" Content-Disposition: attachment; filename="0001-Optimize-__builtin_ia32_psubusw128-compared-to-0-to-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kemk33xc0 RnJvbSBkYmZiZDUzNTBjOWQxMmEwZTVjYTY0M2NmOTY2NmQwNDFkN2Q0NzQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBsaXVob25ndCA8aG9uZ3Rhby5saXVAaW50ZWwuY29tPgpEYXRl OiBUaHUsIDMgU2VwIDIwMjAgMTY6MTg6MjAgKzA4MDAKU3ViamVjdDogW1BBVENIXSBPcHRpbWl6 ZSBfX2J1aWx0aW5faWEzMl9wc3VidXN3MTI4IGNvbXBhcmVkIHRvIDAgdG8KIF9fYnVpbHRpbl9p YTMyX3BtaW51dzEyOCBjb21wYXJlZCB0byBvcGVyYW5kCgpnY2MvQ2hhbmdlTG9nOgoJUFIgdGFy Z2V0Lzk2OTA2CgkqIGNvbmZpZy9pMzg2L3NzZS5tZCAoVkkxMl8xMjhfMjU2KTogTmV3IG1vZGUg aXRlcmF0b3IuCgkoZGVmaW5lX3BlZXBob2xlMik6IE9wdGltaXplIGNvbXBhcmlzb24gYmV0d2Vl biByZXN1bHQgb2YKCXVzX21pbnVzIGFuZCAwLCBpdCBjb3VsZCBiZSBvcHRpbWl6ZWQgdG8gInZw Y21wbGVxdSIgZm9yCglBVlg1MTIgb3IgInBtaW51ICsgY21wZXEiIGZvciB0YXJnZXQgYWJvdmUg VEFSR0VUX1NTRTRfMS4KCmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOgoKCSogZ2NjLnRhcmdldC9p Mzg2L2F2eDItcHI5NjkwNi0xLmM6IE5ldyB0ZXN0LgoJKiBnY2MudGFyZ2V0L2kzODYvYXZ4NTEy Zi1wcjk2OTA2LTEuYzogTmV3IHRlc3QuCgkqIGdjYy50YXJnZXQvaTM4Ni9zc2UyLXByOTY5MDYu YzogTmV3IHRlc3QuCgkqIGdjYy50YXJnZXQvaTM4Ni9zc2U0XzEtcHI5NjkwNi0xLmM6IE5ldyB0 ZXN0LgotLS0KIGdjYy9jb25maWcvaTM4Ni9zc2UubWQgICAgICAgICAgICAgICAgICAgICAgICB8 IDYzICsrKysrKysrKysrKysrKysrKysKIC4uLi9nY2MudGFyZ2V0L2kzODYvYXZ4Mi1wcjk2OTA2 LTEuYyAgICAgICAgICB8IDE3ICsrKysrCiAuLi4vZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtcHI5 NjkwNi0xLmMgICAgICAgfCA0MCArKysrKysrKysrKysKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L3NzZTItcHI5NjkwNi5jICB8IDExICsrKysKIC4uLi9nY2MudGFyZ2V0L2kzODYvc3Nl NF8xLXByOTY5MDYtMS5jICAgICAgICB8IDExICsrKysKIDUgZmlsZXMgY2hhbmdlZCwgMTQyIGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9hdngyLXByOTY5MDYtMS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvYXZ4NTEyZi1wcjk2OTA2LTEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3NzZTItcHI5NjkwNi5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvc3NlNF8xLXByOTY5MDYtMS5jCgpk aWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L3NzZS5tZCBiL2djYy9jb25maWcvaTM4Ni9zc2Uu bWQKaW5kZXggODI1MDMyNWUxYTMuLjYwYTU3MTQ5NGQ1IDEwMDY0NAotLS0gYS9nY2MvY29uZmln L2kzODYvc3NlLm1kCisrKyBiL2djYy9jb25maWcvaTM4Ni9zc2UubWQKQEAgLTYzNiw2ICs2MzYs NyBAQCAoZGVmaW5lX21vZGVfaXRlcmF0b3IgVkkxMjRfMTI4IFtWMTZRSSBWOEhJIFY0U0ldKQog KGRlZmluZV9tb2RlX2l0ZXJhdG9yIFZJMjRfMTI4IFtWOEhJIFY0U0ldKQogKGRlZmluZV9tb2Rl X2l0ZXJhdG9yIFZJMjQ4XzEyOCBbVjhISSBWNFNJIFYyREldKQogKGRlZmluZV9tb2RlX2l0ZXJh dG9yIFZJNDhfMTI4IFtWNFNJIFYyREldKQorKGRlZmluZV9tb2RlX2l0ZXJhdG9yIFZJMTJfMTI4 XzI1NiBbVjE2UUkgVjMyUUkgVjhISSBWMTZISV0pCiAKIDs7IFZhcmlvdXMgMjU2Yml0IGFuZCA1 MTIgdmVjdG9yIGludGVnZXIgbW9kZSBjb21iaW5hdGlvbnMKIChkZWZpbmVfbW9kZV9pdGVyYXRv ciBWSTEyNF8yNTYgW1YzMlFJIFYxNkhJIFY4U0ldKQpAQCAtMTI5NDMsNiArMTI5NDQsNjggQEAg KGRlZmluZV9pbnNuICJzc2UyX2d0PG1vZGU+MyIKICAgIChzZXRfYXR0ciAicHJlZml4IiAib3Jp Zyx2ZXgiKQogICAgKHNldF9hdHRyICJtb2RlIiAiVEkiKV0pCiAKKy8qIE9wdGltaXplIGZvciBU QVJHRVRfQVZYNTEyRgorICB2cHN1YnVzdyBvcDEsIG9wMiwgZHN0MTsKKyAgdnhvcnBzIHhtbSwg eG1tLCBkc3QyOyAtLS0tPiAgIHZwY21wbGV1dyBvcDEsIG9wMiwgZHN0MworICB2cGNtcGVxdyBk c3QxLCBkc3QyLCBkc3QzICAqLworKGRlZmluZV9wZWVwaG9sZTIKKyAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6VkkxMl9BVlg1MTJWTCAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKwkodXNfbWludXM6Vkkx Ml9BVlg1MTJWTAorCSAgKG1hdGNoX29wZXJhbmQ6VkkxMl9BVlg1MTJWTCAxICJyZWdpc3Rlcl9v cGVyYW5kIikKKwkgIChtYXRjaF9vcGVyYW5kOlZJMTJfQVZYNTEyVkwgMiAidmVjdG9yX29wZXJh bmQiKSkpCisgICAoc2V0IChtYXRjaF9vcGVyYW5kOlZJMTJfQVZYNTEyVkwgMyAicmVnaXN0ZXJf b3BlcmFuZCIpCisJKG1hdGNoX29wZXJhbmQ6VkkxMl9BVlg1MTJWTCA0ICJjb25zdDBfb3BlcmFu ZCIpKQorICAgKHNldCAobWF0Y2hfb3BlcmFuZDo8YXZ4NTEyZm1hc2ttb2RlPiA1ICJtYXNrX3Jl Z19vcGVyYW5kIikKKwkgICh1bnNwZWM6PGF2eDUxMmZtYXNrbW9kZT4KKwkgICAgWyhtYXRjaF9v cGVyYW5kOlZJMTJfQVZYNTEyVkwgNiAicmVnaXN0ZXJfb3BlcmFuZCIpCisJICAgICAobWF0Y2hf b3BlcmFuZDpWSTEyX0FWWDUxMlZMIDcgInJlZ2lzdGVyX29wZXJhbmQiKQorCSAgICAgKGNvbnN0 X2ludCAwKV0KKwkgICAgVU5TUEVDX1BDTVApKV0KKyAgIigocnR4X2VxdWFsX3AgKG9wZXJhbmRz WzBdLCBvcGVyYW5kc1s2XSkKKyAgICAmJiBydHhfZXF1YWxfcCAob3BlcmFuZHNbM10sIG9wZXJh bmRzWzddKSkKKyAgIHx8IChydHhfZXF1YWxfcCAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzddKQor ICAgICAgJiYgcnR4X2VxdWFsX3AgKG9wZXJhbmRzWzNdLCBvcGVyYW5kc1s2XSkpKQorICAmJiBw ZWVwMl9yZWdfZGVhZF9wICgzLCBvcGVyYW5kc1swXSkKKyAgJiYgcGVlcDJfcmVnX2RlYWRfcCAo Mywgb3BlcmFuZHNbM10pIgorICBbKHNldCAobWF0Y2hfZHVwIDUpCisJKHVuc3BlYzo8YXZ4NTEy Zm1hc2ttb2RlPgorCSAgWyhtYXRjaF9kdXAgMSkKKwkgICAobWF0Y2hfZHVwIDIpCisJICAgKGNv bnN0X2ludCAyKV0gVU5TUEVDX1VOU0lHTkVEX1BDTVApKV0pCisKKy8qIE9wdGltaXplIGZvciB0 YXJnZXQgYWJvdmUgVEFSR0VUX1NTRTRfMQorICB2cHN1YnVzdyBvcDEsIG9wMiwgZHN0MTsgICAg ICB2cG1pbnV3IG9wMSwgb3AyLCBkc3QxCisgIHZweG9yIHhtbSwgeG1tLCBkc3QyOyAtLS0tPiAg IHZwY21wZXF3IG9wMSwgZHN0MSwgZHN0MworICB2cGNtcGVxdyBkc3QxLCBkc3QyLCBkc3QzICAq LworKGRlZmluZV9wZWVwaG9sZTIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VkkxMl8xMjhfMjU2 IDAgInJlZ2lzdGVyX29wZXJhbmQiKQorCSh1c19taW51czpWSTEyXzEyOF8yNTYKKwkgIChtYXRj aF9vcGVyYW5kOlZJMTJfMTI4XzI1NiAxICJyZWdpc3Rlcl9vcGVyYW5kIikKKwkgIChtYXRjaF9v cGVyYW5kOlZJMTJfMTI4XzI1NiAyICJ2ZWN0b3Jfb3BlcmFuZCIpKSkKKyAgIChzZXQgKG1hdGNo X29wZXJhbmQ6VkkxMl8xMjhfMjU2IDMgInJlZ2lzdGVyX29wZXJhbmQiKQorCShtYXRjaF9vcGVy YW5kOlZJMTJfMTI4XzI1NiA0ICJjb25zdDBfb3BlcmFuZCIpKQorICAgKHNldCAobWF0Y2hfb3Bl cmFuZDpWSTEyXzEyOF8yNTYgNSAicmVnaXN0ZXJfb3BlcmFuZCIpCisJKGVxOlZJMTJfMTI4XzI1 NgorCSAgKG1hdGNoX29wZXJhbmQ6VkkxMl8xMjhfMjU2IDYgInJlZ2lzdGVyX29wZXJhbmQiKQor CSAgIChtYXRjaF9vcGVyYW5kOlZJMTJfMTI4XzI1NiA3ICJyZWdpc3Rlcl9vcGVyYW5kIikpKV0K KyAgIihUQVJHRVRfU1NFNF8xIHx8IDxNT0RFPm1vZGUgPT0gVjE2UUltb2RlKQorICAmJiAoKHJ0 eF9lcXVhbF9wIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbNl0pCisgICAgICAmJiBydHhfZXF1YWxf cCAob3BlcmFuZHNbM10sIG9wZXJhbmRzWzddKSkKKyAgICAgfHwgKHJ0eF9lcXVhbF9wIChvcGVy YW5kc1swXSwgb3BlcmFuZHNbN10pCisJJiYgcnR4X2VxdWFsX3AgKG9wZXJhbmRzWzNdLCBvcGVy YW5kc1s2XSkpKQorICAmJiAocGVlcDJfcmVnX2RlYWRfcCAoMywgb3BlcmFuZHNbMF0pCisgICAg IHx8IHJ0eF9lcXVhbF9wIChvcGVyYW5kc1swXSxvcGVyYW5kc1s1XSkpCisgICYmIChwZWVwMl9y ZWdfZGVhZF9wICgzLCBvcGVyYW5kc1szXSkKKyAgICAgfHwgcnR4X2VxdWFsX3AgKG9wZXJhbmRz WzNdLG9wZXJhbmRzWzVdKSkiCisgIFsoc2V0IChtYXRjaF9kdXAgMCkKKwkodW1pbjpWSTEyXzEy OF8yNTYKKwkgIChtYXRjaF9kdXAgMSkKKwkgIChtYXRjaF9kdXAgMikpKQorICAgKHNldCAobWF0 Y2hfZHVwIDUpCisJKGVxOlZJMTJfMTI4XzI1NgorCSAgKG1hdGNoX2R1cCAwKQorCSAgKG1hdGNo X2R1cCAxKSkpXSkKKwogKGRlZmluZV9leHBhbmQgInZjb25kPFZfNTEyOm1vZGU+PFZJX0FWWDUx MkJXOm1vZGU+IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWXzUxMiAwICJyZWdpc3Rlcl9vcGVy YW5kIikKIAkoaWZfdGhlbl9lbHNlOlZfNTEyCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9hdngyLXByOTY5MDYtMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvYXZ4Mi1wcjk2OTA2LTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uODVmZDY5MTRjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9hdngyLXByOTY5MDYtMS5jCkBAIC0wLDAgKzEsMTcgQEAKKy8qIHsgZGctZG8g Y29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWF2eDIgLW1uby1hdng1MTJmIiB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZwbWludVxbd2JcXSIg MiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidnBjbXBlcVxb d2JcXSIgMiB9IH0gKi8KKwordHlwZWRlZiBjaGFyIHYzMnFpIF9fYXR0cmlidXRlX18oKHZlY3Rv cl9zaXplKDMyKSkpOwordHlwZWRlZiBzaG9ydCB2MTZoaSBfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jf c2l6ZSgzMikpKTsKKwordjE2aGkgY21wbGVfZXB1MTYodjE2aGkgeCwgdjE2aGkgeSkKK3sKKyAg cmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c3cyNTYoeCwgeSkgPT0gMDsKK30KKwordjMycWkg Y21wbGVfZXB1OCh2MzJxaSB4LCB2MzJxaSB5KQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJf cHN1YnVzYjI1Nih4LCB5KSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvYXZ4NTEyZi1wcjk2OTA2LTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2F2eDUxMmYtcHI5NjkwNi0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjU4OTdkMTg4NWE5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvYXZ4NTEyZi1wcjk2OTA2LTEuYwpAQCAtMCwwICsxLDQwIEBACisvKiB7 IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItbWF2eDUxMmJ3IC1tYXZ4NTEy dmwgLU8yIiB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZwY21w dVxbd2JcXVxbXHQgXF0qXFxcJDIiIDYgfSB9ICovCisKK3R5cGVkZWYgY2hhciB2MTZxaSBfX2F0 dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6ZSgxNikpKTsKK3R5cGVkZWYgc2hvcnQgdjhoaSBfX2F0dHJp YnV0ZV9fKCh2ZWN0b3Jfc2l6ZSgxNikpKTsKK3R5cGVkZWYgY2hhciB2MzJxaSBfX2F0dHJpYnV0 ZV9fKCh2ZWN0b3Jfc2l6ZSgzMikpKTsKK3R5cGVkZWYgc2hvcnQgdjE2aGkgX19hdHRyaWJ1dGVf XygodmVjdG9yX3NpemUoMzIpKSk7Cit0eXBlZGVmIGNoYXIgdjY0cWkgX19hdHRyaWJ1dGVfXygo dmVjdG9yX3NpemUoNjQpKSk7Cit0eXBlZGVmIHNob3J0IHYzMmhpIF9fYXR0cmlidXRlX18oKHZl Y3Rvcl9zaXplKDY0KSkpOworCit2MTZxaSBjbXBsZV9lcHU4XzEyOCAodjE2cWkgeCwgdjE2cWkg eSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2IxMjgoeCwgeSkgPT0gMDsKK30K KwordjMycWkgY21wbGVfZXB1OF8yNTYgKHYzMnFpIHgsIHYzMnFpIHkpCit7CisgIHJldHVybiBf X2J1aWx0aW5faWEzMl9wc3VidXNiMjU2KHgsIHkpID09IDA7Cit9CisKK3Y2NHFpIGNtcGxlX2Vw dThfNTEyICh2NjRxaSB4LCB2NjRxaSB5LCB2NjRxaSB6KQoreworICByZXR1cm4gX19idWlsdGlu X2lhMzJfcHN1YnVzYjUxMl9tYXNrICh4LCB5LCB6LCAtMSkgPT0gMDsKK30KKwordjhoaSBjbXBs ZV9lcHUxNl8xMjggKHY4aGkgeCwgdjhoaSB5KQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJf cHN1YnVzdzEyOCh4LCB5KSA9PSAwOworfQorCit2MTZoaSBjbXBsZV9lcHUxNl8yNTYgKHYxNmhp IHgsIHYxNmhpIHkpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc3VidXN3MjU2KHgsIHkp ID09IDA7Cit9CisKK3YzMmhpIGNtcGxlX2VwdTE2XzUxMiAodjMyaGkgeCwgdjMyaGkgeSwgdjMy aGkgeikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c3c1MTJfbWFzayAoeCwgeSwg eiwgLTEpID09IDA7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9zc2UyLXByOTY5MDYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3NzZTItcHI5 NjkwNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44ZjdlOWVjNjU1 NgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3NzZTIt cHI5NjkwNi5jCkBAIC0wLDAgKzEsMTEgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1PMiAtbXNzZTIgLW1uby1zc2U0LjEiIH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyAicG1pbnViIiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJwY21wZXFiIiAxIH0gfSAqLworCit0eXBlZGVmIGNoYXIg djE2cWkgX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUoMTYpKSk7CisKK3YxNnFpIGNtcGxlX2Vw dTgodjE2cWkgeCwgdjE2cWkgeSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2Ix MjgoeCwgeSkgPT0gMDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9p Mzg2L3NzZTRfMS1wcjk2OTA2LTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3Nz ZTRfMS1wcjk2OTA2LTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u MDJjZGMxZjJkMGUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9zc2U0XzEtcHI5NjkwNi0xLmMKQEAgLTAsMCArMSwxMSBAQAorLyogeyBkZy1kbyBjb21w aWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1zc2U0LjEgLW1uby1hdnggLU8yIiB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInBtaW51dyIgMSB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAicGNtcGVxdyIgMSB9IH0gKi8KKwor dHlwZWRlZiBzaG9ydCB2OGhpIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSkpOworCit2 OGhpIGNtcGxlX2VwdTE2KHY4aGkgeCwgdjhoaSB5KQoreworICByZXR1cm4gX19idWlsdGluX2lh MzJfcHN1YnVzdzEyOCh4LCB5KSA9PSAwOworfQotLSAKMi4xOC4xCgo= --000000000000799d5505ae65859e--