From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id E26823857C59 for ; Wed, 14 Sep 2022 17:31:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E26823857C59 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.93,315,1654588800"; d="scan'208,223";a="83068765" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa2.mentor.iphmx.com with ESMTP; 14 Sep 2022 09:31:51 -0800 IronPort-SDR: 6hDPwsqYlcR9nwWZ41cfzTSnK7QsbcIuSDznr6UJSHvLbBrVM/5Uf5Dgl4Xo/J7jKfgrOax0XH +AEMXWd9rrNKNkPFvwkIweci4fh0QrYmHs9rFwtZeiDeqEmKeC63IyDNaRVjfKAWB+ivgG+1nN fSiunUe6dvXtB7EJN6LQ67gFNbxxEyqc2t/2xSJSlhOcqlx5c/ZuoD9pNAp8LbGSEXth76RISO TqaC8xnh98bQdBgOMOqaGBa5j6gVx6XNITYYLixkzz/N5VFlUhVRv2S710afxl7/05FNdIZFn8 M3k= Content-Type: multipart/mixed; boundary="------------y3Ynl0pSw8DqILSbwBC5UlF0" Message-ID: Date: Wed, 14 Sep 2022 11:31:34 -0600 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Content-Language: en-US To: "gcc-patches@gcc.gnu.org" From: Sandra Loosemore Subject: [PATCH] OpenMP: Enable vectorization in all OpenMP loops X-ClientProxiedBy: svr-orw-mbx-13.mgc.mentorg.com (147.34.90.213) To svr-orw-mbx-13.mgc.mentorg.com (147.34.90.213) X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,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: --------------y3Ynl0pSw8DqILSbwBC5UlF0 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit GCC presently enables the loop vectorizer at lower optimization levels for OpenMP loops with the "simd" specifier than it does for loops without it. The "simd" specifier isn't defined to be purely an optimization hint to the compiler; it also has semantic effects like changing the privatization of the loop variable. It seems reasonable to decouple the additional vectorization from those semantic effects and apply it also to work-sharing loops without the "simd" specifier at the same optimization levels. I've tested this patch on x86_64-linux-gnu-amdgcn, plain x86_64-linux-gnu, and aarch64-linux-gnu. OK for mainline? -Sandra --------------y3Ynl0pSw8DqILSbwBC5UlF0 Content-Type: text/x-patch; charset="UTF-8"; name="0001-OpenMP-Enable-vectorization-in-all-OpenMP-loops.patch" Content-Disposition: attachment; filename="0001-OpenMP-Enable-vectorization-in-all-OpenMP-loops.patch" Content-Transfer-Encoding: base64 RnJvbSAxNWM2ZjZiNmJjMzk2ZjUzNDc0ZWEzODBmNTA2YTdmNzRkN2EwNWFmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBTYW5kcmEgTG9vc2Vtb3JlIDxzYW5kcmFAY29kZXNv dXJjZXJ5LmNvbT4KRGF0ZTogVHVlLCAxMyBTZXAgMjAyMiAyMzo1MDoyNyArMDAwMApTdWJq ZWN0OiBbUEFUQ0hdIE9wZW5NUDogRW5hYmxlIHZlY3Rvcml6YXRpb24gaW4gYWxsIE9wZW5N UCBsb29wcwoKVGhpcyBwYXRjaCBtYXJrcyBhbGwgT3Blbk1QIHdvcmtzaGFyaW5nIGxvb3Bz IChub3QganVzdCB0aG9zZSB3aXRoIHRoZQpzaW1kIGRlc2NyaXB0b3IpIGFzIGNhbmRpZGF0 ZXMgZm9yIHZlY3Rvcml6YXRpb24gd2hlbiAtZnRyZWUtbG9vcC1vcHRpbWl6ZQppcyBhY3Rp dmUgYW5kIGxvb3AgdmVjdG9yaXphdGlvbiBpcyBub3QgZXhwbGljaXRseSBkaXNhYmxlZCB3 aXRoCi1mbm8tdHJlZS1sb29wLXZlY3Rvcml6ZS4KCmdjYy9DaGFuZ2VMb2c6CgoJKiBvbXAt ZXhwYW5kLmNjIChtYXliZV9hdXRvX3ZlY3Rvcml6ZV9sb29wKTogTmV3LgoJKGV4cGFuZF9v bXBfZm9yX2dlbmVyaWMpOiBDYWxsIGl0LgoJKGV4cGFuZF9vbXBfZm9yX3N0YXRpY19jaHVu ayk6IExpa2V3aXNlLgoJKGV4cGFuZF9vbXBfdGFza2xvb3BfZm9yX2lubmVyKTogTGlrZXdp c2UuCgkoZXhwYW5kX29hY2NfZm9yKTogTGlrZXdpc2UuCgpnY2MvdGVzdHN1aXRlL0NoYW5n ZUxvZzoKCSogYy1jKystY29tbW9uL2dvbXAvdmVjdG9yaXplLTEuYzogTmV3LgoJKiBjLWMr Ky1jb21tb24vZ29tcC92ZWN0b3JpemUtMi5jOiBOZXcuCgkqIGMtYysrLWNvbW1vbi9nb21w L3ZlY3Rvcml6ZS0zLmM6IE5ldy4KCSogYy1jKystY29tbW9uL2dvbXAvdmVjdG9yaXplLXMu YzogTmV3LgoJKiBnY2MuZGcvZ29tcC9wcjQ2MDMyLTIuYzogQ29tcGlsZSB3aXRoIC1mbm8t dHJlZS1sb29wLXZlY3Rvcml6ZS4KCSogZ2NjLmRnL2dvbXAvcHI0NjAzMi0zLmM6IExpa2V3 aXNlLgotLS0KIGdjYy9vbXAtZXhwYW5kLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IDIzICsrKysrKysrKysrKysrCiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21w L3ZlY3Rvcml6ZS0xLmMgfCAzMSArKysrKysrKysrKysrKysrKysrCiBnY2MvdGVzdHN1aXRl L2MtYysrLWNvbW1vbi9nb21wL3ZlY3Rvcml6ZS0yLmMgfCAzMSArKysrKysrKysrKysrKysr KysrCiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL3ZlY3Rvcml6ZS0zLmMgfCAz MSArKysrKysrKysrKysrKysrKysrCiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21w L3ZlY3Rvcml6ZS1zLmMgfCAzMSArKysrKysrKysrKysrKysrKysrCiBnY2MvdGVzdHN1aXRl L2djYy5kZy9nb21wL3ByNDYwMzItMi5jICAgICAgICAgfCAgMiArLQogZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvZ29tcC9wcjQ2MDMyLTMuYyAgICAgICAgIHwgIDIgKy0KIDcgZmlsZXMgY2hh bmdlZCwgMTQ5IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29tcC92ZWN0b3JpemUtMS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29tcC92ZWN0 b3JpemUtMi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21t b24vZ29tcC92ZWN0b3JpemUtMy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0 ZS9jLWMrKy1jb21tb24vZ29tcC92ZWN0b3JpemUtcy5jCgpkaWZmIC0tZ2l0IGEvZ2NjL29t cC1leHBhbmQuY2MgYi9nY2Mvb21wLWV4cGFuZC5jYwppbmRleCBmY2FmNGY2ZDRlOS4uYmM3 NTM4MTQxMDIgMTAwNjQ0Ci0tLSBhL2djYy9vbXAtZXhwYW5kLmNjCisrKyBiL2djYy9vbXAt ZXhwYW5kLmNjCkBAIC0zNzExLDYgKzM3MTEsMjIgQEAgZXhwYW5kX29tcF9mb3Jfb3JkZXJl ZF9sb29wcyAoc3RydWN0IG9tcF9mb3JfZGF0YSAqZmQsIHRyZWUgKmNvdW50cywKICAgcmV0 dXJuIGNvbnRfYmI7CiB9CiAKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgdmFyaW91cyBzdWJy b3V0aW5lcyBvZiBleHBhbmRfb21wX2Zvci4KKyAgIElmIG5vdCAtZm5vLXRyZWUtbG9vcC12 ZWN0b3JpemUgYW5kIC1mdHJlZS1sb29wLW9wdGltaXplLAorICAgaGludCB0aGF0IHdlIHdh bnQgdG8gdmVjdG9yaXplIHRoZSBsb29wIExPT1AuICAqLworc3RhdGljIHZvaWQKK21heWJl X2F1dG9fdmVjdG9yaXplX2xvb3AgKGNsYXNzIGxvb3AgKmxvb3ApCit7CisgIGlmICgoZmxh Z190cmVlX2xvb3BfdmVjdG9yaXplCisgICAgICAgfHwgIU9QVElPTl9TRVRfUCAoZmxhZ190 cmVlX2xvb3BfdmVjdG9yaXplKSkKKyAgICAgICYmIGZsYWdfdHJlZV9sb29wX29wdGltaXpl KQorICAgIHsKKyAgICAgIGxvb3AtPmZvcmNlX3ZlY3Rvcml6ZSA9IHRydWU7CisgICAgICBj ZnVuLT5oYXNfZm9yY2VfdmVjdG9yaXplX2xvb3BzID0gdHJ1ZTsKKyAgICB9Cit9CisKKwog LyogQSBzdWJyb3V0aW5lIG9mIGV4cGFuZF9vbXBfZm9yLiAgR2VuZXJhdGUgY29kZSBmb3Ig YSBwYXJhbGxlbAogICAgbG9vcCB3aXRoIGFueSBzY2hlZHVsZS4gIEdpdmVuIHBhcmFtZXRl cnM6CiAKQEAgLTQ2NTAsNiArNDY2Niw3IEBAIGV4cGFuZF9vbXBfZm9yX2dlbmVyaWMgKHN0 cnVjdCBvbXBfcmVnaW9uICpyZWdpb24sCiAgICAgICBuZXdfbG9vcC0+aGVhZGVyID0gbDBf YmI7CiAgICAgICBuZXdfbG9vcC0+bGF0Y2ggPSBsMl9iYjsKICAgICAgIGFkZF9sb29wIChu ZXdfbG9vcCwgb3V0ZXJfbG9vcCk7CisgICAgICBtYXliZV9hdXRvX3ZlY3Rvcml6ZV9sb29w IChuZXdfbG9vcCk7CiAKICAgICAgIC8qIEFsbG9jYXRlIGEgbG9vcCBzdHJ1Y3R1cmUgZm9y IHRoZSBvcmlnaW5hbCBsb29wIHVubGVzcyB3ZSBhbHJlYWR5CiAJIGhhZCBvbmUuICAqLwpA QCAtNDY2MCw2ICs0Njc3LDcgQEAgZXhwYW5kX29tcF9mb3JfZ2VuZXJpYyAoc3RydWN0IG9t cF9yZWdpb24gKnJlZ2lvbiwKIAkgIG9yaWdfbG9vcC0+aGVhZGVyID0gbDFfYmI7CiAJICAv KiBUaGUgbG9vcCBtYXkgaGF2ZSBtdWx0aXBsZSBsYXRjaGVzLiAgKi8KIAkgIGFkZF9sb29w IChvcmlnX2xvb3AsIG5ld19sb29wKTsKKwkgIG1heWJlX2F1dG9fdmVjdG9yaXplX2xvb3Ag KG9yaWdfbG9vcCk7CiAJfQogICAgIH0KIH0KQEAgLTU1NTEsNiArNTU2OSw3IEBAIGV4cGFu ZF9vbXBfZm9yX3N0YXRpY19ub2NodW5rIChzdHJ1Y3Qgb21wX3JlZ2lvbiAqcmVnaW9uLAog ICAgICAgaWYgKGNvbGxhcHNlX2JiID09IE5VTEwpCiAJbG9vcC0+bGF0Y2ggPSBjb250X2Ji OwogICAgICAgYWRkX2xvb3AgKGxvb3AsIGJvZHlfYmItPmxvb3BfZmF0aGVyKTsKKyAgICAg IG1heWJlX2F1dG9fdmVjdG9yaXplX2xvb3AgKGxvb3ApOwogICAgIH0KIH0KIApAQCAtNjI2 OCw2ICs2Mjg3LDcgQEAgZXhwYW5kX29tcF9mb3Jfc3RhdGljX2NodW5rIChzdHJ1Y3Qgb21w X3JlZ2lvbiAqcmVnaW9uLAogICAgICAgdHJpcF9sb29wLT5oZWFkZXIgPSBpdGVyX3BhcnRf YmI7CiAgICAgICB0cmlwX2xvb3AtPmxhdGNoID0gdHJpcF91cGRhdGVfYmI7CiAgICAgICBh ZGRfbG9vcCAodHJpcF9sb29wLCBpdGVyX3BhcnRfYmItPmxvb3BfZmF0aGVyKTsKKyAgICAg IG1heWJlX2F1dG9fdmVjdG9yaXplX2xvb3AgKHRyaXBfbG9vcCk7CiAKICAgICAgIGlmIChs b29wICE9IGVudHJ5X2JiLT5sb29wX2ZhdGhlcikKIAl7CkBAIC02Mjg1LDYgKzYzMDUsNyBA QCBleHBhbmRfb21wX2Zvcl9zdGF0aWNfY2h1bmsgKHN0cnVjdCBvbXBfcmVnaW9uICpyZWdp b24sCiAJICBpZiAoY29sbGFwc2VfYmIgPT0gTlVMTCkKIAkgICAgbG9vcC0+bGF0Y2ggPSBj b250X2JiOwogCSAgYWRkX2xvb3AgKGxvb3AsIHRyaXBfbG9vcCk7CisJICBtYXliZV9hdXRv X3ZlY3Rvcml6ZV9sb29wIChsb29wKTsKIAl9CiAgICAgfQogfQpAQCAtNzQzOSw2ICs3NDYw LDcgQEAgZXhwYW5kX29tcF90YXNrbG9vcF9mb3JfaW5uZXIgKHN0cnVjdCBvbXBfcmVnaW9u ICpyZWdpb24sCiAgICAgICBpZiAoY29sbGFwc2VfYmIgPT0gTlVMTCkKIAlsb29wLT5sYXRj aCA9IGNvbnRfYmI7CiAgICAgICBhZGRfbG9vcCAobG9vcCwgYm9keV9iYi0+bG9vcF9mYXRo ZXIpOworICAgICAgbWF5YmVfYXV0b192ZWN0b3JpemVfbG9vcCAobG9vcCk7CiAgICAgfQog fQogCkBAIC04MDA2LDYgKzgwMjgsNyBAQCBleHBhbmRfb2FjY19mb3IgKHN0cnVjdCBvbXBf cmVnaW9uICpyZWdpb24sIHN0cnVjdCBvbXBfZm9yX2RhdGEgKmZkKQogCSAgICAgIGlubmVy X2xvb3AtPmhlYWRlciA9IGVsZW1fYm9keV9iYjsKIAkgICAgICBpbm5lcl9sb29wLT5sYXRj aCA9IGVsZW1fY29udF9iYjsKIAkgICAgICBhZGRfbG9vcCAoaW5uZXJfbG9vcCwgYm9keV9s b29wKTsKKwkgICAgICBtYXliZV9hdXRvX3ZlY3Rvcml6ZV9sb29wIChpbm5lcl9sb29wKTsK IAkgICAgfQogCX0KICAgICB9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNv bW1vbi9nb21wL3ZlY3Rvcml6ZS0xLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9n b21wL3ZlY3Rvcml6ZS0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmM1MmI2ZmQzMDM5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMr Ky1jb21tb24vZ29tcC92ZWN0b3JpemUtMS5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qIHsgZGct ZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1mb3Blbm1wIC1PMSAtZmR1bXAt dHJlZS12ZWN0LWRldGFpbHMiIH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIGluIGZ1bmN0aW9uIiAyICJ2ZWN0IiB9IH0g Ki8KKworLyogVGVzdCB0aGF0IE9NUCBsb29wcyBhcmUgdmVjdG9yaXplZCBhdCBhbGwgb3B0 aW1pemF0aW9uIGxldmVscworICAgd2hldGhlciBvciBub3QgdGhlICJzaW1kIiBzcGVjaWZp ZXIgaXMgcHJlc2VudC4gICovCisKK2V4dGVybiB2b2lkIGluaXQgKGludCBuLCBpbnQgKnAp OworZXh0ZXJuIGludCBnIChpbnQgbiwgaW50ICpwKTsKKworaW50IGYxICh2b2lkKQorewor ICBpbnQgYTFbMzJdLCBhMlszMl0sIGEzWzMyXTsKKyAgaW5pdCAoMzIsIGExKTsKKyAgaW5p dCAoMzIsIGEyKTsKKyAgI3ByYWdtYSBvbXAgZm9yCisgIGZvciAoaW50IGkgPSAwOyBpIDwg MzI7IGkrKykKKyAgICBhM1tpXSA9IGExW2ldICsgYTJbaV07CisgIHJldHVybiBnICg0LCBh Myk7Cit9CisKK2ludCBmMiAodm9pZCkKK3sKKyAgaW50IGExWzMyXSwgYTJbMzJdLCBhM1sz Ml07CisgIGluaXQgKDMyLCBhMSk7CisgIGluaXQgKDMyLCBhMik7CisgICNwcmFnbWEgb21w IGZvciBzaW1kCisgIGZvciAoaW50IGkgPSAwOyBpIDwgMzI7IGkrKykKKyAgICBhM1tpXSA9 IGExW2ldICsgYTJbaV07CisgIHJldHVybiBnICg0LCBhMyk7Cit9CmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL3ZlY3Rvcml6ZS0yLmMgYi9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL3ZlY3Rvcml6ZS0yLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc4YTEwZTRmZjU2Ci0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29tcC92ZWN0b3JpemUtMi5jCkBAIC0w LDAgKzEsMzEgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii1mb3Blbm1wIC1PMiAtZmR1bXAtdHJlZS12ZWN0LWRldGFpbHMiIH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIGluIGZ1 bmN0aW9uIiAyICJ2ZWN0IiB9IH0gKi8KKworLyogVGVzdCB0aGF0IE9NUCBsb29wcyBhcmUg dmVjdG9yaXplZCBhdCBhbGwgb3B0aW1pemF0aW9uIGxldmVscworICAgd2hldGhlciBvciBu b3QgdGhlICJzaW1kIiBzcGVjaWZpZXIgaXMgcHJlc2VudC4gICovCisKK2V4dGVybiB2b2lk IGluaXQgKGludCBuLCBpbnQgKnApOworZXh0ZXJuIGludCBnIChpbnQgbiwgaW50ICpwKTsK KworaW50IGYxICh2b2lkKQoreworICBpbnQgYTFbMzJdLCBhMlszMl0sIGEzWzMyXTsKKyAg aW5pdCAoMzIsIGExKTsKKyAgaW5pdCAoMzIsIGEyKTsKKyAgI3ByYWdtYSBvbXAgZm9yCisg IGZvciAoaW50IGkgPSAwOyBpIDwgMzI7IGkrKykKKyAgICBhM1tpXSA9IGExW2ldICsgYTJb aV07CisgIHJldHVybiBnICg0LCBhMyk7Cit9CisKK2ludCBmMiAodm9pZCkKK3sKKyAgaW50 IGExWzMyXSwgYTJbMzJdLCBhM1szMl07CisgIGluaXQgKDMyLCBhMSk7CisgIGluaXQgKDMy LCBhMik7CisgICNwcmFnbWEgb21wIGZvciBzaW1kCisgIGZvciAoaW50IGkgPSAwOyBpIDwg MzI7IGkrKykKKyAgICBhM1tpXSA9IGExW2ldICsgYTJbaV07CisgIHJldHVybiBnICg0LCBh Myk7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL3Zl Y3Rvcml6ZS0zLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL3ZlY3Rvcml6 ZS0zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk4NzkzOWZi MmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29t cC92ZWN0b3JpemUtMy5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9 ICovCisvKiB7IGRnLW9wdGlvbnMgIi1mb3Blbm1wIC1PMyAtZmR1bXAtdHJlZS12ZWN0LWRl dGFpbHMiIH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVj dG9yaXplZCAxIGxvb3BzIGluIGZ1bmN0aW9uIiAyICJ2ZWN0IiB9IH0gKi8KKworLyogVGVz dCB0aGF0IE9NUCBsb29wcyBhcmUgdmVjdG9yaXplZCBhdCBhbGwgb3B0aW1pemF0aW9uIGxl dmVscworICAgd2hldGhlciBvciBub3QgdGhlICJzaW1kIiBzcGVjaWZpZXIgaXMgcHJlc2Vu dC4gICovCisKK2V4dGVybiB2b2lkIGluaXQgKGludCBuLCBpbnQgKnApOworZXh0ZXJuIGlu dCBnIChpbnQgbiwgaW50ICpwKTsKKworaW50IGYxICh2b2lkKQoreworICBpbnQgYTFbMzJd LCBhMlszMl0sIGEzWzMyXTsKKyAgaW5pdCAoMzIsIGExKTsKKyAgaW5pdCAoMzIsIGEyKTsK KyAgI3ByYWdtYSBvbXAgZm9yCisgIGZvciAoaW50IGkgPSAwOyBpIDwgMzI7IGkrKykKKyAg ICBhM1tpXSA9IGExW2ldICsgYTJbaV07CisgIHJldHVybiBnICg0LCBhMyk7Cit9CisKK2lu dCBmMiAodm9pZCkKK3sKKyAgaW50IGExWzMyXSwgYTJbMzJdLCBhM1szMl07CisgIGluaXQg KDMyLCBhMSk7CisgIGluaXQgKDMyLCBhMik7CisgICNwcmFnbWEgb21wIGZvciBzaW1kCisg IGZvciAoaW50IGkgPSAwOyBpIDwgMzI7IGkrKykKKyAgICBhM1tpXSA9IGExW2ldICsgYTJb aV07CisgIHJldHVybiBnICg0LCBhMyk7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2MtYysrLWNvbW1vbi9nb21wL3ZlY3Rvcml6ZS1zLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi9nb21wL3ZlY3Rvcml6ZS1zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmYzODJjOWFlYmEwCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9jLWMrKy1jb21tb24vZ29tcC92ZWN0b3JpemUtcy5jCkBAIC0wLDAgKzEsMzEgQEAK Ky8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1mb3Blbm1wIC1P cyAtZmR1bXAtdHJlZS12ZWN0LWRldGFpbHMiIH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIGluIGZ1bmN0aW9uIiAyICJ2 ZWN0IiB9IH0gKi8KKworLyogVGVzdCB0aGF0IE9NUCBsb29wcyBhcmUgdmVjdG9yaXplZCBh dCBhbGwgb3B0aW1pemF0aW9uIGxldmVscworICAgd2hldGhlciBvciBub3QgdGhlICJzaW1k IiBzcGVjaWZpZXIgaXMgcHJlc2VudC4gICovCisKK2V4dGVybiB2b2lkIGluaXQgKGludCBu LCBpbnQgKnApOworZXh0ZXJuIGludCBnIChpbnQgbiwgaW50ICpwKTsKKworaW50IGYxICh2 b2lkKQoreworICBpbnQgYTFbMzJdLCBhMlszMl0sIGEzWzMyXTsKKyAgaW5pdCAoMzIsIGEx KTsKKyAgaW5pdCAoMzIsIGEyKTsKKyAgI3ByYWdtYSBvbXAgZm9yCisgIGZvciAoaW50IGkg PSAwOyBpIDwgMzI7IGkrKykKKyAgICBhM1tpXSA9IGExW2ldICsgYTJbaV07CisgIHJldHVy biBnICg0LCBhMyk7Cit9CisKK2ludCBmMiAodm9pZCkKK3sKKyAgaW50IGExWzMyXSwgYTJb MzJdLCBhM1szMl07CisgIGluaXQgKDMyLCBhMSk7CisgIGluaXQgKDMyLCBhMik7CisgICNw cmFnbWEgb21wIGZvciBzaW1kCisgIGZvciAoaW50IGkgPSAwOyBpIDwgMzI7IGkrKykKKyAg ICBhM1tpXSA9IGExW2ldICsgYTJbaV07CisgIHJldHVybiBnICg0LCBhMyk7Cit9CmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9nb21wL3ByNDYwMzItMi5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvZ29tcC9wcjQ2MDMyLTIuYwppbmRleCAyZTU2MjYxODQ4OS4uY2U5 MjVkMWJkODkgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2dvbXAvcHI0NjAz Mi0yLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZ29tcC9wcjQ2MDMyLTIuYwpAQCAt MSw1ICsxLDUgQEAKIC8qIHsgZGctZG8gY29tcGlsZSB9ICovCi0vKiB7IGRnLW9wdGlvbnMg Ii1PMiAtZm5vLXRyZWUtdmVjdG9yaXplIC1mb3Blbm1wIC1zdGQ9Yzk5IC1maXBhLXB0YSAt ZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mbm8t dHJlZS12ZWN0b3JpemUgLWZuby10cmVlLWxvb3AtdmVjdG9yaXplIC1mb3Blbm1wIC1zdGQ9 Yzk5IC1maXBhLXB0YSAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8KIAogI2RlZmluZSBO IDIKIApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZ29tcC9wcjQ2MDMyLTMu YyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2dvbXAvcHI0NjAzMi0zLmMKaW5kZXggZGExYWI0 ODczODUuLjg2NmI3YzlhZGE1IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9n b21wL3ByNDYwMzItMy5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2dvbXAvcHI0NjAz Mi0zLmMKQEAgLTEsNSArMSw1IEBACiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwotLyogeyBk Zy1vcHRpb25zICItTzIgLWZuby10cmVlLXZlY3Rvcml6ZSAtZm9wZW5tcCAtc3RkPWM5OSAt ZmlwYS1wdGEgLWZkdW1wLXRyZWUtb3B0aW1pemVkIiB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii1PMiAtZm5vLXRyZWUtdmVjdG9yaXplIC1mbm8tdHJlZS1sb29wLXZlY3Rvcml6ZSAtZm9w ZW5tcCAtc3RkPWM5OSAtZmlwYS1wdGEgLWZkdW1wLXRyZWUtb3B0aW1pemVkIiB9ICovCiAK ICNkZWZpbmUgTiAyCiAKLS0gCjIuMzEuMQoK --------------y3Ynl0pSw8DqILSbwBC5UlF0--