From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 124419 invoked by alias); 25 Aug 2019 11:17:17 -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 124408 invoked by uid 89); 25 Aug 2019 11:17:16 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-20.3 required=5.0 tests=AWL,BAYES_00,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=005, HX-Spam-Relays-External:209.85.208.67, H*RU:209.85.208.67, Round X-HELO: mail-ed1-f67.google.com Received: from mail-ed1-f67.google.com (HELO mail-ed1-f67.google.com) (209.85.208.67) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 25 Aug 2019 11:17:13 +0000 Received: by mail-ed1-f67.google.com with SMTP id z51so21840097edz.13 for ; Sun, 25 Aug 2019 04:17:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Liov7y0GwV3Cerrb3Ksx7B4g6Cylojgc7DUAur3GvN0=; b=A/obwdminkYa5aYrRr5HwGU8lraLN71M8vR8xwVw44x3oStIbCW6HSkjQ/WKHHvfac 9tBQuHzjeqIGQaiyyp2Fve5CA2q4pnoujNwSd2d/lH2uTYiDuvQd8nI/Ro0Pjz9PGVT8 cMNJMWr26+w/ppNYOmLa9yB6PzLs+WKLD2cOxWCwrUdy44WTgRcKuLU/kehXS+UiKEc2 Vv5V8ADQCopF/2vGLxVRm8dtTMBWRGPORn6RUzVO0NImoFLuUS6JXxz49kS2EgW7zCZf T9na5hJaPQ/jcKdpudJKk0oFfTxeDx8ftqwMYR/aXF8XxFQlxGKkHF46J52/1ug6jxXX Z4Ig== MIME-Version: 1.0 References: In-Reply-To: From: Tejas Joshi Date: Sun, 25 Aug 2019 20:28:00 -0000 Message-ID: Subject: Re: [PATCH] Builtin function roundeven folding implementation To: gcc-patches@gcc.gnu.org, Martin Jambor Cc: hubicka@ucw.cz, joseph@codesourcery.com Content-Type: multipart/mixed; boundary="0000000000003a5fb30590ef2e7b" X-SW-Source: 2019-08/txt/msg01716.txt.bz2 --0000000000003a5fb30590ef2e7b Content-Type: text/plain; charset="UTF-8" Content-length: 4447 Hi. This is the full patch for roundeven folding. The patch bootstraps and passes regression tests. 2019-08-25 Tejas Joshi Martin Jambor * builtins.c (mathfn_built_in_2): Added CASE_MATHFN_FLOATN for ROUNDEVEN. * builtins.def: Added function definitions for roundeven function variants. * fold-const-call.c (fold_const_call_ss): Added case for roundeven function call. * fold-const.c (negate_mathfn_p): Added case for roundeven function. (tree_call_nonnegative_warnv_p): Added case for roundeven function. (integer_valued_real_call_p): Added case for roundeven function. * real.c (is_even): New function. Returns true if real number is even, otherwise returns false. (is_halfway_below): New function. Returns true if real number is halfway between two integers, else return false. (real_roundeven): New function. Round real number to nearest integer, rounding halfway cases towards even. * real.h (real_value): Added descriptive comments. Added function declaration for roundeven function. * doc/extend.texi (Other Builtins): List roundeven variants among functions which can be handled as builtins. gcc/testsuite/ChangeLog: 2019-08-25 Tejas Joshi * gcc.dg/torture/builtin-round-roundeven.c: New test. * gcc.dg/torture/builtin-round-roundevenf128.c: New test. On Sat, 24 Aug 2019 at 02:08, Joseph Myers wrote: > > On Fri, 23 Aug 2019, Tejas Joshi wrote: > > > diff --git a/gcc/builtins.c b/gcc/builtins.c > > index 9a766e4ad63..5149d901a96 100644 > > --- a/gcc/builtins.c > > +++ b/gcc/builtins.c > > @@ -2056,6 +2056,7 @@ mathfn_built_in_2 (tree type, combined_fn fn) > > CASE_MATHFN (REMQUO) > > CASE_MATHFN_FLOATN (RINT) > > CASE_MATHFN_FLOATN (ROUND) > > + CASE_MATHFN (ROUNDEVEN) > > This should use CASE_MATHFN_FLOATN, as for the other round-to-integer > functions. > > > + /* Check lowest bit, if not set, return true. */ > > + else if (REAL_EXP (r) <= SIGNIFICAND_BITS) > > + { > > + unsigned int n = SIGNIFICAND_BITS - REAL_EXP (r); > > + int w = n / HOST_BITS_PER_LONG; > > + > > + unsigned long num = ((unsigned long)1 << (n % HOST_BITS_PER_LONG)); > > + > > + if ((r->sig[w] & num) == 0) > > + return true; > > Fix the indentation here (the braces should be indented two columns from > the "else", the contents then two columns from the braces). > > > + } > > + > > + else > > And remove the stray blank line before "else". > > > +/* Return true if R is halfway between two integers, else return > > + false. The function is not valid for rvc_inf and rvc_nan classes. */ > > + > > +bool > > +is_halfway_below (const REAL_VALUE_TYPE *r) > > +{ > > + gcc_assert (r->cl != rvc_inf); > > + gcc_assert (r->cl != rvc_nan); > > + int i; > > Explicitly check for rvc_zero and return false in that case (that seems to > be the convention in real.c, rather than relying on code using REAL_EXP to > do something sensible for zero, which has REAL_EXP of 0). > > > + else if (REAL_EXP (r) < SIGNIFICAND_BITS) > > + { > > Another place to fix indentation. > > > +void > > +real_roundeven (REAL_VALUE_TYPE *r, format_helper fmt, > > + const REAL_VALUE_TYPE *x) > > +{ > > + if (is_halfway_below (x)) > > + { > > Again, fix indentation throughout this function. > > The patch is OK with those fixes, assuming the fixed patch passes testing. > I encourage a followup looking for and fixing further places in the source > tree that handle round-to-integer function families (ceil / floor / trunc > / round / rint / nearbyint) and should handle roundeven as well, as that > would lead to more optimization of roundeven calls. Such places aren't > that easy to search for because most of those names are common words used > in other contexts in the compiler. But, for example, match.pd has > patterns > > /* trunc(trunc(x)) -> trunc(x), etc. */ > > /* f(x) -> x if x is integer valued and f does nothing for such values. */ > > /* truncl(extend(x)) -> extend(trunc(x)), etc., if x is a double. */ > > /* truncl(extend(x)) and trunc(extend(x)) -> extend(truncf(x)), etc., > if x is a float. */ > > which should apply to roundeven as well. > > -- > Joseph S. Myers > joseph@codesourcery.com --0000000000003a5fb30590ef2e7b Content-Type: text/x-patch; charset="US-ASCII"; name="roundeven.diff" Content-Disposition: attachment; filename="roundeven.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jzqvw4mw0 Content-length: 15348 ZGlmZiAtLWdpdCBhL2djYy9idWlsdGlucy5jIGIvZ2NjL2J1aWx0aW5zLmMK aW5kZXggOWE3NjZlNGFkNjMuLmU0NDg2NmUyYTYwIDEwMDY0NAotLS0gYS9n Y2MvYnVpbHRpbnMuYworKysgYi9nY2MvYnVpbHRpbnMuYwpAQCAtMjA1Niw2 ICsyMDU2LDcgQEAgbWF0aGZuX2J1aWx0X2luXzIgKHRyZWUgdHlwZSwgY29t YmluZWRfZm4gZm4pCiAgICAgQ0FTRV9NQVRIRk4gKFJFTVFVTykKICAgICBD QVNFX01BVEhGTl9GTE9BVE4gKFJJTlQpCiAgICAgQ0FTRV9NQVRIRk5fRkxP QVROIChST1VORCkKKyAgICBDQVNFX01BVEhGTl9GTE9BVE4gKFJPVU5ERVZF TikKICAgICBDQVNFX01BVEhGTiAoU0NBTEIpCiAgICAgQ0FTRV9NQVRIRk4g KFNDQUxCTE4pCiAgICAgQ0FTRV9NQVRIRk4gKFNDQUxCTikKZGlmZiAtLWdp dCBhL2djYy9idWlsdGlucy5kZWYgYi9nY2MvYnVpbHRpbnMuZGVmCmluZGV4 IDZkNDFiZGI0ZjQ0Li44YmI3MDI3YWFjNyAxMDA2NDQKLS0tIGEvZ2NjL2J1 aWx0aW5zLmRlZgorKysgYi9nY2MvYnVpbHRpbnMuZGVmCkBAIC01NDIsMTIg KzU0MiwxOCBAQCBERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9S SU5UTCwgInJpbnRsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBB VAogI2RlZmluZSBSSU5UX1RZUEUoRikgQlRfRk5fIyNGIyNfIyNGCiBERUZf RVhUX0xJQl9GTE9BVE5fTlhfQlVJTFRJTlMgKEJVSUxUX0lOX1JJTlQsICJy aW50IiwgUklOVF9UWVBFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNU KQogI3VuZGVmIFJJTlRfVFlQRQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAo QlVJTFRfSU5fUk9VTkRFVkVOLCAicm91bmRldmVuIiwgQlRfRk5fRE9VQkxF X0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9F WFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1JPVU5ERVZFTkYsICJyb3Vu ZGV2ZW5mIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJP V19MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9J Tl9ST1VOREVWRU5MLCAicm91bmRldmVubCIsIEJUX0ZOX0xPTkdET1VCTEVf TE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKIERF Rl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1JPVU5ELCAicm91bmQi LCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVB Rl9MSVNUKQogREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUk9V TkRGLCAicm91bmRmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfQ09OU1Rf Tk9USFJPV19MRUFGX0xJU1QpCiBERUZfQzk5X0JVSUxUSU4gICAgICAgIChC VUlMVF9JTl9ST1VOREwsICJyb3VuZGwiLCBCVF9GTl9MT05HRE9VQkxFX0xP TkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCiAjZGVm aW5lIFJPVU5EX1RZUEUoRikgQlRfRk5fIyNGIyNfIyNGCiBERUZfRVhUX0xJ Ql9GTE9BVE5fTlhfQlVJTFRJTlMgKEJVSUxUX0lOX1JPVU5ELCAicm91bmQi LCBST1VORF9UWVBFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQog I3VuZGVmIFJPVU5EX1RZUEUKKyNkZWZpbmUgUk9VTkRFVkVOX1RZUEUoRikg QlRfRk5fIyNGIyNfIyNGCitERUZfRVhUX0xJQl9GTE9BVE5fTlhfQlVJTFRJ TlMgKEJVSUxUX0lOX1JPVU5ERVZFTiwgInJvdW5kZXZlbiIsIFJPVU5ERVZF Tl9UWVBFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorI3VuZGVm IFJPVU5ERVZFTl9UWVBFCiBERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlM VF9JTl9TQ0FMQiwgInNjYWxiIiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9ET1VC TEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCiBERUZfRVhUX0xJ Ql9CVUlMVElOICAgIChCVUlMVF9JTl9TQ0FMQkYsICJzY2FsYmYiLCBCVF9G Tl9GTE9BVF9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19F UlJOTykKIERFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NDQUxC TCwgInNjYWxibCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9MT05H RE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQpkaWZmIC0t Z2l0IGEvZ2NjL2RvYy9leHRlbmQudGV4aSBiL2djYy9kb2MvZXh0ZW5kLnRl eGkKaW5kZXggMjM1YmU5OWFiY2IuLjRhZWE0ZDMxNzYxIDEwMDY0NAotLS0g YS9nY2MvZG9jL2V4dGVuZC50ZXhpCisrKyBiL2djYy9kb2MvZXh0ZW5kLnRl eGkKQEAgLTEyNDQ4LDcgKzEyNDQ4LDggQEAgT3V0c2lkZSBzdHJpY3QgSVNP IEMgbW9kZSAoQG9wdGlvbnstYW5zaX0sIEBvcHRpb257LXN0ZD1jOTB9LAog QGNvZGV7ajFmfSwgQGNvZGV7ajFsfSwgQGNvZGV7ajF9LCBAY29kZXtqbmZ9 LCBAY29kZXtqbmx9LCBAY29kZXtqbn0sCiBAY29kZXtsZ2FtbWFmX3J9LCBA Y29kZXtsZ2FtbWFsX3J9LCBAY29kZXtsZ2FtbWFfcn0sIEBjb2Rle21lbXBj cHl9LAogQGNvZGV7cG93MTBmfSwgQGNvZGV7cG93MTBsfSwgQGNvZGV7cG93 MTB9LCBAY29kZXtwcmludGZfdW5sb2NrZWR9LAotQGNvZGV7cmluZGV4fSwg QGNvZGV7c2NhbGJmfSwgQGNvZGV7c2NhbGJsfSwgQGNvZGV7c2NhbGJ9LAor QGNvZGV7cmluZGV4fSwgQGNvZGV7cm91bmRldmVufSwgQGNvZGV7cm91bmRl dmVuZn0sIEBjb2Rle3JvdWRuZXZlbmx9LAorQGNvZGV7c2NhbGJmfSwgQGNv ZGV7c2NhbGJsfSwgQGNvZGV7c2NhbGJ9LAogQGNvZGV7c2lnbmJpdH0sIEBj b2Rle3NpZ25iaXRmfSwgQGNvZGV7c2lnbmJpdGx9LCBAY29kZXtzaWduYml0 ZDMyfSwKIEBjb2Rle3NpZ25iaXRkNjR9LCBAY29kZXtzaWduYml0ZDEyOH0s IEBjb2Rle3NpZ25pZmljYW5kZn0sCiBAY29kZXtzaWduaWZpY2FuZGx9LCBA Y29kZXtzaWduaWZpY2FuZH0sIEBjb2Rle3NpbmNvc2Z9LApkaWZmIC0tZ2l0 IGEvZ2NjL2ZvbGQtY29uc3QtY2FsbC5jIGIvZ2NjL2ZvbGQtY29uc3QtY2Fs bC5jCmluZGV4IGUyMWQ4ZTExMDcyLi4zYTE0ZDJhNDFjMSAxMDA2NDQKLS0t IGEvZ2NjL2ZvbGQtY29uc3QtY2FsbC5jCisrKyBiL2djYy9mb2xkLWNvbnN0 LWNhbGwuYwpAQCAtODM2LDcgKzgzNiw3IEBAIGZvbGRfY29uc3RfY2FsbF9z cyAocmVhbF92YWx1ZSAqcmVzdWx0LCBjb21iaW5lZF9mbiBmbiwKIAogICAg IENBU0VfQ0ZOX0ZMT09SOgogICAgIENBU0VfQ0ZOX0ZMT09SX0ZOOgotICAg ICAgaWYgKCFSRUFMX1ZBTFVFX0lTTkFOICgqYXJnKSB8fCAhZmxhZ19lcnJu b19tYXRoKQorICAgICAgaWYgKCFSRUFMX1ZBTFVFX0lTU0lHTkFMSU5HX05B TiAoKmFyZykpCiAJewogCSAgcmVhbF9mbG9vciAocmVzdWx0LCBmb3JtYXQs IGFyZyk7CiAJICByZXR1cm4gdHJ1ZTsKQEAgLTg0NSw3ICs4NDUsNyBAQCBm b2xkX2NvbnN0X2NhbGxfc3MgKHJlYWxfdmFsdWUgKnJlc3VsdCwgY29tYmlu ZWRfZm4gZm4sCiAKICAgICBDQVNFX0NGTl9DRUlMOgogICAgIENBU0VfQ0ZO X0NFSUxfRk46Ci0gICAgICBpZiAoIVJFQUxfVkFMVUVfSVNOQU4gKCphcmcp IHx8ICFmbGFnX2Vycm5vX21hdGgpCisgICAgICBpZiAoIVJFQUxfVkFMVUVf SVNTSUdOQUxJTkdfTkFOICgqYXJnKSkKIAl7CiAJICByZWFsX2NlaWwgKHJl c3VsdCwgZm9ybWF0LCBhcmcpOwogCSAgcmV0dXJuIHRydWU7CkBAIC04NTQs MTggKzg1NCwzMSBAQCBmb2xkX2NvbnN0X2NhbGxfc3MgKHJlYWxfdmFsdWUg KnJlc3VsdCwgY29tYmluZWRfZm4gZm4sCiAKICAgICBDQVNFX0NGTl9UUlVO QzoKICAgICBDQVNFX0NGTl9UUlVOQ19GTjoKLSAgICAgIHJlYWxfdHJ1bmMg KHJlc3VsdCwgZm9ybWF0LCBhcmcpOwotICAgICAgcmV0dXJuIHRydWU7Cisg ICAgICBpZiAoIVJFQUxfVkFMVUVfSVNTSUdOQUxJTkdfTkFOICgqYXJnKSkK Kwl7CisJICByZWFsX3RydW5jIChyZXN1bHQsIGZvcm1hdCwgYXJnKTsKKwkg IHJldHVybiB0cnVlOworCX0KKyAgICAgIHJldHVybiBmYWxzZTsKIAogICAg IENBU0VfQ0ZOX1JPVU5EOgogICAgIENBU0VfQ0ZOX1JPVU5EX0ZOOgotICAg ICAgaWYgKCFSRUFMX1ZBTFVFX0lTTkFOICgqYXJnKSB8fCAhZmxhZ19lcnJu b19tYXRoKQorICAgICAgaWYgKCFSRUFMX1ZBTFVFX0lTU0lHTkFMSU5HX05B TiAoKmFyZykpCiAJewogCSAgcmVhbF9yb3VuZCAocmVzdWx0LCBmb3JtYXQs IGFyZyk7CiAJICByZXR1cm4gdHJ1ZTsKIAl9CiAgICAgICByZXR1cm4gZmFs c2U7CiAKKyAgICBDQVNFX0NGTl9ST1VOREVWRU46CisgICAgQ0FTRV9DRk5f Uk9VTkRFVkVOX0ZOOgorICAgICAgaWYgKCFSRUFMX1ZBTFVFX0lTU0lHTkFM SU5HX05BTiAoKmFyZykpCisJeworCSAgcmVhbF9yb3VuZGV2ZW4gKHJlc3Vs dCwgZm9ybWF0LCBhcmcpOworCSAgcmV0dXJuIHRydWU7CisJfQorICAgICAg cmV0dXJuIGZhbHNlOworCiAgICAgQ0FTRV9DRk5fTE9HQjoKICAgICAgIHJl dHVybiBmb2xkX2NvbnN0X2xvZ2IgKHJlc3VsdCwgYXJnLCBmb3JtYXQpOwog CmRpZmYgLS1naXQgYS9nY2MvZm9sZC1jb25zdC5jIGIvZ2NjL2ZvbGQtY29u c3QuYwppbmRleCA4YzcxMWFiYTEyYS4uMDM3NmNkYjczYTQgMTAwNjQ0Ci0t LSBhL2djYy9mb2xkLWNvbnN0LmMKKysrIGIvZ2NjL2ZvbGQtY29uc3QuYwpA QCAtMzI5LDYgKzMyOSw4IEBAIG5lZ2F0ZV9tYXRoZm5fcCAoY29tYmluZWRf Zm4gZm4pCiAgICAgQ0FTRV9DRk5fTExST1VORDoKICAgICBDQVNFX0NGTl9M Uk9VTkQ6CiAgICAgQ0FTRV9DRk5fUk9VTkQ6CisgICAgQ0FTRV9DRk5fUk9V TkRFVkVOOgorICAgIENBU0VfQ0ZOX1JPVU5ERVZFTl9GTjoKICAgICBDQVNF X0NGTl9TSU46CiAgICAgQ0FTRV9DRk5fU0lOSDoKICAgICBDQVNFX0NGTl9U QU46CkBAIC0xMzEwNyw2ICsxMzEwOSw4IEBAIHRyZWVfY2FsbF9ub25uZWdh dGl2ZV93YXJudl9wICh0cmVlIHR5cGUsIGNvbWJpbmVkX2ZuIGZuLCB0cmVl IGFyZzAsIHRyZWUgYXJnMSwKICAgICBDQVNFX0NGTl9SSU5UX0ZOOgogICAg IENBU0VfQ0ZOX1JPVU5EOgogICAgIENBU0VfQ0ZOX1JPVU5EX0ZOOgorICAg IENBU0VfQ0ZOX1JPVU5ERVZFTjoKKyAgICBDQVNFX0NGTl9ST1VOREVWRU5f Rk46CiAgICAgQ0FTRV9DRk5fU0NBTEI6CiAgICAgQ0FTRV9DRk5fU0NBTEJM TjoKICAgICBDQVNFX0NGTl9TQ0FMQk46CkBAIC0xMzYzMCw2ICsxMzYzNCw4 IEBAIGludGVnZXJfdmFsdWVkX3JlYWxfY2FsbF9wIChjb21iaW5lZF9mbiBm biwgdHJlZSBhcmcwLCB0cmVlIGFyZzEsIGludCBkZXB0aCkKICAgICBDQVNF X0NGTl9SSU5UX0ZOOgogICAgIENBU0VfQ0ZOX1JPVU5EOgogICAgIENBU0Vf Q0ZOX1JPVU5EX0ZOOgorICAgIENBU0VfQ0ZOX1JPVU5ERVZFTjoKKyAgICBD QVNFX0NGTl9ST1VOREVWRU5fRk46CiAgICAgQ0FTRV9DRk5fVFJVTkM6CiAg ICAgQ0FTRV9DRk5fVFJVTkNfRk46CiAgICAgICByZXR1cm4gdHJ1ZTsKZGlm ZiAtLWdpdCBhL2djYy9yZWFsLmMgYi9nY2MvcmVhbC5jCmluZGV4IDAxNjRm MDk3YTUzLi42ZTZhMzk0OWE0NSAxMDA2NDQKLS0tIGEvZ2NjL3JlYWwuYwor KysgYi9nY2MvcmVhbC5jCkBAIC01MDEwLDYgKzUwMTAsMTAxIEBAIHJlYWxf cm91bmQgKFJFQUxfVkFMVUVfVFlQRSAqciwgZm9ybWF0X2hlbHBlciBmbXQs CiAgICAgcmVhbF9jb252ZXJ0IChyLCBmbXQsIHIpOwogfQogCisvKiBSZXR1 cm4gdHJ1ZSBpbmNsdWRpbmcgMCBpZiBpbnRlZ2VyIHBhcnQgb2YgUiBpcyBl dmVuLCBlbHNlIHJldHVybgorICAgZmFsc2UuICBUaGUgZnVuY3Rpb24gaXMg bm90IHZhbGlkIGZvciBydmNfaW5mIGFuZCBydmNfbmFuIGNsYXNzZXMuICAq LworCitib29sCitpc19ldmVuIChSRUFMX1ZBTFVFX1RZUEUgKnIpCit7Cisg IGdjY19hc3NlcnQgKHItPmNsICE9IHJ2Y19pbmYpOworICBnY2NfYXNzZXJ0 IChyLT5jbCAhPSBydmNfbmFuKTsKKworICBpZiAoci0+Y2wgPT0gcnZjX3pl cm8pCisgICAgcmV0dXJuIHRydWU7CisKKyAgLyogRm9yICgtMSwxKSwgbnVt YmVyIGlzIGV2ZW4uICAqLworICBpZiAoUkVBTF9FWFAgKHIpIDw9IDApCisg ICAgcmV0dXJuIHRydWU7CisKKyAgLyogQ2hlY2sgbG93ZXN0IGJpdCwgaWYg bm90IHNldCwgcmV0dXJuIHRydWUuICAqLworICBlbHNlIGlmIChSRUFMX0VY UCAocikgPD0gU0lHTklGSUNBTkRfQklUUykKKyAgICB7CisgICAgICB1bnNp Z25lZCBpbnQgbiA9IFNJR05JRklDQU5EX0JJVFMgLSBSRUFMX0VYUCAocik7 CisgICAgICBpbnQgdyA9IG4gLyBIT1NUX0JJVFNfUEVSX0xPTkc7CisKKyAg ICAgIHVuc2lnbmVkIGxvbmcgbnVtID0gKCh1bnNpZ25lZCBsb25nKTEgPDwg KG4gJSBIT1NUX0JJVFNfUEVSX0xPTkcpKTsKKworICAgICAgaWYgKChyLT5z aWdbd10gJiBudW0pID09IDApCisJcmV0dXJuIHRydWU7CisgICAgfQorICBl bHNlCisgICAgcmV0dXJuIHRydWU7CisKKyAgcmV0dXJuIGZhbHNlOworfQor CisvKiBSZXR1cm4gdHJ1ZSBpZiBSIGlzIGhhbGZ3YXkgYmV0d2VlbiB0d28g aW50ZWdlcnMsIGVsc2UgcmV0dXJuCisgICBmYWxzZS4gIFRoZSBmdW5jdGlv biBpcyBub3QgdmFsaWQgZm9yIHJ2Y19pbmYgYW5kIHJ2Y19uYW4gY2xhc3Nl cy4gICovCisKK2Jvb2wKK2lzX2hhbGZ3YXlfYmVsb3cgKGNvbnN0IFJFQUxf VkFMVUVfVFlQRSAqcikKK3sKKyAgZ2NjX2Fzc2VydCAoci0+Y2wgIT0gcnZj X2luZik7CisgIGdjY19hc3NlcnQgKHItPmNsICE9IHJ2Y19uYW4pOworICBp bnQgaTsKKworICBpZiAoci0+Y2wgPT0gcnZjX3plcm8pCisgICAgcmV0dXJu IGZhbHNlOworCisgIC8qIEZvciBudW1iZXJzICgtMC41LDApIGFuZCAoMCww LjUpLiAgKi8KKyAgaWYgKFJFQUxfRVhQIChyKSA8IDApCisgICAgcmV0dXJu IGZhbHNlOworCisgIGVsc2UgaWYgKFJFQUxfRVhQIChyKSA8IFNJR05JRklD QU5EX0JJVFMpCisgICAgeworICAgICAgdW5zaWduZWQgaW50IG4gPSBTSUdO SUZJQ0FORF9CSVRTIC0gUkVBTF9FWFAgKHIpIC0gMTsKKyAgICAgIGludCB3 ID0gbiAvIEhPU1RfQklUU19QRVJfTE9ORzsKKworICAgICAgZm9yIChpID0g MDsgaSA8IHc7ICsraSkKKwlpZiAoci0+c2lnW2ldICE9IDApCisJICByZXR1 cm4gZmFsc2U7CisKKyAgICAgIHVuc2lnbmVkIGxvbmcgbnVtID0gKCh1bnNp Z25lZCBsb25nKTEgPDwgKG4gJSBIT1NUX0JJVFNfUEVSX0xPTkcpKTsKKwor ICAgICAgaWYgKCgoci0+c2lnW3ddICYgbnVtKSAhPSAwKSAmJiAoKHItPnNp Z1t3XSAmIChudW0tMSkpID09IDApKQorCXJldHVybiB0cnVlOworICAgIH0K KyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBSb3VuZCBYIHRvIG5lYXJlc3Qg aW50ZWdlciwgcm91bmRpbmcgaGFsZndheSBjYXNlcyB0b3dhcmRzIGV2ZW4u ICAqLworCit2b2lkCityZWFsX3JvdW5kZXZlbiAoUkVBTF9WQUxVRV9UWVBF ICpyLCBmb3JtYXRfaGVscGVyIGZtdCwKKwkJY29uc3QgUkVBTF9WQUxVRV9U WVBFICp4KQoreworICBpZiAoaXNfaGFsZndheV9iZWxvdyAoeCkpCisgICAg eworICAgICAgLyogU3BlY2lhbCBjYXNlIGFzIC0wLjUgcm91bmRzIHRvIC0w LjAgYW5kCisJIHNpbWlsYXJseSArMC41IHJvdW5kcyB0byArMC4wLiAgKi8K KyAgICAgIGlmIChSRUFMX0VYUCAoeCkgPT0gMCkKKwl7CisJICAqciA9ICp4 OworCSAgY2xlYXJfc2lnbmlmaWNhbmRfYmVsb3cgKHIsIFNJR05JRklDQU5E X0JJVFMpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBkb19hZGQgKHIsIHgs ICZkY29uc3RoYWxmLCB4LT5zaWduKTsKKwkgIGlmICghaXNfZXZlbiAocikp CisJICAgIGRvX2FkZCAociwgciwgJmRjb25zdG0xLCB4LT5zaWduKTsKKwl9 CisgICAgICBpZiAoZm10KQorCXJlYWxfY29udmVydCAociwgZm10LCByKTsK KyAgICB9CisgIGVsc2UKKyAgICByZWFsX3JvdW5kIChyLCBmbXQsIHgpOwor fQorCiAvKiBTZXQgdGhlIHNpZ24gb2YgUiB0byB0aGUgc2lnbiBvZiBYLiAg Ki8KIAogdm9pZApkaWZmIC0tZ2l0IGEvZ2NjL3JlYWwuaCBiL2djYy9yZWFs LmgKaW5kZXggOTViOWRiODNkMjQuLjJmNDE4MzRlY2ZkIDEwMDY0NAotLS0g YS9nY2MvcmVhbC5oCisrKyBiL2djYy9yZWFsLmgKQEAgLTQxLDExICs0MSwx OCBAQCBzdHJ1Y3QgR1RZKCgpKSByZWFsX3ZhbHVlIHsKICAgICAgc3VyZSB0 aGV5J3JlIHBhY2tlZCB0b2dldGhlciwgb3RoZXJ3aXNlIFJFQUxfVkFMVUVf VFlQRV9TSVpFIHdpbGwKICAgICAgYmUgbWlzY29tcHV0ZWQuICAqLwogICB1 bnNpZ25lZCBpbnQgLyogRU5VTV9CSVRGSUVMRCAocmVhbF92YWx1ZV9jbGFz cykgKi8gY2wgOiAyOworICAvKiAxIGlmIG51bWJlciBpcyBkZWNpbWFsIGZs b2F0aW5nIHBvaW50LiAgKi8KICAgdW5zaWduZWQgaW50IGRlY2ltYWwgOiAx OworICAvKiAxIGlmIG51bWJlciBpcyBuZWdhdGl2ZS4gICovCiAgIHVuc2ln bmVkIGludCBzaWduIDogMTsKKyAgLyogMSBpZiBudW1iZXIgaXMgc2lnbmFs bGluZy4gICovCiAgIHVuc2lnbmVkIGludCBzaWduYWxsaW5nIDogMTsKKyAg LyogMSBpZiBudW1iZXIgaXMgY2Fub25pY2FsCisgIEFsbCBhcmUgZ2VuZXJh bGx5IHVzZWQgZm9yIGhhbmRsaW5nIGNhc2VzIGluIHJlYWwuYy4gICovCiAg IHVuc2lnbmVkIGludCBjYW5vbmljYWwgOiAxOworICAvKiB1bmJpYXNlZCBl eHBvbmVudCBvZiB0aGUgbnVtYmVyLiAgKi8KICAgdW5zaWduZWQgaW50IHVl eHAgOiBFWFBfQklUUzsKKyAgLyogc2lnbmlmaWNhbmQgb2YgdGhlIG51bWJl ci4gICovCiAgIHVuc2lnbmVkIGxvbmcgc2lnW1NJR1NaXTsKIH07CiAKQEAg LTUwMCw2ICs1MDcsOCBAQCBleHRlcm4gdm9pZCByZWFsX2NlaWwgKFJFQUxf VkFMVUVfVFlQRSAqLCBmb3JtYXRfaGVscGVyLAogCQkgICAgICAgY29uc3Qg UkVBTF9WQUxVRV9UWVBFICopOwogZXh0ZXJuIHZvaWQgcmVhbF9yb3VuZCAo UkVBTF9WQUxVRV9UWVBFICosIGZvcm1hdF9oZWxwZXIsCiAJCQljb25zdCBS RUFMX1ZBTFVFX1RZUEUgKik7CitleHRlcm4gdm9pZCByZWFsX3JvdW5kZXZl biAoUkVBTF9WQUxVRV9UWVBFICosIGZvcm1hdF9oZWxwZXIsCisJCQkgICAg Y29uc3QgUkVBTF9WQUxVRV9UWVBFICopOwogCiAvKiBTZXQgdGhlIHNpZ24g b2YgUiB0byB0aGUgc2lnbiBvZiBYLiAgKi8KIGV4dGVybiB2b2lkIHJlYWxf Y29weXNpZ24gKFJFQUxfVkFMVUVfVFlQRSAqLCBjb25zdCBSRUFMX1ZBTFVF X1RZUEUgKik7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90 b3J0dXJlL2J1aWx0aW4tcm91bmQtcm91bmRldmVuLmMgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy90b3J0dXJlL2J1aWx0aW4tcm91bmQtcm91bmRldmVuLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEzOWFi MGM4ZGUyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdG9ydHVyZS9idWlsdGluLXJvdW5kLXJvdW5kZXZlbi5jCkBAIC0wLDAg KzEsMzYgQEAKKy8qIHsgZGctZG8gbGluayB9ICovCisKK2V4dGVybiBpbnQg bGlua19lcnJvciAoaW50KTsKKworI2RlZmluZSBURVNUKEZOLCBWQUxVRSwg UkVTVUxUKSBcCisgIGlmIChfX2J1aWx0aW5fIyNGTiAoVkFMVUUpICE9IFJF U1VMVCkgbGlua19lcnJvciAoX19MSU5FX18pOworCitpbnQKK21haW4gKHZv aWQpCit7CisgIFRFU1Qocm91bmRldmVuLCAgMCwgMCk7CisgIFRFU1Qocm91 bmRldmVuLCAgMC41LCAwKTsKKyAgVEVTVChyb3VuZGV2ZW4sICAtMC41LCAw KTsKKyAgVEVTVChyb3VuZGV2ZW4sICA2LCA2KTsKKyAgVEVTVChyb3VuZGV2 ZW4sICAtOCwgLTgpOworICBURVNUKHJvdW5kZXZlbiwgIDIuNSwgMik7Cisg IFRFU1Qocm91bmRldmVuLCAgMy41LCA0KTsKKyAgVEVTVChyb3VuZGV2ZW4s ICAtMS41LCAtMik7CisgIFRFU1Qocm91bmRldmVuLCAgMy40OTksIDMpOwor ICBURVNUKHJvdW5kZXZlbiwgIDMuNTAxLCA0KTsKKworICBpZiAoX19idWls dGluX2NvcHlzaWduICgxLCBfX2J1aWx0aW5fcm91bmRldmVuICgtMC41KSkg IT0gLTEpCisgICAgbGlua19lcnJvciAoX19MSU5FX18pOworICBpZiAoX19i dWlsdGluX2NvcHlzaWduICgxLCBfX2J1aWx0aW5fcm91bmRldmVuICgtMC4w KSkgIT0gLTEpCisgICAgbGlua19lcnJvciAoX19MSU5FX18pOworICBpZiAo X19idWlsdGluX2NvcHlzaWduICgtMSwgX19idWlsdGluX3JvdW5kZXZlbiAo MC41KSkgIT0gMSkKKyAgICBsaW5rX2Vycm9yIChfX0xJTkVfXyk7CisgIGlm IChfX2J1aWx0aW5fY29weXNpZ24gKC0xLCBfX2J1aWx0aW5fcm91bmRldmVu ICgwLjApKSAhPSAxKQorICAgIGxpbmtfZXJyb3IgKF9fTElORV9fKTsKKyAg aWYgKF9fYnVpbHRpbl9jb3B5c2lnbiAoMSwgX19idWlsdGluX3JvdW5kZXZl biAoLTAuMjUpKSAhPSAtMSkKKyAgICBsaW5rX2Vycm9yIChfX0xJTkVfXyk7 CisgIGlmIChfX2J1aWx0aW5fY29weXNpZ24gKC0xLCBfX2J1aWx0aW5fcm91 bmRldmVuICgwLjI1KSkgIT0gMSkKKyAgICBsaW5rX2Vycm9yIChfX0xJTkVf Xyk7CisgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3RvcnR1cmUvYnVpbHRpbi1yb3VuZC1yb3VuZGV2ZW5mMTI4 LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90b3J0dXJlL2J1aWx0aW4tcm91 bmQtcm91bmRldmVuZjEyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi44NWE4Y2JmZDUzMgotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RvcnR1cmUvYnVpbHRpbi1yb3VuZC1y b3VuZGV2ZW5mMTI4LmMKQEAgLTAsMCArMSwyMSBAQAorLyogeyBkZy1kbyBs aW5rIH0gKi8KKy8qIHsgZGctYWRkLW9wdGlvbnMgZmxvYXQxMjggfSAqLwor LyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgZmxvYXQxMjggfSAq LworCitleHRlcm4gaW50IGxpbmtfZXJyb3IgKGludCk7CisKKyNkZWZpbmUg VEVTVChGTiwgVkFMVUUsIFJFU1VMVCkgXAorICBpZiAoX19idWlsdGluXyMj Rk4jI2YxMjggKFZBTFVFKSAhPSBSRVNVTFQpIGxpbmtfZXJyb3IgKF9fTElO RV9fKTsKKworaW50CittYWluICh2b2lkKQoreworICBURVNUKHJvdW5kZXZl biwgICgweDFwNjQrMC41ZjEyOCksICgweDFwNjRmMTI4KSk7CisgIFRFU1Qo cm91bmRldmVuLCAgKDB4MXA2MyswLjVmMTI4KSwgKDB4MXA2M2YxMjgpKTsK KyAgVEVTVChyb3VuZGV2ZW4sICAoMHgxcDYzLTAuNWYxMjgpLCAoMHgxcDYz ZjEyOCkpOworICBURVNUKHJvdW5kZXZlbiwgICgweDFwNjQtMC41ZjEyOCks ICgweDFwNjRmMTI4KSk7CisgIFRFU1Qocm91bmRldmVuLCAgKDB4MXA2NCsw LjUwMWYxMjgpLCAoMHgxcDY0KzEuMGYxMjgpKTsKKyAgVEVTVChyb3VuZGV2 ZW4sICAoMHgxLkMwMDAwMDAwMDAwMDAzOUE1NjUzcDFmMTI4KSwgKDB4MXAy ZjEyOCkpCisgIHJldHVybiAwOworfQorCg== --0000000000003a5fb30590ef2e7b--