From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id 469303857022 for ; Thu, 3 Jun 2021 03:02:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 469303857022 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1622689332; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=5Wf6F4LnTvOVY+gArkDKGDsOKs44tkhaazcqi+rhJd0=; b=jJyYHezrUr37te99EZ/oY5rP/9AUSk756fRPZ942NdcQC7h0CjpALGfX42/kA/nKWjLTx/ DsW0n7yCAabbtkC+USObgq4tbnpFlBKD5F3svyLYdQH788AC0bDW6XiQGVkrpN+/ZqbKdK DhimO6IBt0czdzyXA/4rOHQs2gWsm40= Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-186-hgEZVYzDPMyOMDaesa2zsA-1; Wed, 02 Jun 2021 23:02:06 -0400 X-MC-Unique: hgEZVYzDPMyOMDaesa2zsA-1 Received: by mail-pl1-f198.google.com with SMTP id o12-20020a170902778cb02900ff01bc1ddbso2002978pll.2 for ; Wed, 02 Jun 2021 20:02:06 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=UAFaUCDb/Gdl+x9leIltwM8RXp6ReZhYPvD9Htz3u2U=; b=MyMCl1GaR8gsLmyG7t1YFkXuNfBuWmJGsS2KmwrWpbJzl3JEsUHXWu0xefL+zrgXlo Iso9/oiXW8ynkQ7oUZTTzFJEEt74mreznZCo+8Dk9niOwSlyf0pdNw3aAfLs/KwBc8M/ dRpjRe6c2K+FI/65AzZ2t4kOtjAo3249mbN+5gRvygkXSqr/OtF6OThiVjKMCBtZlqit h9nowDkPxViYQTllAZwd1F4v0by1z1NmPaHiQS9/2ZJLWayJsCDGp12z1Wc1wxSJNJZd CNhc/q5Yn3bhcRDs9TBYyw3JLD/mV+oX2+BhoN81yCKL950za83J77xmskPhp6wT6mFX 2k3A== X-Gm-Message-State: AOAM530r3gPB5gfUjf1n2neIi5ThuTN7VVdlwkz6VNnWtD13JFYCLMt3 Cyz7M/Q8NZDBnZYArzDpj6rSY3j+/8lrZ10bKSLuwoxVcTiPxA16asuyak1OosmtOfl7zGKYp2c 98brWBWvx5hHMt9QJ96gU8ji4TZbkoJw= X-Received: by 2002:a17:90a:3948:: with SMTP id n8mr34798100pjf.32.1622689325214; Wed, 02 Jun 2021 20:02:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwl55EI+m6+A3XHryj+IOuInXyiveUHef3Oo4Q5mGH4Zi3hpMgBrrshyOcbTE0llSjrxy+8/hsznqqiaJYp34c= X-Received: by 2002:a17:90a:3948:: with SMTP id n8mr34798075pjf.32.1622689324911; Wed, 02 Jun 2021 20:02:04 -0700 (PDT) MIME-Version: 1.0 References: <2f8796f4-f164-5734-16ca-9a392e788beb@gmail.com> In-Reply-To: From: Jeff Johnston Date: Wed, 2 Jun 2021 23:01:53 -0400 Message-ID: Subject: Re: incorrectly rounded square root To: joel@rtems.org Cc: Marco Atzeri , Newlib Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=jjohnstn@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000cb611605c3d3cc4c" X-Spam-Status: No, score=-5.0 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, HTML_MESSAGE, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 03 Jun 2021 03:02:15 -0000 --000000000000cb611605c3d3cc4c Content-Type: text/plain; charset="UTF-8" Something weird is going on. I condensed the newlib code into the following files and when I compile and run the test, it works as expected: gcc -std=c99 -g3 -O0 test_sqrt.c fesetround.c ef_sqrt.c [jjohnstn@localhost shared_x86]$ ./a.out RNDN: 0x1.ff83fp+63 RNDZ: 0x1.ff83eep+63 RNDU: 0x1.ff83fp+63 RNDD: 0x1.ff83eep+63 Can you verify that you are calling the fesetround in fenv.c and what configuration call did you use for building newlib? -- Jeff J. On Wed, Jun 2, 2021 at 3:12 PM Joel Sherrill wrote: > On Wed, Jun 2, 2021, 2:08 PM Marco Atzeri wrote: > > > On 02.06.2021 20:43, Jeff Johnston wrote: > > > On Wed, Jun 2, 2021 at 9:08 AM Joel Sherrill wrote: > > > > > >> > > >> > > >> On Wed, Jun 2, 2021 at 2:51 AM Paul Zimmermann < > > Paul.Zimmermann@inria.fr> > > >> wrote: > > >> > > > > >> > > > I'll second Joel's comment. The code is extremely close to the glibc > > code > > > both in sqrtf and fesetround. The only > > > thing I can think of is that the glibc code does the x87 stuff first > and > > > does the set back into FPU state before doing the > > > SSE stuff. The newlib code sets back the FPU state at the end after > the > > > SSE stuff. Don't know if this is relevant or not. > > > > > > Any Cygwin users out there who can verify that the code is working/not > > > working for them? > > > > > > -- Jeff J. > > > > > > > current Cygwin produces for both i686 and X86_64 > > > > $ gcc -DNEWLIB -fno-builtin test_sqrt.c -lm > > > > $ ./a.exe > > RNDN: 0x1.ff83fp+63 > > RNDZ: 0x1.ff83fp+63 > > RNDU: 0x1.ff83fp+63 > > RNDD: 0x1.ff83fp+63 > > > > Does fegetround() return different values based on what mode was set? > > --joel > > > > > > > --000000000000cb611605c3d3cc4c Content-Type: text/x-csrc; charset="US-ASCII"; name="ef_sqrt.c" Content-Disposition: attachment; filename="ef_sqrt.c" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kpgb97c00 LyogZWZfc3FydGYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfc3FydC5jLgogKiBDb252ZXJzaW9u IHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVz LmNvbS4KICovCgovKgogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CiAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJ bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3Vu IE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHks IG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwogKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRl ZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKICogaXMgcHJlc2VydmVkLgogKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwoKI2luY2x1 ZGUgImZkbGlibS5oIgoKI2lmZGVmIF9fU1REQ19fCnN0YXRpYwljb25zdCBmbG9hdAlvbmUJPSAx LjAsIHRpbnk9MS4wZS0zMDsKI2Vsc2UKc3RhdGljCWZsb2F0CW9uZQk9IDEuMCwgdGlueT0xLjBl LTMwOwojZW5kaWYKCglmbG9hdCBzcXJ0ZihmbG9hdCB4KQp7CglmbG9hdCB6OwoJX191aW50MzJf dCByLGh4OwoJX19pbnQzMl90IGl4LHMscSxtLHQsaTsKCglHRVRfRkxPQVRfV09SRChpeCx4KTsK CWh4ID0gaXgmMHg3ZmZmZmZmZjsKCiAgICAvKiB0YWtlIGNhcmUgb2YgSW5mIGFuZCBOYU4gKi8K CWlmKCFGTFRfVVdPUkRfSVNfRklOSVRFKGh4KSkKCSAgICByZXR1cm4geCp4K3g7CQkvKiBzcXJ0 KE5hTik9TmFOLCBzcXJ0KCtpbmYpPStpbmYKCQkJCQkgICBzcXJ0KC1pbmYpPXNOYU4gKi8KICAg IC8qIHRha2UgY2FyZSBvZiB6ZXJvIGFuZCAtdmVzICovCglpZihGTFRfVVdPUkRfSVNfWkVSTyho eCkpIHJldHVybiB4Oy8qIHNxcnQoKy0wKSA9ICstMCAqLwoJaWYoaXg8MCkgcmV0dXJuICh4LXgp Lyh4LXgpOwkJLyogc3FydCgtdmUpID0gc05hTiAqLwoKICAgIC8qIG5vcm1hbGl6ZSB4ICovCglt ID0gKGl4Pj4yMyk7CglpZihGTFRfVVdPUkRfSVNfU1VCTk9STUFMKGh4KSkgewkJLyogc3Vibm9y bWFsIHggKi8KCSAgICBmb3IoaT0wOyhpeCYweDAwODAwMDAwTCk9PTA7aSsrKSBpeDw8PTE7Cgkg ICAgbSAtPSBpLTE7Cgl9CgltIC09IDEyNzsJLyogdW5iaWFzIGV4cG9uZW50ICovCglpeCA9IChp eCYweDAwN2ZmZmZmTCl8MHgwMDgwMDAwMEw7CglpZihtJjEpCS8qIG9kZCBtLCBkb3VibGUgeCB0 byBtYWtlIGl0IGV2ZW4gKi8KCSAgICBpeCArPSBpeDsKCW0gPj49IDE7CS8qIG0gPSBbbS8yXSAq LwoKICAgIC8qIGdlbmVyYXRlIHNxcnQoeCkgYml0IGJ5IGJpdCAqLwoJaXggKz0gaXg7CglxID0g cyA9IDA7CQkvKiBxID0gc3FydCh4KSAqLwoJciA9IDB4MDEwMDAwMDBMOwkJLyogciA9IG1vdmlu ZyBiaXQgZnJvbSByaWdodCB0byBsZWZ0ICovCgoJd2hpbGUociE9MCkgewoJICAgIHQgPSBzK3I7 IAoJICAgIGlmKHQ8PWl4KSB7IAoJCXMgICAgPSB0K3I7IAoJCWl4ICAtPSB0OyAKCQlxICAgKz0g cjsgCgkgICAgfSAKCSAgICBpeCArPSBpeDsKCSAgICByPj49MTsKCX0KCiAgICAvKiB1c2UgZmxv YXRpbmcgYWRkIHRvIGZpbmQgb3V0IHJvdW5kaW5nIGRpcmVjdGlvbiAqLwoJaWYoaXghPTApIHsK CSAgICB6ID0gb25lLXRpbnk7IC8qIHRyaWdnZXIgaW5leGFjdCBmbGFnICovCgkgICAgaWYgKHo+ PW9uZSkgewoJICAgICAgICB6ID0gb25lK3Rpbnk7CgkJaWYgKHo+b25lKQoJCSAgICBxICs9IDI7 CgkJZWxzZQoJCSAgICBxICs9IChxJjEpOwoJICAgIH0KCX0KCWl4ID0gKHE+PjEpKzB4M2YwMDAw MDBMOwoJaXggKz0gKG0gPDwyMyk7CglTRVRfRkxPQVRfV09SRCh6LGl4KTsKCXJldHVybiB6Owp9 Cg== --000000000000cb611605c3d3cc4c Content-Type: text/x-chdr; charset="US-ASCII"; name="fdlibm.h" Content-Disposition: attachment; filename="fdlibm.h" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kpgb9q2u1 Ci8qIEAoIylmZGxpYm0uaCA1LjEgOTMvMDkvMjQgKi8KLyoKICogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBDb3B5cmlnaHQgKEMpIDE5OTMg YnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBEZXZl bG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCiAqIFBl cm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKICogc29m dHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCiAqIGlz IHByZXNlcnZlZC4KICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQogKi8KCi8qIFJFREhBVCBMT0NBTDogSW5jbHVkZSBmaWxlcy4gICovCiNpbmNs dWRlIDxzeXMvdHlwZXMuaD4KCiNkZWZpbmUgX19JRUVFX0xJVFRMRV9FTkRJQU4KCi8qIE1vc3Qg cm91dGluZXMgbmVlZCB0byBjaGVjayB3aGV0aGVyIGEgZmxvYXQgaXMgZmluaXRlLCBpbmZpbml0 ZSwgb3Igbm90IGEKICAgbnVtYmVyLCBhbmQgbWFueSBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUg cmVzdWx0IG9mIGFuIG9wZXJhdGlvbiB3aWxsCiAgIG92ZXJmbG93LiAgVGhlc2UgY29uZGl0aW9u cyBkZXBlbmQgb24gd2hldGhlciB0aGUgbGFyZ2VzdCBleHBvbmVudCBpcwogICB1c2VkIGZvciBO YU5zICYgaW5maW5pdGllcywgb3Igd2hldGhlciBpdCdzIHVzZWQgZm9yIGZpbml0ZSBudW1iZXJz LiAgVGhlCiAgIG1hY3JvcyBiZWxvdyB3cmFwIHVwIHRoYXQga2luZCBvZiBpbmZvcm1hdGlvbjoK CiAgIEZMVF9VV09SRF9JU19GSU5JVEUoWCkKCVRydWUgaWYgYSBwb3NpdGl2ZSBmbG9hdCB3aXRo IGJpdG1hc2sgWCBpcyBmaW5pdGUuCgogICBGTFRfVVdPUkRfSVNfTkFOKFgpCglUcnVlIGlmIGEg cG9zaXRpdmUgZmxvYXQgd2l0aCBiaXRtYXNrIFggaXMgbm90IGEgbnVtYmVyLgoKICAgRkxUX1VX T1JEX0lTX0lORklOSVRFKFgpCglUcnVlIGlmIGEgcG9zaXRpdmUgZmxvYXQgd2l0aCBiaXRtYXNr IFggaXMgK2luZmluaXR5LgoKICAgRkxUX1VXT1JEX01BWAoJVGhlIGJpdG1hc2sgb2YgRkxUX01B WC4KCiAgIEZMVF9VV09SRF9IQUxGX01BWAoJVGhlIGJpdG1hc2sgb2YgRkxUX01BWC8yLgoKICAg RkxUX1VXT1JEX0VYUF9NQVgKCVRoZSBiaXRtYXNrIG9mIHRoZSBsYXJnZXN0IGZpbml0ZSBleHBv bmVudCAoMTI5IGlmIHRoZSBsYXJnZXN0CglleHBvbmVudCBpcyB1c2VkIGZvciBmaW5pdGUgbnVt YmVycywgMTI4IG90aGVyd2lzZSkuCgogICBGTFRfVVdPUkRfTE9HX01BWAoJVGhlIGJpdG1hc2sg b2YgbG9nKEZMVF9NQVgpLCByb3VuZGVkIGRvd24uICBUaGlzIHZhbHVlIGlzIHRoZSBsYXJnZXN0 CglpbnB1dCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gZXhwKCkgd2l0aG91dCBwcm9kdWNpbmcgb3Zl cmZsb3cuCgogICBGTFRfVVdPUkRfTE9HXzJNQVgKCVRoZSBiaXRtYXNrIG9mIGxvZygyKkZMVF9N QVgpLCByb3VuZGVkIGRvd24uICBUaGlzIHZhbHVlIGlzIHRoZQoJbGFyZ2VzdCBpbnB1dCB0aGFu IGNhbiBiZSBwYXNzZWQgdG8gY29zaCgpIHdpdGhvdXQgcHJvZHVjaW5nCglvdmVyZmxvdy4KCiAg IEZMVF9MQVJHRVNUX0VYUAoJVGhlIGxhcmdlc3QgYmlhc2VkIGV4cG9uZW50IHRoYXQgY2FuIGJl IHVzZWQgZm9yIGZpbml0ZSBudW1iZXJzCgkoMjU1IGlmIHRoZSBsYXJnZXN0IGV4cG9uZW50IGlz IHVzZWQgZm9yIGZpbml0ZSBudW1iZXJzLCAyNTQKCW90aGVyd2lzZSkgKi8KCiNpZmRlZiBfRkxU X0xBUkdFU1RfRVhQT05FTlRfSVNfTk9STUFMCiNkZWZpbmUgRkxUX1VXT1JEX0lTX0ZJTklURSh4 KSAxCiNkZWZpbmUgRkxUX1VXT1JEX0lTX05BTih4KSAwCiNkZWZpbmUgRkxUX1VXT1JEX0lTX0lO RklOSVRFKHgpIDAKI2RlZmluZSBGTFRfVVdPUkRfTUFYIDB4N2ZmZmZmZmYKI2RlZmluZSBGTFRf VVdPUkRfRVhQX01BWCAweDQzMDEwMDAwCiNkZWZpbmUgRkxUX1VXT1JEX0xPR19NQVggMHg0MmIy ZDRmYwojZGVmaW5lIEZMVF9VV09SRF9MT0dfMk1BWCAweDQyYjQzN2UwCiNkZWZpbmUgSFVHRSAo KGZsb2F0KTBYMS5GRkZGRkVQMTI4KQojZWxzZQojZGVmaW5lIEZMVF9VV09SRF9JU19GSU5JVEUo eCkgKCh4KTwweDdmODAwMDAwTCkKI2RlZmluZSBGTFRfVVdPUkRfSVNfTkFOKHgpICgoeCk+MHg3 ZjgwMDAwMEwpCiNkZWZpbmUgRkxUX1VXT1JEX0lTX0lORklOSVRFKHgpICgoeCk9PTB4N2Y4MDAw MDBMKQojZGVmaW5lIEZMVF9VV09SRF9NQVggMHg3ZjdmZmZmZkwKI2RlZmluZSBGTFRfVVdPUkRf RVhQX01BWCAweDQzMDAwMDAwCiNkZWZpbmUgRkxUX1VXT1JEX0xPR19NQVggMHg0MmIxNzIxNwoj ZGVmaW5lIEZMVF9VV09SRF9MT0dfMk1BWCAweDQyYjJkNGZjCiNkZWZpbmUgSFVHRSAoKGZsb2F0 KTMuNDAyODIzNDY2Mzg1Mjg4NjBlKzM4KQojZW5kaWYKI2RlZmluZSBGTFRfVVdPUkRfSEFMRl9N QVggKEZMVF9VV09SRF9NQVgtKDFMPDwyMykpCiNkZWZpbmUgRkxUX0xBUkdFU1RfRVhQIChGTFRf VVdPUkRfTUFYPj4yMykKCi8qIE1hbnkgcm91dGluZXMgY2hlY2sgZm9yIHplcm8gYW5kIHN1Ym5v cm1hbCBudW1iZXJzLiAgU3VjaCB0aGluZ3MgZGVwZW5kCiAgIG9uIHdoZXRoZXIgdGhlIHRhcmdl dCBzdXBwb3J0cyBkZW5vcm1hbHMgb3Igbm90OgoKICAgRkxUX1VXT1JEX0lTX1pFUk8oWCkKCVRy dWUgaWYgYSBwb3NpdGl2ZSBmbG9hdCB3aXRoIGJpdG1hc2sgWCBpcyArMC4JV2l0aG91dCBkZW5v cm1hbHMsCglhbnkgZmxvYXQgd2l0aCBhIHplcm8gZXhwb25lbnQgaXMgYSArMCByZXByZXNlbnRh dGlvbi4JV2l0aAoJZGVub3JtYWxzLCB0aGUgb25seSArMCByZXByZXNlbnRhdGlvbiBpcyBhIDAg Yml0bWFzay4KCiAgIEZMVF9VV09SRF9JU19TVUJOT1JNQUwoWCkKCVRydWUgaWYgYSBub24temVy byBwb3NpdGl2ZSBmbG9hdCB3aXRoIGJpdG1hc2sgWCBpcyBzdWJub3JtYWwuCgkoUm91dGluZXMg c2hvdWxkIGNoZWNrIGZvciB6ZXJvcyBmaXJzdC4pCgogICBGTFRfVVdPUkRfTUlOCglUaGUgYml0 bWFzayBvZiB0aGUgc21hbGxlc3QgZmxvYXQgYWJvdmUgKzAuICBDYWxsIHRoaXMgbnVtYmVyCglS RUFMX0ZMVF9NSU4uLi4KCiAgIEZMVF9VV09SRF9FWFBfTUlOCglUaGUgYml0bWFzayBvZiB0aGUg ZmxvYXQgcmVwcmVzZW50YXRpb24gb2YgUkVBTF9GTFRfTUlOJ3MgZXhwb25lbnQuCgogICBGTFRf VVdPUkRfTE9HX01JTgoJVGhlIGJpdG1hc2sgb2YgfGxvZyhSRUFMX0ZMVF9NSU4pfCwgcm91bmRp bmcgZG93bi4KCiAgIEZMVF9TTUFMTEVTVF9FWFAKCVJFQUxfRkxUX01JTidzIGV4cG9uZW50IC0g RVhQX0JJQVMgKDEgaWYgZGVub3JtYWxzIGFyZSBub3Qgc3VwcG9ydGVkLAoJLTIyIGlmIHRoZXkg YXJlKS4KKi8KCiNpZmRlZiBfRkxUX05PX0RFTk9STUFMUwojZGVmaW5lIEZMVF9VV09SRF9JU19a RVJPKHgpICgoeCk8MHgwMDgwMDAwMEwpCiNkZWZpbmUgRkxUX1VXT1JEX0lTX1NVQk5PUk1BTCh4 KSAwCiNkZWZpbmUgRkxUX1VXT1JEX01JTiAweDAwODAwMDAwCiNkZWZpbmUgRkxUX1VXT1JEX0VY UF9NSU4gMHg0MmZjMDAwMAojZGVmaW5lIEZMVF9VV09SRF9MT0dfTUlOIDB4NDJhZWFjNTAKI2Rl ZmluZSBGTFRfU01BTExFU1RfRVhQIDEKI2Vsc2UKI2RlZmluZSBGTFRfVVdPUkRfSVNfWkVSTyh4 KSAoKHgpPT0wKQojZGVmaW5lIEZMVF9VV09SRF9JU19TVUJOT1JNQUwoeCkgKCh4KTwweDAwODAw MDAwTCkKI2RlZmluZSBGTFRfVVdPUkRfTUlOIDB4MDAwMDAwMDEKI2RlZmluZSBGTFRfVVdPUkRf RVhQX01JTiAweDQzMTYwMDAwCiNkZWZpbmUgRkxUX1VXT1JEX0xPR19NSU4gMHg0MmNmZjFiNQoj ZGVmaW5lIEZMVF9TTUFMTEVTVF9FWFAgLTIyCiNlbmRpZgoKI2lmZGVmIF9fU1REQ19fCiN1bmRl ZiBfX1AKI2RlZmluZQlfX1AocCkJcAojZWxzZQojZGVmaW5lCV9fUChwKQkoKQojZW5kaWYKCi8q IAogKiBzZXQgWF9UTE9TUyA9IHBpKjIqKjUyLCB3aGljaCBpcyBwb3NzaWJseSBkZWZpbmVkIGlu IDx2YWx1ZXMuaD4KICogKG9uZSBtYXkgcmVwbGFjZSB0aGUgZm9sbG93aW5nIGxpbmUgYnkgIiNp bmNsdWRlIDx2YWx1ZXMuaD4iKQogKi8KCiNkZWZpbmUgWF9UTE9TUwkJMS40MTQ4NDc1NTA0MDU2 ODgwMDAwMGUrMTYgCgovKiBGdW5jdGlvbnMgdGhhdCBhcmUgbm90IGRvY3VtZW50ZWQsIGFuZCBh cmUgbm90IGluIDxtYXRoLmg+LiAgKi8KCiNpZmRlZiBfU0NBTEJfSU5UCmV4dGVybiBkb3VibGUg c2NhbGIgX19QKChkb3VibGUsIGludCkpOwojZWxzZQpleHRlcm4gZG91YmxlIHNjYWxiIF9fUCgo ZG91YmxlLCBkb3VibGUpKTsKI2VuZGlmCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgX19QKChk b3VibGUpKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX2llZWU3NTRfaHlwb3RsIF9fUCgobG9uZyBk b3VibGUsIGxvbmcgZG91YmxlKSk7CgovKiBpZWVlIHN0eWxlIGVsZW1lbnRhcnkgZnVuY3Rpb25z ICovCmV4dGVybiBkb3VibGUgX19pZWVlNzU0X3NxcnQgX19QKChkb3VibGUpKTsJCQkKZXh0ZXJu IGRvdWJsZSBfX2llZWU3NTRfYWNvcyBfX1AoKGRvdWJsZSkpOwkJCQpleHRlcm4gZG91YmxlIF9f aWVlZTc1NF9hY29zaCBfX1AoKGRvdWJsZSkpOwkJCQpleHRlcm4gZG91YmxlIF9faWVlZTc1NF9s b2cgX19QKChkb3VibGUpKTsJCQkKZXh0ZXJuIGRvdWJsZSBfX2llZWU3NTRfYXRhbmggX19QKChk b3VibGUpKTsJCQkKZXh0ZXJuIGRvdWJsZSBfX2llZWU3NTRfYXNpbiBfX1AoKGRvdWJsZSkpOwkJ CQpleHRlcm4gZG91YmxlIF9faWVlZTc1NF9hdGFuMiBfX1AoKGRvdWJsZSxkb3VibGUpKTsJCQkK ZXh0ZXJuIGRvdWJsZSBfX2llZWU3NTRfZXhwIF9fUCgoZG91YmxlKSk7CmV4dGVybiBkb3VibGUg X19pZWVlNzU0X2Nvc2ggX19QKChkb3VibGUpKTsKZXh0ZXJuIGRvdWJsZSBfX2llZWU3NTRfZm1v ZCBfX1AoKGRvdWJsZSxkb3VibGUpKTsKZXh0ZXJuIGRvdWJsZSBfX2llZWU3NTRfcG93IF9fUCgo ZG91YmxlLGRvdWJsZSkpOwpleHRlcm4gZG91YmxlIF9faWVlZTc1NF9sZ2FtbWFfciBfX1AoKGRv dWJsZSxpbnQgKikpOwpleHRlcm4gZG91YmxlIF9faWVlZTc1NF9nYW1tYV9yIF9fUCgoZG91Ymxl LGludCAqKSk7CmV4dGVybiBkb3VibGUgX19pZWVlNzU0X3RnYW1tYSBfX1AoKGRvdWJsZSkpOwpl eHRlcm4gZG91YmxlIF9faWVlZTc1NF9sb2cxMCBfX1AoKGRvdWJsZSkpOwpleHRlcm4gZG91Ymxl IF9faWVlZTc1NF9zaW5oIF9fUCgoZG91YmxlKSk7CmV4dGVybiBkb3VibGUgX19pZWVlNzU0X2h5 cG90IF9fUCgoZG91YmxlLGRvdWJsZSkpOwpleHRlcm4gZG91YmxlIF9faWVlZTc1NF9qMCBfX1Ao KGRvdWJsZSkpOwpleHRlcm4gZG91YmxlIF9faWVlZTc1NF9qMSBfX1AoKGRvdWJsZSkpOwpleHRl cm4gZG91YmxlIF9faWVlZTc1NF95MCBfX1AoKGRvdWJsZSkpOwpleHRlcm4gZG91YmxlIF9faWVl ZTc1NF95MSBfX1AoKGRvdWJsZSkpOwpleHRlcm4gZG91YmxlIF9faWVlZTc1NF9qbiBfX1AoKGlu dCxkb3VibGUpKTsKZXh0ZXJuIGRvdWJsZSBfX2llZWU3NTRfeW4gX19QKChpbnQsZG91YmxlKSk7 CmV4dGVybiBkb3VibGUgX19pZWVlNzU0X3JlbWFpbmRlciBfX1AoKGRvdWJsZSxkb3VibGUpKTsK ZXh0ZXJuIF9faW50MzJfdCBfX2llZWU3NTRfcmVtX3BpbzIgX19QKChkb3VibGUsZG91YmxlKikp OwojaWZkZWYgX1NDQUxCX0lOVApleHRlcm4gZG91YmxlIF9faWVlZTc1NF9zY2FsYiBfX1AoKGRv dWJsZSxpbnQpKTsKI2Vsc2UKZXh0ZXJuIGRvdWJsZSBfX2llZWU3NTRfc2NhbGIgX19QKChkb3Vi bGUsZG91YmxlKSk7CiNlbmRpZgoKLyogZmRsaWJtIGtlcm5lbCBmdW5jdGlvbiAqLwpleHRlcm4g ZG91YmxlIF9fa2VybmVsX3N0YW5kYXJkIF9fUCgoZG91YmxlLGRvdWJsZSxpbnQpKTsKZXh0ZXJu IGRvdWJsZSBfX2tlcm5lbF9zaW4gX19QKChkb3VibGUsZG91YmxlLGludCkpOwpleHRlcm4gZG91 YmxlIF9fa2VybmVsX2NvcyBfX1AoKGRvdWJsZSxkb3VibGUpKTsKZXh0ZXJuIGRvdWJsZSBfX2tl cm5lbF90YW4gX19QKChkb3VibGUsZG91YmxlLGludCkpOwpleHRlcm4gaW50ICAgIF9fa2VybmVs X3JlbV9waW8yIF9fUCgoZG91YmxlKixkb3VibGUqLGludCxpbnQsaW50LGNvbnN0IF9faW50MzJf dCopKTsKCi8qIFVuZG9jdW1lbnRlZCBmbG9hdCBmdW5jdGlvbnMuICAqLwojaWZkZWYgX1NDQUxC X0lOVApleHRlcm4gZmxvYXQgc2NhbGJmIF9fUCgoZmxvYXQsIGludCkpOwojZWxzZQpleHRlcm4g ZmxvYXQgc2NhbGJmIF9fUCgoZmxvYXQsIGZsb2F0KSk7CiNlbmRpZgpleHRlcm4gZmxvYXQgc2ln bmlmaWNhbmRmIF9fUCgoZmxvYXQpKTsKCi8qIGllZWUgc3R5bGUgZWxlbWVudGFyeSBmbG9hdCBm dW5jdGlvbnMgKi8KZXh0ZXJuIGZsb2F0IF9faWVlZTc1NF9zcXJ0ZiBfX1AoKGZsb2F0KSk7CQkJ CmV4dGVybiBmbG9hdCBfX2llZWU3NTRfYWNvc2YgX19QKChmbG9hdCkpOwkJCQpleHRlcm4gZmxv YXQgX19pZWVlNzU0X2Fjb3NoZiBfX1AoKGZsb2F0KSk7CQkJCmV4dGVybiBmbG9hdCBfX2llZWU3 NTRfbG9nZiBfX1AoKGZsb2F0KSk7CQkJCmV4dGVybiBmbG9hdCBfX2llZWU3NTRfYXRhbmhmIF9f UCgoZmxvYXQpKTsJCQkKZXh0ZXJuIGZsb2F0IF9faWVlZTc1NF9hc2luZiBfX1AoKGZsb2F0KSk7 CQkJCmV4dGVybiBmbG9hdCBfX2llZWU3NTRfYXRhbjJmIF9fUCgoZmxvYXQsZmxvYXQpKTsJCQkK ZXh0ZXJuIGZsb2F0IF9faWVlZTc1NF9leHBmIF9fUCgoZmxvYXQpKTsKZXh0ZXJuIGZsb2F0IF9f aWVlZTc1NF9jb3NoZiBfX1AoKGZsb2F0KSk7CmV4dGVybiBmbG9hdCBfX2llZWU3NTRfZm1vZGYg X19QKChmbG9hdCxmbG9hdCkpOwpleHRlcm4gZmxvYXQgX19pZWVlNzU0X3Bvd2YgX19QKChmbG9h dCxmbG9hdCkpOwpleHRlcm4gZmxvYXQgX19pZWVlNzU0X2xnYW1tYWZfciBfX1AoKGZsb2F0LGlu dCAqKSk7CmV4dGVybiBmbG9hdCBfX2llZWU3NTRfZ2FtbWFmX3IgX19QKChmbG9hdCxpbnQgKikp OwpleHRlcm4gZmxvYXQgX19pZWVlNzU0X3RnYW1tYWYgX19QKChmbG9hdCkpOwpleHRlcm4gZmxv YXQgX19pZWVlNzU0X2xvZzEwZiBfX1AoKGZsb2F0KSk7CmV4dGVybiBmbG9hdCBfX2llZWU3NTRf c2luaGYgX19QKChmbG9hdCkpOwpleHRlcm4gZmxvYXQgX19pZWVlNzU0X2h5cG90ZiBfX1AoKGZs b2F0LGZsb2F0KSk7CmV4dGVybiBmbG9hdCBfX2llZWU3NTRfajBmIF9fUCgoZmxvYXQpKTsKZXh0 ZXJuIGZsb2F0IF9faWVlZTc1NF9qMWYgX19QKChmbG9hdCkpOwpleHRlcm4gZmxvYXQgX19pZWVl NzU0X3kwZiBfX1AoKGZsb2F0KSk7CmV4dGVybiBmbG9hdCBfX2llZWU3NTRfeTFmIF9fUCgoZmxv YXQpKTsKZXh0ZXJuIGZsb2F0IF9faWVlZTc1NF9qbmYgX19QKChpbnQsZmxvYXQpKTsKZXh0ZXJu IGZsb2F0IF9faWVlZTc1NF95bmYgX19QKChpbnQsZmxvYXQpKTsKZXh0ZXJuIGZsb2F0IF9faWVl ZTc1NF9yZW1haW5kZXJmIF9fUCgoZmxvYXQsZmxvYXQpKTsKZXh0ZXJuIF9faW50MzJfdCBfX2ll ZWU3NTRfcmVtX3BpbzJmIF9fUCgoZmxvYXQsZmxvYXQqKSk7CiNpZmRlZiBfU0NBTEJfSU5UCmV4 dGVybiBmbG9hdCBfX2llZWU3NTRfc2NhbGJmIF9fUCgoZmxvYXQsaW50KSk7CiNlbHNlCmV4dGVy biBmbG9hdCBfX2llZWU3NTRfc2NhbGJmIF9fUCgoZmxvYXQsZmxvYXQpKTsKI2VuZGlmCgojaWYg IV9fT0JTT0xFVEVfTUFUSAovKiBUaGUgbmV3IG1hdGggY29kZSBkb2VzIG5vdCBwcm92aWRlIHNl cGFyYXRlIHdyYXBwZXIgZnVuY3Rpb24KICAgZm9yIGVycm9yIGhhbmRsaW5nLCBzbyB0aGUgZXh0 ZXJuIHN5bWJvbCBpcyBjYWxsZWQgZGlyZWN0bHkuCiAgIFRoaXMgaXMgdmFsaWQgYXMgbG9uZyBh cyB0aGVyZSBhcmUgbm8gbmFtZXNwYWNlIGlzc3VlcyAodGhlCiAgIGV4dGVybiBzeW1ib2wgaXMg cmVzZXJ2ZWQgd2hlbmV2ZXIgdGhlIGNhbGxlciBpcyByZXNlcnZlZCkKICAgYW5kIHRoZXJlIGFy ZSBubyBvYnNlcnZhYmxlIGVycm9yIGhhbmRsaW5nIHNpZGUgZWZmZWN0cy4gICovCiMgZGVmaW5l IF9faWVlZTc1NF9leHAoeCkgZXhwKHgpCiMgZGVmaW5lIF9faWVlZTc1NF9sb2coeCkgbG9nKHgp CiMgZGVmaW5lIF9faWVlZTc1NF9wb3coeCx5KSBwb3coeCx5KQojIGRlZmluZSBfX2llZWU3NTRf ZXhwZih4KSBleHBmKHgpCiMgZGVmaW5lIF9faWVlZTc1NF9sb2dmKHgpIGxvZ2YoeCkKIyBkZWZp bmUgX19pZWVlNzU0X3Bvd2YoeCx5KSBwb3dmKHgseSkKI2VuZGlmCgovKiBmbG9hdCB2ZXJzaW9u cyBvZiBmZGxpYm0ga2VybmVsIGZ1bmN0aW9ucyAqLwpleHRlcm4gZmxvYXQgX19rZXJuZWxfc2lu ZiBfX1AoKGZsb2F0LGZsb2F0LGludCkpOwpleHRlcm4gZmxvYXQgX19rZXJuZWxfY29zZiBfX1Ao KGZsb2F0LGZsb2F0KSk7CmV4dGVybiBmbG9hdCBfX2tlcm5lbF90YW5mIF9fUCgoZmxvYXQsZmxv YXQsaW50KSk7CmV4dGVybiBpbnQgICBfX2tlcm5lbF9yZW1fcGlvMmYgX19QKChmbG9hdCosZmxv YXQqLGludCxpbnQsaW50LGNvbnN0IF9faW50MzJfdCopKTsKCi8qIFRoZSBvcmlnaW5hbCBjb2Rl IHVzZWQgc3RhdGVtZW50cyBsaWtlCgluMCA9ICgoKihpbnQqKSZvbmUpPj4yOSleMTsJCSogaW5k ZXggb2YgaGlnaCB3b3JkICoKCWl4MCA9ICoobjArKGludCopJngpOwkJCSogaGlnaCB3b3JkIG9m IHggKgoJaXgxID0gKigoMS1uMCkrKGludCopJngpOwkJKiBsb3cgd29yZCBvZiB4ICoKICAgdG8g ZGlnIHR3byAzMiBiaXQgd29yZHMgb3V0IG9mIHRoZSA2NCBiaXQgSUVFRSBmbG9hdGluZyBwb2lu dAogICB2YWx1ZS4gIFRoYXQgaXMgbm9uLUFOU0ksIGFuZCwgbW9yZW92ZXIsIHRoZSBnY2MgaW5z dHJ1Y3Rpb24KICAgc2NoZWR1bGVyIGdldHMgaXQgd3JvbmcuICBXZSBpbnN0ZWFkIHVzZSB0aGUg Zm9sbG93aW5nIG1hY3Jvcy4KICAgVW5saWtlIHRoZSBvcmlnaW5hbCBjb2RlLCB3ZSBkZXRlcm1p bmUgdGhlIGVuZGlhbm5lc3MgYXQgY29tcGlsZQogICB0aW1lLCBub3QgYXQgcnVuIHRpbWU7IEkg ZG9uJ3Qgc2VlIG11Y2ggYmVuZWZpdCB0byBzZWxlY3RpbmcKICAgZW5kaWFubmVzcyBhdCBydW4g dGltZS4gICovCgojaWZuZGVmIF9fSUVFRV9CSUdfRU5ESUFOCiNpZm5kZWYgX19JRUVFX0xJVFRM RV9FTkRJQU4KICNlcnJvciBNdXN0IGRlZmluZSBlbmRpYW5uZXNzCiNlbmRpZgojZW5kaWYKCi8q IEEgdW5pb24gd2hpY2ggcGVybWl0cyB1cyB0byBjb252ZXJ0IGJldHdlZW4gYSBkb3VibGUgYW5k IHR3byAzMiBiaXQKICAgaW50cy4gICovCgojaWZkZWYgX19JRUVFX0JJR19FTkRJQU4KCnR5cGVk ZWYgdW5pb24gCnsKICBkb3VibGUgdmFsdWU7CiAgc3RydWN0IAogIHsKICAgIF9fdWludDMyX3Qg bXN3OwogICAgX191aW50MzJfdCBsc3c7CiAgfSBwYXJ0czsKfSBpZWVlX2RvdWJsZV9zaGFwZV90 eXBlOwoKI2VuZGlmCgojaWZkZWYgX19JRUVFX0xJVFRMRV9FTkRJQU4KCnR5cGVkZWYgdW5pb24g CnsKICBkb3VibGUgdmFsdWU7CiAgc3RydWN0IAogIHsKICAgIF9fdWludDMyX3QgbHN3OwogICAg X191aW50MzJfdCBtc3c7CiAgfSBwYXJ0czsKfSBpZWVlX2RvdWJsZV9zaGFwZV90eXBlOwoKI2Vu ZGlmCgovKiBHZXQgdHdvIDMyIGJpdCBpbnRzIGZyb20gYSBkb3VibGUuICAqLwoKI2RlZmluZSBF WFRSQUNUX1dPUkRTKGl4MCxpeDEsZCkJCQkJXApkbyB7CQkJCQkJCQlcCiAgaWVlZV9kb3VibGVf c2hhcGVfdHlwZSBld191OwkJCQkJXAogIGV3X3UudmFsdWUgPSAoZCk7CQkJCQkJXAogIChpeDAp ID0gZXdfdS5wYXJ0cy5tc3c7CQkJCQlcCiAgKGl4MSkgPSBld191LnBhcnRzLmxzdzsJCQkJCVwK fSB3aGlsZSAoMCkKCi8qIEdldCB0aGUgbW9yZSBzaWduaWZpY2FudCAzMiBiaXQgaW50IGZyb20g YSBkb3VibGUuICAqLwoKI2RlZmluZSBHRVRfSElHSF9XT1JEKGksZCkJCQkJCVwKZG8gewkJCQkJ CQkJXAogIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgZ2hfdTsJCQkJCVwKICBnaF91LnZhbHVlID0g KGQpOwkJCQkJCVwKICAoaSkgPSBnaF91LnBhcnRzLm1zdzsJCQkJCQlcCn0gd2hpbGUgKDApCgov KiBHZXQgdGhlIGxlc3Mgc2lnbmlmaWNhbnQgMzIgYml0IGludCBmcm9tIGEgZG91YmxlLiAgKi8K CiNkZWZpbmUgR0VUX0xPV19XT1JEKGksZCkJCQkJCVwKZG8gewkJCQkJCQkJXAogIGllZWVfZG91 YmxlX3NoYXBlX3R5cGUgZ2xfdTsJCQkJCVwKICBnbF91LnZhbHVlID0gKGQpOwkJCQkJCVwKICAo aSkgPSBnbF91LnBhcnRzLmxzdzsJCQkJCQlcCn0gd2hpbGUgKDApCgovKiBTZXQgYSBkb3VibGUg ZnJvbSB0d28gMzIgYml0IGludHMuICAqLwoKI2RlZmluZSBJTlNFUlRfV09SRFMoZCxpeDAsaXgx KQkJCQkJXApkbyB7CQkJCQkJCQlcCiAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSBpd191OwkJCQkJ XAogIGl3X3UucGFydHMubXN3ID0gKGl4MCk7CQkJCQlcCiAgaXdfdS5wYXJ0cy5sc3cgPSAoaXgx KTsJCQkJCVwKICAoZCkgPSBpd191LnZhbHVlOwkJCQkJCVwKfSB3aGlsZSAoMCkKCi8qIFNldCB0 aGUgbW9yZSBzaWduaWZpY2FudCAzMiBiaXRzIG9mIGEgZG91YmxlIGZyb20gYW4gaW50LiAgKi8K CiNkZWZpbmUgU0VUX0hJR0hfV09SRChkLHYpCQkJCQlcCmRvIHsJCQkJCQkJCVwKICBpZWVlX2Rv dWJsZV9zaGFwZV90eXBlIHNoX3U7CQkJCQlcCiAgc2hfdS52YWx1ZSA9IChkKTsJCQkJCQlcCiAg c2hfdS5wYXJ0cy5tc3cgPSAodik7CQkJCQkJXAogIChkKSA9IHNoX3UudmFsdWU7CQkJCQkJXAp9 IHdoaWxlICgwKQoKLyogU2V0IHRoZSBsZXNzIHNpZ25pZmljYW50IDMyIGJpdHMgb2YgYSBkb3Vi bGUgZnJvbSBhbiBpbnQuICAqLwoKI2RlZmluZSBTRVRfTE9XX1dPUkQoZCx2KQkJCQkJXApkbyB7 CQkJCQkJCQlcCiAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSBzbF91OwkJCQkJXAogIHNsX3UudmFs dWUgPSAoZCk7CQkJCQkJXAogIHNsX3UucGFydHMubHN3ID0gKHYpOwkJCQkJCVwKICAoZCkgPSBz bF91LnZhbHVlOwkJCQkJCVwKfSB3aGlsZSAoMCkKCi8qIEEgdW5pb24gd2hpY2ggcGVybWl0cyB1 cyB0byBjb252ZXJ0IGJldHdlZW4gYSBmbG9hdCBhbmQgYSAzMiBiaXQKICAgaW50LiAgKi8KCnR5 cGVkZWYgdW5pb24KewogIGZsb2F0IHZhbHVlOwogIF9fdWludDMyX3Qgd29yZDsKfSBpZWVlX2Zs b2F0X3NoYXBlX3R5cGU7CgovKiBHZXQgYSAzMiBiaXQgaW50IGZyb20gYSBmbG9hdC4gICovCgoj ZGVmaW5lIEdFVF9GTE9BVF9XT1JEKGksZCkJCQkJCVwKZG8gewkJCQkJCQkJXAogIGllZWVfZmxv YXRfc2hhcGVfdHlwZSBnZl91OwkJCQkJXAogIGdmX3UudmFsdWUgPSAoZCk7CQkJCQkJXAogIChp KSA9IGdmX3Uud29yZDsJCQkJCQlcCn0gd2hpbGUgKDApCgovKiBTZXQgYSBmbG9hdCBmcm9tIGEg MzIgYml0IGludC4gICovCgojZGVmaW5lIFNFVF9GTE9BVF9XT1JEKGQsaSkJCQkJCVwKZG8gewkJ CQkJCQkJXAogIGllZWVfZmxvYXRfc2hhcGVfdHlwZSBzZl91OwkJCQkJXAogIHNmX3Uud29yZCA9 IChpKTsJCQkJCQlcCiAgKGQpID0gc2ZfdS52YWx1ZTsJCQkJCQlcCn0gd2hpbGUgKDApCgovKiBN YWNyb3MgdG8gYXZvaWQgdW5kZWZpbmVkIGJlaGF2aW91ciB0aGF0IGNhbiBhcmlzZSBpZiB0aGUg YW1vdW50CiAgIG9mIGEgc2hpZnQgaXMgZXhhY3RseSBlcXVhbCB0byB0aGUgc2l6ZSBvZiB0aGUg c2hpZnRlZCBvcGVyYW5kLiAgKi8KCiNkZWZpbmUgU0FGRV9MRUZUX1NISUZUKG9wLGFtdCkJCQkJ CVwKICAoKChhbXQpIDwgOCAqIHNpemVvZihvcCkpID8gKChvcCkgPDwgKGFtdCkpIDogMCkKCiNk ZWZpbmUgU0FGRV9SSUdIVF9TSElGVChvcCxhbXQpCQkJCVwKICAoKChhbXQpIDwgOCAqIHNpemVv ZihvcCkpID8gKChvcCkgPj4gKGFtdCkpIDogMCkKCiNpZmRlZiAgX0NPTVBMRVhfSAoKLyoKICog UXVvdGluZyBmcm9tIElTTy9JRUMgOTg5OTpUQzI6CiAqCiAqIDYuMi41LjEzIFR5cGVzCiAqIEVh Y2ggY29tcGxleCB0eXBlIGhhcyB0aGUgc2FtZSByZXByZXNlbnRhdGlvbiBhbmQgYWxpZ25tZW50 IHJlcXVpcmVtZW50cyBhcwogKiBhbiBhcnJheSB0eXBlIGNvbnRhaW5pbmcgZXhhY3RseSB0d28g ZWxlbWVudHMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcmVhbCB0eXBlOwogKiB0aGUgZmlyc3QgZWxl bWVudCBpcyBlcXVhbCB0byB0aGUgcmVhbCBwYXJ0LCBhbmQgdGhlIHNlY29uZCBlbGVtZW50IHRv IHRoZQogKiBpbWFnaW5hcnkgcGFydCwgb2YgdGhlIGNvbXBsZXggbnVtYmVyLgogKi8KdHlwZWRl ZiB1bmlvbiB7CiAgICAgICAgZmxvYXQgY29tcGxleCB6OwogICAgICAgIGZsb2F0IHBhcnRzWzJd Owp9IGZsb2F0X2NvbXBsZXg7Cgp0eXBlZGVmIHVuaW9uIHsKICAgICAgICBkb3VibGUgY29tcGxl eCB6OwogICAgICAgIGRvdWJsZSBwYXJ0c1syXTsKfSBkb3VibGVfY29tcGxleDsKCnR5cGVkZWYg dW5pb24gewogICAgICAgIGxvbmcgZG91YmxlIGNvbXBsZXggejsKICAgICAgICBsb25nIGRvdWJs ZSBwYXJ0c1syXTsKfSBsb25nX2RvdWJsZV9jb21wbGV4OwoKI2RlZmluZSBSRUFMX1BBUlQoeikg ICAgKCh6KS5wYXJ0c1swXSkKI2RlZmluZSBJTUFHX1BBUlQoeikgICAgKCh6KS5wYXJ0c1sxXSkK CiNlbmRpZiAgLyogX0NPTVBMRVhfSCAqLwoK --000000000000cb611605c3d3cc4c Content-Type: text/x-csrc; charset="US-ASCII"; name="fesetround.c" Content-Disposition: attachment; filename="fesetround.c" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kpgb9w2f2 LyoKICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZQogKgogKiBDb3B5cmln aHQgKGMpIDIwMTAtMjAxOSBSZWQgSGF0LCBJbmMuCiAqLwoKI2RlZmluZSBfR05VX1NPVVJDRSAg ICAgICAgLy8gZm9yIEZFX05PTUFTS19FTlYKCiNpbmNsdWRlIDxlcnJuby5oPgoKLyogIE1hc2sg YW5kIHNoaWZ0IGFtb3VudCBmb3Igcm91bmRpbmcgYml0cy4gICovCiNkZWZpbmUgRkVfQ1dfUk9V TkRfTUFTSwkoMHgwYzAwKQojZGVmaW5lIEZFX0NXX1JPVU5EX1NISUZUCSgxMCkKLyogIFNhbWUs IGZvciBTU0UgTVhDU1IuICAqLwojZGVmaW5lIEZFX01YQ1NSX1JPVU5EX01BU0sJKDB4NjAwMCkK I2RlZmluZSBGRV9NWENTUl9ST1VORF9TSElGVAkoMTMpCgojZGVmaW5lIEZFX0RPV05XQVJEICAg ICAoMSkKI2RlZmluZSBGRV9UT05FQVJFU1QgICAgKDApCiNkZWZpbmUgRkVfVE9XQVJEWkVSTyAg ICgzKQojZGVmaW5lIEZFX1VQV0FSRCAgICAgICAoMikKCnN0YXRpYyBpbmxpbmUgaW50IHVzZV9z c2Uodm9pZCkKewogIHVuc2lnbmVkIGludCBlZHgsIGVheDsKCiAgLyogQ2hlY2sgZm9yIHByZXNl bmNlIG9mIFNTRTogaW52b2tlIENQVUlEICMxLCBjaGVjayBFRFggYml0IDI1LiAgKi8KICBlYXgg PSAxOwogIF9fYXNtX18gdm9sYXRpbGUgKCJjcHVpZCIgOiAiPWQiIChlZHgpLCAiK2EiIChlYXgp IDo6ICIlZWN4IiwgIiVlYngiKTsKICAvKiBJZiB0aGlzIGZsYWcgaXNuJ3Qgc2V0IHdlJ2xsIGF2 b2lkIHRyeWluZyB0byBleGVjdXRlIGFueSBTU0UuICAqLwogIGlmICgoZWR4ICYgKDEgPDwgMjUp KSAhPSAwKQogICAgcmV0dXJuIDE7CgogIHJldHVybiAwOwp9CgovKiAgUmV0dXJucyB0aGUgY3Vy cmVudGx5IHNlbGVjdGVkIHJvdW5kaW5nIG1vZGUsIHJlcHJlc2VudGVkIGJ5IG9uZSBvZiB0aGUK ICAgdmFsdWVzIG9mIHRoZSBkZWZpbmVkIHJvdW5kaW5nIG1vZGUgbWFjcm9zLiAgKi8KaW50CmZl Z2V0cm91bmQgKHZvaWQpCnsKICB1bnNpZ25lZCBzaG9ydCBjdzsKCiAgLyogR2V0IGNvbnRyb2wg d29yZC4gIFdlIGFzc3VtZSBTU0UgYW5kIHg4NyBzdGF5IGluIHN5bmMuICAqLwogIF9fYXNtX18g dm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoKiZjdykgOiApOwoKICByZXR1cm4gKGN3ICYg RkVfQ1dfUk9VTkRfTUFTSykgPj4gRkVfQ1dfUk9VTkRfU0hJRlQ7Cn0KCi8qICBDaGFuZ2VzIHRo ZSBjdXJyZW50bHkgc2VsZWN0ZWQgcm91bmRpbmcgbW9kZSB0byByb3VuZC4gSWYgcm91bmQgZG9l cwogICBub3QgY29ycmVzcG9uZCB0byBvbmUgb2YgdGhlIHN1cHBvcnRlZCByb3VuZGluZyBtb2Rl cyBub3RoaW5nIGlzIGNoYW5nZWQuCiAgIGZlc2V0cm91bmQgcmV0dXJucyB6ZXJvIGlmIGl0IGNo YW5nZWQgdGhlIHJvdW5kaW5nIG1vZGUsIGEgbm9uemVybyB2YWx1ZQogICBpZiB0aGUgbW9kZSBp cyBub3Qgc3VwcG9ydGVkLiAgKi8KaW50CmZlc2V0cm91bmQgKGludCByb3VuZCkKewogIHVuc2ln bmVkIHNob3J0IGN3OwogIHVuc2lnbmVkIGludCBteGNzciA9IDA7CgogIC8qIFdpbGwgc3VjY2Vl ZCBmb3IgYW55IHZhbGlkIHZhbHVlIG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXIuICAqLwogIGlmIChy b3VuZCA8IEZFX1RPTkVBUkVTVCB8fCByb3VuZCA+IEZFX1RPV0FSRFpFUk8pCiAgICByZXR1cm4g RUlOVkFMOwoKICAvKiBHZXQgY29udHJvbCB3b3Jkcy4gICovCiAgX19hc21fXyB2b2xhdGlsZSAo ImZuc3RjdyAlMCIgOiAiPW0iIChjdykgOiApOwppZiAodXNlX3NzZSgpKQogICAgX19hc21fXyB2 b2xhdGlsZSAoInN0bXhjc3IgJTAiIDogIj1tIiAobXhjc3IpIDogKTsKCiAgLyogVHdpZGRsZSBi aXRzLiAgKi8KICBjdyAmPSB+RkVfQ1dfUk9VTkRfTUFTSzsKICBjdyB8PSAocm91bmQgPDwgRkVf Q1dfUk9VTkRfU0hJRlQpOwogIAoKICBteGNzciAmPSB+RkVfTVhDU1JfUk9VTkRfTUFTSzsKICBt eGNzciB8PSAocm91bmQgPDwgRkVfTVhDU1JfUk9VTkRfU0hJRlQpOwovKiBTZXQgYmFjayBpbnRv IEZQVSBzdGF0ZS4gICovCiAgX19hc21fXyB2b2xhdGlsZSAoImZsZGN3ICUwIiA6OiAibSIgKGN3 KSk7CiAgaWYgKHVzZV9zc2UoKSkKICAgIF9fYXNtX18gdm9sYXRpbGUgKCJsZG14Y3NyICUwIiA6 OiAibSIgKG14Y3NyKSk7CgogIC8qIEluZGljYXRlIHN1Y2Nlc3MuICAqLwogIHJldHVybiAwOwp9 Cgo= --000000000000cb611605c3d3cc4c Content-Type: text/x-csrc; charset="US-ASCII"; name="test_sqrt.c" Content-Disposition: attachment; filename="test_sqrt.c" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kpgba3ql3 I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgppbnQgZmVzZXRyb3VuZChpbnQp OwojZGVmaW5lIEZFX0RPV05XQVJEICAgICAoMSkKI2RlZmluZSBGRV9UT05FQVJFU1QgICAgKDAp CiNkZWZpbmUgRkVfVE9XQVJEWkVSTyAgICgzKQojZGVmaW5lIEZFX1VQV0FSRCAgICAgICAoMikK CgppbnQgbWFpbigpCnsKICBpbnQgcm5kWzRdID0geyBGRV9UT05FQVJFU1QsIEZFX1RPV0FSRFpF Uk8sIEZFX1VQV0FSRCwgRkVfRE9XTldBUkQgfTsKICBjaGFyIFJuZFs0XSA9ICJOWlVEIjsKICBm bG9hdCB4ID0gMHgxLmZmMDdmZXArMTI3ZjsKICBmbG9hdCB5OwogIGZvciAoaW50IGkgPSAwOyBp IDwgNDsgaSsrKQogIHsKICAgIGZlc2V0cm91bmQocm5kW2ldKTsKICAgIHkgPSBzcXJ0ZiAoeCk7 CiAgICBwcmludGYgKCJSTkQlYzogJWFcbiIsIFJuZFtpXSwgeSk7CiAgfQp9Cgo= --000000000000cb611605c3d3cc4c--