From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by sourceware.org (Postfix) with ESMTPS id 7C8163858D39 for ; Fri, 26 May 2023 03:05:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7C8163858D39 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-3078a3f3b5fso172508f8f.0 for ; Thu, 25 May 2023 20:05:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685070311; x=1687662311; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=5DTaELs1Pgda1JuBj0ZO6rU2Nidts/Y0jRUZ68FMOtc=; b=Q+7EO8FoCwN5/bVbjCKc2xb7dP3unGhwKPIOPpR2Of2UgwH6VPbWjO6W1RJ74OGGDe IKroVcUolD49vYzLCcaVzEjOMP8XzXQ4e5HaG16b/tggwGQHjm6+C6M/2Sv0YSBBuBCy xmdbcSk/qmMJwW5NDrqCe5AYxkLwxw07UyB1Q4pYWg7VzCXLwsUx6EkCBvW952JI7xYW DEFs4wM6uv3Mr6CVN5pbVVMkXGVocmw+kEyiaU9WU+bgoMcq33fVjVC7EiZRUH8Y9/gP my7Cf56y2Bz2+TsU89BHdDa2UUACy7puWBhlwtvcBylxpKLthGH9AZCkhDdNnlpExF7n BFmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685070311; x=1687662311; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=5DTaELs1Pgda1JuBj0ZO6rU2Nidts/Y0jRUZ68FMOtc=; b=CFMnhbxQquRDjFXV9Qkpxuxu78JM+OW0VGQx4RQSEPF5rq0BUrFxZF6KjfE3p8v4DS x00+hmS05+6WZDcp1zXauH0LuETkUpB/708hbQZAXCwp5KUQbGZ8ecFvT1YwNicQa/6q SCQbrlBalx+2oRJJSsDBEWA+Rw4TauKwaXsXmJ3zolwPuiRlgWQ2pzQPIiC7yYTepWui ceQMll7QdkIKImv3jLd9cjJ9ZZHgKejemXhpwVoEm17ge36+xCf4CIMl8MTDDwXpSAbr IUt7y67gwzeqWsp3MHPt07lkmHltUDZcyophXqQACnz/aLEaK6/le9DaYiviudF3GM5X LHLg== X-Gm-Message-State: AC+VfDxvhFojvcKqEWo52j/dJrTuFTF3U8/KgZHkBfM/KanoNm1NUaAE GtaOgY2cq4UHWgwi6SSBKAELciThSUlsDCJBBEWbiA== X-Google-Smtp-Source: ACHHUZ70wJsesZk+oFhaVMw+bNgJPgp88C9dP2oDaZI2hNsVD8hyCEiJNSDd1EOLfFmxjIHRZtmJ+Aqdbip+GN8KNLk= X-Received: by 2002:adf:e2ce:0:b0:306:3945:65e9 with SMTP id d14-20020adfe2ce000000b00306394565e9mr252775wrj.3.1685070311249; Thu, 25 May 2023 20:05:11 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Prathamesh Kulkarni Date: Fri, 26 May 2023 08:34:34 +0530 Message-ID: Subject: Re: [aarch64] Code-gen for vector initialization involving constants To: Prathamesh Kulkarni , gcc Patches , richard.sandiford@arm.com Content-Type: multipart/mixed; boundary="00000000000053092905fc90010e" X-Spam-Status: No, score=-9.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,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: --00000000000053092905fc90010e Content-Type: text/plain; charset="UTF-8" On Thu, 25 May 2023 at 15:26, Prathamesh Kulkarni wrote: > > On Thu, 25 May 2023 at 13:04, Richard Sandiford > wrote: > > > > LGTM, just a couple of comment tweaks: > > > > Prathamesh Kulkarni writes: > > > diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc > > > index d6fc94015fa..db7ca4c28c3 100644 > > > --- a/gcc/config/aarch64/aarch64.cc > > > +++ b/gcc/config/aarch64/aarch64.cc > > > @@ -22332,6 +22332,46 @@ aarch64_unzip_vector_init (machine_mode mode, rtx vals, bool even_p) > > > return gen_rtx_PARALLEL (new_mode, vec); > > > } > > > > > > +/* Return true if INSN is a scalar move. */ > > > > s/INSN/SET/ > > > > > + > > > +static bool > > > +scalar_move_insn_p (rtx set) > > > +{ > > > + rtx src = SET_SRC (set); > > > + rtx dest = SET_DEST (set); > > > + return (is_a (GET_MODE (dest)) > > > + && aarch64_mov_operand (src, GET_MODE (dest))); > > > +} > > > + > > > +/* Similar to seq_cost, but ignore cost for scalar moves. This function > > > + is called from aarch64_expand_vector_init. */ > > > > Probably best to drop the second sentence. > > > > OK with those changes, thanks (no need to retest). > Thanks, committed as ea9154dbc8fc86d4c617503ca5e6f02fed3a6a56. Hi Richard, The s32 case for single constant patch doesn't regress now after the above commit. Bootstrapped+tested on aarch64-linux-gnu, and verified that the new tests pass for aarch64_be-linux-gnu. Is it OK to commit ? Thanks, Prathamesh > > Thanks, > Prathamesh > > > > Richard --00000000000053092905fc90010e Content-Type: text/plain; charset="US-ASCII"; name="gnu-780-9.txt" Content-Disposition: attachment; filename="gnu-780-9.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_li3z9xuh0 W2FhcmNoNjRdIEltcHJvdmUgY29kZS1nZW4gZm9yIHZlY3RvciBpbml0aWFsaXphdGlvbiB3aXRo IHNpbmdsZSBjb25zdGFudCBlbGVtZW50LgoKZ2NjL0NoYW5nZUxvZzoKCSogY29uZmlnL2FhcmNo NjQvYWFyYzY0LmNjIChhYXJjaDY0X2V4cGFuZF92ZWN0b3JfaW5pdCk6IFR3ZWFrIGNvbmRpdGlv bgoJaWYgKG5fdmFyID09IG5fZWx0cyAmJiBuX2VsdHMgPD0gMTYpIHRvIGFsbG93IGEgc2luZ2xl IGNvbnN0YW50LAoJYW5kIGlmIG1heHYgPT0gMSwgdXNlIGNvbnN0YW50IGVsZW1lbnQgZm9yIGR1 cGxpY2F0aW5nIGludG8gcmVnaXN0ZXIuCgpnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoKCSogZ2Nj LnRhcmdldC9hYXJjaDY0L3ZlYy1pbml0LXNpbmdsZS1jb25zdC5jOiBOZXcgdGVzdC4KCSogZ2Nj LnRhcmdldC9hYXJjaDY0L3ZlYy1pbml0LXNpbmdsZS1jb25zdC1iZS5jOiBMaWtld2lzZS4KCSog Z2NjLnRhcmdldC9hYXJjaDY0L3ZlYy1pbml0LXNpbmdsZS1jb25zdC0yLmM6IExpa2V3aXNlLgoK ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmNjIGIvZ2NjL2NvbmZpZy9h YXJjaDY0L2FhcmNoNjQuY2MKaW5kZXggNWIwNDZkMzJiMzcuLjMwZDZlM2U4ZDgzIDEwMDY0NAot LS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jYworKysgYi9nY2MvY29uZmlnL2FhcmNo NjQvYWFyY2g2NC5jYwpAQCAtMjIxOTIsNyArMjIxOTIsNyBAQCBhYXJjaDY0X2V4cGFuZF92ZWN0 b3JfaW5pdF9mYWxsYmFjayAocnR4IHRhcmdldCwgcnR4IHZhbHMpCiAgICAgIGFuZCBtYXRjaGVz W1hdWzFdIHdpdGggdGhlIGNvdW50IG9mIGR1cGxpY2F0ZSBlbGVtZW50cyAoaWYgWCBpcyB0aGUK ICAgICAgZWFybGllc3QgZWxlbWVudCB3aGljaCBoYXMgZHVwbGljYXRlcykuICAqLwogCi0gIGlm IChuX3ZhciA9PSBuX2VsdHMgJiYgbl9lbHRzIDw9IDE2KQorICBpZiAobl92YXIgPj0gbl9lbHRz IC0gMSAmJiBuX2VsdHMgPD0gMTYpCiAgICAgewogICAgICAgaW50IG1hdGNoZXNbMTZdWzJdID0g ezB9OwogICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuX2VsdHM7IGkrKykKQEAgLTIyMjA5LDEy ICsyMjIwOSwyMyBAQCBhYXJjaDY0X2V4cGFuZF92ZWN0b3JfaW5pdF9mYWxsYmFjayAocnR4IHRh cmdldCwgcnR4IHZhbHMpCiAJfQogICAgICAgaW50IG1heGVsZW1lbnQgPSAwOwogICAgICAgaW50 IG1heHYgPSAwOworICAgICAgcnR4IGNvbnN0X2VsZW0gPSBOVUxMX1JUWDsKKyAgICAgIGludCBj b25zdF9lbGVtX3BvcyA9IDA7CisKICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbl9lbHRzOyBp KyspCi0JaWYgKG1hdGNoZXNbaV1bMV0gPiBtYXh2KQotCSAgewotCSAgICBtYXhlbGVtZW50ID0g aTsKLQkgICAgbWF4diA9IG1hdGNoZXNbaV1bMV07Ci0JICB9CisJeworCSAgaWYgKG1hdGNoZXNb aV1bMV0gPiBtYXh2KQorCSAgICB7CisJICAgICAgbWF4ZWxlbWVudCA9IGk7CisJICAgICAgbWF4 diA9IG1hdGNoZXNbaV1bMV07CisJICAgIH0KKwkgIGlmIChDT05TVF9JTlRfUCAoWFZFQ0VYUCAo dmFscywgMCwgaSkpCisJICAgICAgfHwgQ09OU1RfRE9VQkxFX1AgKFhWRUNFWFAgKHZhbHMsIDAs IGkpKSkKKwkgICAgeworCSAgICAgIGNvbnN0X2VsZW1fcG9zID0gaTsKKwkgICAgICBjb25zdF9l bGVtID0gWFZFQ0VYUCAodmFscywgMCwgaSk7CisJICAgIH0KKwl9CiAKICAgICAgIC8qIENyZWF0 ZSBhIGR1cGxpY2F0ZSBvZiB0aGUgbW9zdCBjb21tb24gZWxlbWVudCwgdW5sZXNzIGFsbCBlbGVt ZW50cwogCSBhcmUgZXF1YWxseSB1c2VsZXNzIHRvIHVzLCBpbiB3aGljaCBjYXNlIGp1c3QgaW1t ZWRpYXRlbHkgc2V0IHRoZQpAQCAtMjIyNTIsOCArMjIyNjMsMTkgQEAgYWFyY2g2NF9leHBhbmRf dmVjdG9yX2luaXRfZmFsbGJhY2sgKHJ0eCB0YXJnZXQsIHJ0eCB2YWxzKQogCSAgICAgdmVjdG9y IHJlZ2lzdGVyLiAgRm9yIGJpZy1lbmRpYW4gd2Ugd2FudCB0aGF0IHBvc2l0aW9uIHRvIGhvbGQK IAkgICAgIHRoZSBsYXN0IGVsZW1lbnQgb2YgVkFMUy4gICovCiAJICBtYXhlbGVtZW50ID0gQllU RVNfQklHX0VORElBTiA/IG5fZWx0cyAtIDEgOiAwOwotCSAgcnR4IHggPSBmb3JjZV9yZWcgKGlu bmVyX21vZGUsIFhWRUNFWFAgKHZhbHMsIDAsIG1heGVsZW1lbnQpKTsKLQkgIGFhcmNoNjRfZW1p dF9tb3ZlICh0YXJnZXQsIGxvd3BhcnRfc3VicmVnIChtb2RlLCB4LCBpbm5lcl9tb2RlKSk7CisK KwkgIC8qIElmIHdlIGhhdmUgYSBzaW5nbGUgY29uc3RhbnQgZWxlbWVudCwgdXNlIHRoYXQgZm9y IGR1cGxpY2F0aW5nCisJICAgICBpbnN0ZWFkLiAgKi8KKwkgIGlmIChjb25zdF9lbGVtKQorCSAg ICB7CisJICAgICAgbWF4ZWxlbWVudCA9IGNvbnN0X2VsZW1fcG9zOworCSAgICAgIGFhcmNoNjRf ZW1pdF9tb3ZlICh0YXJnZXQsIGdlbl92ZWNfZHVwbGljYXRlIChtb2RlLCBjb25zdF9lbGVtKSk7 CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHJ0eCB4ID0gZm9yY2VfcmVnIChpbm5l cl9tb2RlLCBYVkVDRVhQICh2YWxzLCAwLCBtYXhlbGVtZW50KSk7CisJICAgICAgYWFyY2g2NF9l bWl0X21vdmUgKHRhcmdldCwgbG93cGFydF9zdWJyZWcgKG1vZGUsIHgsIGlubmVyX21vZGUpKTsK KwkgICAgfQogCX0KICAgICAgIGVsc2UKIAl7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvYWFyY2g2NC92ZWMtaW5pdC1zaW5nbGUtY29uc3QtMi5jIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdmVjLWluaXQtc2luZ2xlLWNvbnN0LTIuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjRkY2FiNDI5YzEKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC92ZWMtaW5pdC1zaW5nbGUtY29u c3QtMi5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRn LW9wdGlvbnMgIi1PMiIgfSAqLworCisjaW5jbHVkZSA8YXJtX25lb24uaD4KKworLyogSW4gY2Fz ZSB3aGVyZSB0aGVyZSBhcmUgbm8gZHVwbGljYXRlIGVsZW1lbnRzIGluIHZlY3RvciBpbml0aWFs aXplciwKKyAgIGNoZWNrIHRoYXQgdGhlIGNvbnN0YW50IGlzIHVzZWQgZm9yIGR1cGxpY2F0aW9u LiAgKi8KKworaW50OHgxNl90IGZfczgoaW50OF90IGEwLCBpbnQ4X3QgYTEsIGludDhfdCBhMiwg aW50OF90IGEzLCBpbnQ4X3QgYTQsCisgICAgICAgICAgICAgICAgaW50OF90IGE1LCBpbnQ4X3Qg YTYsIGludDhfdCBhNywgaW50OF90IGE4LCBpbnQ4X3QgYTksCisgICAgICAgICAgICAgICAgaW50 OF90IGExMCwgaW50OF90IGExMSwgaW50OF90IGExMiwgaW50OF90IGExMywgaW50OF90IGExNCkK K3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpIHsgYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3 LAorICAgICAgICAgICAgICAgICAgICAgICBhOCwgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0 LCAxIH07Cit9CisKK2ludDE2eDhfdCBmX3MxNihpbnQxNl90IGEwLCBpbnQxNl90IGExLCBpbnQx Nl90IGEyLCBpbnQxNl90IGEzLCBpbnQxNl90IGE0LAorCQlpbnQxNl90IGE1LCBpbnQxNl90IGE2 KQoreworICByZXR1cm4gKGludDE2eDhfdCkgeyBhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwg MSB9OworfQorCitpbnQzMng0X3QgZl9zMzIoaW50MzJfdCBhMCwgaW50MzJfdCBhMSwgaW50MzJf dCBhMikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpIHsgYTAsIGExLCBhMiwgMSB9OworfQorCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIge1x0bW92aVx0dlswLTldK1wuOGIsIDB4MX0g fSB9ICovIAorLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyIHtcdG1vdmlcdHZbMC05XStc LjRoLCAweDF9IH0gfSAqLyAKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciB7XHRtb3Zp XHR2WzAtOV0rXC4ycywgMHgxfSB9IH0gKi8gCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvYWFyY2g2NC92ZWMtaW5pdC1zaW5nbGUtY29uc3QtYmUuYyBiL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9hYXJjaDY0L3ZlYy1pbml0LXNpbmdsZS1jb25zdC1iZS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zMTQwZTAwN2I1ZAotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3ZlYy1pbml0LXNpbmdsZS1j b25zdC1iZS5jCkBAIC0wLDAgKzEsNTggQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1PMiAtZm5vLXNjaGVkdWxlLWluc25zIC1mbm8tc2NoZWR1bGUtaW5zbnMy IiB9ICovCisvKiB7IGRnLWZpbmFsIHsgY2hlY2stZnVuY3Rpb24tYm9kaWVzICIqKiIgIiIgIiIg eyB0YXJnZXQgeyBiZSB9IH0gfSB9ICovCisKKyNpbmNsdWRlIDxhcm1fbmVvbi5oPgorCisvKgor KiogZl9zODoKKyoqCWR1cAl2MC4xNmIsIHcwCisqKgltb3ZpCSh2WzAtOV0rKVwuOGIsIDB4MQor KioJaW5zCXYwLmJcWzBcXSwgXDFcLmJcWzBcXQorKioJcmV0CisqLworCitpbnQ4eDE2X3QgZl9z OChpbnQ4X3QgeCkKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpIHsgeCwgeCwgeCwgeCwgeCwgeCwg eCwgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgeCwgeCwgeCwgeCwgeCwgeCwgeCwgMSB9Owor fQorCisvKgorKiogZl9zMTY6CisqKglkdXAJdjAuOGgsIHcwCisqKgltb3ZpCSh2WzAtOV0rKVwu NGgsIDB4MQorKioJaW5zCXYwLmhcWzBcXSwgXDFcLmhcWzBcXQorKioJcmV0CisqLworCitpbnQx Nng4X3QgZl9zMTYoaW50MTZfdCB4KQoreworICByZXR1cm4gKGludDE2eDhfdCkgeyB4LCB4LCB4 LCB4LCB4LCB4LCB4LCAxIH07Cit9CisKKy8qCisqKiBmX3MzMjoKKyoqCWR1cAl2MC40cywgdzAK KyoqCW1vdmkJKHZbMC05XSspXC4ycywgMHgxCisqKglpbnMJdjAuc1xbMFxdLCBcMVwuc1xbMFxd CisqKglyZXQKKyovCisKK2ludDMyeDRfdCBmX3MzMihpbnQzMl90IHgpCit7CisgIHJldHVybiAo aW50MzJ4NF90KSB7IHgsIHgsIHgsIDEgfTsKK30KKworLyoKKyoqIGZfczY0OgorKioJYWRycAl4 WzAtOV0rLCAuTENbMC05XSsKKyoqCWxkcglxMCwgXFt4WzAtOV0rLCAjOmxvMTI6LkxDWzAtOV0r XF0KKyoqCWlucwl2MFwuZFxbMVxdLCB4MAorKioJcmV0CisqLworCitpbnQ2NHgyX3QgZl9zNjQo aW50NjRfdCB4KQoreworICByZXR1cm4gKGludDY0eDJfdCkgeyB4LCAxIH07Cit9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC92ZWMtaW5pdC1zaW5nbGUtY29u c3QuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3ZlYy1pbml0LXNpbmdsZS1j b25zdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNzRiMGIzOWFj NAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3Zl Yy1pbml0LXNpbmdsZS1jb25zdC5jCkBAIC0wLDAgKzEsNTggQEAKKy8qIHsgZGctZG8gY29tcGls ZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm5vLXNjaGVkdWxlLWluc25zIC1mbm8tc2No ZWR1bGUtaW5zbnMyIiB9ICovCisvKiB7IGRnLWZpbmFsIHsgY2hlY2stZnVuY3Rpb24tYm9kaWVz ICIqKiIgIiIgIiIgeyB0YXJnZXQgeyBsZSB9IH0gfSB9ICovCisKKyNpbmNsdWRlIDxhcm1fbmVv bi5oPgorCisvKgorKiogZl9zODoKKyoqCWR1cAl2MC4xNmIsIHcwCisqKgltb3ZpCSh2WzAtOV0r KVwuOGIsIDB4MQorKioJaW5zCXYwLmJcWzE1XF0sIFwxXC5iXFswXF0KKyoqCXJldAorKi8KKwor aW50OHgxNl90IGZfczgoaW50OF90IHgpCit7CisgIHJldHVybiAoaW50OHgxNl90KSB7IHgsIHgs IHgsIHgsIHgsIHgsIHgsIHgsCisgICAgICAgICAgICAgICAgICAgICAgIHgsIHgsIHgsIHgsIHgs IHgsIHgsIDEgfTsKK30KKworLyoKKyoqIGZfczE2OgorKioJZHVwCXYwLjhoLCB3MAorKioJbW92 aQkodlswLTldKylcLjRoLCAweDEKKyoqCWlucwl2MC5oXFs3XF0sIFwxXC5oXFswXF0KKyoqCXJl dAorKi8KKworaW50MTZ4OF90IGZfczE2KGludDE2X3QgeCkKK3sKKyAgcmV0dXJuIChpbnQxNng4 X3QpIHsgeCwgeCwgeCwgeCwgeCwgeCwgeCwgMSB9OworfQorCisvKgorKiogZl9zMzI6CisqKglk dXAJdjAuNHMsIHcwCisqKgltb3ZpCSh2WzAtOV0rKVwuMnMsIDB4MQorKioJaW5zCXYwLnNcWzNc XSwgXDFcLnNcWzBcXQorKioJcmV0CisqLworCitpbnQzMng0X3QgZl9zMzIoaW50MzJfdCB4KQor eworICByZXR1cm4gKGludDMyeDRfdCkgeyB4LCB4LCB4LCAxIH07Cit9CisKKy8qCisqKiBmX3M2 NDoKKyoqCWFkcnAJeFswLTldKywgLkxDWzAtOV0rCisqKglsZHIJcTAsIFxbeFswLTldKywgIzps bzEyOi5MQ1swLTldK1xdCisqKglpbnMJdjBcLmRcWzBcXSwgeDAKKyoqCXJldAorKi8KKworaW50 NjR4Ml90IGZfczY0KGludDY0X3QgeCkKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIHsgeCwgMSB9 OworfQo= --00000000000053092905fc90010e--