From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 74321385801A for ; Wed, 3 Nov 2021 02:14:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 74321385801A Received: from pps.filterd (m0098416.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1A32ELlB026191; Wed, 3 Nov 2021 02:14:30 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0b-001b2d01.pphosted.com with ESMTP id 3c3eedaxsu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 03 Nov 2021 02:14:30 +0000 Received: from m0098416.ppops.net (m0098416.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 1A327r0x004282; Wed, 3 Nov 2021 02:14:30 GMT Received: from ppma03ams.nl.ibm.com (62.31.33a9.ip4.static.sl-reverse.com [169.51.49.98]) by mx0b-001b2d01.pphosted.com with ESMTP id 3c3eedaxsh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 03 Nov 2021 02:14:29 +0000 Received: from pps.filterd (ppma03ams.nl.ibm.com [127.0.0.1]) by ppma03ams.nl.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 1A327bAx010583; Wed, 3 Nov 2021 02:14:28 GMT Received: from b06cxnps4076.portsmouth.uk.ibm.com (d06relay13.portsmouth.uk.ibm.com [9.149.109.198]) by ppma03ams.nl.ibm.com with ESMTP id 3c0wp9rv88-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 03 Nov 2021 02:14:28 +0000 Received: from d06av25.portsmouth.uk.ibm.com (d06av25.portsmouth.uk.ibm.com [9.149.105.61]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 1A32EPIN57737628 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 3 Nov 2021 02:14:25 GMT Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7F5AB11C07D; Wed, 3 Nov 2021 02:14:25 +0000 (GMT) Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F353C11C04A; Wed, 3 Nov 2021 02:14:23 +0000 (GMT) Received: from [9.200.100.183] (unknown [9.200.100.183]) by d06av25.portsmouth.uk.ibm.com (Postfix) with ESMTP; Wed, 3 Nov 2021 02:14:23 +0000 (GMT) Content-Type: multipart/mixed; boundary="------------xXChZwLWUKYBfB4dX05aiBK2" Message-ID: <83078937-5cf9-13d3-6e11-037c83d69654@linux.ibm.com> Date: Wed, 3 Nov 2021 10:14:21 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.2.1 Subject: Re: [PATCH, rs6000] Disable gimple fold for float or double vec_minmax when fast-math is not set Content-Language: en-US To: David Edelsohn Cc: gcc-patches , Segher Boessenkool , Bill Schmidt References: <14dd6451-ee84-d678-9e04-be6aa51c6fee@linux.ibm.com> From: HAO CHEN GUI In-Reply-To: X-TM-AS-GCONF: 00 X-Proofpoint-GUID: Di94Y38MzEBka6I03qzsLx1W6v8b9Dim X-Proofpoint-ORIG-GUID: cTAvV6Ewii1v6BOcNLA-sVKzp7ohwUco X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.0.607.475 definitions=2021-11-02_08,2021-11-02_01,2020-04-07_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 bulkscore=0 clxscore=1015 mlxlogscore=999 adultscore=0 impostorscore=0 mlxscore=0 lowpriorityscore=0 phishscore=0 priorityscore=1501 suspectscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2111030007 X-Spam-Status: No, score=-2.4 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, NICE_REPLY_A, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP, UNWANTED_LANGUAGE_BODY autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Wed, 03 Nov 2021 02:14:34 -0000 This is a multi-part message in MIME format. --------------xXChZwLWUKYBfB4dX05aiBK2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit David,   Thanks for your comments. I refined it according to your advice. ChangeLog 2021-11-01 Haochen Gui gcc/         * config/rs6000/rs6000-call.c (rs6000_gimple_fold_builtin): Disable         gimple fold for VSX_BUILTIN_XVMINDP, ALTIVEC_BUILTIN_VMINFP,         VSX_BUILTIN_XVMAXDP, ALTIVEC_BUILTIN_VMAXFP when fast-math is not         set. gcc/testsuite/         * gcc.target/powerpc/vec-minmax-1.c: New test.         * gcc.target/powerpc/vec-minmax-2.c: Likewise. patch.diff diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c index 7d485480225..a8e193a0089 100644 --- a/gcc/config/rs6000/rs6000-call.c +++ b/gcc/config/rs6000/rs6000-call.c @@ -12333,6 +12333,14 @@ rs6000_gimple_fold_builtin (gimple_stmt_iterator *gsi)        return true;      /* flavors of vec_min.  */      case VSX_BUILTIN_XVMINDP: +    case ALTIVEC_BUILTIN_VMINFP: +      { +       lhs = gimple_call_lhs (stmt); +       tree type = TREE_TYPE (lhs); +       if (HONOR_NANS (type)) +         return false; +       gcc_fallthrough (); +      }      case P8V_BUILTIN_VMINSD:      case P8V_BUILTIN_VMINUD:      case ALTIVEC_BUILTIN_VMINSB: @@ -12341,7 +12349,6 @@ rs6000_gimple_fold_builtin (gimple_stmt_iterator *gsi)      case ALTIVEC_BUILTIN_VMINUB:      case ALTIVEC_BUILTIN_VMINUH:      case ALTIVEC_BUILTIN_VMINUW: -    case ALTIVEC_BUILTIN_VMINFP:        arg0 = gimple_call_arg (stmt, 0);        arg1 = gimple_call_arg (stmt, 1);        lhs = gimple_call_lhs (stmt); @@ -12351,6 +12358,14 @@ rs6000_gimple_fold_builtin (gimple_stmt_iterator *gsi)        return true;      /* flavors of vec_max.  */      case VSX_BUILTIN_XVMAXDP: +    case ALTIVEC_BUILTIN_VMAXFP: +      { +       lhs = gimple_call_lhs (stmt); +       tree type = TREE_TYPE (lhs); +       if (HONOR_NANS (type)) +         return false; +       gcc_fallthrough (); +      }      case P8V_BUILTIN_VMAXSD:      case P8V_BUILTIN_VMAXUD:      case ALTIVEC_BUILTIN_VMAXSB: @@ -12359,7 +12374,6 @@ rs6000_gimple_fold_builtin (gimple_stmt_iterator *gsi)      case ALTIVEC_BUILTIN_VMAXUB:      case ALTIVEC_BUILTIN_VMAXUH:      case ALTIVEC_BUILTIN_VMAXUW: -    case ALTIVEC_BUILTIN_VMAXFP:        arg0 = gimple_call_arg (stmt, 0);        arg1 = gimple_call_arg (stmt, 1);        lhs = gimple_call_lhs (stmt); diff --git a/gcc/testsuite/gcc.target/powerpc/vec-minmax-1.c b/gcc/testsuite/gcc.target/powerpc/vec-minmax-1.c new file mode 100644 index 00000000000..3f6e3760075 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/vec-minmax-1.c @@ -0,0 +1,53 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_p9vector_ok } */ +/* { dg-options "-O2 -mdejagnu-cpu=power9" } */ +/* { dg-final { scan-assembler-times {\mxvmaxdp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvmaxsp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvmindp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvminsp\M} 1 } } */ + +/* This test verifies that float or double vec_min/max are bound to +   xv[min|max][d|s]p instructions when fast-math is not set.  */ + + +#include + +#ifdef _BIG_ENDIAN +   const int PREF_D = 0; +#else +   const int PREF_D = 1; +#endif + +double vmaxd (double a, double b) +{ +  vector double va = vec_promote (a, PREF_D); +  vector double vb = vec_promote (b, PREF_D); +  return vec_extract (vec_max (va, vb), PREF_D); +} + +double vmind (double a, double b) +{ +  vector double va = vec_promote (a, PREF_D); +  vector double vb = vec_promote (b, PREF_D); +  return vec_extract (vec_min (va, vb), PREF_D); +} + +#ifdef _BIG_ENDIAN +   const int PREF_F = 0; +#else +   const int PREF_F = 3; +#endif + +float vmaxf (float a, float b) +{ +  vector float va = vec_promote (a, PREF_F); +  vector float vb = vec_promote (b, PREF_F); +  return vec_extract (vec_max (va, vb), PREF_F); +} + +float vminf (float a, float b) +{ +  vector float va = vec_promote (a, PREF_F); +  vector float vb = vec_promote (b, PREF_F); +  return vec_extract (vec_min (va, vb), PREF_F); +} diff --git a/gcc/testsuite/gcc.target/powerpc/vec-minmax-2.c b/gcc/testsuite/gcc.target/powerpc/vec-minmax-2.c new file mode 100644 index 00000000000..b27bebba846 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/vec-minmax-2.c @@ -0,0 +1,51 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_p9vector_ok } */ +/* { dg-options "-O2 -mdejagnu-cpu=power9 -ffast-math" } */ +/* { dg-final { scan-assembler-times {\mxsmaxcdp\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mxsmincdp\M} 2 } } */ + +/* This test verifies that float or double vec_min/max can be converted +   to scalar comparison when fast-math is set.  */ + + +#include + +#ifdef _BIG_ENDIAN +   const int PREF_D = 0; +#else +   const int PREF_D = 1; +#endif + +double vmaxd (double a, double b) +{ +  vector double va = vec_promote (a, PREF_D); +  vector double vb = vec_promote (b, PREF_D); +  return vec_extract (vec_max (va, vb), PREF_D); +} + +double vmind (double a, double b) +{ +  vector double va = vec_promote (a, PREF_D); +  vector double vb = vec_promote (b, PREF_D); +  return vec_extract (vec_min (va, vb), PREF_D); +} + +#ifdef _BIG_ENDIAN +   const int PREF_F = 0; +#else +   const int PREF_F = 3; +#endif + +float vmaxf (float a, float b) +{ +  vector float va = vec_promote (a, PREF_F); +  vector float vb = vec_promote (b, PREF_F); +  return vec_extract (vec_max (va, vb), PREF_F); +} + +float vminf (float a, float b) +{ +  vector float va = vec_promote (a, PREF_F); +  vector float vb = vec_promote (b, PREF_F); +  return vec_extract (vec_min (va, vb), PREF_F); +} On 2/11/2021 下午 9:12, David Edelsohn wrote: > On Mon, Nov 1, 2021 at 10:40 PM HAO CHEN GUI wrote: >> David, >> >> My patch file was broken. I am sorry for it. Here is the correct one. Thanks a lot. >> >> ChangeLog >> >> 2021-11-01 Haochen Gui >> >> gcc/ >> * config/rs6000/rs6000-call.c (rs6000_gimple_fold_builtin): Disable >> gimple fold for VSX_BUILTIN_XVMINDP, ALTIVEC_BUILTIN_VMINFP, >> VSX_BUILTIN_XVMAXDP, ALTIVEC_BUILTIN_VMAXFP when fast-math is not >> set. >> >> gcc/testsuite/ >> * gcc.target/powerpc/vec-minmax-1.c: New test. >> * gcc.target/powerpc/vec-minmax-2.c: Likewise. > This is okay. > > The default DejaGNU test action is compile, but it's a good idea to > include the dg-do line to be clear and document the intention. > > Thanks, David --------------xXChZwLWUKYBfB4dX05aiBK2 Content-Type: text/plain; charset=UTF-8; name="ChangeLog" Content-Disposition: attachment; filename="ChangeLog" Content-Transfer-Encoding: base64 MjAyMS0xMS0wMSBIYW9jaGVuIEd1aSA8Z3VpaGFvY0BsaW51eC5pYm0uY29tPgoKZ2NjLwoJ KiBjb25maWcvcnM2MDAwL3JzNjAwMC1jYWxsLmMgKHJzNjAwMF9naW1wbGVfZm9sZF9idWls dGluKTogRGlzYWJsZQoJZ2ltcGxlIGZvbGQgZm9yIFZTWF9CVUlMVElOX1hWTUlORFAsIEFM VElWRUNfQlVJTFRJTl9WTUlORlAsCglWU1hfQlVJTFRJTl9YVk1BWERQLCBBTFRJVkVDX0JV SUxUSU5fVk1BWEZQIHdoZW4gZmFzdC1tYXRoIGlzIG5vdAoJc2V0LgoKZ2NjL3Rlc3RzdWl0 ZS8KCSogZ2NjLnRhcmdldC9wb3dlcnBjL3ZlYy1taW5tYXgtMS5jOiBOZXcgdGVzdC4KCSog Z2NjLnRhcmdldC9wb3dlcnBjL3ZlYy1taW5tYXgtMi5jOiBMaWtld2lzZS4K --------------xXChZwLWUKYBfB4dX05aiBK2 Content-Type: text/plain; charset=UTF-8; name="patch.diff.txt" Content-Disposition: attachment; filename="patch.diff.txt" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC1jYWxsLmMgYi9nY2MvY29u ZmlnL3JzNjAwMC9yczYwMDAtY2FsbC5jCmluZGV4IDdkNDg1NDgwMjI1Li5hOGUxOTNhMDA4 OSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLWNhbGwuYworKysgYi9n Y2MvY29uZmlnL3JzNjAwMC9yczYwMDAtY2FsbC5jCkBAIC0xMjMzMyw2ICsxMjMzMywxNCBA QCByczYwMDBfZ2ltcGxlX2ZvbGRfYnVpbHRpbiAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdz aSkKICAgICAgIHJldHVybiB0cnVlOwogICAgIC8qIGZsYXZvcnMgb2YgdmVjX21pbi4gICov CiAgICAgY2FzZSBWU1hfQlVJTFRJTl9YVk1JTkRQOgorICAgIGNhc2UgQUxUSVZFQ19CVUlM VElOX1ZNSU5GUDoKKyAgICAgIHsKKwlsaHMgPSBnaW1wbGVfY2FsbF9saHMgKHN0bXQpOwor CXRyZWUgdHlwZSA9IFRSRUVfVFlQRSAobGhzKTsKKwlpZiAoSE9OT1JfTkFOUyAodHlwZSkp CisJICByZXR1cm4gZmFsc2U7CisJZ2NjX2ZhbGx0aHJvdWdoICgpOworICAgICAgfQogICAg IGNhc2UgUDhWX0JVSUxUSU5fVk1JTlNEOgogICAgIGNhc2UgUDhWX0JVSUxUSU5fVk1JTlVE OgogICAgIGNhc2UgQUxUSVZFQ19CVUlMVElOX1ZNSU5TQjoKQEAgLTEyMzQxLDcgKzEyMzQ5 LDYgQEAgcnM2MDAwX2dpbXBsZV9mb2xkX2J1aWx0aW4gKGdpbXBsZV9zdG10X2l0ZXJhdG9y ICpnc2kpCiAgICAgY2FzZSBBTFRJVkVDX0JVSUxUSU5fVk1JTlVCOgogICAgIGNhc2UgQUxU SVZFQ19CVUlMVElOX1ZNSU5VSDoKICAgICBjYXNlIEFMVElWRUNfQlVJTFRJTl9WTUlOVVc6 Ci0gICAgY2FzZSBBTFRJVkVDX0JVSUxUSU5fVk1JTkZQOgogICAgICAgYXJnMCA9IGdpbXBs ZV9jYWxsX2FyZyAoc3RtdCwgMCk7CiAgICAgICBhcmcxID0gZ2ltcGxlX2NhbGxfYXJnIChz dG10LCAxKTsKICAgICAgIGxocyA9IGdpbXBsZV9jYWxsX2xocyAoc3RtdCk7CkBAIC0xMjM1 MSw2ICsxMjM1OCwxNCBAQCByczYwMDBfZ2ltcGxlX2ZvbGRfYnVpbHRpbiAoZ2ltcGxlX3N0 bXRfaXRlcmF0b3IgKmdzaSkKICAgICAgIHJldHVybiB0cnVlOwogICAgIC8qIGZsYXZvcnMg b2YgdmVjX21heC4gICovCiAgICAgY2FzZSBWU1hfQlVJTFRJTl9YVk1BWERQOgorICAgIGNh c2UgQUxUSVZFQ19CVUlMVElOX1ZNQVhGUDoKKyAgICAgIHsKKwlsaHMgPSBnaW1wbGVfY2Fs bF9saHMgKHN0bXQpOworCXRyZWUgdHlwZSA9IFRSRUVfVFlQRSAobGhzKTsKKwlpZiAoSE9O T1JfTkFOUyAodHlwZSkpCisJICByZXR1cm4gZmFsc2U7CisJZ2NjX2ZhbGx0aHJvdWdoICgp OworICAgICAgfQogICAgIGNhc2UgUDhWX0JVSUxUSU5fVk1BWFNEOgogICAgIGNhc2UgUDhW X0JVSUxUSU5fVk1BWFVEOgogICAgIGNhc2UgQUxUSVZFQ19CVUlMVElOX1ZNQVhTQjoKQEAg LTEyMzU5LDcgKzEyMzc0LDYgQEAgcnM2MDAwX2dpbXBsZV9mb2xkX2J1aWx0aW4gKGdpbXBs ZV9zdG10X2l0ZXJhdG9yICpnc2kpCiAgICAgY2FzZSBBTFRJVkVDX0JVSUxUSU5fVk1BWFVC OgogICAgIGNhc2UgQUxUSVZFQ19CVUlMVElOX1ZNQVhVSDoKICAgICBjYXNlIEFMVElWRUNf QlVJTFRJTl9WTUFYVVc6Ci0gICAgY2FzZSBBTFRJVkVDX0JVSUxUSU5fVk1BWEZQOgogICAg ICAgYXJnMCA9IGdpbXBsZV9jYWxsX2FyZyAoc3RtdCwgMCk7CiAgICAgICBhcmcxID0gZ2lt cGxlX2NhbGxfYXJnIChzdG10LCAxKTsKICAgICAgIGxocyA9IGdpbXBsZV9jYWxsX2xocyAo c3RtdCk7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcG93ZXJwYy92 ZWMtbWlubWF4LTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9wb3dlcnBjL3ZlYy1t aW5tYXgtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zZjZl Mzc2MDA3NQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9w b3dlcnBjL3ZlYy1taW5tYXgtMS5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qIHsgZGctZG8gY29t cGlsZSB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBwb3dlcnBjX3A5 dmVjdG9yX29rIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tZGVqYWdudS1jcHU9cG93 ZXI5IiB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1xteHZt YXhkcFxNfSAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz IHtcbXh2bWF4c3BcTX0gMSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci10aW1lcyB7XG14dm1pbmRwXE19IDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMge1xteHZtaW5zcFxNfSAxIH0gfSAqLworCisvKiBUaGlzIHRlc3Qg dmVyaWZpZXMgdGhhdCBmbG9hdCBvciBkb3VibGUgdmVjX21pbi9tYXggYXJlIGJvdW5kIHRv CisgICB4dlttaW58bWF4XVtkfHNdcCBpbnN0cnVjdGlvbnMgd2hlbiBmYXN0LW1hdGggaXMg bm90IHNldC4gICovCisKKworI2luY2x1ZGUgPGFsdGl2ZWMuaD4KKworI2lmZGVmIF9CSUdf RU5ESUFOCisgICBjb25zdCBpbnQgUFJFRl9EID0gMDsKKyNlbHNlCisgICBjb25zdCBpbnQg UFJFRl9EID0gMTsKKyNlbmRpZgorCitkb3VibGUgdm1heGQgKGRvdWJsZSBhLCBkb3VibGUg YikKK3sKKyAgdmVjdG9yIGRvdWJsZSB2YSA9IHZlY19wcm9tb3RlIChhLCBQUkVGX0QpOwor ICB2ZWN0b3IgZG91YmxlIHZiID0gdmVjX3Byb21vdGUgKGIsIFBSRUZfRCk7CisgIHJldHVy biB2ZWNfZXh0cmFjdCAodmVjX21heCAodmEsIHZiKSwgUFJFRl9EKTsKK30KKworZG91Ymxl IHZtaW5kIChkb3VibGUgYSwgZG91YmxlIGIpCit7CisgIHZlY3RvciBkb3VibGUgdmEgPSB2 ZWNfcHJvbW90ZSAoYSwgUFJFRl9EKTsKKyAgdmVjdG9yIGRvdWJsZSB2YiA9IHZlY19wcm9t b3RlIChiLCBQUkVGX0QpOworICByZXR1cm4gdmVjX2V4dHJhY3QgKHZlY19taW4gKHZhLCB2 YiksIFBSRUZfRCk7Cit9CisKKyNpZmRlZiBfQklHX0VORElBTgorICAgY29uc3QgaW50IFBS RUZfRiA9IDA7CisjZWxzZQorICAgY29uc3QgaW50IFBSRUZfRiA9IDM7CisjZW5kaWYKKwor ZmxvYXQgdm1heGYgKGZsb2F0IGEsIGZsb2F0IGIpCit7CisgIHZlY3RvciBmbG9hdCB2YSA9 IHZlY19wcm9tb3RlIChhLCBQUkVGX0YpOworICB2ZWN0b3IgZmxvYXQgdmIgPSB2ZWNfcHJv bW90ZSAoYiwgUFJFRl9GKTsKKyAgcmV0dXJuIHZlY19leHRyYWN0ICh2ZWNfbWF4ICh2YSwg dmIpLCBQUkVGX0YpOworfQorCitmbG9hdCB2bWluZiAoZmxvYXQgYSwgZmxvYXQgYikKK3sK KyAgdmVjdG9yIGZsb2F0IHZhID0gdmVjX3Byb21vdGUgKGEsIFBSRUZfRik7CisgIHZlY3Rv ciBmbG9hdCB2YiA9IHZlY19wcm9tb3RlIChiLCBQUkVGX0YpOworICByZXR1cm4gdmVjX2V4 dHJhY3QgKHZlY19taW4gKHZhLCB2YiksIFBSRUZfRik7Cit9CmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvcG93ZXJwYy92ZWMtbWlubWF4LTIuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9wb3dlcnBjL3ZlYy1taW5tYXgtMi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMjdiZWJiYTg0NgotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9wb3dlcnBjL3ZlYy1taW5tYXgtMi5jCkBA IC0wLDAgKzEsNTEgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCBwb3dlcnBjX3A5dmVjdG9yX29rIH0gKi8KKy8qIHsgZGct b3B0aW9ucyAiLU8yIC1tZGVqYWdudS1jcHU9cG93ZXI5IC1mZmFzdC1tYXRoIiB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1xteHNtYXhjZHBcTX0gMiB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XG14c21pbmNk cFxNfSAyIH0gfSAqLworCisvKiBUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBmbG9hdCBvciBk b3VibGUgdmVjX21pbi9tYXggY2FuIGJlIGNvbnZlcnRlZAorICAgdG8gc2NhbGFyIGNvbXBh cmlzb24gd2hlbiBmYXN0LW1hdGggaXMgc2V0LiAgKi8KKworCisjaW5jbHVkZSA8YWx0aXZl Yy5oPgorCisjaWZkZWYgX0JJR19FTkRJQU4KKyAgIGNvbnN0IGludCBQUkVGX0QgPSAwOwor I2Vsc2UKKyAgIGNvbnN0IGludCBQUkVGX0QgPSAxOworI2VuZGlmCisKK2RvdWJsZSB2bWF4 ZCAoZG91YmxlIGEsIGRvdWJsZSBiKQoreworICB2ZWN0b3IgZG91YmxlIHZhID0gdmVjX3By b21vdGUgKGEsIFBSRUZfRCk7CisgIHZlY3RvciBkb3VibGUgdmIgPSB2ZWNfcHJvbW90ZSAo YiwgUFJFRl9EKTsKKyAgcmV0dXJuIHZlY19leHRyYWN0ICh2ZWNfbWF4ICh2YSwgdmIpLCBQ UkVGX0QpOworfQorCitkb3VibGUgdm1pbmQgKGRvdWJsZSBhLCBkb3VibGUgYikKK3sKKyAg dmVjdG9yIGRvdWJsZSB2YSA9IHZlY19wcm9tb3RlIChhLCBQUkVGX0QpOworICB2ZWN0b3Ig ZG91YmxlIHZiID0gdmVjX3Byb21vdGUgKGIsIFBSRUZfRCk7CisgIHJldHVybiB2ZWNfZXh0 cmFjdCAodmVjX21pbiAodmEsIHZiKSwgUFJFRl9EKTsKK30KKworI2lmZGVmIF9CSUdfRU5E SUFOCisgICBjb25zdCBpbnQgUFJFRl9GID0gMDsKKyNlbHNlCisgICBjb25zdCBpbnQgUFJF Rl9GID0gMzsKKyNlbmRpZgorCitmbG9hdCB2bWF4ZiAoZmxvYXQgYSwgZmxvYXQgYikKK3sK KyAgdmVjdG9yIGZsb2F0IHZhID0gdmVjX3Byb21vdGUgKGEsIFBSRUZfRik7CisgIHZlY3Rv ciBmbG9hdCB2YiA9IHZlY19wcm9tb3RlIChiLCBQUkVGX0YpOworICByZXR1cm4gdmVjX2V4 dHJhY3QgKHZlY19tYXggKHZhLCB2YiksIFBSRUZfRik7Cit9CisKK2Zsb2F0IHZtaW5mIChm bG9hdCBhLCBmbG9hdCBiKQoreworICB2ZWN0b3IgZmxvYXQgdmEgPSB2ZWNfcHJvbW90ZSAo YSwgUFJFRl9GKTsKKyAgdmVjdG9yIGZsb2F0IHZiID0gdmVjX3Byb21vdGUgKGIsIFBSRUZf Rik7CisgIHJldHVybiB2ZWNfZXh0cmFjdCAodmVjX21pbiAodmEsIHZiKSwgUFJFRl9GKTsK K30K --------------xXChZwLWUKYBfB4dX05aiBK2--