From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 113881 invoked by alias); 8 Jun 2018 21:45:57 -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 113587 invoked by uid 89); 8 Jun 2018 21:45:23 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-6.9 required=5.0 tests=BAYES_00,GIT_PATCH_2,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS,TIME_LIMIT_EXCEEDED autolearn=unavailable version=3.3.2 spammy=H*f:sk:VI1PR08 X-HELO: EUR04-DB3-obe.outbound.protection.outlook.com Received: from mail-eopbgr60074.outbound.protection.outlook.com (HELO EUR04-DB3-obe.outbound.protection.outlook.com) (40.107.6.74) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 08 Jun 2018 21:45:05 +0000 Received: from VI1PR08MB3053.eurprd08.prod.outlook.com (52.133.14.146) by VI1PR08MB0607.eurprd08.prod.outlook.com (10.163.169.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.841.13; Fri, 8 Jun 2018 21:44:30 +0000 Received: from VI1PR08MB3053.eurprd08.prod.outlook.com ([fe80::a9c4:b7a:1ada:34a2]) by VI1PR08MB3053.eurprd08.prod.outlook.com ([fe80::a9c4:b7a:1ada:34a2%5]) with mapi id 15.20.0841.015; Fri, 8 Jun 2018 21:44:30 +0000 From: Michael Collison To: James Greenhalgh CC: GCC Patches , nd Subject: RE: [PATCH][Aarch64] v2: Arithmetic overflow common functions [Patch 1/4] Date: Fri, 08 Jun 2018 21:45:00 -0000 Message-ID: References: <20180608001902.GA24135@arm.com> In-Reply-To: <20180608001902.GA24135@arm.com> authentication-results: spf=none (sender IP is ) smtp.mailfrom=Michael.Collison@arm.com; x-ms-publictraffictype: Email x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: VI1PR08MB0607: nodisclaimer: True x-exchange-antispam-report-test: UriScan:(180628864354917)(22074186197030)(788757137089)(183786458502308); x-ms-exchange-senderadcheck: 1 x-forefront-prvs: 06973FFAD3 received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: multipart/mixed; boundary="_002_VI1PR08MB30539870939CF6687C6FDD04957B0VI1PR08MB3053eurp_" MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 56af6ba8-762a-480f-449b-08d5cd8903fc X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 56af6ba8-762a-480f-449b-08d5cd8903fc X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Jun 2018 21:44:30.2790 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB0607 X-SW-Source: 2018-06/txt/msg00506.txt.bz2 --_002_VI1PR08MB30539870939CF6687C6FDD04957B0VI1PR08MB3053eurp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 4678 Patch updated as requested: - name changed from 'aarch64_add_128bit_scratch_regs' to 'aarch64_addti_scr= atch_regs' - name changed from 'aarch64_subv_128bit_scratch_reg's to ' aarch64_subvti_= scratch_regs' I did not find any helper function to replace ' aarch64_gen_unlikely_cbranc= h'. Okay for trunk? -----Original Message----- From: James Greenhalgh =20 Sent: Thursday, June 7, 2018 5:19 PM To: Michael Collison Cc: GCC Patches ; nd Subject: Re: [PATCH][Aarch64] v2: Arithmetic overflow common functions [Pat= ch 1/4] On Wed, Jun 06, 2018 at 12:14:03PM -0500, Michael Collison wrote: > This is a respin of a AArch64 patch that adds support for builtin arithme= tic overflow operations. This update separates the patch into multiple piec= es and addresses comments made by Richard Earnshaw here: >=20 > https://gcc.gnu.org/ml/gcc-patches/2017-07/msg00249.html >=20 > Original patch and motivation for patch here: >=20 > https://gcc.gnu.org/ml/gcc-patches/2017-05/msg01512.html >=20 > This patch primarily contains common functions in aarch64.c for=20 > generating TImode scratch registers, and common rtl functions utilized by= the overflow patterns in aarch64.md. In addition a new mode representing o= verflow CC_Vmode is introduced. >=20 > Bootstrapped and tested on aarch64-linux-gnu. Okay for trunk? Normally it is preferred that each patch in a series stands independent of = the others. So if I apply just 1/4 I should get a working toolchain. You ha= ve some dependencies here between 1/4 and 3/4. Rather than ask you to rework these patches, I think I'll instead ask you t= o squash them all to a single commit after we're done with review. That wil= l save you some rebase work and maintain the property that trunk can be bui= lt at most revisions. > (aarch64_add_128bit_scratch_regs): Declare > (aarch64_subv_128bit_scratch_regs): Declare. Why use 128bit in the function name rather than call it aarch64_subvti_scra= tch_regs ? > @@ -16337,6 +16353,131 @@ aarch64_split_dimode_const_store (rtx dst, rtx = src) > return true; > } >=20=20 > +/* Generate RTL for a conditional branch with rtx comparison CODE in > + mode CC_MODE. The destination of the unlikely conditional branch > + is LABEL_REF. */ > + > +void > +aarch64_gen_unlikely_cbranch (enum rtx_code code, machine_mode cc_mode, > + rtx label_ref) > +{ > + rtx x; > + x =3D gen_rtx_fmt_ee (code, VOIDmode, > + gen_rtx_REG (cc_mode, CC_REGNUM), > + const0_rtx); > + > + x =3D gen_rtx_IF_THEN_ELSE (VOIDmode, x, > + gen_rtx_LABEL_REF (VOIDmode, label_ref), > + pc_rtx); > + aarch64_emit_unlikely_jump (gen_rtx_SET (pc_rtx, x)); } > + I'm a bit surprised this is AArh64 specific and there are no helper functio= ns to get you here. Not that it should block the patch;l but if we can reus= e something I'd prefer we did. > +void > +aarch64_expand_subvti (rtx op0, rtx low_dest, rtx low_in1, > + rtx low_in2, rtx high_dest, rtx high_in1, > + rtx high_in2) > +{ > + if (low_in2 =3D=3D const0_rtx) > + { > + low_dest =3D low_in1; > + emit_insn (gen_subdi3_compare1 (high_dest, high_in1, > + force_reg (DImode, high_in2))); > + } > + else > + { > + if (CONST_INT_P (low_in2)) > + { > + low_in2 =3D force_reg (DImode, GEN_INT (-UINTVAL (low_in2))); > + high_in2 =3D force_reg (DImode, high_in2); > + emit_insn (gen_adddi3_compareC (low_dest, low_in1, low_in2)); > + } > + else > + emit_insn (gen_subdi3_compare1 (low_dest, low_in1, low_in2)); > + emit_insn (gen_subdi3_carryinCV (high_dest, > + force_reg (DImode, high_in1), > + high_in2)); This is where we'd break the build. gen_subdi3_carryinCV isn't defined unti= l 3/4. The above points are minor. This patch is OK with them cleaned up, once I've reviewed the other 3 parts= to this series. James >=20 > 2018-05-31 Michael Collison > Richard Henderson >=20 > * config/aarch64/aarch64-modes.def (CC_V): New. > * config/aarch64/aarch64-protos.h > (aarch64_add_128bit_scratch_regs): Declare > (aarch64_subv_128bit_scratch_regs): Declare. > (aarch64_expand_subvti): Declare. > (aarch64_gen_unlikely_cbranch): Declare > * config/aarch64/aarch64.c (aarch64_select_cc_mode): Test for signed=20 > overflow using CC_Vmode. > (aarch64_get_condition_code_1): Handle CC_Vmode. > (aarch64_gen_unlikely_cbranch): New function. > (aarch64_add_128bit_scratch_regs): New function. > (aarch64_subv_128bit_scratch_regs): New function. > (aarch64_expand_subvti): New function. --_002_VI1PR08MB30539870939CF6687C6FDD04957B0VI1PR08MB3053eurp_ Content-Type: application/octet-stream; name="gnutools-6308-pt1.patch" Content-Description: gnutools-6308-pt1.patch Content-Disposition: attachment; filename="gnutools-6308-pt1.patch"; size=8074; creation-date="Fri, 08 Jun 2018 21:41:46 GMT"; modification-date="Fri, 08 Jun 2018 21:40:49 GMT" Content-Transfer-Encoding: base64 Content-length: 10948 RnJvbSA5Mjg4ODQ4Mzc4ZjRkYjgwZGJlZTRkN2E3MTAzMzMyZWNiNzc1MDJl IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNaWNoYWVsIENvbGxp c29uIDxtaWNoYWVsLmNvbGxpc29uQGFybS5jb20+CkRhdGU6IEZyaSwgMSBK dW4gMjAxOCAwMDoxMToxNCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIFtQQVRD SCAxLzRdIEdudXRvb2xzIDYzMDggY29tbW9uIGZpbGVzCgpSZW5hbWUgZnVu Y3Rpb25zIHRvIG1vcmUgZGVzY3JpcHRpdmUKCkZpeCBjb21tZW50Ci0tLQog Z2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmIHwgICAxICsK IGdjYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXByb3Rvcy5oICB8ICAxMyAr KystCiBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jICAgICAgICAgfCAx NDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmls ZXMgY2hhbmdlZCwgMTU0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkK CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rl cy5kZWYgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWYK aW5kZXggMWEwNWI2Yy4uZWE3ZWNjMiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmCisrKyBiL2djYy9jb25maWcv YWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZgpAQCAtMjQsNiArMjQsNyBAQCBD Q19NT0RFIChDQ19TV1ApOwogQ0NfTU9ERSAoQ0NfTlopOyAgICAvKiBPbmx5 IE4gYW5kIFogYml0cyBvZiBjb25kaXRpb24gZmxhZ3MgYXJlIHZhbGlkLiAg Ki8KIENDX01PREUgKENDX1opOyAgICAgLyogT25seSBaIGJpdCBvZiBjb25k aXRpb24gZmxhZ3MgaXMgdmFsaWQuICAqLwogQ0NfTU9ERSAoQ0NfQyk7ICAg ICAvKiBPbmx5IEMgYml0IG9mIGNvbmRpdGlvbiBmbGFncyBpcyB2YWxpZC4g ICovCitDQ19NT0RFIChDQ19WKTsgICAgIC8qIE9ubHkgViBiaXQgb2YgY29u ZGl0aW9uIGZsYWdzIGlzIHZhbGlkLiAgKi8KIAogLyogSGFsZi1wcmVjaXNp b24gZmxvYXRpbmcgcG9pbnQgZm9yIF9fZnAxNi4gICovCiBGTE9BVF9NT0RF IChIRiwgMiwgMCk7CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQv YWFyY2g2NC1wcm90b3MuaCBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0 LXByb3Rvcy5oCmluZGV4IDRlYTUwYWMuLmVlOGRiNjggMTAwNjQ0Ci0tLSBh L2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXByb3Rvcy5oCisrKyBiL2dj Yy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXByb3Rvcy5oCkBAIC00NjcsNiAr NDY3LDE2IEBAIHZvaWQgYWFyY2g2NF9yZWxheW91dF9zaW1kX3R5cGVzICh2 b2lkKTsKIHZvaWQgYWFyY2g2NF9yZXNldF9wcmV2aW91c19mbmRlY2wgKHZv aWQpOwogYm9vbCBhYXJjaDY0X3JldHVybl9hZGRyZXNzX3NpZ25pbmdfZW5h YmxlZCAodm9pZCk7CiB2b2lkIGFhcmNoNjRfc2F2ZV9yZXN0b3JlX3Rhcmdl dF9nbG9iYWxzICh0cmVlKTsKK3ZvaWQgYWFyY2g2NF9hZGR0aV9zY3JhdGNo X3JlZ3MgKHJ0eCwgcnR4LCBydHggKiwKKwkJCQkgcnR4ICosIHJ0eCAqLAor CQkJCSBydHggKiwgcnR4ICosCisJCQkJIHJ0eCAqKTsKK3ZvaWQgYWFyY2g2 NF9zdWJ2dGlfc2NyYXRjaF9yZWdzIChydHgsIHJ0eCwgcnR4ICosCisJCQkJ ICBydHggKiwgcnR4ICosCisJCQkJICBydHggKiwgcnR4ICosIHJ0eCAqKTsK K3ZvaWQgYWFyY2g2NF9leHBhbmRfc3VidnRpIChydHgsIHJ0eCwgcnR4LAor CQkJICAgIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CisKIAogLyogSW5pdGlhbGl6 ZSBidWlsdGlucyBmb3IgU0lNRCBpbnRyaW5zaWNzLiAgKi8KIHZvaWQgaW5p dF9hYXJjaDY0X3NpbWRfYnVpbHRpbnMgKHZvaWQpOwpAQCAtNDkzLDcgKzUw Myw4IEBAIHZvaWQgYWFyY2g2NF9zcGxpdF9zaW1kX21vdmUgKHJ0eCwgcnR4 KTsKIGJvb2wgYWFyY2g2NF9mbG9hdF9jb25zdF9yZXByZXNlbnRhYmxlX3Ag KHJ0eCk7CiAKICNpZiBkZWZpbmVkIChSVFhfQ09ERSkKLQordm9pZCBhYXJj aDY0X2dlbl91bmxpa2VseV9jYnJhbmNoIChlbnVtIHJ0eF9jb2RlLCBtYWNo aW5lX21vZGUgY2NfbW9kZSwKKwkJCQkgICBydHggbGFiZWxfcmVmKTsKIGJv b2wgYWFyY2g2NF9sZWdpdGltYXRlX2FkZHJlc3NfcCAobWFjaGluZV9tb2Rl LCBydHgsIGJvb2wsCiAJCQkJICAgYWFyY2g2NF9hZGRyX3F1ZXJ5X3R5cGUg PSBBRERSX1FVRVJZX00pOwogbWFjaGluZV9tb2RlIGFhcmNoNjRfc2VsZWN0 X2NjX21vZGUgKFJUWF9DT0RFLCBydHgsIHJ0eCk7CmRpZmYgLS1naXQgYS9n Y2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jIGIvZ2NjL2NvbmZpZy9hYXJj aDY0L2FhcmNoNjQuYwppbmRleCBjOTRmNzA5Li4zYjg2MzYwIDEwMDY0NAot LS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jCisrKyBiL2djYy9j b25maWcvYWFyY2g2NC9hYXJjaDY0LmMKQEAgLTYzNzcsNiArNjM3NywxMyBA QCBhYXJjaDY0X3NlbGVjdF9jY19tb2RlIChSVFhfQ09ERSBjb2RlLCBydHgg eCwgcnR4IHkpCiAgICAgICAmJiBHRVRfQ09ERSAoeSkgPT0gWkVST19FWFRF TkQpCiAgICAgcmV0dXJuIENDX0Ntb2RlOwogCisgIC8qIEEgdGVzdCBmb3Ig c2lnbmVkIG92ZXJmbG93LiAgKi8KKyAgaWYgKChHRVRfTU9ERSAoeCkgPT0g REltb2RlIHx8IEdFVF9NT0RFICh4KSA9PSBUSW1vZGUpCisgICAgICAmJiBj b2RlID09IE5FCisgICAgICAmJiBHRVRfQ09ERSAoeCkgPT0gUExVUworICAg ICAgJiYgR0VUX0NPREUgKHkpID09IFNJR05fRVhURU5EKQorICAgIHJldHVy biBDQ19WbW9kZTsKKwogICAvKiBGb3IgZXZlcnl0aGluZyBlbHNlLCByZXR1 cm4gQ0Ntb2RlLiAgKi8KICAgcmV0dXJuIENDbW9kZTsKIH0KQEAgLTY0ODMs NiArNjQ5MCwxNSBAQCBhYXJjaDY0X2dldF9jb25kaXRpb25fY29kZV8xICht YWNoaW5lX21vZGUgbW9kZSwgZW51bSBydHhfY29kZSBjb21wX2NvZGUpCiAJ fQogICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIEVfQ0NfVm1vZGU6CisgICAg ICBzd2l0Y2ggKGNvbXBfY29kZSkKKwl7CisJY2FzZSBORTogcmV0dXJuIEFB UkNINjRfVlM7CisJY2FzZSBFUTogcmV0dXJuIEFBUkNINjRfVkM7CisJZGVm YXVsdDogcmV0dXJuIC0xOworCX0KKyAgICAgIGJyZWFrOworCiAgICAgZGVm YXVsdDoKICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0xNjMzNyw2ICsx NjM1MywxMzEgQEAgYWFyY2g2NF9zcGxpdF9kaW1vZGVfY29uc3Rfc3RvcmUg KHJ0eCBkc3QsIHJ0eCBzcmMpCiAgIHJldHVybiB0cnVlOwogfQogCisvKiBH ZW5lcmF0ZSBSVEwgZm9yIGEgY29uZGl0aW9uYWwgYnJhbmNoIHdpdGggcnR4 IGNvbXBhcmlzb24gQ09ERSBpbgorICAgbW9kZSBDQ19NT0RFLiAgVGhlIGRl c3RpbmF0aW9uIG9mIHRoZSB1bmxpa2VseSBjb25kaXRpb25hbCBicmFuY2gK KyAgIGlzIExBQkVMX1JFRi4gICovCisKK3ZvaWQKK2FhcmNoNjRfZ2VuX3Vu bGlrZWx5X2NicmFuY2ggKGVudW0gcnR4X2NvZGUgY29kZSwgbWFjaGluZV9t b2RlIGNjX21vZGUsCisJCQkgICAgICBydHggbGFiZWxfcmVmKQoreworICBy dHggeDsKKyAgeCA9IGdlbl9ydHhfZm10X2VlIChjb2RlLCBWT0lEbW9kZSwK KwkJICAgICAgZ2VuX3J0eF9SRUcgKGNjX21vZGUsIENDX1JFR05VTSksCisJ CSAgICAgIGNvbnN0MF9ydHgpOworCisgIHggPSBnZW5fcnR4X0lGX1RIRU5f RUxTRSAoVk9JRG1vZGUsIHgsCisJCQkgICAgZ2VuX3J0eF9MQUJFTF9SRUYg KFZPSURtb2RlLCBsYWJlbF9yZWYpLAorCQkJICAgIHBjX3J0eCk7CisgIGFh cmNoNjRfZW1pdF91bmxpa2VseV9qdW1wIChnZW5fcnR4X1NFVCAocGNfcnR4 LCB4KSk7Cit9CisKKy8qIEdlbmVyYXRlIERJbW9kZSBzY3JhdGNoIHJlZ2lz dGVycyBmb3IgMTI4LWJpdCAoVEltb2RlKSBhZGRpdGlvbi4KKworICAgT1Ax IHJlcHJlc2VudHMgdGhlIFRJbW9kZSBkZXN0aW5hdGlvbiBvcGVyYW5kIDEK KyAgIE9QMiByZXByZXNlbnRzIHRoZSBUSW1vZGUgZGVzdGluYXRpb24gb3Bl cmFuZCAyCisgICBMT1dfREVTVCByZXByZXNlbnRzIHRoZSBsb3cgaGFsZiAo REltb2RlKSBvZiBUSW1vZGUgb3BlcmFuZCAwCisgICBMT1dfSU4xIHJlcHJl c2VudHMgdGhlIGxvdyBoYWxmIChESW1vZGUpIG9mIFRJbW9kZSBvcGVyYW5k IDEKKyAgIExPV19JTjIgcmVwcmVzZW50cyB0aGUgbG93IGhhbGYgKERJbW9k ZSkgb2YgVEltb2RlIG9wZXJhbmQgMgorICAgSElHSF9ERVNUIHJlcHJlc2Vu dHMgdGhlIGhpZ2ggaGFsZiAoREltb2RlKSBvZiBUSW1vZGUgb3BlcmFuZCAw CisgICBISUdIX0lOMSByZXByZXNlbnRzIHRoZSBoaWdoIGhhbGYgKERJbW9k ZSkgb2YgVEltb2RlIG9wZXJhbmQgMQorICAgSElHSF9JTjIgcmVwcmVzZW50 cyB0aGUgaGlnaCBoYWxmIChESW1vZGUpIG9mIFRJbW9kZSBvcGVyYW5kIDIu ICAqLworCit2b2lkCithYXJjaDY0X2FkZHRpX3NjcmF0Y2hfcmVncyAocnR4 IG9wMSwgcnR4IG9wMiwgcnR4ICpsb3dfZGVzdCwKKwkJCSAgICBydHggKmxv d19pbjEsIHJ0eCAqbG93X2luMiwKKwkJCSAgICBydHggKmhpZ2hfZGVzdCwg cnR4ICpoaWdoX2luMSwKKwkJCSAgICBydHggKmhpZ2hfaW4yKQoreworICAq bG93X2Rlc3QgPSBnZW5fcmVnX3J0eCAoREltb2RlKTsKKyAgKmxvd19pbjEg PSBnZW5fbG93cGFydCAoREltb2RlLCBvcDEpOworICAqbG93X2luMiA9IHNp bXBsaWZ5X2dlbl9zdWJyZWcgKERJbW9kZSwgb3AyLCBUSW1vZGUsCisJCQkJ ICBzdWJyZWdfbG93cGFydF9vZmZzZXQgKERJbW9kZSwgVEltb2RlKSk7Cisg ICpoaWdoX2Rlc3QgPSBnZW5fcmVnX3J0eCAoREltb2RlKTsKKyAgKmhpZ2hf aW4xID0gZ2VuX2hpZ2hwYXJ0IChESW1vZGUsIG9wMSk7CisgICpoaWdoX2lu MiA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKERJbW9kZSwgb3AyLCBUSW1vZGUs CisJCQkJICAgc3VicmVnX2hpZ2hwYXJ0X29mZnNldCAoREltb2RlLCBUSW1v ZGUpKTsKK30KKworLyogR2VuZXJhdGUgREltb2RlIHNjcmF0Y2ggcmVnaXN0 ZXJzIGZvciAxMjgtYml0IChUSW1vZGUpIHN1YnRyYWN0aW9uLgorCisgICBU aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSAnYXJjaDY0X2FkZHRpX3NjcmF0 Y2hfcmVncycgaW4gdGhhdAorICAgT1AxIGNhbiBiZSBhbiBpbW1lZGlhdGUg Y29uc3RhbnQgKHplcm8pLiBXZSBtdXN0IGNhbGwKKyAgIHN1YnJlZ19oaWdo cGFydF9vZmZzZXQgd2l0aCBESW1vZGUgYW5kIFRJbW9kZSBhcmd1bWVudHMs IG90aGVyd2lzZQorICAgVk9JRG1vZGUgd2lsbCBiZSB1c2VkIGZvciB0aGUg Y29uc3RfaW50IHdoaWNoIGdlbmVyYXRlcyBhbiBpbnRlcm5hbAorICAgZXJy b3IgZnJvbSBzdWJyZWdfc2l6ZV9oaWdocGFydF9vZmZzZXQgd2hpY2ggZG9l cyBub3QgZXhwZWN0IGEgc2l6ZSBvZiB6ZXJvLgorCisgICBPUDEgcmVwcmVz ZW50cyB0aGUgVEltb2RlIGRlc3RpbmF0aW9uIG9wZXJhbmQgMQorICAgT1Ay IHJlcHJlc2VudHMgdGhlIFRJbW9kZSBkZXN0aW5hdGlvbiBvcGVyYW5kIDIK KyAgIExPV19ERVNUIHJlcHJlc2VudHMgdGhlIGxvdyBoYWxmIChESW1vZGUp IG9mIFRJbW9kZSBvcGVyYW5kIDAKKyAgIExPV19JTjEgcmVwcmVzZW50cyB0 aGUgbG93IGhhbGYgKERJbW9kZSkgb2YgVEltb2RlIG9wZXJhbmQgMQorICAg TE9XX0lOMiByZXByZXNlbnRzIHRoZSBsb3cgaGFsZiAoREltb2RlKSBvZiBU SW1vZGUgb3BlcmFuZCAyCisgICBISUdIX0RFU1QgcmVwcmVzZW50cyB0aGUg aGlnaCBoYWxmIChESW1vZGUpIG9mIFRJbW9kZSBvcGVyYW5kIDAKKyAgIEhJ R0hfSU4xIHJlcHJlc2VudHMgdGhlIGhpZ2ggaGFsZiAoREltb2RlKSBvZiBU SW1vZGUgb3BlcmFuZCAxCisgICBISUdIX0lOMiByZXByZXNlbnRzIHRoZSBo aWdoIGhhbGYgKERJbW9kZSkgb2YgVEltb2RlIG9wZXJhbmQgMi4gICovCisK Kwordm9pZAorYWFyY2g2NF9zdWJ2dGlfc2NyYXRjaF9yZWdzIChydHggb3Ax LCBydHggb3AyLCBydHggKmxvd19kZXN0LAorCQkJICAgICBydHggKmxvd19p bjEsIHJ0eCAqbG93X2luMiwKKwkJCSAgICAgcnR4ICpoaWdoX2Rlc3QsIHJ0 eCAqaGlnaF9pbjEsCisJCQkgICAgIHJ0eCAqaGlnaF9pbjIpCit7CisgICps b3dfZGVzdCA9IGdlbl9yZWdfcnR4IChESW1vZGUpOworICAqbG93X2luMSA9 IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKERJbW9kZSwgb3AxLCBUSW1vZGUsCisJ CQkJICBzdWJyZWdfbG93cGFydF9vZmZzZXQgKERJbW9kZSwgVEltb2RlKSk7 CisKKyAgKmxvd19pbjIgPSBzaW1wbGlmeV9nZW5fc3VicmVnIChESW1vZGUs IG9wMiwgVEltb2RlLAorCQkJCSAgc3VicmVnX2xvd3BhcnRfb2Zmc2V0IChE SW1vZGUsIFRJbW9kZSkpOworICAqaGlnaF9kZXN0ID0gZ2VuX3JlZ19ydHgg KERJbW9kZSk7CisKKyAgKmhpZ2hfaW4xID0gc2ltcGxpZnlfZ2VuX3N1YnJl ZyAoREltb2RlLCBvcDEsIFRJbW9kZSwKKwkJCQkgICBzdWJyZWdfaGlnaHBh cnRfb2Zmc2V0IChESW1vZGUsIFRJbW9kZSkpOworICAqaGlnaF9pbjIgPSBz aW1wbGlmeV9nZW5fc3VicmVnIChESW1vZGUsIG9wMiwgVEltb2RlLAorCQkJ CSAgIHN1YnJlZ19oaWdocGFydF9vZmZzZXQgKERJbW9kZSwgVEltb2RlKSk7 Cit9CisKKy8qIEdlbmVyYXRlIFJUTCBmb3IgMTI4LWJpdCAoVEltb2RlKSBz dWJ0cmFjdGlvbiB3aXRoIG92ZXJmbG93LgorCisgICBPUDAgcmVwcmVzZW50 cyB0aGUgVEltb2RlIGRlc3RpbmF0aW9uIG9wZXJhbmQgMAorICAgTE9XX0RF U1QgcmVwcmVzZW50cyB0aGUgbG93IGhhbGYgKERJbW9kZSkgb2YgVEltb2Rl IG9wZXJhbmQgMAorICAgTE9XX0lOMSByZXByZXNlbnRzIHRoZSBsb3cgaGFs ZiAoREltb2RlKSBvZiBUSW1vZGUgb3BlcmFuZCAxCisgICBMT1dfSU4yIHJl cHJlc2VudHMgdGhlIGxvdyBoYWxmIChESW1vZGUpIG9mIFRJbW9kZSBvcGVy YW5kIDIKKyAgIEhJR0hfREVTVCByZXByZXNlbnRzIHRoZSBoaWdoIGhhbGYg KERJbW9kZSkgb2YgVEltb2RlIG9wZXJhbmQgMAorICAgSElHSF9JTjEgcmVw cmVzZW50cyB0aGUgaGlnaCBoYWxmIChESW1vZGUpIG9mIFRJbW9kZSBvcGVy YW5kIDEKKyAgIEhJR0hfSU4yIHJlcHJlc2VudHMgdGhlIGhpZ2ggaGFsZiAo REltb2RlKSBvZiBUSW1vZGUgb3BlcmFuZCAyLiAgKi8KKwordm9pZAorYWFy Y2g2NF9leHBhbmRfc3VidnRpIChydHggb3AwLCBydHggbG93X2Rlc3QsIHJ0 eCBsb3dfaW4xLAorCQkgICAgICAgcnR4IGxvd19pbjIsIHJ0eCBoaWdoX2Rl c3QsIHJ0eCBoaWdoX2luMSwKKwkJICAgICAgIHJ0eCBoaWdoX2luMikKK3sK KyAgaWYgKGxvd19pbjIgPT0gY29uc3QwX3J0eCkKKyAgICB7CisgICAgICBs b3dfZGVzdCA9IGxvd19pbjE7CisgICAgICBlbWl0X2luc24gKGdlbl9zdWJk aTNfY29tcGFyZTEgKGhpZ2hfZGVzdCwgaGlnaF9pbjEsCisJCQkJICAgICAg Zm9yY2VfcmVnIChESW1vZGUsIGhpZ2hfaW4yKSkpOworICAgIH0KKyAgZWxz ZQorICAgIHsKKyAgICAgIGlmIChDT05TVF9JTlRfUCAobG93X2luMikpCisJ eworCSAgbG93X2luMiA9IGZvcmNlX3JlZyAoREltb2RlLCBHRU5fSU5UICgt VUlOVFZBTCAobG93X2luMikpKTsKKwkgIGhpZ2hfaW4yID0gZm9yY2VfcmVn IChESW1vZGUsIGhpZ2hfaW4yKTsKKwkgIGVtaXRfaW5zbiAoZ2VuX2FkZGRp M19jb21wYXJlQyAobG93X2Rlc3QsIGxvd19pbjEsIGxvd19pbjIpKTsKKwl9 CisgICAgICBlbHNlCisJZW1pdF9pbnNuIChnZW5fc3ViZGkzX2NvbXBhcmUx IChsb3dfZGVzdCwgbG93X2luMSwgbG93X2luMikpOworICAgICAgZW1pdF9p bnNuIChnZW5fc3ViZGkzX2NhcnJ5aW5DViAoaGlnaF9kZXN0LAorCQkJCSAg ICAgICBmb3JjZV9yZWcgKERJbW9kZSwgaGlnaF9pbjEpLAorCQkJCSAgICAg ICBoaWdoX2luMikpOworICAgIH0KKworICBlbWl0X21vdmVfaW5zbiAoZ2Vu X2xvd3BhcnQgKERJbW9kZSwgb3AwKSwgbG93X2Rlc3QpOworICBlbWl0X21v dmVfaW5zbiAoZ2VuX2hpZ2hwYXJ0IChESW1vZGUsIG9wMCksIGhpZ2hfZGVz dCk7CisKK30KKwogLyogSW1wbGVtZW50IHRoZSBUQVJHRVRfQVNBTl9TSEFE T1dfT0ZGU0VUIGhvb2suICAqLwogCiBzdGF0aWMgdW5zaWduZWQgSE9TVF9X SURFX0lOVAotLSAKMi43LjQKCg== --_002_VI1PR08MB30539870939CF6687C6FDD04957B0VI1PR08MB3053eurp_--