From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 56033 invoked by alias); 26 Jun 2017 10:50:59 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 56010 invoked by uid 89); 26 Jun 2017 10:50:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.4 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=ww, c21, rr X-HELO: EUR03-VE1-obe.outbound.protection.outlook.com Received: from mail-eopbgr50065.outbound.protection.outlook.com (HELO EUR03-VE1-obe.outbound.protection.outlook.com) (40.107.5.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 26 Jun 2017 10:50:55 +0000 Received: from VI1PR0801MB2031.eurprd08.prod.outlook.com (10.173.74.140) by HE1PR0802MB2617.eurprd08.prod.outlook.com (10.175.36.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1199.15; Mon, 26 Jun 2017 10:50:51 +0000 Received: from VI1PR0801MB2031.eurprd08.prod.outlook.com ([fe80::341b:7cb4:66ec:496e]) by VI1PR0801MB2031.eurprd08.prod.outlook.com ([fe80::341b:7cb4:66ec:496e%17]) with mapi id 15.01.1199.017; Mon, 26 Jun 2017 10:50:51 +0000 From: Tamar Christina To: James Greenhalgh CC: GCC Patches , nd , Marcus Shawcroft , Richard Earnshaw Subject: Re: [PATCH][GCC][AArch64] optimize float immediate moves (2 /4) - HF/DF/SF mode. Date: Mon, 26 Jun 2017 10:50:00 -0000 Message-ID: References: <20170614084233.GA15599@arm.com>, In-Reply-To: authentication-results: gcc.gnu.org; dkim=none (message not signed) header.d=none;gcc.gnu.org; dmarc=none action=none header.from=arm.com; x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;HE1PR0802MB2617;7:su1QzEyW02wTRekxmP4bzWk4yCtlOOtd1/feaSpdI82SFCuvag/O61XIr8mCclhA/hk6OaTdREeyO6AB/vU0mu4i3CZNHz+ufm1ShOyvXDGdnCwpcMXi2z2ORQMUAxCl6PdHbR385phZOQLeGxRbAm10RI6hwkmAWvUSXcy1ygwQ1rZ0RRxBxGfjx57RvIyqq1WNtkAn8yeZrG7nSrsaxkjhfywSga9EmRRAxR3DKevZ3E5XdKFXxSRU6xjytaISw2oBavUooCwGfvxgOpnijFodn/ygJBYQortRvQKIfzxAL05cHaj0/9aTY/xNquvVomhsrnqUHb75Di8V+Jo175iXFOD9PkLyHksAhTz0umAVBV50hdYUk9kZIu/8Hel0lhuMq1m5r2XXf4jCKtVcPe77GqwFQb2HEg3FmRtE2R4jHU16GbtJJuvuC1RQtQjaIkKol3ouikp+n5FP9mX/ocufAHoPYrdj5sJPVWlx/hJxp50FVoEXjBn0SeRhuh6Q27RsS4Hl5QevbmHO7fn9cDVtzaRDNVEsknZTmM6QvMbIiankDbudAg+Ca5f/ft3SNz+Qc4Zm52b3unUus1N6txL0r8Kql3zV8TmhVuowZgMMBAcHK0mjyy6yyUd5q8EEuuZcZ21OGJ9D2c33rt36jbWHETavQZb7aDczvwkONROWMMWwmfklBzJ2ohOdGWgJDCf3fSFxLM/BOmZGlbOep749l2LRh1Fh+4SuARHlsWvBZBC7TwgktBhC6F7fAuGYkUZBH/RtbfUXyhDQulkXFsriN+aNKLlaSWXyeOI4efk= x-ms-office365-filtering-correlation-id: e6dd9781-43e2-4565-68b4-08d4bc813644 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254075)(300000503095)(300135400095)(48565401081)(49563074)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095);SRVR:HE1PR0802MB2617; x-ms-traffictypediagnostic: HE1PR0802MB2617: nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917)(236129657087228)(48057245064654); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(102415395)(6040450)(601004)(2401047)(8121501046)(5005006)(3002001)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(6055026)(6041248)(20161123555025)(20161123564025)(20161123558100)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:HE1PR0802MB2617;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:HE1PR0802MB2617; x-forefront-prvs: 0350D7A55D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(39410400002)(39850400002)(39860400002)(39450400003)(39840400002)(53754006)(377454003)(377424004)(66066001)(3660700001)(86362001)(4326008)(55016002)(6436002)(3280700002)(6246003)(110136004)(53936002)(6862004)(6506006)(38730400002)(54356999)(25786009)(7736002)(2900100001)(99286003)(2950100002)(50986999)(478600001)(7696004)(74316002)(6636002)(229853002)(5660300001)(99936001)(76176999)(54906002)(33656002)(305945005)(9686003)(81166006)(8676002)(8936002)(102836003)(3846002)(72206003)(14454004)(2906002)(189998001)(53546010)(6116002)(14773001);DIR:OUT;SFP:1101;SCL:1;SRVR:HE1PR0802MB2617;H:VI1PR0801MB2031.eurprd08.prod.outlook.com;FPR:;SPF:None;MLV:sfv;LANG:en; spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: multipart/mixed; boundary="_002_VI1PR0801MB20314F94AA32F6209F57D06CFFDF0VI1PR0801MB2031_" MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Jun 2017 10:50:51.1276 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2617 X-IsSubscribed: yes X-SW-Source: 2017-06/txt/msg01911.txt.bz2 --_002_VI1PR0801MB20314F94AA32F6209F57D06CFFDF0VI1PR0801MB2031_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-length: 2866 Hi all, Here's the re-spun patch. Aside from the grouping of the split patterns it now also uses h register f= or the fmov for HF when available, otherwise it forces a literal load. Regression tested on aarch64-none-linux-gnu and no regressions. OK for trunk? Thanks, Tamar gcc/ 2017-06-26 Tamar Christina Richard Sandiford * config/aarch64/aarch64.md (mov): Generalize. (*movhf_aarch64, *movsf_aarch64, *movdf_aarch64): Add integer and movi cases. (movi-split-hf-df-sf split, fp16): New. (enabled): Added TARGET_FP_F16INST. * config/aarch64/iterators.md (GPF_HF): New. ________________________________________ From: Tamar Christina Sent: Wednesday, June 21, 2017 11:48:33 AM To: James Greenhalgh Cc: GCC Patches; nd; Marcus Shawcroft; Richard Earnshaw Subject: RE: [PATCH][GCC][AArch64] optimize float immediate moves (2 /4) - = HF/DF/SF mode. > > movi\\t%0.4h, #0 > > - mov\\t%0.h[0], %w1 > > + fmov\\t%s0, %w1 > > Should this not be %h0? The problem is that H registers are only available in ARMv8.2+, I'm not sure what to do about ARMv8.1 given your other feedback Pointing out that the bit patterns between how it's stored in s vs h regist= ers differ. > > > umov\\t%w0, %1.h[0] > > mov\\t%0.h[0], %1.h[0] > > + fmov\\t%s0, %1 > > Likewise, and much more important for correctness as it changes the way t= he > bit pattern ends up in the register (see table C2-1 in release B.a of the= ARM > Architecture Reference Manual for ARMv8-A), here. > > > + * return aarch64_output_scalar_simd_mov_immediate (operands[1], > > + SImode); > > ldr\\t%h0, %1 > > str\\t%h1, %0 > > ldrh\\t%w0, %1 > > strh\\t%w1, %0 > > mov\\t%w0, %w1" > > - [(set_attr "type" > "neon_move,neon_from_gp,neon_to_gp,neon_move,\ > > - f_loads,f_stores,load1,store1,mov_reg") > > - (set_attr "simd" "yes,yes,yes,yes,*,*,*,*,*")] > > + "&& can_create_pseudo_p () > > + && !aarch64_can_const_movi_rtx_p (operands[1], HFmode) > > + && !aarch64_float_const_representable_p (operands[1]) > > + && aarch64_float_const_rtx_p (operands[1])" > > + [(const_int 0)] > > + "{ > > + unsigned HOST_WIDE_INT ival; > > + if (!aarch64_reinterpret_float_as_int (operands[1], &ival)) > > + FAIL; > > + > > + rtx tmp =3D gen_reg_rtx (SImode); > > + aarch64_expand_mov_immediate (tmp, GEN_INT (ival)); > > + tmp =3D simplify_gen_subreg (HImode, tmp, SImode, 0); > > + emit_move_insn (operands[0], gen_lowpart (HFmode, tmp)); > > + DONE; > > + }" > > + [(set_attr "type" "neon_move,f_mcr,neon_to_gp,neon_move,fconsts, > \ > > + neon_move,f_loads,f_stores,load1,store1,mov_reg") > > + (set_attr "simd" "yes,*,yes,yes,*,yes,*,*,*,*,*")] > > ) > > Thanks, > James --_002_VI1PR0801MB20314F94AA32F6209F57D06CFFDF0VI1PR0801MB2031_ Content-Type: text/x-patch; name="float-mov_modes-2.patch" Content-Description: float-mov_modes-2.patch Content-Disposition: attachment; filename="float-mov_modes-2.patch"; size=6529; creation-date="Mon, 26 Jun 2017 10:49:16 GMT"; modification-date="Mon, 26 Jun 2017 10:49:16 GMT" Content-Transfer-Encoding: base64 Content-length: 8854 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0Lm1kIGIv Z2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQubWQKaW5kZXggMWE3MjFiZmJl NDIyNzBlYzc1MjY4YjZlMjM2NjI5MGFhNmFkMjEzNC4uYzk1MWVmYzM4M2Mx N2VhODE4MDBlNDgyZTM5NzYwZWIxNzgzMGMwYSAxMDA2NDQKLS0tIGEvZ2Nj L2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQubWQKKysrIGIvZ2NjL2NvbmZpZy9h YXJjaDY0L2FhcmNoNjQubWQKQEAgLTE4MSw2ICsxODEsMTEgQEAKIDs7IHdp bGwgYmUgZGlzYWJsZWQgd2hlbiAhVEFSR0VUX0ZMT0FULgogKGRlZmluZV9h dHRyICJmcCIgIm5vLHllcyIgKGNvbnN0X3N0cmluZyAibm8iKSkKIAorOzsg QXR0cmlidXRlIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBp bnN0cnVjdGlvbiB0b3VjaGVzIGhhbGYKKzs7IHByZWNpc2lvbiBmcCByZWdp c3RlcnMuICBXaGVuIHRoaXMgaXMgc2V0IHRvIHllcyBmb3IgYW4gYWx0ZXJu YXRpdmUsCis7OyB0aGF0IGFsdGVybmF0aXZlIHdpbGwgYmUgZGlzYWJsZWQg d2hlbiAhVEFSR0VUX0ZQX0YxNklOU1QuCisoZGVmaW5lX2F0dHIgImZwMTYi ICJubyx5ZXMiIChjb25zdF9zdHJpbmcgIm5vIikpCisKIDs7IEF0dHJpYnV0 ZSB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgaW5zdHJ1Y3Rp b24gdG91Y2hlcyBzaW1kCiA7OyByZWdpc3RlcnMuICBXaGVuIHRoaXMgaXMg c2V0IHRvIHllcyBmb3IgYW4gYWx0ZXJuYXRpdmUsIHRoYXQgYWx0ZXJuYXRp dmUKIDs7IHdpbGwgYmUgZGlzYWJsZWQgd2hlbiAhVEFSR0VUX1NJTUQuCkBA IC0xOTQsMTEgKzE5OSwxNCBAQAogOzsgcmVnaXN0ZXJzIHdoZW4gLW1nZW5l cmFsLXJlZ3Mtb25seSBpcyBzcGVjaWZpZWQuCiAoZGVmaW5lX2F0dHIgImVu YWJsZWQiICJubyx5ZXMiCiAgIChjb25kIFsoaW9yCi0JKGFuZCAoZXFfYXR0 ciAiZnAiICJ5ZXMiKQotCSAgICAgKGVxIChzeW1ib2xfcmVmICJUQVJHRVRf RkxPQVQiKSAoY29uc3RfaW50IDApKSkKLQkoYW5kIChlcV9hdHRyICJzaW1k IiAieWVzIikKLQkgICAgIChlcSAoc3ltYm9sX3JlZiAiVEFSR0VUX1NJTUQi KSAoY29uc3RfaW50IDApKSkpCi0JICAgICAoY29uc3Rfc3RyaW5nICJubyIp CisJICAgIChpb3IKKwkJKGFuZCAoZXFfYXR0ciAiZnAiICJ5ZXMiKQorCQkg ICAgIChlcSAoc3ltYm9sX3JlZiAiVEFSR0VUX0ZMT0FUIikgKGNvbnN0X2lu dCAwKSkpCisJCShhbmQgKGVxX2F0dHIgInNpbWQiICJ5ZXMiKQorCQkgICAg IChlcSAoc3ltYm9sX3JlZiAiVEFSR0VUX1NJTUQiKSAoY29uc3RfaW50IDAp KSkpCisJICAgIChhbmQgKGVxX2F0dHIgImZwMTYiICJ5ZXMiKQorCQkgKGVx IChzeW1ib2xfcmVmICJUQVJHRVRfRlBfRjE2SU5TVCIpIChjb25zdF9pbnQg MCkpKSkKKwkgICAgKGNvbnN0X3N0cmluZyAibm8iKQogCV0gKGNvbnN0X3N0 cmluZyAieWVzIikpKQogCiA7OyBBdHRyaWJ1dGUgdGhhdCBzcGVjaWZpZXMg d2hldGhlciB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgYnJhbmNoIHRvIGEKQEAg LTEwNjIsNjUgKzEwNzAsOTQgQEAKICkKIAogKGRlZmluZV9pbnNuICIqbW92 aGZfYWFyY2g2NCIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEYgMCAibm9u aW1tZWRpYXRlX29wZXJhbmQiICI9dyx3ICAsP3Isdyx3LG0scixtICxyIikK LQkobWF0Y2hfb3BlcmFuZDpIRiAxICJnZW5lcmFsX29wZXJhbmQiICAgICAg IlkgLD9yWSwgdyx3LG0sdyxtLHJZLHIiKSldCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOkhGIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiPXcsdyAgLD9y LHcsdyAgLHcgICx3LG0scixtICxyIikKKwkobWF0Y2hfb3BlcmFuZDpIRiAx ICJnZW5lcmFsX29wZXJhbmQiICAgICAgIlkgLD9yWSwgdyx3LFVmYyxVdmks bSx3LG0sclksciIpKV0KICAgIlRBUkdFVF9GTE9BVCAmJiAocmVnaXN0ZXJf b3BlcmFuZCAob3BlcmFuZHNbMF0sIEhGbW9kZSkKLSAgICB8fCBhYXJjaDY0 X3JlZ19vcl9mcF96ZXJvIChvcGVyYW5kc1sxXSwgSEZtb2RlKSkiCisgICAg fHwgYWFyY2g2NF9yZWdfb3JfZnBfZmxvYXQgKG9wZXJhbmRzWzFdLCBIRm1v ZGUpKSIKICAgIkAKICAgIG1vdmlcXHQlMC40aCwgIzAKLSAgIG1vdlxcdCUw LmhbMF0sICV3MQorICAgZm1vdlxcdCVoMCwgJXcxCiAgICB1bW92XFx0JXcw LCAlMS5oWzBdCiAgICBtb3ZcXHQlMC5oWzBdLCAlMS5oWzBdCisgICBmbW92 XFx0JWgwLCAlMQorICAgKiByZXR1cm4gYWFyY2g2NF9vdXRwdXRfc2NhbGFy X3NpbWRfbW92X2ltbWVkaWF0ZSAob3BlcmFuZHNbMV0sIFNJbW9kZSk7CiAg ICBsZHJcXHQlaDAsICUxCiAgICBzdHJcXHQlaDEsICUwCiAgICBsZHJoXFx0 JXcwLCAlMQogICAgc3RyaFxcdCV3MSwgJTAKICAgIG1vdlxcdCV3MCwgJXcx IgotICBbKHNldF9hdHRyICJ0eXBlIiAibmVvbl9tb3ZlLG5lb25fZnJvbV9n cCxuZW9uX3RvX2dwLG5lb25fbW92ZSxcCi0gICAgICAgICAgICAgICAgICAg ICBmX2xvYWRzLGZfc3RvcmVzLGxvYWQxLHN0b3JlMSxtb3ZfcmVnIikKLSAg IChzZXRfYXR0ciAic2ltZCIgInllcyx5ZXMseWVzLHllcywqLCosKiwqLCoi KV0KKyAgWyhzZXRfYXR0ciAidHlwZSIgIm5lb25fbW92ZSxmX21jcixuZW9u X3RvX2dwLG5lb25fbW92ZSxmY29uc3RzLCBcCisJCSAgICAgbmVvbl9tb3Zl LGZfbG9hZHMsZl9zdG9yZXMsbG9hZDEsc3RvcmUxLG1vdl9yZWciKQorICAg KHNldF9hdHRyICJzaW1kIiAieWVzLCoseWVzLHllcywqLHllcywqLCosKiwq LCoiKQorICAgKHNldF9hdHRyICJmcDE2IiAgICIqLHllcywqLCoseWVzLCos KiwqLCosKiwqIildCiApCiAKIChkZWZpbmVfaW5zbiAiKm1vdnNmX2FhcmNo NjQiCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNGIDAgIm5vbmltbWVkaWF0 ZV9vcGVyYW5kIiAiPXcsdyAgLD9yLHcsdyAgLHcsbSxyLG0gLHIiKQotCSht YXRjaF9vcGVyYW5kOlNGIDEgImdlbmVyYWxfb3BlcmFuZCIgICAgICAiWSAs P3JZLCB3LHcsVWZjLG0sdyxtLHJZLHIiKSldCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOlNGIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiPXcsdyAgLD9y LHcsdyAgLHcgICx3LG0scixtICxyLHIiKQorCShtYXRjaF9vcGVyYW5kOlNG IDEgImdlbmVyYWxfb3BlcmFuZCIgICAgICAiWSAsP3JZLCB3LHcsVWZjLFV2 aSxtLHcsbSxyWSxyLE0iKSldCiAgICJUQVJHRVRfRkxPQVQgJiYgKHJlZ2lz dGVyX29wZXJhbmQgKG9wZXJhbmRzWzBdLCBTRm1vZGUpCi0gICAgfHwgYWFy Y2g2NF9yZWdfb3JfZnBfemVybyAob3BlcmFuZHNbMV0sIFNGbW9kZSkpIgor ICAgIHx8IGFhcmNoNjRfcmVnX29yX2ZwX2Zsb2F0IChvcGVyYW5kc1sxXSwg U0Ztb2RlKSkiCiAgICJACiAgICBtb3ZpXFx0JTAuMnMsICMwCiAgICBmbW92 XFx0JXMwLCAldzEKICAgIGZtb3ZcXHQldzAsICVzMQogICAgZm1vdlxcdCVz MCwgJXMxCiAgICBmbW92XFx0JXMwLCAlMQorICAgKiByZXR1cm4gYWFyY2g2 NF9vdXRwdXRfc2NhbGFyX3NpbWRfbW92X2ltbWVkaWF0ZSAob3BlcmFuZHNb MV0sIFNJbW9kZSk7CiAgICBsZHJcXHQlczAsICUxCiAgICBzdHJcXHQlczEs ICUwCiAgICBsZHJcXHQldzAsICUxCiAgICBzdHJcXHQldzEsICUwCi0gICBt b3ZcXHQldzAsICV3MSIKLSAgWyhzZXRfYXR0ciAidHlwZSIgIm5lb25fbW92 ZSxmX21jcixmX21yYyxmbW92LGZjb25zdHMsXAotICAgICAgICAgICAgICAg ICAgICAgZl9sb2FkcyxmX3N0b3Jlcyxsb2FkMSxzdG9yZTEsbW92X3JlZyIp Ci0gICAoc2V0X2F0dHIgInNpbWQiICJ5ZXMsKiwqLCosKiwqLCosKiwqLCoi KV0KKyAgIG1vdlxcdCV3MCwgJXcxCisgICBtb3ZcXHQldzAsICUxIgorICBb KHNldF9hdHRyICJ0eXBlIiAibmVvbl9tb3ZlLGZfbWNyLGZfbXJjLGZtb3Ys ZmNvbnN0cyxuZW9uX21vdmUsXAorCQkgICAgIGZfbG9hZHMsZl9zdG9yZXMs bG9hZDEsc3RvcmUxLG1vdl9yZWcsXAorCQkgICAgIGZjb25zdHMiKQorICAg KHNldF9hdHRyICJzaW1kIiAieWVzLCosKiwqLCoseWVzLCosKiwqLCosKiwq IildCiApCiAKIChkZWZpbmVfaW5zbiAiKm1vdmRmX2FhcmNoNjQiCi0gIFso c2V0IChtYXRjaF9vcGVyYW5kOkRGIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5k IiAiPXcsdyAgLD9yLHcsdyAgLHcsbSxyLG0gLHIiKQotCShtYXRjaF9vcGVy YW5kOkRGIDEgImdlbmVyYWxfb3BlcmFuZCIgICAgICAiWSAsP3JZLCB3LHcs VWZjLG0sdyxtLHJZLHIiKSldCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkRG IDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiPXcsIHcgICw/cix3LHcgICx3 ICAsdyxtLHIsbSAscixyIikKKwkobWF0Y2hfb3BlcmFuZDpERiAxICJnZW5l cmFsX29wZXJhbmQiICAgICAgIlkgLCA/clksIHcsdyxVZmMsVXZpLG0sdyxt LHJZLHIsTiIpKV0KICAgIlRBUkdFVF9GTE9BVCAmJiAocmVnaXN0ZXJfb3Bl cmFuZCAob3BlcmFuZHNbMF0sIERGbW9kZSkKLSAgICB8fCBhYXJjaDY0X3Jl Z19vcl9mcF96ZXJvIChvcGVyYW5kc1sxXSwgREZtb2RlKSkiCisgICAgfHwg YWFyY2g2NF9yZWdfb3JfZnBfZmxvYXQgKG9wZXJhbmRzWzFdLCBERm1vZGUp KSIKICAgIkAKICAgIG1vdmlcXHQlZDAsICMwCiAgICBmbW92XFx0JWQwLCAl eDEKICAgIGZtb3ZcXHQleDAsICVkMQogICAgZm1vdlxcdCVkMCwgJWQxCiAg ICBmbW92XFx0JWQwLCAlMQorICAgKiByZXR1cm4gYWFyY2g2NF9vdXRwdXRf c2NhbGFyX3NpbWRfbW92X2ltbWVkaWF0ZSAob3BlcmFuZHNbMV0sIERJbW9k ZSk7CiAgICBsZHJcXHQlZDAsICUxCiAgICBzdHJcXHQlZDEsICUwCiAgICBs ZHJcXHQleDAsICUxCiAgICBzdHJcXHQleDEsICUwCi0gICBtb3ZcXHQleDAs ICV4MSIKLSAgWyhzZXRfYXR0ciAidHlwZSIgIm5lb25fbW92ZSxmX21jcixm X21yYyxmbW92LGZjb25zdGQsXAotICAgICAgICAgICAgICAgICAgICAgZl9s b2FkZCxmX3N0b3JlZCxsb2FkMSxzdG9yZTEsbW92X3JlZyIpCi0gICAoc2V0 X2F0dHIgInNpbWQiICJ5ZXMsKiwqLCosKiwqLCosKiwqLCoiKV0KKyAgIG1v dlxcdCV4MCwgJXgxCisgICBtb3ZcXHQleDAsICUxIgorICBbKHNldF9hdHRy ICJ0eXBlIiAibmVvbl9tb3ZlLGZfbWNyLGZfbXJjLGZtb3YsZmNvbnN0ZCxu ZW9uX21vdmUsXAorCQkgICAgIGZfbG9hZGQsZl9zdG9yZWQsbG9hZDEsc3Rv cmUxLG1vdl9yZWcsXAorCQkgICAgIGZjb25zdGQiKQorICAgKHNldF9hdHRy ICJzaW1kIiAieWVzLCosKiwqLCoseWVzLCosKiwqLCosKiwqIildCispCisK KyhkZWZpbmVfc3BsaXQKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6R1BGX0hG IDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikKKwkobWF0Y2hfb3BlcmFuZDpH UEZfSEYgMSAiZ2VuZXJhbF9vcGVyYW5kIikpXQorICAiY2FuX2NyZWF0ZV9w c2V1ZG9fcCAoKQorICAgJiYgIWFhcmNoNjRfY2FuX2NvbnN0X21vdmlfcnR4 X3AgKG9wZXJhbmRzWzFdLCA8TU9ERT5tb2RlKQorICAgJiYgIWFhcmNoNjRf ZmxvYXRfY29uc3RfcmVwcmVzZW50YWJsZV9wIChvcGVyYW5kc1sxXSkKKyAg ICYmICBhYXJjaDY0X2Zsb2F0X2NvbnN0X3J0eF9wIChvcGVyYW5kc1sxXSki CisgIFsoY29uc3RfaW50IDApXQorICB7CisgICAgdW5zaWduZWQgSE9TVF9X SURFX0lOVCBpdmFsOworICAgIGlmICghYWFyY2g2NF9yZWludGVycHJldF9m bG9hdF9hc19pbnQgKG9wZXJhbmRzWzFdLCAmaXZhbCkpCisgICAgICBGQUlM OworCisgICAgcnR4IHRtcCA9IGdlbl9yZWdfcnR4ICg8RkNWVF9UQVJHRVQ+ bW9kZSk7CisgICAgZW1pdF9tb3ZlX2luc24gKHRtcCwgZ2VuX2ludF9tb2Rl IChpdmFsLCA8RkNWVF9UQVJHRVQ+bW9kZSkpOworICAgIGVtaXRfbW92ZV9p bnNuIChvcGVyYW5kc1swXSwgZ2VuX2xvd3BhcnQgKDxNT0RFPm1vZGUsIHRt cCkpOworICAgIERPTkU7CisgIH0KICkKIAogKGRlZmluZV9pbnNuICIqbW92 dGZfYWFyY2g2NCIKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9p dGVyYXRvcnMubWQgYi9nY2MvY29uZmlnL2FhcmNoNjQvaXRlcmF0b3JzLm1k CmluZGV4IDQzYmU3ZmQzNjExMTZkMzA1YjAzMDBhODE0ZmZjYTgyYTljNDRh ODguLjA2N2NlZjc4NTMzMWEyNDM2MzI3MTVlMGQwZmUzNWEzMTRlZWViZmYg MTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9pdGVyYXRvcnMubWQK KysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2l0ZXJhdG9ycy5tZApAQCAtNDQs NiArNDQsOSBAQAogOzsgSXRlcmF0b3IgZm9yIGFsbCBzY2FsYXIgZmxvYXRp bmcgcG9pbnQgbW9kZXMgKEhGLCBTRiwgREYpCiAoZGVmaW5lX21vZGVfaXRl cmF0b3IgR1BGX0YxNiBbKEhGICJBQVJDSDY0X0lTQV9GMTYiKSBTRiBERl0p CiAKKzs7IEl0ZXJhdG9yIGZvciBhbGwgc2NhbGFyIGZsb2F0aW5nIHBvaW50 IG1vZGVzIChIRiwgU0YsIERGKQorKGRlZmluZV9tb2RlX2l0ZXJhdG9yIEdQ Rl9IRiBbSEYgU0YgREZdKQorCiA7OyBJdGVyYXRvciBmb3IgYWxsIHNjYWxh ciBmbG9hdGluZyBwb2ludCBtb2RlcyAoSEYsIFNGLCBERiBhbmQgVEYpCiAo ZGVmaW5lX21vZGVfaXRlcmF0b3IgR1BGX1RGX0YxNiBbSEYgU0YgREYgVEZd KQogCg== --_002_VI1PR0801MB20314F94AA32F6209F57D06CFFDF0VI1PR0801MB2031_--