From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 96D05380DFBD for ; Tue, 28 Jun 2022 14:04:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 96D05380DFBD Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5D36B1477; Tue, 28 Jun 2022 07:04:11 -0700 (PDT) Received: from [10.57.9.90] (unknown [10.57.9.90]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 71ED03F5A1; Tue, 28 Jun 2022 07:04:10 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------8LA8Sc0UqFsE0N9GWrZ2O0QM" Message-ID: <11918543-8a40-211d-771d-4e2dbaeb9eb6@arm.com> Date: Tue, 28 Jun 2022 15:04:02 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: Re: [PATCH][AArch64] Implement ACLE Data Intrinsics Content-Language: en-US To: "gcc-patches@gcc.gnu.org" , Kyrylo Tkachov , richard.sandiford@arm.com References: From: "Andre Vieira (lists)" In-Reply-To: X-Spam-Status: No, score=-28.1 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_LOTSOFHASH, KAM_SHORT, NICE_REPLY_A, SPF_HELO_NONE, SPF_NONE, 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: Tue, 28 Jun 2022 14:04:14 -0000 This is a multi-part message in MIME format. --------------8LA8Sc0UqFsE0N9GWrZ2O0QM Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 17/06/2022 11:54, Richard Sandiford wrote: > "Andre Vieira (lists)" writes: >> Hi, >> >> This patch adds support for the ACLE Data Intrinsics to the AArch64 port. >> >> Bootstrapped and regression tested on aarch64-none-linux. >> >> OK for trunk? > Sorry for the slow review. No worries :) > >> +{ \ >> + size_t size = sizeof (TYPE) * __CHAR_BIT__; \ >> + rotate = rotate % size; \ >> + return value >> rotate | value << (size - rotate); \ > This runs into UB for rotate == 0. I assume it's because of the value << size no? I added a modulo, I assume it's legal to shift by 0? This OK? --------------8LA8Sc0UqFsE0N9GWrZ2O0QM Content-Type: text/plain; charset=UTF-8; name="data_intrinsicsv2.patch" Content-Disposition: attachment; filename="data_intrinsicsv2.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWJ1aWx0aW5zLmNjIGIv Z2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtYnVpbHRpbnMuY2MKaW5kZXggZTBhNzQxYWM2 NjMxODg3MTNlMjFmNDU3YWZmYTU3MjE3ZDA3NDc4My4uNjlmMWZiMzYwNGE0ODFmYTM3OGQx MDVjZjNlZTk4ZWRlYzFiYTYxOSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2Fh cmNoNjQtYnVpbHRpbnMuY2MKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtYnVp bHRpbnMuY2MKQEAgLTYxMyw2ICs2MTMsMTIgQEAgZW51bSBhYXJjaDY0X2J1aWx0aW5zCiAg IEFBUkNINjRfTFM2NF9CVUlMVElOX1NUNjRCLAogICBBQVJDSDY0X0xTNjRfQlVJTFRJTl9T VDY0QlYsCiAgIEFBUkNINjRfTFM2NF9CVUlMVElOX1NUNjRCVjAsCisgIEFBUkNINjRfUkVW MTYsCisgIEFBUkNINjRfUkVWMTZMLAorICBBQVJDSDY0X1JFVjE2TEwsCisgIEFBUkNINjRf UkJJVCwKKyAgQUFSQ0g2NF9SQklUTCwKKyAgQUFSQ0g2NF9SQklUTEwsCiAgIEFBUkNINjRf QlVJTFRJTl9NQVgKIH07CiAKQEAgLTE2NjQsMTAgKzE2NzAsNDEgQEAgYWFyY2g2NF9pbml0 X2xzNjRfYnVpbHRpbnMgKHZvaWQpCiAgICAgICA9IGFhcmNoNjRfZ2VuZXJhbF9hZGRfYnVp bHRpbiAoZGF0YVtpXS5uYW1lLCBkYXRhW2ldLnR5cGUsIGRhdGFbaV0uY29kZSk7CiB9CiAK K3N0YXRpYyB2b2lkCithYXJjaDY0X2luaXRfZGF0YV9pbnRyaW5zaWNzICh2b2lkKQorewor ICB0cmVlIHVpbnQzMl9mbnR5cGUgPSBidWlsZF9mdW5jdGlvbl90eXBlX2xpc3QgKHVpbnQz Ml90eXBlX25vZGUsCisJCQkJCQkgdWludDMyX3R5cGVfbm9kZSwgTlVMTF9UUkVFKTsKKyAg dHJlZSB1bG9uZ19mbnR5cGUgPSBidWlsZF9mdW5jdGlvbl90eXBlX2xpc3QgKGxvbmdfdW5z aWduZWRfdHlwZV9ub2RlLAorCQkJCQkJbG9uZ191bnNpZ25lZF90eXBlX25vZGUsCisJCQkJ CQlOVUxMX1RSRUUpOworICB0cmVlIHVpbnQ2NF9mbnR5cGUgPSBidWlsZF9mdW5jdGlvbl90 eXBlX2xpc3QgKHVpbnQ2NF90eXBlX25vZGUsCisJCQkJCQkgdWludDY0X3R5cGVfbm9kZSwg TlVMTF9UUkVFKTsKKyAgYWFyY2g2NF9idWlsdGluX2RlY2xzW0FBUkNINjRfUkVWMTZdCisg ICAgPSBhYXJjaDY0X2dlbmVyYWxfYWRkX2J1aWx0aW4gKCJfX2J1aWx0aW5fYWFyY2g2NF9y ZXYxNiIsIHVpbnQzMl9mbnR5cGUsCisJCQkJICAgQUFSQ0g2NF9SRVYxNik7CisgIGFhcmNo NjRfYnVpbHRpbl9kZWNsc1tBQVJDSDY0X1JFVjE2TF0KKyAgICA9IGFhcmNoNjRfZ2VuZXJh bF9hZGRfYnVpbHRpbiAoIl9fYnVpbHRpbl9hYXJjaDY0X3JldjE2bCIsIHVsb25nX2ZudHlw ZSwKKwkJCQkgICBBQVJDSDY0X1JFVjE2TCk7CisgIGFhcmNoNjRfYnVpbHRpbl9kZWNsc1tB QVJDSDY0X1JFVjE2TExdCisgICAgPSBhYXJjaDY0X2dlbmVyYWxfYWRkX2J1aWx0aW4gKCJf X2J1aWx0aW5fYWFyY2g2NF9yZXYxNmxsIiwgdWludDY0X2ZudHlwZSwKKwkJCQkgICBBQVJD SDY0X1JFVjE2TEwpOworICBhYXJjaDY0X2J1aWx0aW5fZGVjbHNbQUFSQ0g2NF9SQklUXQor ICAgID0gYWFyY2g2NF9nZW5lcmFsX2FkZF9idWlsdGluICgiX19idWlsdGluX2FhcmNoNjRf cmJpdCIsIHVpbnQzMl9mbnR5cGUsCisJCQkJICAgQUFSQ0g2NF9SQklUKTsKKyAgYWFyY2g2 NF9idWlsdGluX2RlY2xzW0FBUkNINjRfUkJJVExdCisgICAgPSBhYXJjaDY0X2dlbmVyYWxf YWRkX2J1aWx0aW4gKCJfX2J1aWx0aW5fYWFyY2g2NF9yYml0bCIsIHVsb25nX2ZudHlwZSwK KwkJCQkgICBBQVJDSDY0X1JCSVRMKTsKKyAgYWFyY2g2NF9idWlsdGluX2RlY2xzW0FBUkNI NjRfUkJJVExMXQorICAgID0gYWFyY2g2NF9nZW5lcmFsX2FkZF9idWlsdGluICgiX19idWls dGluX2FhcmNoNjRfcmJpdGxsIiwgdWludDY0X2ZudHlwZSwKKwkJCQkgICBBQVJDSDY0X1JC SVRMTCk7Cit9CisKIC8qIEltcGxlbWVudCAjcHJhZ21hIEdDQyBhYXJjaDY0ICJhcm1fYWNs ZS5oIi4gICovCiB2b2lkCiBoYW5kbGVfYXJtX2FjbGVfaCAodm9pZCkKIHsKKyAgYWFyY2g2 NF9pbml0X2RhdGFfaW50cmluc2ljcyAoKTsKICAgaWYgKFRBUkdFVF9MUzY0KQogICAgIGFh cmNoNjRfaW5pdF9sczY0X2J1aWx0aW5zICgpOwogfQpAQCAtMjM5Myw2ICsyNDMwLDQwIEBA IGFhcmNoNjRfZXhwYW5kX2J1aWx0aW5fbWVtdGFnIChpbnQgZmNvZGUsIHRyZWUgZXhwLCBy dHggdGFyZ2V0KQogICBlbWl0X2luc24gKHBhdCk7CiAgIHJldHVybiB0YXJnZXQ7CiB9Cisv KiBGdW5jdGlvbiB0byBleHBhbmQgYW4gZXhwcmVzc2lvbiBFWFAgd2hpY2ggY2FsbHMgb25l IG9mIHRoZSBBQ0xFIERhdGEKKyAgIEludHJpbnNpYyBidWlsdGlucyBGQ09ERSB3aXRoIHRo ZSByZXN1bHQgZ29pbmcgdG8gVEFSR0VULiAgKi8KK3N0YXRpYyBydHgKK2FhcmNoNjRfZXhw YW5kX2J1aWx0aW5fZGF0YV9pbnRyaW5zaWMgKHVuc2lnbmVkIGludCBmY29kZSwgdHJlZSBl eHAsIHJ0eCB0YXJnZXQpCit7CisgIGV4cGFuZF9vcGVyYW5kIG9wc1syXTsKKyAgbWFjaGlu ZV9tb2RlIG1vZGUgPSBHRVRfTU9ERSAodGFyZ2V0KTsKKyAgY3JlYXRlX291dHB1dF9vcGVy YW5kICgmb3BzWzBdLCB0YXJnZXQsIG1vZGUpOworICBjcmVhdGVfaW5wdXRfb3BlcmFuZCAo Jm9wc1sxXSwgZXhwYW5kX25vcm1hbCAoQ0FMTF9FWFBSX0FSRyAoZXhwLCAwKSksIG1vZGUp OworICBlbnVtIGluc25fY29kZSBpY29kZTsKKyAgc3dpdGNoIChmY29kZSkKKyAgICB7Cisg ICAgY2FzZSBBQVJDSDY0X1JFVjE2OgorICAgIGNhc2UgQUFSQ0g2NF9SRVYxNkw6CisgICAg Y2FzZSBBQVJDSDY0X1JFVjE2TEw6CisgICAgICBpZiAobW9kZSA9PSBTSW1vZGUpCisJaWNv ZGUgPSBDT0RFX0ZPUl9hYXJjaDY0X3JldjE2c2k7CisgICAgICBlbHNlCisJaWNvZGUgPSBD T0RFX0ZPUl9hYXJjaDY0X3JldjE2ZGk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEFBUkNI NjRfUkJJVDoKKyAgICBjYXNlIEFBUkNINjRfUkJJVEw6CisgICAgY2FzZSBBQVJDSDY0X1JC SVRMTDoKKyAgICAgIGlmIChtb2RlID09IFNJbW9kZSkKKwlpY29kZSA9IENPREVfRk9SX2Fh cmNoNjRfcmJpdHNpOworICAgICAgZWxzZQorCWljb2RlID0gQ09ERV9GT1JfYWFyY2g2NF9y Yml0ZGk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZ2NjX3VucmVhY2hh YmxlICgpOworICAgIH0KKyAgZXhwYW5kX2luc24gKGljb2RlLCAyLCBvcHMpOworICByZXR1 cm4gdGFyZ2V0OworfQogCiAvKiBFeHBhbmQgYW4gZXhwcmVzc2lvbiBFWFAgYXMgZnBzciBv ciBmcGNyIHNldHRlciAoZGVwZW5kaW5nIG9uCiAgICBVTlNQRUMpIHVzaW5nIE1PREUuICAq LwpAQCAtMjU1MSw2ICsyNjIyLDkgQEAgYWFyY2g2NF9nZW5lcmFsX2V4cGFuZF9idWlsdGlu ICh1bnNpZ25lZCBpbnQgZmNvZGUsIHRyZWUgZXhwLCBydHggdGFyZ2V0LAogICBpZiAoZmNv ZGUgPj0gQUFSQ0g2NF9NRU1UQUdfQlVJTFRJTl9TVEFSVAogICAgICAgJiYgZmNvZGUgPD0g QUFSQ0g2NF9NRU1UQUdfQlVJTFRJTl9FTkQpCiAgICAgcmV0dXJuIGFhcmNoNjRfZXhwYW5k X2J1aWx0aW5fbWVtdGFnIChmY29kZSwgZXhwLCB0YXJnZXQpOworICBpZiAoZmNvZGUgPj0g QUFSQ0g2NF9SRVYxNgorICAgICAgJiYgZmNvZGUgPD0gQUFSQ0g2NF9SQklUTEwpCisgICAg cmV0dXJuIGFhcmNoNjRfZXhwYW5kX2J1aWx0aW5fZGF0YV9pbnRyaW5zaWMgKGZjb2RlLCBl eHAsIHRhcmdldCk7CiAKICAgZ2NjX3VucmVhY2hhYmxlICgpOwogfQpkaWZmIC0tZ2l0IGEv Z2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQubWQgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFy Y2g2NC5tZAppbmRleCBhY2VjOGMxMTQ2NzY1YzBmYWM3M2MxNTM1MTg1MzMyNGI4ZjAzMjA5 Li5lZjBhZWQyNWM2YjI2ZWZmNjFmOWY2MDMwZGM1OTIxYTUzNGUzZDE5IDEwMDY0NAotLS0g YS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5tZAorKysgYi9nY2MvY29uZmlnL2FhcmNo NjQvYWFyY2g2NC5tZApAQCAtNDk1MCw3ICs0OTUwLDcgQEAgKGRlZmluZV9leHBhbmQgImZm czxtb2RlPjIiCiAgICAgcnR4IGNjcmVnID0gYWFyY2g2NF9nZW5fY29tcGFyZV9yZWcgKEVR LCBvcGVyYW5kc1sxXSwgY29uc3QwX3J0eCk7CiAgICAgcnR4IHggPSBnZW5fcnR4X05FIChW T0lEbW9kZSwgY2NyZWcsIGNvbnN0MF9ydHgpOwogCi0gICAgZW1pdF9pbnNuIChnZW5fcmJp dDxtb2RlPjIgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSkpOworICAgIGVtaXRfaW5zbiAo Z2VuX2FhcmNoNjRfcmJpdCAoPE1PREU+bW9kZSwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFd KSk7CiAgICAgZW1pdF9pbnNuIChnZW5fY2x6PG1vZGU+MiAob3BlcmFuZHNbMF0sIG9wZXJh bmRzWzBdKSk7CiAgICAgZW1pdF9pbnNuIChnZW5fY3NpbmMzPG1vZGU+X2luc24gKG9wZXJh bmRzWzBdLCB4LCBvcGVyYW5kc1swXSwgY29uc3QwX3J0eCkpOwogICAgIERPTkU7CkBAIC00 OTk2LDcgKzQ5OTYsNyBAQCAoZGVmaW5lX2luc24gImNscnNiPG1vZGU+MiIKICAgWyhzZXRf YXR0ciAidHlwZSIgImNseiIpXQogKQogCi0oZGVmaW5lX2luc24gInJiaXQ8bW9kZT4yIgor KGRlZmluZV9pbnNuICJAYWFyY2g2NF9yYml0PG1vZGU+IgogICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpHUEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKIAkodW5zcGVjOkdQSSBbKG1h dGNoX29wZXJhbmQ6R1BJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIildIFVOU1BFQ19SQklU KSldCiAgICIiCkBAIC01MDE3LDcgKzUwMTcsNyBAQCAoZGVmaW5lX2luc25fYW5kX3NwbGl0 ICJjdHo8bW9kZT4yIgogICAicmVsb2FkX2NvbXBsZXRlZCIKICAgWyhjb25zdF9pbnQgMCld CiAgICIKLSAgZW1pdF9pbnNuIChnZW5fcmJpdDxtb2RlPjIgKG9wZXJhbmRzWzBdLCBvcGVy YW5kc1sxXSkpOworICBlbWl0X2luc24gKGdlbl9hYXJjaDY0X3JiaXQgKDxNT0RFPm1vZGUs IG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSkpOwogICBlbWl0X2luc24gKGdlbl9jbHo8bW9k ZT4yIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMF0pKTsKICAgRE9ORTsKICIpCkBAIC02MDIy LDYgKzYwMjIsMTMgQEAgKGRlZmluZV9pbnNuICJic3dhcGhpMiIKICAgWyhzZXRfYXR0ciAi dHlwZSIgInJldiIpXQogKQogCisoZGVmaW5lX2luc24gIkBhYXJjaDY0X3JldjE2PG1vZGU+ IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpHUEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1y IikKKwkodW5zcGVjOkdQSSBbKG1hdGNoX29wZXJhbmQ6R1BJIDEgInJlZ2lzdGVyX29wZXJh bmQiICJyIildIFVOU1BFQ19SRVYpKV0KKyAgIiIKKyAgInJldjE2XFx0JTx3PjAsICU8dz4x IgorICBbKHNldF9hdHRyICJ0eXBlIiAicmV2IildKQorCiAoZGVmaW5lX2luc24gIiphYXJj aDY0X2JmeGlsPG1vZGU+IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpHUEkgMCAicmVnaXN0 ZXJfb3BlcmFuZCIgIj1yLHIiKQogICAgIChpb3I6R1BJIChhbmQ6R1BJIChtYXRjaF9vcGVy YW5kOkdQSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciwwIikKZGlmZiAtLWdpdCBhL2djYy9j b25maWcvYWFyY2g2NC9hcm1fYWNsZS5oIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FybV9hY2xl LmgKaW5kZXggOTc3NWE0OGM2NTgyNWI0MjRkM2ViNDQyMzg0ZjVhYjg3YjczNGZkNy4uYTA0 NGJjNzQ1NTNmY2YyYTQ5YjcxMjkwMDgzZjNmMDcyZmQ1YTJjZSAxMDA2NDQKLS0tIGEvZ2Nj L2NvbmZpZy9hYXJjaDY0L2FybV9hY2xlLmgKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2Fy bV9hY2xlLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgX0dDQ19BUk1fQUNMRV9ICiAK ICNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KIAogI3ByYWdtYSBH Q0MgYWFyY2g2NCAiYXJtX2FjbGUuaCIKIApAQCAtMzUsNiArMzYsNTggQEAKIGV4dGVybiAi QyIgewogI2VuZGlmCiAKKyNkZWZpbmUgX0dDQ19BUk1fQUNMRV9ST1JfRk4oTkFNRSwgVFlQ RSkJCQkJICBcCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBUWVBFCQkJCQkgIFwK K19fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9f YXJ0aWZpY2lhbF9fKSkJICBcCitOQU1FIChUWVBFIF9fdmFsdWUsIHVpbnQzMl90IF9fcm90 YXRlKQkJCQkJICBcCit7CQkJCQkJCQkJICBcCisgIHNpemVfdCBfX3NpemUgPSBzaXplb2Yg KFRZUEUpICogX19DSEFSX0JJVF9fOwkJCQkgIFwKKyAgX19yb3RhdGUgPSBfX3JvdGF0ZSAl IF9fc2l6ZTsJCQkJCQkgIFwKKyAgcmV0dXJuIF9fdmFsdWUgPj4gX19yb3RhdGUgfCBfX3Zh bHVlIDw8ICgoX19zaXplIC0gX19yb3RhdGUpICUgX19zaXplKTsgXAorfQorCitfR0NDX0FS TV9BQ0xFX1JPUl9GTiAoX19yb3IsIHVpbnQzMl90KQorX0dDQ19BUk1fQUNMRV9ST1JfRk4g KF9fcm9ybCwgdW5zaWduZWQgbG9uZykKK19HQ0NfQVJNX0FDTEVfUk9SX0ZOIChfX3Jvcmxs LCB1aW50NjRfdCkKKworI3VuZGVmIF9HQ0NfQVJNX0FDTEVfUk9SX0ZOCisKKyNkZWZpbmUg X0dDQ19BUk1fQUNMRV9EQVRBX0ZOKE5BTUUsIEJVSUxUSU4sIElUWVBFLCBSVFlQRSkJICAg IFwKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIFJUWVBFCQkJCSAgICBcCitfX2F0 dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpIFwKK19fIyNOQU1FIChJVFlQRSBfX3ZhbHVlKQkJCQkJICAgIFwKK3sJCQkJ CQkJCSAgICBcCisgIHJldHVybiBfX2J1aWx0aW5fIyNCVUlMVElOIChfX3ZhbHVlKTsJCQkJ ICAgIFwKK30KKworX0dDQ19BUk1fQUNMRV9EQVRBX0ZOIChjbHosIGNseiwgdWludDMyX3Qs IHVuc2lnbmVkIGludCkKK19HQ0NfQVJNX0FDTEVfREFUQV9GTiAoY2x6bCwgY2x6bCwgdW5z aWduZWQgbG9uZywgdW5zaWduZWQgaW50KQorX0dDQ19BUk1fQUNMRV9EQVRBX0ZOIChjbHps bCwgY2x6bGwsIHVpbnQ2NF90LCB1bnNpZ25lZCBpbnQpCitfR0NDX0FSTV9BQ0xFX0RBVEFf Rk4gKGNscywgY2xyc2IsIHVpbnQzMl90LCB1bnNpZ25lZCBpbnQpCitfR0NDX0FSTV9BQ0xF X0RBVEFfRk4gKGNsc2wsIGNscnNibCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50KQor X0dDQ19BUk1fQUNMRV9EQVRBX0ZOIChjbHNsbCwgY2xyc2JsbCwgdWludDY0X3QsIHVuc2ln bmVkIGludCkKK19HQ0NfQVJNX0FDTEVfREFUQV9GTiAocmV2MTYsIGFhcmNoNjRfcmV2MTYs IHVpbnQzMl90LCB1aW50MzJfdCkKK19HQ0NfQVJNX0FDTEVfREFUQV9GTiAocmV2MTZsLCBh YXJjaDY0X3JldjE2bCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK19HQ0NfQVJN X0FDTEVfREFUQV9GTiAocmV2MTZsbCwgYWFyY2g2NF9yZXYxNmxsLCB1aW50NjRfdCwgdWlu dDY0X3QpCitfR0NDX0FSTV9BQ0xFX0RBVEFfRk4gKHJiaXQsIGFhcmNoNjRfcmJpdCwgdWlu dDMyX3QsIHVpbnQzMl90KQorX0dDQ19BUk1fQUNMRV9EQVRBX0ZOIChyYml0bCwgYWFyY2g2 NF9yYml0bCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK19HQ0NfQVJNX0FDTEVf REFUQV9GTiAocmJpdGxsLCBhYXJjaDY0X3JiaXRsbCwgdWludDY0X3QsIHVpbnQ2NF90KQor X0dDQ19BUk1fQUNMRV9EQVRBX0ZOIChyZXZzaCwgYnN3YXAxNiwgaW50MTZfdCwgdWludDE2 X3QpCitfR0NDX0FSTV9BQ0xFX0RBVEFfRk4gKHJldiwgYnN3YXAzMiwgdWludDMyX3QsIHVp bnQzMl90KQorX0dDQ19BUk1fQUNMRV9EQVRBX0ZOIChyZXZsbCwgYnN3YXA2NCwgdWludDY0 X3QsIHVpbnQ2NF90KQorCisjdW5kZWYgX0dDQ19BUk1fQUNMRV9EQVRBX0ZOCisKK19fZXh0 ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcKK19fYXR0cmlidXRlX18g KChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK K19fcmV2bCAodW5zaWduZWQgbG9uZyBfX3ZhbHVlKQoreworICBpZiAoc2l6ZW9mICh1bnNp Z25lZCBsb25nKSA9PSA4KQorICAgIHJldHVybiBfX3JldmxsIChfX3ZhbHVlKTsKKyAgZWxz ZQorICAgIHJldHVybiBfX3JldiAoX192YWx1ZSk7Cit9CisKICNwcmFnbWEgR0NDIHB1c2hf b3B0aW9ucwogI3ByYWdtYSBHQ0MgdGFyZ2V0ICgiYXJjaD1hcm12OC4zLWEiKQogX19leHRl bnNpb25fXyBleHRlcm4gX19pbmxpbmUgaW50MzJfdApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYWNsZS9kYXRhLWludHJpbnNpY3MuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2FjbGUvZGF0YS1pbnRyaW5zaWNzLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uOTA4MTMxODQ3MDRkZmNkYWYyZDI0ZDUyM2ZmNzQ0YWE2Y2JlZGYxYQot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2Fj bGUvZGF0YS1pbnRyaW5zaWNzLmMKQEAgLTAsMCArMSwyMTUgQEAKKy8qIFRlc3QgdGhlIEFD TEUgZGF0YSBpbnRyaW5zaWNzLiAgKi8KKy8qIHsgZGctZG8gYXNzZW1ibGUgfSAqLworLyog eyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi0tc2F2ZS10ZW1wcyAtTzEiIH0gKi8KKy8qIHsg ZGctZmluYWwgeyBjaGVjay1mdW5jdGlvbi1ib2RpZXMgIioqIiAiIiAiIiB9IH0gKi8KKwor I2luY2x1ZGUgImFybV9hY2xlLmgiCisKKy8qCisqKiB0ZXN0X2NsejoKKyoqCWNsegl3MCwg dzAKKyoqCXJldAorKi8KKwordWludDMyX3QgdGVzdF9jbHogKHVpbnQzMl90IGEpCit7Cisg IHJldHVybiBfX2NseiAoYSk7Cit9CisKKy8qCisqKiB0ZXN0X2Nsemw6CisqKgljbHoJW3d4 XTAsIFt3eF0wCisqKglyZXQKKyovCisKK3Vuc2lnbmVkIGxvbmcgdGVzdF9jbHpsICh1bnNp Z25lZCBsb25nIGEpCit7CisgIHJldHVybiBfX2NsemwgKGEpOworfQorCisvKgorKiogdGVz dF9jbHpsbDoKKyoqCWNsegl4MCwgeDAKKyoqCXJldAorKi8KKwordWludDY0X3QgdGVzdF9j bHpsbCAodWludDY0X3QgYSkKK3sKKyAgcmV0dXJuIF9fY2x6bGwgKGEpOworfQorCisvKgor KiogdGVzdF9jbHM6CisqKgljbHMJdzAsIHcwCisqKglyZXQKKyovCisKK3VpbnQzMl90IHRl c3RfY2xzICh1aW50MzJfdCBhKQoreworICByZXR1cm4gX19jbHMgKGEpOworfQorCisvKgor KiogdGVzdF9jbHNsOgorKioJY2xzCVt3eF0wLCBbd3hdMAorKioJcmV0CisqLworCit1bnNp Z25lZCBsb25nIHRlc3RfY2xzbCAodW5zaWduZWQgbG9uZyBhKQoreworICByZXR1cm4gX19j bHNsIChhKTsKK30KKworLyoKKyoqIHRlc3RfY2xzbGw6CisqKgljbHMJeDAsIHgwCisqKgly ZXQKKyovCisKK3VpbnQ2NF90IHRlc3RfY2xzbGwgKHVpbnQ2NF90IGEpCit7CisgIHJldHVy biBfX2Nsc2xsIChhKTsKK30KKworLyoKKyoqIHRlc3RfcmJpdDoKKyoqCXJiaXQJdzAsIHcw CisqKglyZXQKKyovCisKK3VpbnQzMl90IHRlc3RfcmJpdCAodWludDMyX3QgYSkKK3sKKyAg cmV0dXJuIF9fcmJpdCAoYSk7Cit9CisKKy8qCisqKiB0ZXN0X3JiaXRsOgorKioJcmJpdAlb d3hdMCwgW3d4XTAKKyoqCXJldAorKi8KKwordW5zaWduZWQgbG9uZyB0ZXN0X3JiaXRsICh1 bnNpZ25lZCBsb25nIGEpCit7CisgIHJldHVybiBfX3JiaXRsIChhKTsKK30KKworLyoKKyoq IHRlc3RfcmJpdGxsOgorKioJcmJpdAl4MCwgeDAKKyoqCXJldAorKi8KKwordWludDY0X3Qg dGVzdF9yYml0bGwgKHVpbnQ2NF90IGEpCit7CisgIHJldHVybiBfX3JiaXRsbCAoYSk7Cit9 CisKKy8qCisqKiB0ZXN0X3JldjoKKyoqCXJldgl3MCwgdzAKKyoqCXJldAorKi8KKwordWlu dDMyX3QgdGVzdF9yZXYgKHVpbnQzMl90IGEpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYnN3 YXAzMiAoYSk7Cit9CisKKy8qCisqKiB0ZXN0X3Jldmw6CisqKglyZXYJW3d4XTAsIFt3eF0w CisqKglyZXQKKyovCisKK3Vuc2lnbmVkIGxvbmcgdGVzdF9yZXZsICh1bnNpZ25lZCBsb25n IGEpCit7CisgIHJldHVybiBfX3JldmwgKGEpOworfQorCisvKgorKiogdGVzdF9yZXZsbDoK KyoqCXJldgl4MCwgeDAKKyoqCXJldAorKi8KKwordWludDY0X3QgdGVzdF9yZXZsbCAodWlu dDY0X3QgYSkKK3sKKyAgcmV0dXJuIF9fcmV2bGwgKGEpOworfQorCisvKgorKiogdGVzdF9y ZXYxNjoKKyoqCXJldjE2CXcwLCB3MAorKioJcmV0CisqLworCit1aW50MzJfdCB0ZXN0X3Jl djE2ICh1aW50MzJfdCBhKQoreworICByZXR1cm4gX19yZXYxNiAoYSk7Cit9CisKKy8qCisq KiB0ZXN0X3JldjE2bDoKKyoqCXJldjE2CVt3eF0wLCBbd3hdMAorKioJcmV0CisqLworCit1 bnNpZ25lZCBsb25nIHRlc3RfcmV2MTZsICh1bnNpZ25lZCBsb25nIGEpCit7CisgIHJldHVy biBfX3JldjE2bCAoYSk7Cit9CisKKy8qCisqKiB0ZXN0X3JldjE2bGw6CisqKglyZXYxNgl4 MCwgeDAKKyoqCXJldAorKi8KKwordWludDY0X3QgdGVzdF9yZXYxNmxsICh1aW50NjRfdCBh KQoreworICByZXR1cm4gX19yZXYxNmxsIChhKTsKK30KKworLyoKKyoqIHRlc3Rfcm9yOgor KioJcm9yCXcwLCB3MCwgdzEKKyoqCXJldAorKi8KKwordWludDMyX3QgdGVzdF9yb3IgKHVp bnQzMl90IGEsIHVpbnQzMl90IHIpCit7CisgIHJldHVybiBfX3JvciAoYSwgcik7Cit9CisK Ky8qCisqKiB0ZXN0X3Jvcmw6CisqKglyb3IJW3d4XTAsIFt3eF0wLCBbd3hdMQorKioJcmV0 CisqLworCit1bnNpZ25lZCBsb25nIHRlc3Rfcm9ybCAodW5zaWduZWQgbG9uZyBhLCB1aW50 MzJfdCByKQoreworICByZXR1cm4gX19yb3JsIChhLCByKTsKK30KKworLyoKKyoqIHRlc3Rf cm9ybGw6CisqKglyb3IJeDAsIHgwLCB4MQorKioJcmV0CisqLworCit1aW50NjRfdCB0ZXN0 X3JvcmxsICh1aW50NjRfdCBhLCB1aW50MzJfdCByKQoreworICByZXR1cm4gX19yb3JsbCAo YSwgcik7Cit9CisKKy8qCisqKiB0ZXN0X3JldnNoOgorKioJcmV2MTYJdzAsIHcwCisqKgly ZXQKKyovCisKK2ludDE2X3QgdGVzdF9yZXZzaCAoaW50MTZfdCBhKQoreworICByZXR1cm4g X19yZXZzaCAoYSk7Cit9Cg== --------------8LA8Sc0UqFsE0N9GWrZ2O0QM--