From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21444 invoked by alias); 23 Sep 2014 06:45:30 -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 21434 invoked by uid 89); 23 Sep 2014 06:45:29 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,SPF_PASS autolearn=ham version=3.3.2 X-HELO: service87.mimecast.com Received: from service87.mimecast.com (HELO service87.mimecast.com) (91.220.42.44) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 23 Sep 2014 06:45:28 +0000 Received: from cam-owa1.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.21]) by service87.mimecast.com; Tue, 23 Sep 2014 07:45:25 +0100 Received: from shawin003 ([10.164.2.46]) by cam-owa1.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 23 Sep 2014 07:45:25 +0100 From: "Zhenqiang Chen" To: Subject: [Ping] [PATCH, 7/10] aarch64: add function to output ccmp insn Date: Tue, 23 Sep 2014 06:45:00 -0000 Message-ID: <001501cfd6f9$f23eb3b0$d6bc1b10$@arm.com> MIME-Version: 1.0 X-MC-Unique: 114092307452501801 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0016_01CFD73D.00637A50" X-IsSubscribed: yes X-SW-Source: 2014-09/txt/msg01912.txt.bz2 This is a multipart message in MIME format. ------=_NextPart_000_0016_01CFD73D.00637A50 Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable Content-length: 6746 Ping? Patch is attached for easy to apply. Thanks! -Zhenqiang > -----Original Message----- > From: gcc-patches-owner@gcc.gnu.org [mailto:gcc-patches- > owner@gcc.gnu.org] On Behalf Of Zhenqiang Chen > Sent: Monday, June 23, 2014 3:00 PM > To: gcc-patches@gcc.gnu.org > Subject: [PATCH, 7/10] aarch64: add function to output ccmp insn >=20 > Hi, >=20 > The patch adds three help functions to output ccmp instructions. >=20 > OK for trunk? >=20 > Thanks! > -Zhenqiang >=20 > ChangeLog: > 2014-06-23 Zhenqiang Chen >=20 > * config/aarch64/aarch64-protos.h (aarch64_output_ccmp): New > prototype. > * config/aarch64/aarch64.c (aarch64_code_to_nzcv): New function. > (aarch64_mode_to_condition_code): New function. > (aarch64_output_ccmp): New function. >=20 > diff --git a/gcc/config/aarch64/aarch64-protos.h > b/gcc/config/aarch64/aarch64-protos.h > index 997ff50..ff1a0f4 100644 > --- a/gcc/config/aarch64/aarch64-protos.h > +++ b/gcc/config/aarch64/aarch64-protos.h > @@ -247,6 +247,7 @@ void aarch64_print_operand (FILE *, rtx, char); void > aarch64_print_operand_address (FILE *, rtx); >=20 > bool aarch64_uimm5 (HOST_WIDE_INT); > +const char* aarch64_output_ccmp (rtx *, bool, int); >=20 > /* Initialize builtins for SIMD intrinsics. */ void init_aarch64_simd_builtins > (void); diff --git a/gcc/config/aarch64/aarch64.c > b/gcc/config/aarch64/aarch64.c index e5ede6e..5fe4826 100644 > --- a/gcc/config/aarch64/aarch64.c > +++ b/gcc/config/aarch64/aarch64.c > @@ -9602,6 +9602,137 @@ aarch64_uimm5 (HOST_WIDE_INT val) > return (val & (HOST_WIDE_INT) 0x1f) =3D=3D val; } >=20 > +/* N Z C V. */ > +#define AARCH64_CC_V 1 > +#define AARCH64_CC_C (1 << 1) > +#define AARCH64_CC_Z (1 << 2) > +#define AARCH64_CC_N (1 << 3) > + > +static unsigned int > +aarch64_code_to_nzcv (enum rtx_code code, bool inverse) { > + switch (code) > + { > + case NE: /* NE, Z =3D=3D 0. */ > + return inverse ? AARCH64_CC_Z : 0; > + case EQ: /* EQ, Z =3D=3D 1. */ > + return inverse ? 0 : AARCH64_CC_Z; > + case LE: /* LE, !(Z =3D=3D 0 && N =3D=3D V). */ > + return inverse ? AARCH64_CC_N | AARCH64_CC_V : AARCH64_CC_Z; > + case GT: /* GT, Z =3D=3D 0 && N =3D=3D V. */ > + return inverse ? AARCH64_CC_Z : AARCH64_CC_N | AARCH64_CC_V; > + case LT: /* LT, N !=3D V. */ > + return inverse ? AARCH64_CC_N | AARCH64_CC_V : AARCH64_CC_N; > + case GE: /* GE, N =3D=3D V. */ > + return inverse ? AARCH64_CC_N : AARCH64_CC_N | AARCH64_CC_V; > + case LEU: /* LS, !(C =3D=3D 1 && Z =3D=3D 0). */ > + return inverse ? AARCH64_CC_C: AARCH64_CC_Z; > + case GTU: /* HI, C =3D=3D1 && Z =3D=3D 0. */ > + return inverse ? AARCH64_CC_Z : AARCH64_CC_C; > + case LTU: /* CC, C =3D=3D 0. */ > + return inverse ? AARCH64_CC_C : 0; > + case GEU: /* CS, C =3D=3D 1. */ > + return inverse ? 0 : AARCH64_CC_C; > + default: > + gcc_unreachable (); > + return 0; > + } > +} > + > +static unsigned > +aarch64_mode_to_condition_code (enum machine_mode mode, bool > inverse) { > + switch (mode) > + { > + case CC_DNEmode: > + return inverse ? aarch64_get_condition_code_1 (CCmode, EQ) > + : aarch64_get_condition_code_1 (CCmode, NE); > + case CC_DEQmode: > + return inverse ? aarch64_get_condition_code_1 (CCmode, NE) > + : aarch64_get_condition_code_1 (CCmode, EQ); > + case CC_DLEmode: > + return inverse ? aarch64_get_condition_code_1 (CCmode, GT) > + : aarch64_get_condition_code_1 (CCmode, LE); > + case CC_DGTmode: > + return inverse ? aarch64_get_condition_code_1 (CCmode, LE) > + : aarch64_get_condition_code_1 (CCmode, GT); > + case CC_DLTmode: > + return inverse ? aarch64_get_condition_code_1 (CCmode, GE) > + : aarch64_get_condition_code_1 (CCmode, LT); > + case CC_DGEmode: > + return inverse ? aarch64_get_condition_code_1 (CCmode, LT) > + : aarch64_get_condition_code_1 (CCmode, GE); > + case CC_DLEUmode: > + return inverse ? aarch64_get_condition_code_1 (CCmode, GTU) > + : aarch64_get_condition_code_1 (CCmode, LEU); > + case CC_DGTUmode: > + return inverse ? aarch64_get_condition_code_1 (CCmode, LEU) > + : aarch64_get_condition_code_1 (CCmode, GTU); > + case CC_DLTUmode: > + return inverse ? aarch64_get_condition_code_1 (CCmode, GEU) > + : aarch64_get_condition_code_1 (CCmode, LTU); > + case CC_DGEUmode: > + return inverse ? aarch64_get_condition_code_1 (CCmode, LTU) > + : aarch64_get_condition_code_1 (CCmode, GEU); > + default: > + gcc_unreachable (); > + } > +} > + > +const char * > +aarch64_output_ccmp (rtx *operands, bool is_and, int which_alternative) > +{ > + char buf[32]; > + rtx cc =3D operands[0]; > + enum rtx_code code =3D GET_CODE (operands[5]); > + unsigned char nzcv =3D aarch64_code_to_nzcv (code, is_and); > + enum machine_mode mode =3D GET_MODE (cc); > + unsigned int cond_code =3D aarch64_mode_to_condition_code (mode, > +!is_and); > + > + gcc_assert (GET_MODE (operands[2]) =3D=3D SImode > + || GET_MODE (operands[2]) =3D=3D DImode); > + > + if (GET_MODE (operands[2]) =3D=3D SImode) > + switch (which_alternative) > + { > + case 0: > + snprintf (buf, sizeof (buf), "ccmp\t%%w2, %%w3, #%u, %s", > + nzcv, aarch64_condition_codes[cond_code]); > + break; > + case 1: > + snprintf (buf, sizeof (buf), "ccmp\t%%w2, #%%3, #%u, %s", > + nzcv, aarch64_condition_codes[cond_code]); > + break; > + case 2: > + snprintf (buf, sizeof (buf), "ccmn\t%%w2, #%%n3, #%u, %s", > + nzcv, aarch64_condition_codes[cond_code]); > + break; > + default: > + gcc_unreachable (); > + } > + else > + switch (which_alternative) > + { > + case 0: > + snprintf (buf, sizeof (buf), "ccmp\t%%x2, %%x3, #%u, %s", > + nzcv, aarch64_condition_codes[cond_code]); > + break; > + case 1: > + snprintf (buf, sizeof (buf), "ccmp\t%%x2, #%%3, #%u, %s", > + nzcv, aarch64_condition_codes[cond_code]); > + break; > + case 2: > + snprintf (buf, sizeof (buf), "ccmn\t%%x2, #%%n3, #%u, %s", > + nzcv, aarch64_condition_codes[cond_code]); > + break; > + default: > + gcc_unreachable (); > + } > + > + output_asm_insn (buf, operands); > + return ""; > +} > + > #undef TARGET_ADDRESS_COST > #define TARGET_ADDRESS_COST aarch64_address_cost ------=_NextPart_000_0016_01CFD73D.00637A50 Content-Transfer-Encoding: base64 Content-Type: application/octet-stream; name="7-ccmp-output-ccmp.patch" Content-Disposition: attachment; filename="7-ccmp-output-ccmp.patch" Content-length: 7097 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXByb3Rv cy5oIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgKaW5k ZXggOWM5ZjA0Ni4uMmNmMDBhOCAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9h YXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgKKysrIGIvZ2NjL2NvbmZpZy9hYXJj aDY0L2FhcmNoNjQtcHJvdG9zLmgKQEAgLTI1Myw2ICsyNTMsNyBAQCB2b2lk IGFhcmNoNjRfcHJpbnRfb3BlcmFuZF9hZGRyZXNzIChGSUxFICosIHJ0eCk7 CiB2b2lkIGFhcmNoNjRfZW1pdF9jYWxsX2luc24gKHJ0eCk7CiAKIGJvb2wg YWFyY2g2NF91aW1tNSAoSE9TVF9XSURFX0lOVCk7Citjb25zdCBjaGFyKiBh YXJjaDY0X291dHB1dF9jY21wIChydHggKiwgYm9vbCwgaW50KTsKIAogLyog SW5pdGlhbGl6ZSBidWlsdGlucyBmb3IgU0lNRCBpbnRyaW5zaWNzLiAgKi8K IHZvaWQgaW5pdF9hYXJjaDY0X3NpbWRfYnVpbHRpbnMgKHZvaWQpOwpkaWZm IC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuYyBiL2djYy9j b25maWcvYWFyY2g2NC9hYXJjaDY0LmMKaW5kZXggOWI2MDg2Ny4uMTU2Njll YyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuYwor KysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jCkBAIC05NzkwLDYg Kzk3OTAsMTM3IEBAIGFhcmNoNjRfdWltbTUgKEhPU1RfV0lERV9JTlQgdmFs KQogICByZXR1cm4gKHZhbCAmIChIT1NUX1dJREVfSU5UKSAweDFmKSA9PSB2 YWw7CiB9CiAKKy8qIE4gWiBDIFYuICAqLworI2RlZmluZSBBQVJDSDY0X0ND X1YgMQorI2RlZmluZSBBQVJDSDY0X0NDX0MgKDEgPDwgMSkKKyNkZWZpbmUg QUFSQ0g2NF9DQ19aICgxIDw8IDIpCisjZGVmaW5lIEFBUkNINjRfQ0NfTiAo MSA8PCAzKQorCitzdGF0aWMgdW5zaWduZWQgaW50CithYXJjaDY0X2NvZGVf dG9fbnpjdiAoZW51bSBydHhfY29kZSBjb2RlLCBib29sIGludmVyc2UpCit7 CisgIHN3aXRjaCAoY29kZSkKKyAgICB7CisgICAgY2FzZSBORTogLyogTkUs IFogPT0gMC4gICovCisgICAgICByZXR1cm4gaW52ZXJzZSA/IEFBUkNINjRf Q0NfWiA6IDA7CisgICAgY2FzZSBFUTogLyogRVEsIFogPT0gMS4gICovCisg ICAgICByZXR1cm4gaW52ZXJzZSA/IDAgOiBBQVJDSDY0X0NDX1o7CisgICAg Y2FzZSBMRTogLyogTEUsICEoWiA9PSAwICYmIE4gPT0gVikuICAqLworICAg ICAgcmV0dXJuIGludmVyc2UgPyBBQVJDSDY0X0NDX04gfCBBQVJDSDY0X0ND X1YgOiBBQVJDSDY0X0NDX1o7CisgICAgY2FzZSBHVDogLyogR1QsIFogPT0g MCAmJiBOID09IFYuICAqLworICAgICAgcmV0dXJuIGludmVyc2UgPyBBQVJD SDY0X0NDX1ogOiBBQVJDSDY0X0NDX04gfCBBQVJDSDY0X0NDX1Y7CisgICAg Y2FzZSBMVDogLyogTFQsIE4gIT0gVi4gICovCisgICAgICByZXR1cm4gaW52 ZXJzZSA/IEFBUkNINjRfQ0NfTiB8IEFBUkNINjRfQ0NfViA6IEFBUkNINjRf Q0NfTjsKKyAgICBjYXNlIEdFOiAvKiBHRSwgTiA9PSBWLiAgKi8KKyAgICAg IHJldHVybiBpbnZlcnNlID8gQUFSQ0g2NF9DQ19OIDogQUFSQ0g2NF9DQ19O IHwgQUFSQ0g2NF9DQ19WOworICAgIGNhc2UgTEVVOiAvKiBMUywgIShDID09 IDEgJiYgWiA9PSAwKS4gICovCisgICAgICByZXR1cm4gaW52ZXJzZSA/IEFB UkNINjRfQ0NfQzogQUFSQ0g2NF9DQ19aOworICAgIGNhc2UgR1RVOiAvKiBI SSwgQyA9PTEgJiYgWiA9PSAwLiAgKi8KKyAgICAgIHJldHVybiBpbnZlcnNl ID8gQUFSQ0g2NF9DQ19aIDogQUFSQ0g2NF9DQ19DOworICAgIGNhc2UgTFRV OiAvKiBDQywgQyA9PSAwLiAgKi8KKyAgICAgIHJldHVybiBpbnZlcnNlID8g QUFSQ0g2NF9DQ19DIDogMDsKKyAgICBjYXNlIEdFVTogLyogQ1MsIEMgPT0g MS4gICovCisgICAgICByZXR1cm4gaW52ZXJzZSA/IDAgOiBBQVJDSDY0X0ND X0M7CisgICAgZGVmYXVsdDoKKyAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsK KyAgICAgIHJldHVybiAwOworICAgIH0KK30KKworc3RhdGljIHVuc2lnbmVk CithYXJjaDY0X21vZGVfdG9fY29uZGl0aW9uX2NvZGUgKGVudW0gbWFjaGlu ZV9tb2RlIG1vZGUsIGJvb2wgaW52ZXJzZSkKK3sKKyAgc3dpdGNoIChtb2Rl KQorICAgIHsKKyAgICBjYXNlIENDX0RORW1vZGU6CisgICAgICByZXR1cm4g aW52ZXJzZSA/IGFhcmNoNjRfZ2V0X2NvbmRpdGlvbl9jb2RlXzEgKENDbW9k ZSwgRVEpCisJCSAgICAgICA6IGFhcmNoNjRfZ2V0X2NvbmRpdGlvbl9jb2Rl XzEgKENDbW9kZSwgTkUpOworICAgIGNhc2UgQ0NfREVRbW9kZToKKyAgICAg IHJldHVybiBpbnZlcnNlID8gYWFyY2g2NF9nZXRfY29uZGl0aW9uX2NvZGVf MSAoQ0Ntb2RlLCBORSkKKwkJICAgICAgIDogYWFyY2g2NF9nZXRfY29uZGl0 aW9uX2NvZGVfMSAoQ0Ntb2RlLCBFUSk7CisgICAgY2FzZSBDQ19ETEVtb2Rl OgorICAgICAgcmV0dXJuIGludmVyc2UgPyBhYXJjaDY0X2dldF9jb25kaXRp b25fY29kZV8xIChDQ21vZGUsIEdUKQorCQkgICAgICAgOiBhYXJjaDY0X2dl dF9jb25kaXRpb25fY29kZV8xIChDQ21vZGUsIExFKTsKKyAgICBjYXNlIEND X0RHVG1vZGU6CisgICAgICByZXR1cm4gaW52ZXJzZSA/IGFhcmNoNjRfZ2V0 X2NvbmRpdGlvbl9jb2RlXzEgKENDbW9kZSwgTEUpCisJCSAgICAgICA6IGFh cmNoNjRfZ2V0X2NvbmRpdGlvbl9jb2RlXzEgKENDbW9kZSwgR1QpOworICAg IGNhc2UgQ0NfRExUbW9kZToKKyAgICAgIHJldHVybiBpbnZlcnNlID8gYWFy Y2g2NF9nZXRfY29uZGl0aW9uX2NvZGVfMSAoQ0Ntb2RlLCBHRSkKKwkJICAg ICAgIDogYWFyY2g2NF9nZXRfY29uZGl0aW9uX2NvZGVfMSAoQ0Ntb2RlLCBM VCk7CisgICAgY2FzZSBDQ19ER0Vtb2RlOgorICAgICAgcmV0dXJuIGludmVy c2UgPyBhYXJjaDY0X2dldF9jb25kaXRpb25fY29kZV8xIChDQ21vZGUsIExU KQorCQkgICAgICAgOiBhYXJjaDY0X2dldF9jb25kaXRpb25fY29kZV8xIChD Q21vZGUsIEdFKTsKKyAgICBjYXNlIENDX0RMRVVtb2RlOgorICAgICAgcmV0 dXJuIGludmVyc2UgPyBhYXJjaDY0X2dldF9jb25kaXRpb25fY29kZV8xIChD Q21vZGUsIEdUVSkKKwkJICAgICAgIDogYWFyY2g2NF9nZXRfY29uZGl0aW9u X2NvZGVfMSAoQ0Ntb2RlLCBMRVUpOworICAgIGNhc2UgQ0NfREdUVW1vZGU6 CisgICAgICByZXR1cm4gaW52ZXJzZSA/IGFhcmNoNjRfZ2V0X2NvbmRpdGlv bl9jb2RlXzEgKENDbW9kZSwgTEVVKQorCQkgICAgICAgOiBhYXJjaDY0X2dl dF9jb25kaXRpb25fY29kZV8xIChDQ21vZGUsIEdUVSk7CisgICAgY2FzZSBD Q19ETFRVbW9kZToKKyAgICAgIHJldHVybiBpbnZlcnNlID8gYWFyY2g2NF9n ZXRfY29uZGl0aW9uX2NvZGVfMSAoQ0Ntb2RlLCBHRVUpCisJCSAgICAgICA6 IGFhcmNoNjRfZ2V0X2NvbmRpdGlvbl9jb2RlXzEgKENDbW9kZSwgTFRVKTsK KyAgICBjYXNlIENDX0RHRVVtb2RlOgorICAgICAgcmV0dXJuIGludmVyc2Ug PyBhYXJjaDY0X2dldF9jb25kaXRpb25fY29kZV8xIChDQ21vZGUsIExUVSkK KwkJICAgICAgIDogYWFyY2g2NF9nZXRfY29uZGl0aW9uX2NvZGVfMSAoQ0Nt b2RlLCBHRVUpOworICAgIGRlZmF1bHQ6CisgICAgICBnY2NfdW5yZWFjaGFi bGUgKCk7CisgICAgfQorfQorCitjb25zdCBjaGFyICoKK2FhcmNoNjRfb3V0 cHV0X2NjbXAgKHJ0eCAqb3BlcmFuZHMsIGJvb2wgaXNfYW5kLCBpbnQgd2hp Y2hfYWx0ZXJuYXRpdmUpCit7CisgIGNoYXIgYnVmWzMyXTsKKyAgcnR4IGNj ID0gb3BlcmFuZHNbMF07CisgIGVudW0gcnR4X2NvZGUgY29kZSA9IEdFVF9D T0RFIChvcGVyYW5kc1s1XSk7CisgIHVuc2lnbmVkIGNoYXIgbnpjdiA9IGFh cmNoNjRfY29kZV90b19uemN2IChjb2RlLCBpc19hbmQpOworICBlbnVtIG1h Y2hpbmVfbW9kZSBtb2RlID0gR0VUX01PREUgKGNjKTsKKyAgdW5zaWduZWQg aW50IGNvbmRfY29kZSA9IGFhcmNoNjRfbW9kZV90b19jb25kaXRpb25fY29k ZSAobW9kZSwgIWlzX2FuZCk7CisKKyAgZ2NjX2Fzc2VydCAoR0VUX01PREUg KG9wZXJhbmRzWzJdKSA9PSBTSW1vZGUKKwkgICAgICB8fCBHRVRfTU9ERSAo b3BlcmFuZHNbMl0pID09IERJbW9kZSk7CisKKyAgaWYgKEdFVF9NT0RFIChv cGVyYW5kc1syXSkgPT0gU0ltb2RlKQorICAgIHN3aXRjaCAod2hpY2hfYWx0 ZXJuYXRpdmUpCisgICAgICB7CisgICAgICBjYXNlIDA6CisJc25wcmludGYg KGJ1Ziwgc2l6ZW9mIChidWYpLCAiY2NtcFx0JSV3MiwgJSV3MywgIyV1LCAl cyIsCisJCSAgbnpjdiwgYWFyY2g2NF9jb25kaXRpb25fY29kZXNbY29uZF9j b2RlXSk7CisJYnJlYWs7CisgICAgICBjYXNlIDE6CisJc25wcmludGYgKGJ1 Ziwgc2l6ZW9mIChidWYpLCAiY2NtcFx0JSV3MiwgIyUlMywgIyV1LCAlcyIs CisJCSAgbnpjdiwgYWFyY2g2NF9jb25kaXRpb25fY29kZXNbY29uZF9jb2Rl XSk7CisJYnJlYWs7CisgICAgICBjYXNlIDI6CisJc25wcmludGYgKGJ1Ziwg c2l6ZW9mIChidWYpLCAiY2Ntblx0JSV3MiwgIyUlbjMsICMldSwgJXMiLAor CQkgIG56Y3YsIGFhcmNoNjRfY29uZGl0aW9uX2NvZGVzW2NvbmRfY29kZV0p OworCWJyZWFrOworICAgICAgZGVmYXVsdDoKKwlnY2NfdW5yZWFjaGFibGUg KCk7CisgICAgICB9CisgIGVsc2UKKyAgICBzd2l0Y2ggKHdoaWNoX2FsdGVy bmF0aXZlKQorICAgICAgeworICAgICAgY2FzZSAwOgorCXNucHJpbnRmIChi dWYsIHNpemVvZiAoYnVmKSwgImNjbXBcdCUleDIsICUleDMsICMldSwgJXMi LAorCQkgIG56Y3YsIGFhcmNoNjRfY29uZGl0aW9uX2NvZGVzW2NvbmRfY29k ZV0pOworCWJyZWFrOworICAgICAgY2FzZSAxOgorCXNucHJpbnRmIChidWYs IHNpemVvZiAoYnVmKSwgImNjbXBcdCUleDIsICMlJTMsICMldSwgJXMiLAor CQkgIG56Y3YsIGFhcmNoNjRfY29uZGl0aW9uX2NvZGVzW2NvbmRfY29kZV0p OworCWJyZWFrOworICAgICAgY2FzZSAyOgorCXNucHJpbnRmIChidWYsIHNp emVvZiAoYnVmKSwgImNjbW5cdCUleDIsICMlJW4zLCAjJXUsICVzIiwKKwkJ ICBuemN2LCBhYXJjaDY0X2NvbmRpdGlvbl9jb2Rlc1tjb25kX2NvZGVdKTsK KwlicmVhazsKKyAgICAgIGRlZmF1bHQ6CisJZ2NjX3VucmVhY2hhYmxlICgp OworICAgICAgfQorCisgIG91dHB1dF9hc21faW5zbiAoYnVmLCBvcGVyYW5k cyk7CisgIHJldHVybiAiIjsKK30KKwogI3VuZGVmIFRBUkdFVF9BRERSRVNT X0NPU1QKICNkZWZpbmUgVEFSR0VUX0FERFJFU1NfQ09TVCBhYXJjaDY0X2Fk ZHJlc3NfY29zdAogCg== ------=_NextPart_000_0016_01CFD73D.00637A50--